From 3ee55b66800a66abca8bfdd744a55574ff8a5307 Mon Sep 17 00:00:00 2001 From: mamingshuai Date: Thu, 11 Mar 2021 18:37:20 +0800 Subject: [PATCH] update openharmony 1.0.1 --- ABOUT-NLS | 1282 + AUTHORS | 4 + BUILD.gn | 251 + COPYING | 354 + COPYING.LGPL | 517 + ChangeLog | 6 + FAQ | 2807 ++ INSTALL | 229 + Makefile.am | 50 + Makefile.in | 2888 ++ NEWS | 1 + README | 31 + README.OpenSource | 11 + README.en.md | 36 - README.md | 39 - TODO | 1 + aclocal.m4 | 1593 ++ compile | 348 + config.guess | 1420 + config.h | 477 + config.h.in | 476 + config.rpath | 690 + config.sub | 1801 ++ configure | 22549 ++++++++++++++++ configure.ac | 639 + depcomp | 791 + docs/ChangeLog.old | 887 + docs/Keyring.txt | 56 + docs/LUKS2-locking.txt | 61 + docs/doxyfile | 313 + docs/doxygen_index.h | 110 + docs/examples/Makefile | 17 + docs/examples/crypt_log_usage.c | 94 + docs/examples/crypt_luks_usage.c | 250 + docs/on-disk-format-luks2.pdf | Bin 0 -> 290651 bytes docs/on-disk-format.pdf | Bin 0 -> 119729 bytes docs/v1.0.7-ReleaseNotes | 92 + docs/v1.1.0-ReleaseNotes | 110 + docs/v1.1.1-ReleaseNotes | 47 + docs/v1.1.2-ReleaseNotes | 33 + docs/v1.1.3-ReleaseNotes | 13 + docs/v1.2.0-ReleaseNotes | 126 + docs/v1.3.0-ReleaseNotes | 101 + docs/v1.3.1-ReleaseNotes | 14 + docs/v1.4.0-ReleaseNotes | 131 + docs/v1.4.1-ReleaseNotes | 25 + docs/v1.4.2-ReleaseNotes | 44 + docs/v1.4.3-ReleaseNotes | 62 + docs/v1.5.0-ReleaseNotes | 241 + docs/v1.5.1-ReleaseNotes | 32 + docs/v1.6.0-ReleaseNotes | 261 + docs/v1.6.1-ReleaseNotes | 32 + docs/v1.6.2-ReleaseNotes | 25 + docs/v1.6.3-ReleaseNotes | 50 + docs/v1.6.4-ReleaseNotes | 57 + docs/v1.6.5-ReleaseNotes | 54 + docs/v1.6.6-ReleaseNotes | 29 + docs/v1.6.7-ReleaseNotes | 84 + docs/v1.6.8-ReleaseNotes | 47 + docs/v1.7.0-ReleaseNotes | 81 + docs/v1.7.1-ReleaseNotes | 36 + docs/v1.7.2-ReleaseNotes | 37 + docs/v1.7.3-ReleaseNotes | 20 + docs/v1.7.4-ReleaseNotes | 22 + docs/v1.7.5-ReleaseNotes | 22 + docs/v2.0.0-ReleaseNotes | 605 + docs/v2.0.1-ReleaseNotes | 109 + docs/v2.0.2-ReleaseNotes | 93 + docs/v2.0.3-ReleaseNotes | 121 + docs/v2.0.4-ReleaseNotes | 119 + docs/v2.0.5-ReleaseNotes | 102 + docs/v2.0.6-ReleaseNotes | 97 + docs/v2.1.0-ReleaseNotes | 210 + docs/v2.2.0-ReleaseNotes | 279 + docs/v2.2.1-ReleaseNotes | 36 + docs/v2.2.2-ReleaseNotes | 56 + install-sh | 527 + lib/Makemodule.am | 110 + lib/base64.c | 605 + lib/base64.h | 68 + lib/bitops.h | 123 + lib/crypt_plain.c | 117 + lib/crypto_backend/Makemodule.am | 39 + lib/crypto_backend/argon2/LICENSE | 30 + lib/crypto_backend/argon2/Makemodule.am | 30 + lib/crypto_backend/argon2/README | 5 + lib/crypto_backend/argon2/argon2.c | 456 + lib/crypto_backend/argon2/argon2.h | 437 + .../argon2/blake2/blake2-impl.h | 154 + lib/crypto_backend/argon2/blake2/blake2.h | 89 + lib/crypto_backend/argon2/blake2/blake2b.c | 392 + .../argon2/blake2/blamka-round-opt.h | 471 + .../argon2/blake2/blamka-round-ref.h | 56 + lib/crypto_backend/argon2/core.c | 641 + lib/crypto_backend/argon2/core.h | 228 + lib/crypto_backend/argon2/encoding.c | 462 + lib/crypto_backend/argon2/encoding.h | 57 + lib/crypto_backend/argon2/opt.c | 283 + lib/crypto_backend/argon2/ref.c | 194 + lib/crypto_backend/argon2/thread.c | 57 + lib/crypto_backend/argon2/thread.h | 67 + lib/crypto_backend/argon2_generic.c | 79 + lib/crypto_backend/cipher_check.c | 157 + lib/crypto_backend/cipher_generic.c | 83 + lib/crypto_backend/crc32.c | 114 + lib/crypto_backend/crypto_backend.h | 133 + lib/crypto_backend/crypto_backend_internal.h | 59 + lib/crypto_backend/crypto_cipher_kernel.c | 283 + lib/crypto_backend/crypto_gcrypt.c | 481 + lib/crypto_backend/crypto_kernel.c | 394 + lib/crypto_backend/crypto_nettle.c | 435 + lib/crypto_backend/crypto_nss.c | 383 + lib/crypto_backend/crypto_openssl.c | 507 + lib/crypto_backend/crypto_storage.c | 320 + lib/crypto_backend/pbkdf2_generic.c | 232 + lib/crypto_backend/pbkdf_check.c | 431 + lib/integrity/integrity.c | 329 + lib/integrity/integrity.h | 95 + lib/internal.h | 264 + lib/libcryptsetup.h | 2257 ++ lib/libcryptsetup.pc.in | 10 + lib/libcryptsetup.sym | 123 + lib/libdevmapper.c | 2922 ++ lib/loopaes/loopaes.c | 253 + lib/loopaes/loopaes.h | 46 + lib/luks1/af.c | 170 + lib/luks1/af.h | 64 + lib/luks1/keyencryption.c | 269 + lib/luks1/keymanage.c | 1238 + lib/luks1/luks.h | 194 + lib/luks2/luks2.h | 608 + lib/luks2/luks2_digest.c | 455 + lib/luks2/luks2_digest_pbkdf2.c | 211 + lib/luks2/luks2_disk_metadata.c | 806 + lib/luks2/luks2_internal.h | 204 + lib/luks2/luks2_json_format.c | 405 + lib/luks2/luks2_json_metadata.c | 2415 ++ lib/luks2/luks2_keyslot.c | 942 + lib/luks2/luks2_keyslot_luks2.c | 785 + lib/luks2/luks2_keyslot_reenc.c | 336 + lib/luks2/luks2_luks1_convert.c | 881 + lib/luks2/luks2_reencrypt.c | 3426 +++ lib/luks2/luks2_segment.c | 412 + lib/luks2/luks2_token.c | 610 + lib/luks2/luks2_token_keyring.c | 170 + lib/nls.h | 34 + lib/random.c | 250 + lib/setup.c | 5824 ++++ lib/tcrypt/tcrypt.c | 1125 + lib/tcrypt/tcrypt.h | 120 + lib/utils.c | 346 + lib/utils_benchmark.c | 209 + lib/utils_blkid.c | 323 + lib/utils_blkid.h | 64 + lib/utils_crypt.c | 249 + lib/utils_crypt.h | 55 + lib/utils_device.c | 989 + lib/utils_device_locking.c | 522 + lib/utils_device_locking.h | 47 + lib/utils_devpath.c | 458 + lib/utils_dm.h | 219 + lib/utils_fips.c | 46 + lib/utils_fips.h | 26 + lib/utils_io.c | 299 + lib/utils_io.h | 42 + lib/utils_keyring.c | 243 + lib/utils_keyring.h | 55 + lib/utils_loop.c | 276 + lib/utils_loop.h | 34 + lib/utils_pbkdf.c | 333 + lib/utils_storage_wrappers.c | 395 + lib/utils_storage_wrappers.h | 71 + lib/utils_wipe.c | 267 + lib/verity/rs.h | 63 + lib/verity/rs_decode_char.c | 197 + lib/verity/rs_encode_char.c | 173 + lib/verity/verity.c | 319 + lib/verity/verity.h | 75 + lib/verity/verity_fec.c | 282 + lib/verity/verity_hash.c | 458 + lib/volumekey.c | 147 + ltmain.sh | 11249 ++++++++ m4/gettext.m4 | 401 + m4/iconv.m4 | 268 + m4/intlmacosx.m4 | 56 + m4/lib-ld.m4 | 119 + m4/lib-link.m4 | 777 + m4/lib-prefix.m4 | 224 + m4/libtool.m4 | 8394 ++++++ m4/ltoptions.m4 | 437 + m4/ltsugar.m4 | 124 + m4/ltversion.m4 | 23 + m4/lt~obsolete.m4 | 99 + m4/nls.m4 | 32 + m4/po.m4 | 453 + m4/progtest.m4 | 91 + man/Makemodule.am | 15 + man/cryptsetup-reencrypt.8 | 295 + man/cryptsetup.8 | 1655 ++ man/integritysetup.8 | 236 + man/veritysetup.8 | 228 + misc/11-dm-crypt.rules | 17 + misc/dict_search/Makefile | 17 + misc/dict_search/README | 22 + misc/dict_search/crypt_dict.c | 158 + misc/dracut_90reencrypt/README | 40 + misc/dracut_90reencrypt/check.old | 5 + misc/dracut_90reencrypt/install.old | 6 + misc/dracut_90reencrypt/module-setup.sh | 32 + misc/dracut_90reencrypt/parse-reencrypt.sh | 38 + misc/dracut_90reencrypt/reencrypt-verbose.sh | 6 + misc/dracut_90reencrypt/reencrypt.sh | 84 + misc/keyslot_checker/Makefile | 14 + misc/keyslot_checker/README | 120 + misc/keyslot_checker/chk_luks_keyslots.c | 371 + misc/luks-header-from-active | 59 + misc/luks2_keyslot_example/Makefile | 24 + misc/luks2_keyslot_example/README | 3 + misc/luks2_keyslot_example/keyslot_test.c | 409 + .../keyslot_test_remote_pass.c | 264 + missing | 215 + po/LINGUAS | 18 + po/Makefile.in.in | 454 + po/Makevars | 44 + po/POTFILES.in | 49 + po/Rules-quot | 47 + po/boldquot.sed | 10 + po/cryptsetup.pot | 3721 +++ po/cs.gmo | Bin 0 -> 100164 bytes po/cs.po | 3974 +++ po/da.gmo | Bin 0 -> 78144 bytes po/da.po | 3796 +++ po/de.gmo | Bin 0 -> 104105 bytes po/de.po | 3846 +++ po/en@boldquot.header | 25 + po/en@quot.header | 22 + po/es.gmo | Bin 0 -> 105186 bytes po/es.po | 3943 +++ po/fi.gmo | Bin 0 -> 16072 bytes po/fi.po | 4093 +++ po/fr.gmo | Bin 0 -> 107046 bytes po/fr.po | 3975 +++ po/id.gmo | Bin 0 -> 6416 bytes po/id.po | 3847 +++ po/insert-header.sin | 23 + po/it.gmo | Bin 0 -> 82166 bytes po/it.po | 3840 +++ po/ja.gmo | Bin 0 -> 111927 bytes po/ja.po | 3684 +++ po/nl.gmo | Bin 0 -> 17355 bytes po/nl.po | 4084 +++ po/pl.gmo | Bin 0 -> 100405 bytes po/pl.po | 3688 +++ po/pt_BR.gmo | Bin 0 -> 82289 bytes po/pt_BR.po | 3857 +++ po/quot.sed | 6 + po/remove-potcdate.sin | 19 + po/ru.gmo | Bin 0 -> 132090 bytes po/ru.po | 4161 +++ po/sr.gmo | Bin 0 -> 21516 bytes po/sr.po | 3966 +++ po/stamp-po | 1 + po/sv.gmo | Bin 0 -> 78537 bytes po/sv.po | 3886 +++ po/uk.gmo | Bin 0 -> 135952 bytes po/uk.po | 3925 +++ po/vi.gmo | Bin 0 -> 18844 bytes po/vi.po | 4073 +++ po/zh_CN.gmo | Bin 0 -> 42200 bytes po/zh_CN.po | 3909 +++ scripts/Makemodule.am | 5 + scripts/cryptsetup.conf.in | 1 + src/Makemodule.am | 133 + src/cryptsetup.c | 3872 +++ src/cryptsetup.h | 125 + src/cryptsetup_reencrypt.c | 1755 ++ src/integritysetup.c | 709 + src/utils_blockdev.c | 189 + src/utils_luks2.c | 139 + src/utils_password.c | 339 + src/utils_tools.c | 633 + src/veritysetup.c | 562 + tests/00modules-test | 45 + tests/Makefile.am | 121 + tests/Makefile.in | 1030 + tests/Makefile.localtest | 30 + tests/align-test | 320 + tests/align-test2 | 342 + tests/api-test-2.c | 4427 +++ tests/api-test.c | 1912 ++ tests/api_test.h | 122 + tests/blkid-luks2-pv.img.xz | Bin 0 -> 5236 bytes tests/blockwise-compat | 377 + tests/compat-test | 1005 + tests/compat-test2 | 1001 + tests/compatimage.img.xz | Bin 0 -> 66732 bytes tests/compatimage2.img.xz | Bin 0 -> 66356 bytes tests/compatv10image.img.xz | Bin 0 -> 66688 bytes tests/conversion_imgs.tar.xz | Bin 0 -> 8149472 bytes tests/crypto-vectors.c | 923 + tests/cryptsetup-valg-supps | 36 + tests/device-test | 256 + tests/differ.c | 166 + tests/discards-test | 86 + tests/evil_hdr-keyslot_overlap.xz | Bin 0 -> 676 bytes tests/evil_hdr-luks_hdr_damage.xz | Bin 0 -> 612 bytes tests/evil_hdr-payload_overwrite.xz | Bin 0 -> 612 bytes tests/evil_hdr-small_luks_device.xz | Bin 0 -> 452 bytes tests/evil_hdr-stripes_payload_dmg.xz | Bin 0 -> 616 bytes ...-luks2-area-in-json-hdr-space-json0.img.sh | 72 + ...nerate-luks2-argon2-leftover-params.img.sh | 71 + .../generate-luks2-correct-full-json0.img.sh | 87 + ...s2-corrupted-hdr0-with-correct-chks.img.sh | 65 + ...s2-corrupted-hdr1-with-correct-chks.img.sh | 66 + ...te-luks2-invalid-checksum-both-hdrs.img.sh | 52 + ...enerate-luks2-invalid-checksum-hdr0.img.sh | 43 + ...enerate-luks2-invalid-checksum-hdr1.img.sh | 48 + ...generate-luks2-invalid-json-size-c0.img.sh | 68 + ...generate-luks2-invalid-json-size-c1.img.sh | 68 + ...generate-luks2-invalid-json-size-c2.img.sh | 85 + ...rate-luks2-invalid-keyslots-size-c0.img.sh | 71 + ...rate-luks2-invalid-keyslots-size-c1.img.sh | 67 + ...rate-luks2-invalid-keyslots-size-c2.img.sh | 68 + ...ate-luks2-invalid-object-type-json0.img.sh | 70 + ...te-luks2-invalid-opening-char-json0.img.sh | 70 + ...nerate-luks2-keyslot-missing-digest.img.sh | 72 + ...rate-luks2-keyslot-too-many-digests.img.sh | 70 + ...-luks2-metadata-size-128k-secondary.img.sh | 97 + .../generate-luks2-metadata-size-128k.img.sh | 94 + ...e-luks2-metadata-size-16k-secondary.img.sh | 97 + ...te-luks2-metadata-size-1m-secondary.img.sh | 97 + .../generate-luks2-metadata-size-1m.img.sh | 94 + ...-luks2-metadata-size-256k-secondary.img.sh | 97 + .../generate-luks2-metadata-size-256k.img.sh | 94 + ...te-luks2-metadata-size-2m-secondary.img.sh | 96 + .../generate-luks2-metadata-size-2m.img.sh | 94 + ...e-luks2-metadata-size-32k-secondary.img.sh | 97 + .../generate-luks2-metadata-size-32k.img.sh | 94 + ...te-luks2-metadata-size-4m-secondary.img.sh | 96 + .../generate-luks2-metadata-size-4m.img.sh | 94 + ...-luks2-metadata-size-512k-secondary.img.sh | 97 + .../generate-luks2-metadata-size-512k.img.sh | 94 + ...luks2-metadata-size-64k-inv-area-c0.img.sh | 94 + ...luks2-metadata-size-64k-inv-area-c1.img.sh | 96 + ...adata-size-64k-inv-keyslots-size-c0.img.sh | 96 + ...e-luks2-metadata-size-64k-secondary.img.sh | 97 + .../generate-luks2-metadata-size-64k.img.sh | 94 + ...issing-keyslot-referenced-in-digest.img.sh | 74 + ...missing-keyslot-referenced-in-token.img.sh | 72 + ...issing-segment-referenced-in-digest.img.sh | 74 + ...s2-missing-trailing-null-byte-json0.img.sh | 89 + ...te-luks2-non-null-byte-beyond-json0.img.sh | 72 + ...e-luks2-non-null-bytes-beyond-json0.img.sh | 76 + ...te-luks2-overlapping-areas-c0-json0.img.sh | 68 + ...te-luks2-overlapping-areas-c1-json0.img.sh | 70 + ...te-luks2-overlapping-areas-c2-json0.img.sh | 67 + ...rate-luks2-pbkdf2-leftover-params-0.img.sh | 71 + ...rate-luks2-pbkdf2-leftover-params-1.img.sh | 71 + ...s2-segment-crypt-missing-encryption.img.sh | 67 + ...uks2-segment-crypt-missing-ivoffset.img.sh | 67 + ...s2-segment-crypt-missing-sectorsize.img.sh | 67 + ...uks2-segment-crypt-wrong-encryption.img.sh | 67 + ...-luks2-segment-crypt-wrong-ivoffset.img.sh | 67 + ...s2-segment-crypt-wrong-sectorsize-0.img.sh | 67 + ...s2-segment-crypt-wrong-sectorsize-1.img.sh | 67 + ...s2-segment-crypt-wrong-sectorsize-2.img.sh | 67 + ...nerate-luks2-segment-missing-offset.img.sh | 67 + ...generate-luks2-segment-missing-size.img.sh | 67 + ...generate-luks2-segment-missing-type.img.sh | 67 + .../generate-luks2-segment-two.img.sh | 67 + ...generate-luks2-segment-unknown-type.img.sh | 68 + ...e-luks2-segment-wrong-flags-element.img.sh | 67 + .../generate-luks2-segment-wrong-flags.img.sh | 67 + ...generate-luks2-segment-wrong-offset.img.sh | 67 + ...generate-luks2-segment-wrong-size-0.img.sh | 67 + ...generate-luks2-segment-wrong-size-1.img.sh | 67 + ...generate-luks2-segment-wrong-size-2.img.sh | 67 + .../generate-luks2-segment-wrong-type.img.sh | 67 + ...erate-luks2-uint64-max-segment-size.img.sh | 68 + ...-luks2-uint64-overflow-segment-size.img.sh | 66 + ...te-luks2-uint64-signed-segment-size.img.sh | 67 + tests/generators/lib.sh | 180 + tests/img_fs_ext4.img.xz | Bin 0 -> 5680 bytes tests/img_fs_vfat.img.xz | Bin 0 -> 6124 bytes tests/img_fs_xfs.img.xz | Bin 0 -> 7676 bytes tests/integrity-compat-test | 418 + tests/keyring-compat-test | 211 + tests/keyring-test | 238 + tests/loopaes-test | 176 + tests/luks1-compat-test | 104 + tests/luks1-images.tar.xz | Bin 0 -> 67192 bytes tests/luks2-integrity-test | 176 + tests/luks2-reencryption-test | 1370 + tests/luks2-validation-test | 233 + tests/luks2_header_requirements.xz | Bin 0 -> 130568 bytes tests/luks2_header_requirements_free.xz | Bin 0 -> 130492 bytes tests/luks2_keyslot_unassigned.img.xz | Bin 0 -> 270548 bytes tests/luks2_mda_images.tar.xz | Bin 0 -> 156028 bytes tests/luks2_valid_hdr.img.xz | Bin 0 -> 3684 bytes tests/mode-test | 171 + tests/password-hash-test | 190 + tests/reencryption-compat-test | 393 + tests/reencryption-compat-test2 | 473 + tests/tcrypt-compat-test | 168 + tests/tcrypt-images.tar.xz | Bin 0 -> 316528 bytes tests/test_utils.c | 622 + tests/unit-utils-io.c | 346 + tests/valg-api.sh | 11 + tests/valg.sh | 11 + tests/valid_header_file.xz | Bin 0 -> 608 bytes tests/verity-compat-test | 441 + 411 files changed, 224210 insertions(+), 75 deletions(-) create mode 100644 ABOUT-NLS create mode 100644 AUTHORS create mode 100755 BUILD.gn create mode 100644 COPYING create mode 100644 COPYING.LGPL create mode 100644 ChangeLog create mode 100644 FAQ create mode 100644 INSTALL create mode 100644 Makefile.am create mode 100644 Makefile.in create mode 100644 NEWS create mode 100644 README create mode 100755 README.OpenSource delete mode 100644 README.en.md delete mode 100644 README.md create mode 100644 TODO create mode 100644 aclocal.m4 create mode 100755 compile create mode 100755 config.guess create mode 100644 config.h create mode 100644 config.h.in create mode 100755 config.rpath create mode 100755 config.sub create mode 100755 configure create mode 100644 configure.ac create mode 100755 depcomp create mode 100644 docs/ChangeLog.old create mode 100644 docs/Keyring.txt create mode 100644 docs/LUKS2-locking.txt create mode 100644 docs/doxyfile create mode 100644 docs/doxygen_index.h create mode 100644 docs/examples/Makefile create mode 100644 docs/examples/crypt_log_usage.c create mode 100644 docs/examples/crypt_luks_usage.c create mode 100644 docs/on-disk-format-luks2.pdf create mode 100644 docs/on-disk-format.pdf create mode 100644 docs/v1.0.7-ReleaseNotes create mode 100644 docs/v1.1.0-ReleaseNotes create mode 100644 docs/v1.1.1-ReleaseNotes create mode 100644 docs/v1.1.2-ReleaseNotes create mode 100644 docs/v1.1.3-ReleaseNotes create mode 100644 docs/v1.2.0-ReleaseNotes create mode 100644 docs/v1.3.0-ReleaseNotes create mode 100644 docs/v1.3.1-ReleaseNotes create mode 100644 docs/v1.4.0-ReleaseNotes create mode 100644 docs/v1.4.1-ReleaseNotes create mode 100644 docs/v1.4.2-ReleaseNotes create mode 100644 docs/v1.4.3-ReleaseNotes create mode 100644 docs/v1.5.0-ReleaseNotes create mode 100644 docs/v1.5.1-ReleaseNotes create mode 100644 docs/v1.6.0-ReleaseNotes create mode 100644 docs/v1.6.1-ReleaseNotes create mode 100644 docs/v1.6.2-ReleaseNotes create mode 100644 docs/v1.6.3-ReleaseNotes create mode 100644 docs/v1.6.4-ReleaseNotes create mode 100644 docs/v1.6.5-ReleaseNotes create mode 100644 docs/v1.6.6-ReleaseNotes create mode 100644 docs/v1.6.7-ReleaseNotes create mode 100644 docs/v1.6.8-ReleaseNotes create mode 100644 docs/v1.7.0-ReleaseNotes create mode 100644 docs/v1.7.1-ReleaseNotes create mode 100644 docs/v1.7.2-ReleaseNotes create mode 100644 docs/v1.7.3-ReleaseNotes create mode 100644 docs/v1.7.4-ReleaseNotes create mode 100644 docs/v1.7.5-ReleaseNotes create mode 100644 docs/v2.0.0-ReleaseNotes create mode 100644 docs/v2.0.1-ReleaseNotes create mode 100644 docs/v2.0.2-ReleaseNotes create mode 100644 docs/v2.0.3-ReleaseNotes create mode 100644 docs/v2.0.4-ReleaseNotes create mode 100644 docs/v2.0.5-ReleaseNotes create mode 100644 docs/v2.0.6-ReleaseNotes create mode 100644 docs/v2.1.0-ReleaseNotes create mode 100644 docs/v2.2.0-ReleaseNotes create mode 100644 docs/v2.2.1-ReleaseNotes create mode 100644 docs/v2.2.2-ReleaseNotes create mode 100755 install-sh create mode 100644 lib/Makemodule.am create mode 100644 lib/base64.c create mode 100644 lib/base64.h create mode 100644 lib/bitops.h create mode 100644 lib/crypt_plain.c create mode 100644 lib/crypto_backend/Makemodule.am create mode 100644 lib/crypto_backend/argon2/LICENSE create mode 100644 lib/crypto_backend/argon2/Makemodule.am create mode 100644 lib/crypto_backend/argon2/README create mode 100644 lib/crypto_backend/argon2/argon2.c create mode 100644 lib/crypto_backend/argon2/argon2.h create mode 100644 lib/crypto_backend/argon2/blake2/blake2-impl.h create mode 100644 lib/crypto_backend/argon2/blake2/blake2.h create mode 100644 lib/crypto_backend/argon2/blake2/blake2b.c create mode 100644 lib/crypto_backend/argon2/blake2/blamka-round-opt.h create mode 100644 lib/crypto_backend/argon2/blake2/blamka-round-ref.h create mode 100644 lib/crypto_backend/argon2/core.c create mode 100644 lib/crypto_backend/argon2/core.h create mode 100644 lib/crypto_backend/argon2/encoding.c create mode 100644 lib/crypto_backend/argon2/encoding.h create mode 100644 lib/crypto_backend/argon2/opt.c create mode 100644 lib/crypto_backend/argon2/ref.c create mode 100644 lib/crypto_backend/argon2/thread.c create mode 100644 lib/crypto_backend/argon2/thread.h create mode 100644 lib/crypto_backend/argon2_generic.c create mode 100644 lib/crypto_backend/cipher_check.c create mode 100644 lib/crypto_backend/cipher_generic.c create mode 100644 lib/crypto_backend/crc32.c create mode 100644 lib/crypto_backend/crypto_backend.h create mode 100644 lib/crypto_backend/crypto_backend_internal.h create mode 100644 lib/crypto_backend/crypto_cipher_kernel.c create mode 100644 lib/crypto_backend/crypto_gcrypt.c create mode 100755 lib/crypto_backend/crypto_kernel.c create mode 100644 lib/crypto_backend/crypto_nettle.c create mode 100644 lib/crypto_backend/crypto_nss.c create mode 100644 lib/crypto_backend/crypto_openssl.c create mode 100644 lib/crypto_backend/crypto_storage.c create mode 100644 lib/crypto_backend/pbkdf2_generic.c create mode 100644 lib/crypto_backend/pbkdf_check.c create mode 100644 lib/integrity/integrity.c create mode 100644 lib/integrity/integrity.h create mode 100644 lib/internal.h create mode 100644 lib/libcryptsetup.h create mode 100644 lib/libcryptsetup.pc.in create mode 100644 lib/libcryptsetup.sym create mode 100644 lib/libdevmapper.c create mode 100644 lib/loopaes/loopaes.c create mode 100644 lib/loopaes/loopaes.h create mode 100644 lib/luks1/af.c create mode 100644 lib/luks1/af.h create mode 100644 lib/luks1/keyencryption.c create mode 100644 lib/luks1/keymanage.c create mode 100644 lib/luks1/luks.h create mode 100644 lib/luks2/luks2.h create mode 100644 lib/luks2/luks2_digest.c create mode 100644 lib/luks2/luks2_digest_pbkdf2.c create mode 100644 lib/luks2/luks2_disk_metadata.c create mode 100644 lib/luks2/luks2_internal.h create mode 100644 lib/luks2/luks2_json_format.c create mode 100644 lib/luks2/luks2_json_metadata.c create mode 100644 lib/luks2/luks2_keyslot.c create mode 100644 lib/luks2/luks2_keyslot_luks2.c create mode 100644 lib/luks2/luks2_keyslot_reenc.c create mode 100644 lib/luks2/luks2_luks1_convert.c create mode 100644 lib/luks2/luks2_reencrypt.c create mode 100644 lib/luks2/luks2_segment.c create mode 100644 lib/luks2/luks2_token.c create mode 100644 lib/luks2/luks2_token_keyring.c create mode 100644 lib/nls.h create mode 100644 lib/random.c create mode 100644 lib/setup.c create mode 100644 lib/tcrypt/tcrypt.c create mode 100644 lib/tcrypt/tcrypt.h create mode 100644 lib/utils.c create mode 100644 lib/utils_benchmark.c create mode 100644 lib/utils_blkid.c create mode 100644 lib/utils_blkid.h create mode 100644 lib/utils_crypt.c create mode 100644 lib/utils_crypt.h create mode 100644 lib/utils_device.c create mode 100644 lib/utils_device_locking.c create mode 100644 lib/utils_device_locking.h create mode 100644 lib/utils_devpath.c create mode 100644 lib/utils_dm.h create mode 100644 lib/utils_fips.c create mode 100644 lib/utils_fips.h create mode 100644 lib/utils_io.c create mode 100644 lib/utils_io.h create mode 100644 lib/utils_keyring.c create mode 100644 lib/utils_keyring.h create mode 100644 lib/utils_loop.c create mode 100644 lib/utils_loop.h create mode 100644 lib/utils_pbkdf.c create mode 100644 lib/utils_storage_wrappers.c create mode 100644 lib/utils_storage_wrappers.h create mode 100644 lib/utils_wipe.c create mode 100644 lib/verity/rs.h create mode 100644 lib/verity/rs_decode_char.c create mode 100644 lib/verity/rs_encode_char.c create mode 100644 lib/verity/verity.c create mode 100644 lib/verity/verity.h create mode 100644 lib/verity/verity_fec.c create mode 100644 lib/verity/verity_hash.c create mode 100644 lib/volumekey.c create mode 100644 ltmain.sh create mode 100644 m4/gettext.m4 create mode 100644 m4/iconv.m4 create mode 100644 m4/intlmacosx.m4 create mode 100644 m4/lib-ld.m4 create mode 100644 m4/lib-link.m4 create mode 100644 m4/lib-prefix.m4 create mode 100644 m4/libtool.m4 create mode 100644 m4/ltoptions.m4 create mode 100644 m4/ltsugar.m4 create mode 100644 m4/ltversion.m4 create mode 100644 m4/lt~obsolete.m4 create mode 100644 m4/nls.m4 create mode 100644 m4/po.m4 create mode 100644 m4/progtest.m4 create mode 100644 man/Makemodule.am create mode 100644 man/cryptsetup-reencrypt.8 create mode 100644 man/cryptsetup.8 create mode 100644 man/integritysetup.8 create mode 100644 man/veritysetup.8 create mode 100644 misc/11-dm-crypt.rules create mode 100644 misc/dict_search/Makefile create mode 100644 misc/dict_search/README create mode 100644 misc/dict_search/crypt_dict.c create mode 100644 misc/dracut_90reencrypt/README create mode 100755 misc/dracut_90reencrypt/check.old create mode 100755 misc/dracut_90reencrypt/install.old create mode 100755 misc/dracut_90reencrypt/module-setup.sh create mode 100755 misc/dracut_90reencrypt/parse-reencrypt.sh create mode 100755 misc/dracut_90reencrypt/reencrypt-verbose.sh create mode 100755 misc/dracut_90reencrypt/reencrypt.sh create mode 100644 misc/keyslot_checker/Makefile create mode 100644 misc/keyslot_checker/README create mode 100644 misc/keyslot_checker/chk_luks_keyslots.c create mode 100755 misc/luks-header-from-active create mode 100644 misc/luks2_keyslot_example/Makefile create mode 100644 misc/luks2_keyslot_example/README create mode 100644 misc/luks2_keyslot_example/keyslot_test.c create mode 100644 misc/luks2_keyslot_example/keyslot_test_remote_pass.c create mode 100755 missing create mode 100644 po/LINGUAS create mode 100644 po/Makefile.in.in create mode 100644 po/Makevars create mode 100644 po/POTFILES.in create mode 100644 po/Rules-quot create mode 100644 po/boldquot.sed create mode 100644 po/cryptsetup.pot create mode 100644 po/cs.gmo create mode 100644 po/cs.po create mode 100644 po/da.gmo create mode 100644 po/da.po create mode 100644 po/de.gmo create mode 100644 po/de.po create mode 100644 po/en@boldquot.header create mode 100644 po/en@quot.header create mode 100644 po/es.gmo create mode 100644 po/es.po create mode 100644 po/fi.gmo create mode 100644 po/fi.po create mode 100644 po/fr.gmo create mode 100644 po/fr.po create mode 100644 po/id.gmo create mode 100644 po/id.po create mode 100644 po/insert-header.sin create mode 100644 po/it.gmo create mode 100644 po/it.po create mode 100644 po/ja.gmo create mode 100644 po/ja.po create mode 100644 po/nl.gmo create mode 100644 po/nl.po create mode 100644 po/pl.gmo create mode 100644 po/pl.po create mode 100644 po/pt_BR.gmo create mode 100644 po/pt_BR.po create mode 100644 po/quot.sed create mode 100644 po/remove-potcdate.sin create mode 100644 po/ru.gmo create mode 100644 po/ru.po create mode 100644 po/sr.gmo create mode 100644 po/sr.po create mode 100644 po/stamp-po create mode 100644 po/sv.gmo create mode 100644 po/sv.po create mode 100644 po/uk.gmo create mode 100644 po/uk.po create mode 100644 po/vi.gmo create mode 100644 po/vi.po create mode 100644 po/zh_CN.gmo create mode 100644 po/zh_CN.po create mode 100644 scripts/Makemodule.am create mode 100644 scripts/cryptsetup.conf.in create mode 100644 src/Makemodule.am create mode 100644 src/cryptsetup.c create mode 100644 src/cryptsetup.h create mode 100644 src/cryptsetup_reencrypt.c create mode 100644 src/integritysetup.c create mode 100644 src/utils_blockdev.c create mode 100644 src/utils_luks2.c create mode 100644 src/utils_password.c create mode 100644 src/utils_tools.c create mode 100644 src/veritysetup.c create mode 100755 tests/00modules-test create mode 100644 tests/Makefile.am create mode 100644 tests/Makefile.in create mode 100644 tests/Makefile.localtest create mode 100755 tests/align-test create mode 100755 tests/align-test2 create mode 100644 tests/api-test-2.c create mode 100644 tests/api-test.c create mode 100644 tests/api_test.h create mode 100644 tests/blkid-luks2-pv.img.xz create mode 100755 tests/blockwise-compat create mode 100755 tests/compat-test create mode 100755 tests/compat-test2 create mode 100644 tests/compatimage.img.xz create mode 100644 tests/compatimage2.img.xz create mode 100644 tests/compatv10image.img.xz create mode 100644 tests/conversion_imgs.tar.xz create mode 100644 tests/crypto-vectors.c create mode 100644 tests/cryptsetup-valg-supps create mode 100755 tests/device-test create mode 100644 tests/differ.c create mode 100755 tests/discards-test create mode 100644 tests/evil_hdr-keyslot_overlap.xz create mode 100644 tests/evil_hdr-luks_hdr_damage.xz create mode 100644 tests/evil_hdr-payload_overwrite.xz create mode 100644 tests/evil_hdr-small_luks_device.xz create mode 100644 tests/evil_hdr-stripes_payload_dmg.xz create mode 100755 tests/generators/generate-luks2-area-in-json-hdr-space-json0.img.sh create mode 100755 tests/generators/generate-luks2-argon2-leftover-params.img.sh create mode 100755 tests/generators/generate-luks2-correct-full-json0.img.sh create mode 100755 tests/generators/generate-luks2-corrupted-hdr0-with-correct-chks.img.sh create mode 100755 tests/generators/generate-luks2-corrupted-hdr1-with-correct-chks.img.sh create mode 100755 tests/generators/generate-luks2-invalid-checksum-both-hdrs.img.sh create mode 100755 tests/generators/generate-luks2-invalid-checksum-hdr0.img.sh create mode 100755 tests/generators/generate-luks2-invalid-checksum-hdr1.img.sh create mode 100755 tests/generators/generate-luks2-invalid-json-size-c0.img.sh create mode 100755 tests/generators/generate-luks2-invalid-json-size-c1.img.sh create mode 100755 tests/generators/generate-luks2-invalid-json-size-c2.img.sh create mode 100755 tests/generators/generate-luks2-invalid-keyslots-size-c0.img.sh create mode 100755 tests/generators/generate-luks2-invalid-keyslots-size-c1.img.sh create mode 100755 tests/generators/generate-luks2-invalid-keyslots-size-c2.img.sh create mode 100755 tests/generators/generate-luks2-invalid-object-type-json0.img.sh create mode 100755 tests/generators/generate-luks2-invalid-opening-char-json0.img.sh create mode 100755 tests/generators/generate-luks2-keyslot-missing-digest.img.sh create mode 100755 tests/generators/generate-luks2-keyslot-too-many-digests.img.sh create mode 100755 tests/generators/generate-luks2-metadata-size-128k-secondary.img.sh create mode 100755 tests/generators/generate-luks2-metadata-size-128k.img.sh create mode 100755 tests/generators/generate-luks2-metadata-size-16k-secondary.img.sh create mode 100755 tests/generators/generate-luks2-metadata-size-1m-secondary.img.sh create mode 100755 tests/generators/generate-luks2-metadata-size-1m.img.sh create mode 100755 tests/generators/generate-luks2-metadata-size-256k-secondary.img.sh create mode 100755 tests/generators/generate-luks2-metadata-size-256k.img.sh create mode 100755 tests/generators/generate-luks2-metadata-size-2m-secondary.img.sh create mode 100755 tests/generators/generate-luks2-metadata-size-2m.img.sh create mode 100755 tests/generators/generate-luks2-metadata-size-32k-secondary.img.sh create mode 100755 tests/generators/generate-luks2-metadata-size-32k.img.sh create mode 100755 tests/generators/generate-luks2-metadata-size-4m-secondary.img.sh create mode 100755 tests/generators/generate-luks2-metadata-size-4m.img.sh create mode 100755 tests/generators/generate-luks2-metadata-size-512k-secondary.img.sh create mode 100755 tests/generators/generate-luks2-metadata-size-512k.img.sh create mode 100755 tests/generators/generate-luks2-metadata-size-64k-inv-area-c0.img.sh create mode 100755 tests/generators/generate-luks2-metadata-size-64k-inv-area-c1.img.sh create mode 100755 tests/generators/generate-luks2-metadata-size-64k-inv-keyslots-size-c0.img.sh create mode 100755 tests/generators/generate-luks2-metadata-size-64k-secondary.img.sh create mode 100755 tests/generators/generate-luks2-metadata-size-64k.img.sh create mode 100755 tests/generators/generate-luks2-missing-keyslot-referenced-in-digest.img.sh create mode 100755 tests/generators/generate-luks2-missing-keyslot-referenced-in-token.img.sh create mode 100755 tests/generators/generate-luks2-missing-segment-referenced-in-digest.img.sh create mode 100755 tests/generators/generate-luks2-missing-trailing-null-byte-json0.img.sh create mode 100755 tests/generators/generate-luks2-non-null-byte-beyond-json0.img.sh create mode 100755 tests/generators/generate-luks2-non-null-bytes-beyond-json0.img.sh create mode 100755 tests/generators/generate-luks2-overlapping-areas-c0-json0.img.sh create mode 100755 tests/generators/generate-luks2-overlapping-areas-c1-json0.img.sh create mode 100755 tests/generators/generate-luks2-overlapping-areas-c2-json0.img.sh create mode 100755 tests/generators/generate-luks2-pbkdf2-leftover-params-0.img.sh create mode 100755 tests/generators/generate-luks2-pbkdf2-leftover-params-1.img.sh create mode 100755 tests/generators/generate-luks2-segment-crypt-missing-encryption.img.sh create mode 100755 tests/generators/generate-luks2-segment-crypt-missing-ivoffset.img.sh create mode 100755 tests/generators/generate-luks2-segment-crypt-missing-sectorsize.img.sh create mode 100755 tests/generators/generate-luks2-segment-crypt-wrong-encryption.img.sh create mode 100755 tests/generators/generate-luks2-segment-crypt-wrong-ivoffset.img.sh create mode 100755 tests/generators/generate-luks2-segment-crypt-wrong-sectorsize-0.img.sh create mode 100755 tests/generators/generate-luks2-segment-crypt-wrong-sectorsize-1.img.sh create mode 100755 tests/generators/generate-luks2-segment-crypt-wrong-sectorsize-2.img.sh create mode 100755 tests/generators/generate-luks2-segment-missing-offset.img.sh create mode 100755 tests/generators/generate-luks2-segment-missing-size.img.sh create mode 100755 tests/generators/generate-luks2-segment-missing-type.img.sh create mode 100755 tests/generators/generate-luks2-segment-two.img.sh create mode 100755 tests/generators/generate-luks2-segment-unknown-type.img.sh create mode 100755 tests/generators/generate-luks2-segment-wrong-flags-element.img.sh create mode 100755 tests/generators/generate-luks2-segment-wrong-flags.img.sh create mode 100755 tests/generators/generate-luks2-segment-wrong-offset.img.sh create mode 100755 tests/generators/generate-luks2-segment-wrong-size-0.img.sh create mode 100755 tests/generators/generate-luks2-segment-wrong-size-1.img.sh create mode 100755 tests/generators/generate-luks2-segment-wrong-size-2.img.sh create mode 100755 tests/generators/generate-luks2-segment-wrong-type.img.sh create mode 100755 tests/generators/generate-luks2-uint64-max-segment-size.img.sh create mode 100755 tests/generators/generate-luks2-uint64-overflow-segment-size.img.sh create mode 100755 tests/generators/generate-luks2-uint64-signed-segment-size.img.sh create mode 100644 tests/generators/lib.sh create mode 100644 tests/img_fs_ext4.img.xz create mode 100644 tests/img_fs_vfat.img.xz create mode 100644 tests/img_fs_xfs.img.xz create mode 100755 tests/integrity-compat-test create mode 100755 tests/keyring-compat-test create mode 100755 tests/keyring-test create mode 100755 tests/loopaes-test create mode 100755 tests/luks1-compat-test create mode 100644 tests/luks1-images.tar.xz create mode 100755 tests/luks2-integrity-test create mode 100755 tests/luks2-reencryption-test create mode 100755 tests/luks2-validation-test create mode 100644 tests/luks2_header_requirements.xz create mode 100644 tests/luks2_header_requirements_free.xz create mode 100644 tests/luks2_keyslot_unassigned.img.xz create mode 100644 tests/luks2_mda_images.tar.xz create mode 100644 tests/luks2_valid_hdr.img.xz create mode 100755 tests/mode-test create mode 100755 tests/password-hash-test create mode 100755 tests/reencryption-compat-test create mode 100755 tests/reencryption-compat-test2 create mode 100755 tests/tcrypt-compat-test create mode 100644 tests/tcrypt-images.tar.xz create mode 100644 tests/test_utils.c create mode 100644 tests/unit-utils-io.c create mode 100755 tests/valg-api.sh create mode 100755 tests/valg.sh create mode 100644 tests/valid_header_file.xz create mode 100755 tests/verity-compat-test diff --git a/ABOUT-NLS b/ABOUT-NLS new file mode 100644 index 0000000..b1de1b6 --- /dev/null +++ b/ABOUT-NLS @@ -0,0 +1,1282 @@ +1 Notes on the Free Translation Project +*************************************** + +Free software is going international! The Free Translation Project is +a way to get maintainers of free software, translators, and users all +together, so that free software will gradually become able to speak many +languages. A few packages already provide translations for their +messages. + + If you found this `ABOUT-NLS' file inside a distribution, you may +assume that the distributed package does use GNU `gettext' internally, +itself available at your nearest GNU archive site. But you do _not_ +need to install GNU `gettext' prior to configuring, installing or using +this package with messages translated. + + Installers will find here some useful hints. These notes also +explain how users should proceed for getting the programs to use the +available translations. They tell how people wanting to contribute and +work on translations can contact the appropriate team. + +1.1 INSTALL Matters +=================== + +Some packages are "localizable" when properly installed; the programs +they contain can be made to speak your own native language. Most such +packages use GNU `gettext'. Other packages have their own ways to +internationalization, predating GNU `gettext'. + + By default, this package will be installed to allow translation of +messages. It will automatically detect whether the system already +provides the GNU `gettext' functions. Installers may use special +options at configuration time for changing the default behaviour. The +command: + + ./configure --disable-nls + +will _totally_ disable translation of messages. + + When you already have GNU `gettext' installed on your system and run +configure without an option for your new package, `configure' will +probably detect the previously built and installed `libintl' library +and will decide to use it. If not, you may have to to use the +`--with-libintl-prefix' option to tell `configure' where to look for it. + + Internationalized packages usually have many `po/LL.po' files, where +LL gives an ISO 639 two-letter code identifying the language. Unless +translations have been forbidden at `configure' time by using the +`--disable-nls' switch, all available translations are installed +together with the package. However, the environment variable `LINGUAS' +may be set, prior to configuration, to limit the installed set. +`LINGUAS' should then contain a space separated list of two-letter +codes, stating which languages are allowed. + +1.2 Using This Package +====================== + +As a user, if your language has been installed for this package, you +only have to set the `LANG' environment variable to the appropriate +`LL_CC' combination. If you happen to have the `LC_ALL' or some other +`LC_xxx' environment variables set, you should unset them before +setting `LANG', otherwise the setting of `LANG' will not have the +desired effect. Here `LL' is an ISO 639 two-letter language code, and +`CC' is an ISO 3166 two-letter country code. For example, let's +suppose that you speak German and live in Germany. At the shell +prompt, merely execute `setenv LANG de_DE' (in `csh'), +`export LANG; LANG=de_DE' (in `sh') or `export LANG=de_DE' (in `bash'). +This can be done from your `.login' or `.profile' file, once and for +all. + + You might think that the country code specification is redundant. +But in fact, some languages have dialects in different countries. For +example, `de_AT' is used for Austria, and `pt_BR' for Brazil. The +country code serves to distinguish the dialects. + + The locale naming convention of `LL_CC', with `LL' denoting the +language and `CC' denoting the country, is the one use on systems based +on GNU libc. On other systems, some variations of this scheme are +used, such as `LL' or `LL_CC.ENCODING'. You can get the list of +locales supported by your system for your language by running the +command `locale -a | grep '^LL''. + + Not all programs have translations for all languages. By default, an +English message is shown in place of a nonexistent translation. If you +understand other languages, you can set up a priority list of languages. +This is done through a different environment variable, called +`LANGUAGE'. GNU `gettext' gives preference to `LANGUAGE' over `LANG' +for the purpose of message handling, but you still need to have `LANG' +set to the primary language; this is required by other parts of the +system libraries. For example, some Swedish users who would rather +read translations in German than English for when Swedish is not +available, set `LANGUAGE' to `sv:de' while leaving `LANG' to `sv_SE'. + + Special advice for Norwegian users: The language code for Norwegian +bokma*l changed from `no' to `nb' recently (in 2003). During the +transition period, while some message catalogs for this language are +installed under `nb' and some older ones under `no', it's recommended +for Norwegian users to set `LANGUAGE' to `nb:no' so that both newer and +older translations are used. + + In the `LANGUAGE' environment variable, but not in the `LANG' +environment variable, `LL_CC' combinations can be abbreviated as `LL' +to denote the language's main dialect. For example, `de' is equivalent +to `de_DE' (German as spoken in Germany), and `pt' to `pt_PT' +(Portuguese as spoken in Portugal) in this context. + +1.3 Translating Teams +===================== + +For the Free Translation Project to be a success, we need interested +people who like their own language and write it well, and who are also +able to synergize with other translators speaking the same language. +Each translation team has its own mailing list. The up-to-date list of +teams can be found at the Free Translation Project's homepage, +`http://translationproject.org/', in the "Teams" area. + + If you'd like to volunteer to _work_ at translating messages, you +should become a member of the translating team for your own language. +The subscribing address is _not_ the same as the list itself, it has +`-request' appended. For example, speakers of Swedish can send a +message to `sv-request@li.org', having this message body: + + subscribe + + Keep in mind that team members are expected to participate +_actively_ in translations, or at solving translational difficulties, +rather than merely lurking around. If your team does not exist yet and +you want to start one, or if you are unsure about what to do or how to +get started, please write to `coordinator@translationproject.org' to +reach the coordinator for all translator teams. + + The English team is special. It works at improving and uniformizing +the terminology in use. Proven linguistic skills are praised more than +programming skills, here. + +1.4 Available Packages +====================== + +Languages are not equally supported in all packages. The following +matrix shows the current state of internationalization, as of June +2010. The matrix shows, in regard of each package, for which languages +PO files have been submitted to translation coordination, with a +translation percentage of at least 50%. + + Ready PO files af am an ar as ast az be be@latin bg bn_IN bs ca + +--------------------------------------------------+ + a2ps | [] [] | + aegis | | + ant-phone | | + anubis | | + aspell | [] [] | + bash | | + bfd | | + bibshelf | [] | + binutils | | + bison | | + bison-runtime | [] | + bluez-pin | [] [] | + bombono-dvd | | + buzztard | | + cflow | | + clisp | | + coreutils | [] [] | + cpio | | + cppi | | + cpplib | [] | + cryptsetup | | + dfarc | | + dialog | [] [] | + dico | | + diffutils | [] | + dink | | + doodle | | + e2fsprogs | [] | + enscript | [] | + exif | | + fetchmail | [] | + findutils | [] | + flex | [] | + freedink | | + gas | | + gawk | [] [] | + gcal | [] | + gcc | | + gettext-examples | [] [] [] [] | + gettext-runtime | [] [] | + gettext-tools | [] [] | + gip | [] | + gjay | | + gliv | [] | + glunarclock | [] [] | + gnubiff | | + gnucash | [] | + gnuedu | | + gnulib | | + gnunet | | + gnunet-gtk | | + gnutls | | + gold | | + gpe-aerial | | + gpe-beam | | + gpe-bluetooth | | + gpe-calendar | | + gpe-clock | [] | + gpe-conf | | + gpe-contacts | | + gpe-edit | | + gpe-filemanager | | + gpe-go | | + gpe-login | | + gpe-ownerinfo | [] | + gpe-package | | + gpe-sketchbook | | + gpe-su | [] | + gpe-taskmanager | [] | + gpe-timesheet | [] | + gpe-today | [] | + gpe-todo | | + gphoto2 | | + gprof | [] | + gpsdrive | | + gramadoir | | + grep | | + grub | [] [] | + gsasl | | + gss | | + gst-plugins-bad | [] | + gst-plugins-base | [] | + gst-plugins-good | [] | + gst-plugins-ugly | [] | + gstreamer | [] [] [] | + gtick | | + gtkam | [] | + gtkorphan | [] | + gtkspell | [] [] [] | + gutenprint | | + hello | [] | + help2man | | + hylafax | | + idutils | | + indent | [] [] | + iso_15924 | | + iso_3166 | [] [] [] [] [] [] [] | + iso_3166_2 | | + iso_4217 | | + iso_639 | [] [] [] [] | + iso_639_3 | | + jwhois | | + kbd | | + keytouch | [] | + keytouch-editor | | + keytouch-keyboa... | [] | + klavaro | [] | + latrine | | + ld | [] | + leafpad | [] [] | + libc | [] [] | + libexif | () | + libextractor | | + libgnutls | | + libgpewidget | | + libgpg-error | | + libgphoto2 | | + libgphoto2_port | | + libgsasl | | + libiconv | [] | + libidn | | + lifelines | | + liferea | [] [] | + lilypond | | + linkdr | [] | + lordsawar | | + lprng | | + lynx | [] | + m4 | | + mailfromd | | + mailutils | | + make | | + man-db | | + man-db-manpages | | + minicom | | + mkisofs | | + myserver | | + nano | [] [] | + opcodes | | + parted | | + pies | | + popt | | + psmisc | | + pspp | [] | + pwdutils | | + radius | [] | + recode | [] [] | + rosegarden | | + rpm | | + rush | | + sarg | | + screem | | + scrollkeeper | [] [] [] | + sed | [] [] | + sharutils | [] [] | + shishi | | + skencil | | + solfege | | + solfege-manual | | + soundtracker | | + sp | | + sysstat | | + tar | [] | + texinfo | | + tin | | + unicode-han-tra... | | + unicode-transla... | | + util-linux-ng | [] | + vice | | + vmm | | + vorbis-tools | | + wastesedge | | + wdiff | | + wget | [] [] | + wyslij-po | | + xchat | [] [] [] [] | + xdg-user-dirs | [] [] [] [] [] [] [] [] [] | + xkeyboard-config | [] [] | + +--------------------------------------------------+ + af am an ar as ast az be be@latin bg bn_IN bs ca + 6 0 1 2 3 19 1 10 3 28 3 1 38 + + crh cs da de el en en_GB en_ZA eo es et eu fa + +-------------------------------------------------+ + a2ps | [] [] [] [] [] [] [] | + aegis | [] [] [] | + ant-phone | [] () | + anubis | [] [] | + aspell | [] [] [] [] [] | + bash | [] [] [] | + bfd | [] | + bibshelf | [] [] [] | + binutils | [] | + bison | [] [] | + bison-runtime | [] [] [] [] | + bluez-pin | [] [] [] [] [] [] | + bombono-dvd | [] | + buzztard | [] [] [] | + cflow | [] [] | + clisp | [] [] [] [] | + coreutils | [] [] [] [] | + cpio | | + cppi | | + cpplib | [] [] [] | + cryptsetup | [] | + dfarc | [] [] [] | + dialog | [] [] [] [] [] | + dico | | + diffutils | [] [] [] [] [] [] | + dink | [] [] [] | + doodle | [] | + e2fsprogs | [] [] [] | + enscript | [] [] [] | + exif | () [] [] | + fetchmail | [] [] () [] [] [] | + findutils | [] [] [] | + flex | [] [] | + freedink | [] [] [] | + gas | [] | + gawk | [] [] [] | + gcal | [] | + gcc | [] [] | + gettext-examples | [] [] [] [] | + gettext-runtime | [] [] [] [] | + gettext-tools | [] [] [] | + gip | [] [] [] [] | + gjay | [] | + gliv | [] [] [] | + glunarclock | [] [] | + gnubiff | () | + gnucash | [] () () () () | + gnuedu | [] [] | + gnulib | [] [] | + gnunet | | + gnunet-gtk | [] | + gnutls | [] [] | + gold | [] | + gpe-aerial | [] [] [] [] | + gpe-beam | [] [] [] [] | + gpe-bluetooth | [] [] | + gpe-calendar | [] | + gpe-clock | [] [] [] [] | + gpe-conf | [] [] [] | + gpe-contacts | [] [] [] | + gpe-edit | [] [] | + gpe-filemanager | [] [] [] | + gpe-go | [] [] [] [] | + gpe-login | [] [] | + gpe-ownerinfo | [] [] [] [] | + gpe-package | [] [] [] | + gpe-sketchbook | [] [] [] [] | + gpe-su | [] [] [] [] | + gpe-taskmanager | [] [] [] [] | + gpe-timesheet | [] [] [] [] | + gpe-today | [] [] [] [] | + gpe-todo | [] [] [] | + gphoto2 | [] [] () [] [] [] | + gprof | [] [] [] | + gpsdrive | [] [] [] | + gramadoir | [] [] [] | + grep | [] | + grub | [] [] | + gsasl | [] | + gss | | + gst-plugins-bad | [] [] [] [] [] | + gst-plugins-base | [] [] [] [] [] | + gst-plugins-good | [] [] [] [] [] [] | + gst-plugins-ugly | [] [] [] [] [] [] | + gstreamer | [] [] [] [] [] | + gtick | [] () [] | + gtkam | [] [] () [] [] | + gtkorphan | [] [] [] [] | + gtkspell | [] [] [] [] [] [] [] | + gutenprint | [] [] [] | + hello | [] [] [] [] | + help2man | [] | + hylafax | [] [] | + idutils | [] [] | + indent | [] [] [] [] [] [] [] | + iso_15924 | [] () [] [] | + iso_3166 | [] [] [] [] () [] [] [] () | + iso_3166_2 | () | + iso_4217 | [] [] [] () [] [] | + iso_639 | [] [] [] [] () [] [] | + iso_639_3 | [] | + jwhois | [] | + kbd | [] [] [] [] [] | + keytouch | [] [] | + keytouch-editor | [] [] | + keytouch-keyboa... | [] | + klavaro | [] [] [] [] | + latrine | [] () | + ld | [] [] | + leafpad | [] [] [] [] [] [] | + libc | [] [] [] [] | + libexif | [] [] () | + libextractor | | + libgnutls | [] | + libgpewidget | [] [] | + libgpg-error | [] [] | + libgphoto2 | [] () | + libgphoto2_port | [] () [] | + libgsasl | | + libiconv | [] [] [] [] [] | + libidn | [] [] [] | + lifelines | [] () | + liferea | [] [] [] [] [] | + lilypond | [] [] [] | + linkdr | [] [] [] | + lordsawar | [] | + lprng | | + lynx | [] [] [] [] | + m4 | [] [] [] [] | + mailfromd | | + mailutils | [] | + make | [] [] [] | + man-db | | + man-db-manpages | | + minicom | [] [] [] [] | + mkisofs | | + myserver | | + nano | [] [] [] | + opcodes | [] [] | + parted | [] [] | + pies | | + popt | [] [] [] [] [] | + psmisc | [] [] [] | + pspp | [] | + pwdutils | [] | + radius | [] | + recode | [] [] [] [] [] [] | + rosegarden | () () () | + rpm | [] [] [] | + rush | | + sarg | | + screem | | + scrollkeeper | [] [] [] [] [] | + sed | [] [] [] [] [] [] | + sharutils | [] [] [] [] | + shishi | | + skencil | [] () [] | + solfege | [] [] [] | + solfege-manual | [] [] | + soundtracker | [] [] [] | + sp | [] | + sysstat | [] [] [] | + tar | [] [] [] [] | + texinfo | [] [] [] | + tin | [] [] | + unicode-han-tra... | | + unicode-transla... | | + util-linux-ng | [] [] [] [] | + vice | () () | + vmm | [] | + vorbis-tools | [] [] | + wastesedge | [] | + wdiff | [] [] | + wget | [] [] [] | + wyslij-po | | + xchat | [] [] [] [] [] | + xdg-user-dirs | [] [] [] [] [] [] [] [] [] | + xkeyboard-config | [] [] [] [] [] [] | + +-------------------------------------------------+ + crh cs da de el en en_GB en_ZA eo es et eu fa + 5 64 105 117 18 1 8 0 28 89 18 19 0 + + fi fr ga gl gu he hi hr hu hy id is it ja ka kn + +----------------------------------------------------+ + a2ps | [] [] [] [] | + aegis | [] [] | + ant-phone | [] [] | + anubis | [] [] [] [] | + aspell | [] [] [] [] | + bash | [] [] [] [] | + bfd | [] [] [] | + bibshelf | [] [] [] [] [] | + binutils | [] [] [] | + bison | [] [] [] [] | + bison-runtime | [] [] [] [] [] [] | + bluez-pin | [] [] [] [] [] [] [] [] | + bombono-dvd | [] | + buzztard | [] | + cflow | [] [] [] | + clisp | [] | + coreutils | [] [] [] [] [] | + cpio | [] [] [] [] | + cppi | [] [] | + cpplib | [] [] [] | + cryptsetup | [] [] [] | + dfarc | [] [] [] | + dialog | [] [] [] [] [] [] [] | + dico | | + diffutils | [] [] [] [] [] [] [] [] [] | + dink | [] | + doodle | [] [] | + e2fsprogs | [] [] | + enscript | [] [] [] [] | + exif | [] [] [] [] [] [] | + fetchmail | [] [] [] [] | + findutils | [] [] [] [] [] [] | + flex | [] [] [] | + freedink | [] [] [] | + gas | [] [] | + gawk | [] [] [] [] () [] | + gcal | [] | + gcc | [] | + gettext-examples | [] [] [] [] [] [] [] | + gettext-runtime | [] [] [] [] [] [] | + gettext-tools | [] [] [] [] | + gip | [] [] [] [] [] [] | + gjay | [] | + gliv | [] () | + glunarclock | [] [] [] [] | + gnubiff | () [] () | + gnucash | () () () () () [] | + gnuedu | [] [] | + gnulib | [] [] [] [] [] [] | + gnunet | | + gnunet-gtk | [] | + gnutls | [] [] | + gold | [] [] | + gpe-aerial | [] [] [] | + gpe-beam | [] [] [] [] | + gpe-bluetooth | [] [] [] [] | + gpe-calendar | [] [] | + gpe-clock | [] [] [] [] [] | + gpe-conf | [] [] [] [] | + gpe-contacts | [] [] [] [] | + gpe-edit | [] [] [] | + gpe-filemanager | [] [] [] [] | + gpe-go | [] [] [] [] [] | + gpe-login | [] [] [] | + gpe-ownerinfo | [] [] [] [] [] | + gpe-package | [] [] [] | + gpe-sketchbook | [] [] [] [] | + gpe-su | [] [] [] [] [] [] | + gpe-taskmanager | [] [] [] [] [] | + gpe-timesheet | [] [] [] [] [] | + gpe-today | [] [] [] [] [] [] [] | + gpe-todo | [] [] [] | + gphoto2 | [] [] [] [] [] [] | + gprof | [] [] [] [] | + gpsdrive | [] [] [] | + gramadoir | [] [] [] | + grep | [] [] | + grub | [] [] [] [] | + gsasl | [] [] [] [] [] | + gss | [] [] [] [] [] | + gst-plugins-bad | [] [] [] [] [] [] | + gst-plugins-base | [] [] [] [] [] [] | + gst-plugins-good | [] [] [] [] [] [] | + gst-plugins-ugly | [] [] [] [] [] [] | + gstreamer | [] [] [] [] [] | + gtick | [] [] [] [] [] | + gtkam | [] [] [] [] [] | + gtkorphan | [] [] [] | + gtkspell | [] [] [] [] [] [] [] [] [] | + gutenprint | [] [] [] [] | + hello | [] [] [] | + help2man | [] [] | + hylafax | [] | + idutils | [] [] [] [] [] [] | + indent | [] [] [] [] [] [] [] [] | + iso_15924 | [] () [] [] | + iso_3166 | [] () [] [] [] [] [] [] [] [] [] [] | + iso_3166_2 | () [] [] [] | + iso_4217 | [] () [] [] [] [] | + iso_639 | [] () [] [] [] [] [] [] [] | + iso_639_3 | () [] [] | + jwhois | [] [] [] [] [] | + kbd | [] [] | + keytouch | [] [] [] [] [] [] | + keytouch-editor | [] [] [] [] [] | + keytouch-keyboa... | [] [] [] [] [] | + klavaro | [] [] | + latrine | [] [] [] | + ld | [] [] [] [] | + leafpad | [] [] [] [] [] [] [] () | + libc | [] [] [] [] [] | + libexif | [] | + libextractor | | + libgnutls | [] [] | + libgpewidget | [] [] [] [] | + libgpg-error | [] [] | + libgphoto2 | [] [] [] | + libgphoto2_port | [] [] [] | + libgsasl | [] [] [] [] [] | + libiconv | [] [] [] [] [] [] | + libidn | [] [] [] [] | + lifelines | () | + liferea | [] [] [] [] | + lilypond | [] [] | + linkdr | [] [] [] [] [] | + lordsawar | | + lprng | [] | + lynx | [] [] [] [] [] | + m4 | [] [] [] [] [] [] | + mailfromd | | + mailutils | [] [] | + make | [] [] [] [] [] [] [] [] [] | + man-db | [] [] | + man-db-manpages | [] | + minicom | [] [] [] [] [] | + mkisofs | [] [] [] [] | + myserver | | + nano | [] [] [] [] [] [] | + opcodes | [] [] [] [] | + parted | [] [] [] [] | + pies | | + popt | [] [] [] [] [] [] [] [] [] | + psmisc | [] [] [] | + pspp | | + pwdutils | [] [] | + radius | [] [] | + recode | [] [] [] [] [] [] [] [] | + rosegarden | () () () () () | + rpm | [] [] | + rush | | + sarg | [] | + screem | [] [] | + scrollkeeper | [] [] [] [] | + sed | [] [] [] [] [] [] [] [] | + sharutils | [] [] [] [] [] [] [] | + shishi | [] | + skencil | [] | + solfege | [] [] [] [] | + solfege-manual | [] [] | + soundtracker | [] [] | + sp | [] () | + sysstat | [] [] [] [] [] | + tar | [] [] [] [] [] [] [] | + texinfo | [] [] [] [] | + tin | [] | + unicode-han-tra... | | + unicode-transla... | [] [] | + util-linux-ng | [] [] [] [] [] [] | + vice | () () () | + vmm | [] | + vorbis-tools | [] | + wastesedge | () () | + wdiff | [] | + wget | [] [] [] [] [] [] [] [] | + wyslij-po | [] [] [] | + xchat | [] [] [] [] [] [] [] [] [] | + xdg-user-dirs | [] [] [] [] [] [] [] [] [] [] [] [] [] | + xkeyboard-config | [] [] [] [] [] | + +----------------------------------------------------+ + fi fr ga gl gu he hi hr hu hy id is it ja ka kn + 105 121 53 20 4 8 3 5 53 2 120 5 84 67 0 4 + + ko ku ky lg lt lv mk ml mn mr ms mt nb nds ne + +-----------------------------------------------+ + a2ps | [] | + aegis | | + ant-phone | | + anubis | [] [] | + aspell | [] | + bash | | + bfd | | + bibshelf | [] [] | + binutils | | + bison | [] | + bison-runtime | [] [] [] [] [] | + bluez-pin | [] [] [] [] [] | + bombono-dvd | | + buzztard | | + cflow | | + clisp | | + coreutils | [] | + cpio | | + cppi | | + cpplib | | + cryptsetup | | + dfarc | [] | + dialog | [] [] [] [] [] | + dico | | + diffutils | [] [] | + dink | | + doodle | | + e2fsprogs | | + enscript | | + exif | [] | + fetchmail | | + findutils | | + flex | | + freedink | [] | + gas | | + gawk | | + gcal | | + gcc | | + gettext-examples | [] [] [] [] | + gettext-runtime | [] | + gettext-tools | [] | + gip | [] [] | + gjay | | + gliv | | + glunarclock | [] | + gnubiff | | + gnucash | () () () () | + gnuedu | | + gnulib | | + gnunet | | + gnunet-gtk | | + gnutls | [] | + gold | | + gpe-aerial | [] | + gpe-beam | [] | + gpe-bluetooth | [] [] | + gpe-calendar | [] | + gpe-clock | [] [] [] [] [] | + gpe-conf | [] [] | + gpe-contacts | [] [] | + gpe-edit | [] | + gpe-filemanager | [] [] | + gpe-go | [] [] [] | + gpe-login | [] | + gpe-ownerinfo | [] [] | + gpe-package | [] [] | + gpe-sketchbook | [] [] | + gpe-su | [] [] [] [] [] [] | + gpe-taskmanager | [] [] [] [] [] [] | + gpe-timesheet | [] [] | + gpe-today | [] [] [] [] | + gpe-todo | [] [] | + gphoto2 | | + gprof | [] | + gpsdrive | | + gramadoir | | + grep | | + grub | | + gsasl | | + gss | | + gst-plugins-bad | [] [] [] [] | + gst-plugins-base | [] [] | + gst-plugins-good | [] [] | + gst-plugins-ugly | [] [] [] [] [] | + gstreamer | | + gtick | | + gtkam | [] | + gtkorphan | [] [] | + gtkspell | [] [] [] [] [] [] [] | + gutenprint | | + hello | [] [] [] | + help2man | | + hylafax | | + idutils | | + indent | | + iso_15924 | [] [] | + iso_3166 | [] [] () [] [] [] [] [] | + iso_3166_2 | | + iso_4217 | [] [] | + iso_639 | [] [] | + iso_639_3 | [] | + jwhois | [] | + kbd | | + keytouch | [] | + keytouch-editor | [] | + keytouch-keyboa... | [] | + klavaro | [] | + latrine | [] | + ld | | + leafpad | [] [] [] | + libc | [] | + libexif | | + libextractor | | + libgnutls | [] | + libgpewidget | [] [] | + libgpg-error | | + libgphoto2 | | + libgphoto2_port | | + libgsasl | | + libiconv | | + libidn | | + lifelines | | + liferea | | + lilypond | | + linkdr | | + lordsawar | | + lprng | | + lynx | | + m4 | | + mailfromd | | + mailutils | | + make | [] | + man-db | | + man-db-manpages | | + minicom | [] | + mkisofs | | + myserver | | + nano | [] [] | + opcodes | | + parted | | + pies | | + popt | [] [] [] | + psmisc | | + pspp | | + pwdutils | | + radius | | + recode | | + rosegarden | | + rpm | | + rush | | + sarg | | + screem | | + scrollkeeper | [] [] | + sed | | + sharutils | | + shishi | | + skencil | | + solfege | [] | + solfege-manual | | + soundtracker | | + sp | | + sysstat | [] | + tar | [] | + texinfo | [] | + tin | | + unicode-han-tra... | | + unicode-transla... | | + util-linux-ng | | + vice | | + vmm | | + vorbis-tools | | + wastesedge | | + wdiff | | + wget | [] | + wyslij-po | | + xchat | [] [] [] | + xdg-user-dirs | [] [] [] [] [] [] [] [] | + xkeyboard-config | [] [] [] | + +-----------------------------------------------+ + ko ku ky lg lt lv mk ml mn mr ms mt nb nds ne + 20 5 10 1 13 48 4 2 2 4 24 10 20 3 1 + + nl nn or pa pl ps pt pt_BR ro ru rw sk sl sq sr + +---------------------------------------------------+ + a2ps | [] [] [] [] [] [] [] [] | + aegis | [] [] [] | + ant-phone | [] [] | + anubis | [] [] [] | + aspell | [] [] [] [] [] | + bash | [] [] | + bfd | [] | + bibshelf | [] [] | + binutils | [] [] | + bison | [] [] [] | + bison-runtime | [] [] [] [] [] [] [] | + bluez-pin | [] [] [] [] [] [] [] [] | + bombono-dvd | [] () | + buzztard | [] [] | + cflow | [] | + clisp | [] [] | + coreutils | [] [] [] [] [] [] | + cpio | [] [] [] | + cppi | [] | + cpplib | [] | + cryptsetup | [] | + dfarc | [] | + dialog | [] [] [] [] | + dico | [] | + diffutils | [] [] [] [] [] [] | + dink | () | + doodle | [] [] | + e2fsprogs | [] [] | + enscript | [] [] [] [] [] | + exif | [] [] [] () [] | + fetchmail | [] [] [] [] | + findutils | [] [] [] [] [] | + flex | [] [] [] [] [] | + freedink | [] [] | + gas | | + gawk | [] [] [] [] | + gcal | | + gcc | [] | + gettext-examples | [] [] [] [] [] [] [] [] | + gettext-runtime | [] [] [] [] [] [] [] [] [] | + gettext-tools | [] [] [] [] [] [] | + gip | [] [] [] [] [] | + gjay | | + gliv | [] [] [] [] [] [] | + glunarclock | [] [] [] [] [] | + gnubiff | [] () | + gnucash | [] () () () | + gnuedu | [] | + gnulib | [] [] [] [] | + gnunet | | + gnunet-gtk | | + gnutls | [] [] | + gold | | + gpe-aerial | [] [] [] [] [] [] [] | + gpe-beam | [] [] [] [] [] [] [] | + gpe-bluetooth | [] [] | + gpe-calendar | [] [] [] [] | + gpe-clock | [] [] [] [] [] [] [] [] | + gpe-conf | [] [] [] [] [] [] [] | + gpe-contacts | [] [] [] [] [] | + gpe-edit | [] [] [] | + gpe-filemanager | [] [] [] | + gpe-go | [] [] [] [] [] [] [] [] | + gpe-login | [] [] | + gpe-ownerinfo | [] [] [] [] [] [] [] [] | + gpe-package | [] [] | + gpe-sketchbook | [] [] [] [] [] [] [] | + gpe-su | [] [] [] [] [] [] [] [] | + gpe-taskmanager | [] [] [] [] [] [] [] [] | + gpe-timesheet | [] [] [] [] [] [] [] [] | + gpe-today | [] [] [] [] [] [] [] [] | + gpe-todo | [] [] [] [] [] | + gphoto2 | [] [] [] [] [] [] [] [] | + gprof | [] [] [] | + gpsdrive | [] [] | + gramadoir | [] [] | + grep | [] [] [] [] | + grub | [] [] [] | + gsasl | [] [] [] [] | + gss | [] [] [] | + gst-plugins-bad | [] [] [] [] [] [] | + gst-plugins-base | [] [] [] [] [] | + gst-plugins-good | [] [] [] [] [] | + gst-plugins-ugly | [] [] [] [] [] [] | + gstreamer | [] [] [] [] [] | + gtick | [] [] [] | + gtkam | [] [] [] [] [] [] | + gtkorphan | [] | + gtkspell | [] [] [] [] [] [] [] [] [] [] | + gutenprint | [] [] | + hello | [] [] [] [] | + help2man | [] [] | + hylafax | [] | + idutils | [] [] [] [] [] | + indent | [] [] [] [] [] [] [] | + iso_15924 | [] [] [] [] | + iso_3166 | [] [] [] [] [] () [] [] [] [] [] [] [] [] | + iso_3166_2 | [] [] [] | + iso_4217 | [] [] [] [] [] [] [] [] | + iso_639 | [] [] [] [] [] [] [] [] [] | + iso_639_3 | [] [] | + jwhois | [] [] [] [] | + kbd | [] [] [] | + keytouch | [] [] [] | + keytouch-editor | [] [] [] | + keytouch-keyboa... | [] [] [] | + klavaro | [] [] | + latrine | [] [] | + ld | | + leafpad | [] [] [] [] [] [] [] [] [] | + libc | [] [] [] [] | + libexif | [] [] () [] | + libextractor | | + libgnutls | [] [] | + libgpewidget | [] [] [] | + libgpg-error | [] [] | + libgphoto2 | [] [] | + libgphoto2_port | [] [] [] [] [] | + libgsasl | [] [] [] [] [] | + libiconv | [] [] [] [] [] | + libidn | [] [] | + lifelines | [] [] | + liferea | [] [] [] [] [] () () [] | + lilypond | [] | + linkdr | [] [] [] | + lordsawar | | + lprng | [] | + lynx | [] [] [] | + m4 | [] [] [] [] [] | + mailfromd | [] | + mailutils | [] | + make | [] [] [] [] | + man-db | [] [] [] | + man-db-manpages | [] [] [] | + minicom | [] [] [] [] | + mkisofs | [] [] [] | + myserver | | + nano | [] [] [] [] | + opcodes | [] [] | + parted | [] [] [] [] | + pies | [] | + popt | [] [] [] [] | + psmisc | [] [] [] | + pspp | [] [] | + pwdutils | [] | + radius | [] [] [] | + recode | [] [] [] [] [] [] [] [] | + rosegarden | () () | + rpm | [] [] [] | + rush | [] [] | + sarg | | + screem | | + scrollkeeper | [] [] [] [] [] [] [] [] | + sed | [] [] [] [] [] [] [] [] [] | + sharutils | [] [] [] [] | + shishi | [] | + skencil | [] [] | + solfege | [] [] [] [] | + solfege-manual | [] [] [] | + soundtracker | [] | + sp | | + sysstat | [] [] [] [] | + tar | [] [] [] [] | + texinfo | [] [] [] [] | + tin | [] | + unicode-han-tra... | | + unicode-transla... | | + util-linux-ng | [] [] [] [] [] | + vice | [] | + vmm | [] | + vorbis-tools | [] [] | + wastesedge | [] | + wdiff | [] [] | + wget | [] [] [] [] [] [] [] | + wyslij-po | [] [] [] | + xchat | [] [] [] [] [] [] [] [] [] | + xdg-user-dirs | [] [] [] [] [] [] [] [] [] [] [] [] [] [] | + xkeyboard-config | [] [] [] | + +---------------------------------------------------+ + nl nn or pa pl ps pt pt_BR ro ru rw sk sl sq sr + 135 10 4 7 105 1 29 62 47 91 3 54 46 9 37 + + sv sw ta te tg th tr uk vi wa zh_CN zh_HK zh_TW + +---------------------------------------------------+ + a2ps | [] [] [] [] [] | 27 + aegis | [] | 9 + ant-phone | [] [] [] [] | 9 + anubis | [] [] [] [] | 15 + aspell | [] [] [] | 20 + bash | [] [] [] | 12 + bfd | [] | 6 + bibshelf | [] [] [] | 16 + binutils | [] [] | 8 + bison | [] [] | 12 + bison-runtime | [] [] [] [] [] [] | 29 + bluez-pin | [] [] [] [] [] [] [] [] | 37 + bombono-dvd | [] | 4 + buzztard | [] | 7 + cflow | [] [] [] | 9 + clisp | | 10 + coreutils | [] [] [] [] | 22 + cpio | [] [] [] [] [] [] | 13 + cppi | [] [] | 5 + cpplib | [] [] [] [] [] [] | 14 + cryptsetup | [] [] | 7 + dfarc | [] | 9 + dialog | [] [] [] [] [] [] [] | 30 + dico | [] | 2 + diffutils | [] [] [] [] [] [] | 30 + dink | | 4 + doodle | [] [] | 7 + e2fsprogs | [] [] [] | 11 + enscript | [] [] [] [] | 17 + exif | [] [] [] | 16 + fetchmail | [] [] [] | 17 + findutils | [] [] [] [] [] | 20 + flex | [] [] [] [] | 15 + freedink | [] | 10 + gas | [] | 4 + gawk | [] [] [] [] | 18 + gcal | [] [] | 5 + gcc | [] [] [] | 7 + gettext-examples | [] [] [] [] [] [] [] | 34 + gettext-runtime | [] [] [] [] [] [] [] | 29 + gettext-tools | [] [] [] [] [] [] | 22 + gip | [] [] [] [] | 22 + gjay | [] | 3 + gliv | [] [] [] | 14 + glunarclock | [] [] [] [] [] | 19 + gnubiff | [] [] | 4 + gnucash | () [] () [] () | 10 + gnuedu | [] [] | 7 + gnulib | [] [] [] [] | 16 + gnunet | [] | 1 + gnunet-gtk | [] [] [] | 5 + gnutls | [] [] [] | 10 + gold | [] | 4 + gpe-aerial | [] [] [] | 18 + gpe-beam | [] [] [] | 19 + gpe-bluetooth | [] [] [] | 13 + gpe-calendar | [] [] [] [] | 12 + gpe-clock | [] [] [] [] [] | 28 + gpe-conf | [] [] [] [] | 20 + gpe-contacts | [] [] [] | 17 + gpe-edit | [] [] [] | 12 + gpe-filemanager | [] [] [] [] | 16 + gpe-go | [] [] [] [] [] | 25 + gpe-login | [] [] [] | 11 + gpe-ownerinfo | [] [] [] [] [] | 25 + gpe-package | [] [] [] | 13 + gpe-sketchbook | [] [] [] | 20 + gpe-su | [] [] [] [] [] | 30 + gpe-taskmanager | [] [] [] [] [] | 29 + gpe-timesheet | [] [] [] [] [] | 25 + gpe-today | [] [] [] [] [] [] | 30 + gpe-todo | [] [] [] [] | 17 + gphoto2 | [] [] [] [] [] | 24 + gprof | [] [] [] | 15 + gpsdrive | [] [] [] | 11 + gramadoir | [] [] [] | 11 + grep | [] [] [] | 10 + grub | [] [] [] | 14 + gsasl | [] [] [] [] | 14 + gss | [] [] [] | 11 + gst-plugins-bad | [] [] [] [] | 26 + gst-plugins-base | [] [] [] [] [] | 24 + gst-plugins-good | [] [] [] [] | 24 + gst-plugins-ugly | [] [] [] [] [] | 29 + gstreamer | [] [] [] [] | 22 + gtick | [] [] [] | 13 + gtkam | [] [] [] | 20 + gtkorphan | [] [] [] | 14 + gtkspell | [] [] [] [] [] [] [] [] [] | 45 + gutenprint | [] | 10 + hello | [] [] [] [] [] [] | 21 + help2man | [] [] | 7 + hylafax | [] | 5 + idutils | [] [] [] [] | 17 + indent | [] [] [] [] [] [] | 30 + iso_15924 | () [] () [] [] | 16 + iso_3166 | [] [] () [] [] () [] [] [] () | 53 + iso_3166_2 | () [] () [] | 9 + iso_4217 | [] () [] [] () [] [] | 26 + iso_639 | [] [] [] () [] () [] [] [] [] | 38 + iso_639_3 | [] () | 8 + jwhois | [] [] [] [] [] | 16 + kbd | [] [] [] [] [] | 15 + keytouch | [] [] [] | 16 + keytouch-editor | [] [] [] | 14 + keytouch-keyboa... | [] [] [] | 14 + klavaro | [] | 11 + latrine | [] [] [] | 10 + ld | [] [] [] [] | 11 + leafpad | [] [] [] [] [] [] | 33 + libc | [] [] [] [] [] | 21 + libexif | [] () | 7 + libextractor | [] | 1 + libgnutls | [] [] [] | 9 + libgpewidget | [] [] [] | 14 + libgpg-error | [] [] [] | 9 + libgphoto2 | [] [] | 8 + libgphoto2_port | [] [] [] [] | 14 + libgsasl | [] [] [] | 13 + libiconv | [] [] [] [] | 21 + libidn | () [] [] | 11 + lifelines | [] | 4 + liferea | [] [] [] | 21 + lilypond | [] | 7 + linkdr | [] [] [] [] [] | 17 + lordsawar | | 1 + lprng | [] | 3 + lynx | [] [] [] [] | 17 + m4 | [] [] [] [] | 19 + mailfromd | [] [] | 3 + mailutils | [] | 5 + make | [] [] [] [] | 21 + man-db | [] [] [] | 8 + man-db-manpages | | 4 + minicom | [] [] | 16 + mkisofs | [] [] | 9 + myserver | | 0 + nano | [] [] [] [] | 21 + opcodes | [] [] [] | 11 + parted | [] [] [] [] [] | 15 + pies | [] [] | 3 + popt | [] [] [] [] [] [] | 27 + psmisc | [] [] | 11 + pspp | | 4 + pwdutils | [] [] | 6 + radius | [] [] | 9 + recode | [] [] [] [] | 28 + rosegarden | () | 0 + rpm | [] [] [] | 11 + rush | [] [] | 4 + sarg | | 1 + screem | [] | 3 + scrollkeeper | [] [] [] [] [] | 27 + sed | [] [] [] [] [] | 30 + sharutils | [] [] [] [] [] | 22 + shishi | [] | 3 + skencil | [] [] | 7 + solfege | [] [] [] [] | 16 + solfege-manual | [] | 8 + soundtracker | [] [] [] | 9 + sp | [] | 3 + sysstat | [] [] | 15 + tar | [] [] [] [] [] [] | 23 + texinfo | [] [] [] [] [] | 17 + tin | | 4 + unicode-han-tra... | | 0 + unicode-transla... | | 2 + util-linux-ng | [] [] [] [] | 20 + vice | () () | 1 + vmm | [] | 4 + vorbis-tools | [] | 6 + wastesedge | | 2 + wdiff | [] [] | 7 + wget | [] [] [] [] [] | 26 + wyslij-po | [] [] | 8 + xchat | [] [] [] [] [] [] | 36 + xdg-user-dirs | [] [] [] [] [] [] [] [] [] [] | 63 + xkeyboard-config | [] [] [] | 22 + +---------------------------------------------------+ + 85 teams sv sw ta te tg th tr uk vi wa zh_CN zh_HK zh_TW + 178 domains 119 1 3 3 0 10 65 51 155 17 98 7 41 2618 + + Some counters in the preceding matrix are higher than the number of +visible blocks let us expect. This is because a few extra PO files are +used for implementing regional variants of languages, or language +dialects. + + For a PO file in the matrix above to be effective, the package to +which it applies should also have been internationalized and +distributed as such by its maintainer. There might be an observable +lag between the mere existence a PO file and its wide availability in a +distribution. + + If June 2010 seems to be old, you may fetch a more recent copy of +this `ABOUT-NLS' file on most GNU archive sites. The most up-to-date +matrix with full percentage details can be found at +`http://translationproject.org/extra/matrix.html'. + +1.5 Using `gettext' in new packages +=================================== + +If you are writing a freely available program and want to +internationalize it you are welcome to use GNU `gettext' in your +package. Of course you have to respect the GNU Library General Public +License which covers the use of the GNU `gettext' library. This means +in particular that even non-free programs can use `libintl' as a shared +library, whereas only free software can use `libintl' as a static +library or use modified versions of `libintl'. + + Once the sources are changed appropriately and the setup can handle +the use of `gettext' the only thing missing are the translations. The +Free Translation Project is also available for packages which are not +developed inside the GNU project. Therefore the information given above +applies also for every other Free Software Project. Contact +`coordinator@translationproject.org' to make the `.pot' files available +to the translation teams. + diff --git a/AUTHORS b/AUTHORS new file mode 100644 index 0000000..f4e5175 --- /dev/null +++ b/AUTHORS @@ -0,0 +1,4 @@ +Jana Saout +Clemens Fruhwirth +Milan Broz +Ondrej Kozina diff --git a/BUILD.gn b/BUILD.gn new file mode 100755 index 0000000..b2b0266 --- /dev/null +++ b/BUILD.gn @@ -0,0 +1,251 @@ +# Copyright (c) Huawei Technologies Co., Ltd. 2020-2020. All rights reserved. + +import("//build/lite/config/component/lite_component.gni") + +config("utils_io_config") { + include_dirs = [ "//third_party/cryptsetup/lib" ] +} + +utils_io_sources = [ "lib/utils_io.c" ] + +static_library("utils_io_static") { + sources = utils_io_sources + output_name = "utils_io" + public_configs = [ ":utils_io_config" ] + cflags_c = [ + "-Wall", + "-Os", + ] + ldflags = [ + "-lpthread", + "-lm", + ] + deps = [ + "//third_party/JSON-C:json-c_static", + "//third_party/LVM2:devmapper_static", + "//third_party/libuuid:libuuid_static", + "//third_party/popt:popt_static", + ] +} + +config("argon2_config") { + include_dirs = [ "//third_party/cryptsetup/lib/crypto_backend/argon2" ] +} + +argon2_sources = [ + "lib/crypto_backend/argon2/argon2.c", + "lib/crypto_backend/argon2/blake2/blake2b.c", + "lib/crypto_backend/argon2/core.c", + "lib/crypto_backend/argon2/encoding.c", + "lib/crypto_backend/argon2/ref.c", + "lib/crypto_backend/argon2/thread.c", +] + +static_library("argon2_static") { + sources = argon2_sources + output_name = "argon2" + public_configs = [ ":argon2_config" ] + defines = [ + "HAVE_CONFIG_H", + "_GNU_SOURCE", + "_REENTRANT", + ] + configs -= [ "//build/lite/config:language_c" ] + cflags_c = [ + "-Wall", + "-std=c89", + "-pthread", + "-Os", + ] + ldflags = [ + "-lpthread", + "-lm", + ] + deps = [ + "//third_party/JSON-C:json-c_static", + "//third_party/LVM2:devmapper_static", + "//third_party/libuuid:libuuid_static", + "//third_party/popt:popt_static", + ] +} + +config("crypto_backend_config") { + include_dirs = [ + "//third_party/cryptsetup/lib", + "//third_party/cryptsetup/lib/crypto_backend", + ] +} + +crypto_backend_sources = [ + "lib/crypto_backend/argon2_generic.c", + "lib/crypto_backend/cipher_check.c", + "lib/crypto_backend/cipher_generic.c", + "lib/crypto_backend/crc32.c", + "lib/crypto_backend/crypto_cipher_kernel.c", + "lib/crypto_backend/crypto_kernel.c", + "lib/crypto_backend/crypto_storage.c", + "lib/crypto_backend/pbkdf2_generic.c", +] + +static_library("crypto_backend_static") { + sources = crypto_backend_sources + output_name = "crypto_backend" + public_configs = [ ":crypto_backend_config" ] + cflags_c = [ + "-Wall", + "-Os", + ] + deps = [ + "//third_party/JSON-C:json-c_static", + "//third_party/LVM2:devmapper_static", + "//third_party/cryptsetup:argon2_static", + "//third_party/libuuid:libuuid_static", + "//third_party/popt:popt_static", + ] +} + +config("cryptsetup_config") { + include_dirs = [ + "//third_party/cryptsetup", + "//third_party/cryptsetup/lib/luks1", + "//third_party/cryptsetup/lib/luks2", + "//third_party/cryptsetup/lib/loopaes", + "//third_party/cryptsetup/lib/verity", + "//third_party/cryptsetup/lib/tcrypt", + "//third_party/cryptsetup/lib/integrity", + "//third_party/libuuid", + "//third_party/JSON-C", + ] +} + +cryptsetup_sources = [ + "lib/integrity/integrity.c", + "lib/loopaes/loopaes.c", + "lib/luks1/af.c", + "lib/luks1/keyencryption.c", + "lib/luks1/keymanage.c", + "lib/luks2/luks2_digest.c", + "lib/luks2/luks2_digest_pbkdf2.c", + "lib/luks2/luks2_disk_metadata.c", + "lib/luks2/luks2_json_format.c", + "lib/luks2/luks2_json_metadata.c", + "lib/luks2/luks2_keyslot.c", + "lib/luks2/luks2_keyslot_luks2.c", + "lib/luks2/luks2_keyslot_reenc.c", + "lib/luks2/luks2_luks1_convert.c", + "lib/luks2/luks2_reencrypt.c", + "lib/luks2/luks2_segment.c", + "lib/luks2/luks2_token.c", + "lib/luks2/luks2_token_keyring.c", + "lib/setup.c", + "lib/tcrypt/tcrypt.c", + "lib/utils.c", + "lib/utils_benchmark.c", + "lib/utils_blkid.c", + "lib/utils_crypt.c", + "lib/utils_device.c", + "lib/utils_device_locking.c", + "lib/utils_devpath.c", + "lib/utils_fips.c", + "lib/utils_keyring.c", + "lib/utils_loop.c", + "lib/utils_pbkdf.c", + "lib/utils_storage_wrappers.c", + "lib/utils_wipe.c", + "lib/verity/rs_decode_char.c", + "lib/verity/rs_encode_char.c", + "lib/verity/verity.c", + "lib/verity/verity_fec.c", + "lib/verity/verity_hash.c", +] + +static_library("cryptsetup_static") { + sources = cryptsetup_sources + output_name = "cryptsetup" + public_configs = [ ":cryptsetup_config" ] + configs -= [ "//build/lite/config:language_c" ] + cflags_c = [ + "-std=gnu11", + "-Wall", + "-Os", + "-include", + "config.h", + ] + ldflags = [ + "-lpthread", + "-lm", + ] + deps = [ + "//third_party/JSON-C:json-c_static", + "//third_party/LVM2:devmapper_static", + "//third_party/cryptsetup:crypto_backend_static", + "//third_party/cryptsetup:utils_io_static", + "//third_party/libuuid:libuuid_static", + "//third_party/popt:popt_static", + ] +} + +lite_component("cryptsetup") { + features = [ ":veritysetup" ] +} + +config("veritysetup_config") { + include_dirs = [ + "//third_party/cryptsetup", + "//third_party/cryptsetup/src", + "//third_party/popt", + "//third_party/cryptsetup/lib", + "//third_party/cryptsetup/lib/luks1", + "//third_party/cryptsetup/lib/luks2", + "//third_party/cryptsetup/lib/loopaes", + "//third_party/cryptsetup/lib/verity", + "//third_party/cryptsetup/lib/tcrypt", + "//third_party/cryptsetup/lib/integrity", + "//third_party/cryptsetup/lib/crypto_backend", + ] +} + +veritysetup_sources = [ + "//third_party/JSON-C/json-c/random_seed.c", + "//third_party/cryptsetup/lib/base64.c", + "//third_party/cryptsetup/lib/crypt_plain.c", + "//third_party/cryptsetup/lib/crypto_backend/pbkdf_check.c", + "//third_party/cryptsetup/lib/libdevmapper.c", + "//third_party/cryptsetup/lib/random.c", + "//third_party/cryptsetup/lib/utils_blkid.c", + "//third_party/cryptsetup/lib/utils_crypt.c", + "//third_party/cryptsetup/lib/utils_io.c", + "//third_party/cryptsetup/lib/utils_loop.c", + "//third_party/cryptsetup/lib/volumekey.c", + "//third_party/cryptsetup/src/utils_tools.c", + "//third_party/cryptsetup/src/veritysetup.c", +] + +executable("veritysetup") { + output_name = "veritysetup" + sources = veritysetup_sources + public_configs = [ ":veritysetup_config" ] + cflags_c = [ + "-include", + "config.h", + "-Wall", + "-Os", + "-fPIE", + "-ffunction-sections", + "-fdata-sections", + ] + + ldflags = [ + "-lpthread", + "-lm", + ] + + deps = [ + "//third_party/JSON-C:json-c_static", + "//third_party/LVM2:devmapper_static", + "//third_party/cryptsetup:crypto_backend_static", + "//third_party/cryptsetup:cryptsetup_static", + "//third_party/libuuid:libuuid_static", + "//third_party/popt:popt_static", + ] +} diff --git a/COPYING b/COPYING new file mode 100644 index 0000000..86289a1 --- /dev/null +++ b/COPYING @@ -0,0 +1,354 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. + +----- +In addition, as a special exception, the copyright holders give +permission to link the code of portions of this program with the +OpenSSL library under certain conditions as described in each +individual source file, and distribute linked combinations +including the two. + +You must obey the GNU General Public License in all respects +for all of the code used other than OpenSSL. If you modify +file(s) with this exception, you may extend this exception to your +version of the file(s), but you are not obligated to do so. If you +do not wish to do so, delete this exception statement from your +version. If you delete this exception statement from all source +files in the program, then also delete it here. diff --git a/COPYING.LGPL b/COPYING.LGPL new file mode 100644 index 0000000..7e354d5 --- /dev/null +++ b/COPYING.LGPL @@ -0,0 +1,517 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +not price. Our General Public Licenses are designed to make sure that +you have the freedom to distribute copies of free software (and charge +for this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms of the +ordinary General Public License). + + To apply these terms, attach the following notices to the library. It is +safest to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James Random Hacker. + + , 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! + +----- +In addition, as a special exception, the copyright holders give +permission to link the code of portions of this program with the +OpenSSL library under certain conditions as described in each +individual source file, and distribute linked combinations +including the two. + +You must obey the GNU Lesser General Public License in all respects +for all of the code used other than OpenSSL. If you modify +file(s) with this exception, you may extend this exception to your +version of the file(s), but you are not obligated to do so. If you +do not wish to do so, delete this exception statement from your +version. If you delete this exception statement from all source +files in the program, then also delete it here. diff --git a/ChangeLog b/ChangeLog new file mode 100644 index 0000000..b6c11ba --- /dev/null +++ b/ChangeLog @@ -0,0 +1,6 @@ +Since version 1.6 this file is no longer maintained. + +See docs/*ReleaseNotes for release changes documentation. + +See version control history for full commit messages. + https://gitlab.com/cryptsetup/cryptsetup/commits/master diff --git a/FAQ b/FAQ new file mode 100644 index 0000000..0d5cfa8 --- /dev/null +++ b/FAQ @@ -0,0 +1,2807 @@ +Frequently Asked Questions. + +Sections +1. General Questions +2. Setup +3. Common Problems +4. Troubleshooting +5. Security Aspects +6. Backup and Data Recovery +7. Interoperability with other Disk Encryption Tools +8. Issues with Specific Versions of cryptsetup +9. The Initrd question +10. References and Further Reading +A. Contributors + +1. General Questions + + + * 1.1 What is this? + + This is the FAQ (Frequently Asked Questions) for cryptsetup. It + covers Linux disk encryption with plain dm-crypt (one passphrase, no + management, no metadata on disk) and LUKS (multiple user keys with + one master key, anti-forensic features, metadata block at start of + device, ...). The latest version of this FAQ should usually be + available at + https://gitlab.com/cryptsetup/cryptsetup/wikis/FrequentlyAskedQuestions + + + * 1.2 WARNINGS + + ATTENTION: If you are going to read just one thing, make it the + section on Backup and Data Recovery. By far the most questions on + the cryptsetup mailing list are from people that managed to damage + the start of their LUKS partitions, i.e. the LUKS header. In most + cases, there is nothing that can be done to help these poor souls + recover their data. Make sure you understand the problem and + limitations imposed by the LUKS security model BEFORE you face such a + disaster! In particular, make sure you have a current header backup + before doing any potentially dangerous operations. + + DEBUG COMMANDS: While the --debug option does not leak data, "strace" + and the like can leak your full passphrase. Do not post an strace + output with the correct passphrase to a mailing-list or online! See + Item 4.5 for more explanation. + + SSDs/FLASH DRIVES: SSDs and Flash are different. Currently it is + unclear how to get LUKS or plain dm-crypt to run on them with the + full set of security features intact. This may or may not be a + problem, depending on the attacker model. See Section 5.19. + + BACKUP: Yes, encrypted disks die, just as normal ones do. A full + backup is mandatory, see Section "6. Backup and Data Recovery" on + options for doing encrypted backup. + + CLONING/IMAGING: If you clone or image a LUKS container, you make a + copy of the LUKS header and the master key will stay the same! That + means that if you distribute an image to several machines, the same + master key will be used on all of them, regardless of whether you + change the passphrases. Do NOT do this! If you do, a root-user on + any of the machines with a mapped (decrypted) container or a + passphrase on that machine can decrypt all other copies, breaking + security. See also Item 6.15. + + DISTRIBUTION INSTALLERS: Some distribution installers offer to create + LUKS containers in a way that can be mistaken as activation of an + existing container. Creating a new LUKS container on top of an + existing one leads to permanent, complete and irreversible data loss. + It is strongly recommended to only use distribution installers after + a complete backup of all LUKS containers has been made. + + UBUNTU INSTALLER: In particular the Ubuntu installer seems to be + quite willing to kill LUKS containers in several different ways. + Those responsible at Ubuntu seem not to care very much (it is very + easy to recognize a LUKS container), so treat the process of + installing Ubuntu as a severe hazard to any LUKS container you may + have. + + NO WARNING ON NON-INTERACTIVE FORMAT: If you feed cryptsetup from + STDIN (e.g. via GnuPG) on LUKS format, it does not give you the + warning that you are about to format (and e.g. will lose any + pre-existing LUKS container on the target), as it assumes it is used + from a script. In this scenario, the responsibility for warning the + user and possibly checking for an existing LUKS header is shifted to + the script. This is a more general form of the previous item. + + LUKS PASSPHRASE IS NOT THE MASTER KEY: The LUKS passphrase is not + used in deriving the master key. It is used in decrypting a master + key that is randomly selected on header creation. This means that if + you create a new LUKS header on top of an old one with exactly the + same parameters and exactly the same passphrase as the old one, it + will still have a different master key and your data will be + permanently lost. + + PASSPHRASE CHARACTER SET: Some people have had difficulties with this + when upgrading distributions. It is highly advisable to only use the + 95 printable characters from the first 128 characters of the ASCII + table, as they will always have the same binary representation. + Other 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 + + KEYBOARD NUM-PAD: Apparently some pre-boot authentication + environments (these are done by the distro, not by cryptsetup, so + complain there) treat digits entered on the num-pad and ones entered + regularly different. This may be because the BIOS USB keyboard + driver is used and that one may have bugs on some computers. If you + cannot open your device in pre-boot, try entering the digits over the + regular digit keys. + + + * 1.3 System specific warnings + + - Ubuntu as of 4/2011: It seems the installer offers to create LUKS + partitions in a way that several people mistook for an offer to + activate their existing LUKS partition. The installer gives no or an + inadequate warning and will destroy your old LUKS header, causing + permanent data loss. See also the section on Backup and Data + Recovery. + + This issue has been acknowledged by the Ubuntu dev team, see + here: http://launchpad.net/bugs/420080 + + Update 4/2013: I am still unsure whether this has been fixed by now, + best be careful. They also seem to have added even more LUKS killer + functionality to the Ubuntu installer. I can only strongly + recommended to not install Ubuntu on a system with existing LUKS + containers without complete backups. + + Update 11/2014: There seem to be other problems with existing LUKS + containers and Ubuntu as well, be extra careful when using LUKS + on Ubuntu in any way, but exactly as the Ubuntu installer does. + + + * 1.4 My LUKS-device is broken! Help! + + First: Do not panic! In many cases the data is still recoverable. + Do not do anything hasty! Steps: + + - Take some deep breaths. Maybe add some relaxing music. This may + sound funny, but I am completely serious. Often, critical damage is + done only after the initial problem. + + - Do not reboot. The keys may still be in the kernel if the device is + mapped. + + - Make sure others do not reboot the system. + + - Do not write to your disk without a clear understanding why this + will not make matters worse. Do a sector-level backup before any + writes. Often you do not need to write at all to get enough access + to make a backup of the data. + + - Relax some more. + + - Read section 6 of this FAQ. + + - Ask on the mailing-list if you need more help. + + + * 1.5 Who wrote this? + + Current FAQ maintainer is Arno Wagner . If you want + to send me encrypted email, my current PGP key is DSA key CB5D9718, + fingerprint 12D6 C03B 1B30 33BB 13CF B774 E35C 5FA1 CB5D 9718. + + Other contributors are listed at the end. If you want to contribute, + send your article, including a descriptive headline, to the + maintainer, or the dm-crypt mailing list with something like "FAQ + ..." in the subject. You can also send more raw information and have + me write the section. Please note that by contributing to this FAQ, + you accept the license described below. + + This work is under the "Attribution-Share Alike 3.0 Unported" + license, 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 license. + + Side note: I did text license research some time ago and I think this + license is best suited for the purpose at hand and creates the least + problems. + + + * 1.6 Where is the project website? + + There is the project website at + https://gitlab.com/cryptsetup/cryptsetup/ Please do not post + questions there, nobody will read them. Use the mailing-list + instead. + + + * 1.7 Is there a mailing-list? + + Instructions on how to subscribe to the mailing-list are at on the + project website. People are generally helpful and friendly on the + list. + + The question of how to unsubscribe from the list does crop up + sometimes. For this you need your list management URL, which is sent + to you initially and once at the start of each month. Go to the URL + mentioned in the email and select "unsubscribe". This page also + allows you to request a password reminder. + + Alternatively, you can send an Email to dm-crypt-request@saout.de + with just the word "help" in the subject or message body. Make sure + to send it from your list address. + + The mailing list archive is here: + https://marc.info/?l=dm-crypt + + + * 1.8 Unsubscribe from the mailing-list + + Send mail to dm-crypt-unsubscribe@saout.de from the subscribed + account. You will get an email with instructions. + + Basically, you just have to respond to it unmodified to get + unsubscribed. The listserver admin functions are not very fast. It + can take 15 minutes or longer for a reply to arrive (I suspect + greylisting is in use), so be patient. + + Also note that nobody on the list can unsubscribe you, sending + demands to be unsubscribed to the list just annoys people that are + entirely blameless for you being subscribed. + + If you are subscribed, a subscription confirmation email was sent to + your email account and it had to be answered before the subscription + went active. The confirmation emails from the listserver have + subjects like these (with other numbers): + + Subject: confirm 9964cf10..... + + and are sent from dm-crypt-request@saout.de. You should check whether + you have anything like it in your sent email folder. If you find + nothing and are sure you did not confirm, then you should look into a + possible compromise of your email account. + + +2. Setup + + * 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. + encrypted disk, partition or loop-file. + + 01) All data will be lost, if there is data on the target, make a + backup. + + 02) Make very sure you have the right target disk, partition or + loop-file. + + 03) If the target was in use previously, it is a good idea to wipe it + before creating the LUKS container in order to remove any trace of + old file systems and data. For example, some users have managed to + run e2fsck on a partition containing a LUKS container, possibly + because of residual ext2 superblocks from an earlier use. This can + do arbitrary damage up to complete and permanent loss of all data in + the LUKS container. + + To just quickly wipe file systems (old data may remain), use + + wipefs -a + + + To wipe file system and data, use something like + + cat /dev/zero > + + + 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: + + cat /dev/zero | wcs > + + + Be very sure you have the right target, all data will be lost! + + Note that automatic wiping is on the TODO list for cryptsetup, so at + some time in the future this will become unnecessary. + + Alternatively, plain dm-crypt can be used for a very fast wipe with + crypto-grade randomness, see Item 2.19 + + 04) Create the LUKS container: + + cryptsetup luksFormat + + + Just follow the on-screen instructions. + + Note: Passphrase iteration is determined by cryptsetup depending on + CPU power. On a slow device, this may be lower than you want. I + recently benchmarked this on a Raspberry Pi and it came out at about + 1/15 of the iteration count for a typical PC. If security is + paramount, you may want to increase the time spent in iteration, at + the cost of a slower unlock later. For the Raspberry Pi, using + + cryptsetup luksFormat -i 15000 + + gives you an iteration count and security level equal to an average + PC for passphrase iteration and master-key iteration. If in doubt, + check the iteration counts with + + cryptsetup luksDump + + and adjust the iteration count accordingly by creating the container + again with a different iteration time (the number after '-i' is the + iteration time in milliseconds) until your requirements are met. + + 05) Map the container. Here it will be mapped to /dev/mapper/c1: + + cryptsetup luksOpen c1 + + + 06) (Optionally) wipe the container (make sure you have the right + target!): + + cat /dev/zero > /dev/mapper/c1 + + + Note that this creates a small information leak, as an attacker can + determine whether a 512 byte block is zero if the attacker has access + to the encrypted container multiple times. Typically a competent + attacker that has access multiple times can install a passphrase + sniffer anyways, so this leakage is not very significant. For + getting a progress indicator, see step 03. + + Note that at some time in the future, cryptsetup will do this for + you, but currently it is a TODO list item. + + 07) Create a file system in the mapped container, for example an + ext3 file system (any other file system is possible): + + mke2fs -j /dev/mapper/c1 + + + 08) Mount your encrypted file system, here on /mnt: + + mount /dev/mapper/c1 /mnt + + + 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 particular, there are a number of mistakes that are easy + to make, but will compromise your security. + + + * 2.2 LUKS on partitions or raw disks? + + This is a complicated question, and made more so by the availability + of RAID and LVM. I will try to give some scenarios and discuss + advantages and disadvantages. Note that I say LUKS for simplicity, + but you can do all the things described with plain dm-crypt as well. + Also note that your specific scenario may be so special that most or + even all things I say below do not apply. + + Be aware that if you add LVM into the mix, things can get very + complicated. Same with RAID but less so. In particular, data + recovery can get exceedingly difficult. Only do so if you have a + really good reason and always remember KISS is what separates an + engineer from an amateur. Of course, if you really need the added + complexity, KISS is satisfied. But be very sure as there is a price + to pay for it. In engineering, complexity is always the enemy and + needs to be fought without mercy when encountered. + + Also consider using RAID instead of LVM, as at least with the old + superblock format 0.90, the RAID superblock is in the place (end of + disk) where the risk of it permanently damaging the LUKS header is + smallest and you can have your array assembled by the RAID controller + (i.e. the kernel), as it should be. Use partition type 0xfd for + that. I recommend staying away from superblock formats 1.0, 1.1 and + 1.2 unless you really need them. Be aware that you lose + autodetection with them and have to fall back to some user-space + script to do it. + + Scenarios: + + (1) Encrypted partition: Just make a partition to your liking, and + put LUKS on top of it and a filesystem into the LUKS container. This + gives you isolation of differently-tasked data areas, just as + ordinary partitioning does. You can have confidential data, + non-confidential data, data for some specific applications, + user-homes, root, etc. Advantages are simplicity as there is a 1:1 + mapping between partitions and filesystems, clear security + functionality and the ability to separate data into different, + independent (!) containers. + + Note that you cannot do this for encrypted root, that requires an + initrd. On the other hand, an initrd is about as vulnerable to a + competent attacker as a non-encrypted root, so there really is no + security advantage to doing it that way. An attacker that wants to + compromise your system will just compromise the initrd or the kernel + itself. The better way to deal with this is to make sure the root + partition does not store any critical data and move that to + additional encrypted partitions. If you really are concerned your + root partition may be sabotaged by somebody with physical access + (that would however strangely not, say, sabotage your BIOS, keyboard, + etc.), protect it in some other way. The PC is just not set-up for a + really secure boot-chain (whatever some people may claim). + + (2) Fully encrypted raw block device: For this, put LUKS on the raw + device (e.g. /dev/sdb) and put a filesystem into the LUKS container, + no partitioning whatsoever involved. This is very suitable for + things like external USB disks used for backups or offline + data-storage. + + (3) Encrypted RAID: Create your RAID from partitions and/or full + devices. Put LUKS on top of the RAID device, just if it were an + ordinary block device. Applications are just the same as above, but + you get redundancy. (Side note as many people seem to be unaware of + it: You can do RAID1 with an arbitrary number of components in + Linux.) See also Item 2.8. + + (4) Now, some people advocate doing the encryption below the RAID + layer. That has several serious problems. One is that suddenly + debugging RAID issues becomes much harder. You cannot do automatic + RAID assembly anymore. You need to keep the encryption keys for the + components in sync or manage them somehow. The only possible + advantage is that things may run a little faster as more CPUs do the + encryption, but if speed is a priority over security and simplicity, + you are doing this wrong anyways. A good way to mitigate a speed + issue is to get a CPU that does hardware AES. + + + * 2.3 How do I set up encrypted swap? + + As things that are confidential can end up in swap (keys, + passphrases, etc. are usually protected against being swapped to + disk, but other things may not be), it may be advisable to do + something about the issue. One option is to run without swap, which + generally works well in a desktop-context. It may cause problems in + a server-setting or under special circumstances. The solution to + that is to encrypt swap with a random key at boot-time. + + NOTE: This is for Debian, and should work for Debian-derived + distributions. For others you may have to write your own startup + script or use other mechanisms. + + 01) Add the swap partition to /etc/crypttab. A line like the + following should do it: + + swap /dev/ /dev/urandom swap,noearly + + + Warning: While Debian refuses to overwrite partitions with a + filesystem or RAID signature on it, if your disk IDs may change + (adding or removing disks, failure of disk during boot, etc.), you + may want to take additional precautions. Yes, this means that your + kernel device names like sda, sdb, ... can change between reboots! + This is not a concern if you have only one disk. One possibility is + to make sure the partition number is not present on additional disks + or also swap there. Another is to encapsulate the swap partition (by + making it a 1-disk RAID1 or by using LVM), so that it gets a + persistent identifier. Specifying it directly by UUID does not work, + unfortunately, as the UUID is part of the swap signature and that is + not visible from the outside due to the encryption and in addition + changes on each reboot with this setup. + + Note: Use /dev/random if you are paranoid or in a potential + low-entropy situation (embedded system, etc.). This may cause the + operation to take a long time during boot. If you are in a "no + entropy" situation, you cannot encrypt swap securely. In this + situation you should find some entropy, also because nothing else + using crypto will be secure, like ssh, ssl or GnuPG. + + Note: The "noearly" option makes sure things like LVM, RAID, etc. + are running. As swap is non-critical for boot, it is fine to start + it late. + + 02) Add the swap partition to /etc/fstab. A line like the following + should do it: + + /dev/mapper/swap none swap sw 0 0 + + + That is it. Reboot or start it manually to activate encrypted swap. + Manual start would look like this: + + /etc/init.d/crypdisks start + swapon /dev/mapper/swap + + + + * 2.4 What is the difference between "plain" and LUKS format? + + First, unless you happen to understand the cryptographic background + well, you should use LUKS. It does protect the user from a lot of + common mistakes. Plain dm-crypt is for experts. + + Plain format is just that: It has no metadata on disk, reads all + parameters from the commandline (or the defaults), derives a + master-key from the passphrase and then uses that to de-/encrypt the + sectors of the device, with a direct 1:1 mapping between encrypted + and decrypted sectors. + + Primary advantage is high resilience to damage, as one damaged + encrypted sector results in exactly one damaged decrypted sector. + Also, it is not readily apparent that there even is encrypted data on + the device, as an overwrite with crypto-grade randomness (e.g. from + /dev/urandom) looks exactly the same on disk. + + Side-note: That has limited value against the authorities. In + civilized countries, they cannot force you to give up a crypto-key + anyways. In quite a few countries around the world, they can force + you to give up the keys (using imprisonment or worse to pressure you, + sometimes without due process), and in the worst case, they only need + a nebulous "suspicion" about the presence of encrypted data. + Sometimes this applies to everybody, sometimes only when you are + suspected of having "illicit data" (definition subject to change) and + sometimes specifically when crossing a border. Note that this is + going on in countries like the US and the UK, to different degrees + and sometimes with courts restricting what the authorities can + actually demand. + + My advice is to either be ready to give up the keys or to not have + encrypted data when traveling to those countries, especially when + crossing the borders. The latter also means not having any + high-entropy (random) data areas on your disk, unless you can explain + them and demonstrate that explanation. Hence doing a zero-wipe of + all free space, including unused space, may be a good idea. + + Disadvantages are that you do not have all the nice features that the + LUKS metadata offers, like multiple passphrases that can be changed, + the cipher being stored in the metadata, anti-forensic properties + like key-slot diffusion and salts, etc.. + + LUKS format uses a metadata header and 8 key-slot areas that are + being placed at the beginning of the disk, see below under "What does + the LUKS on-disk format looks like?". The passphrases are used to + decrypt a single master key that is stored in the anti-forensic + stripes. + + Advantages are a higher usability, automatic configuration of + non-default crypto parameters, defenses against low-entropy + passphrases like salting and iterated PBKDF2 passphrase hashing, the + ability to change passphrases, and others. + + Disadvantages are that it is readily obvious there is encrypted data + on disk (but see side note above) and that damage to the header or + key-slots usually results in permanent data-loss. See below under + "6. Backup and Data Recovery" on how to reduce that risk. Also the + sector numbers get shifted by the length of the header and key-slots + and there is a loss of that size in capacity (1MB+4096B for defaults + and 2MB for the most commonly used non-default XTS mode). + + + * 2.5 Can I encrypt an already existing, non-empty partition to use LUKS? + + There is no converter, and it is not really needed. The way to do + this is to make a backup of the device in question, securely wipe the + device (as LUKS device initialization does not clear away old data), + do a luksFormat, optionally overwrite the encrypted device, create a + new filesystem and restore your backup on the now encrypted device. + Also refer to sections "Security Aspects" and "Backup and Data + Recovery". + + For backup, plain GNU tar works well and backs up anything likely + to be in a filesystem. + + + * 2.6 How do I use LUKS with a loop-device? + + This can be very handy for experiments. Setup is just the same as + with any block device. If you want, for example, to use a 100MiB + file as LUKS container, do something like this: + + head -c 100M /dev/zero > luksfile # create empty file + losetup /dev/loop0 luksfile # map luksfile to /dev/loop0 + cryptsetup luksFormat /dev/loop0 # create LUKS on loop device + + Afterwards just use /dev/loop0 as a you would use a LUKS partition. + To unmap the file when done, use "losetup -d /dev/loop0". + + + * 2.7 When I add a new key-slot to LUKS, it asks for a passphrase + but then complains about there not being a key-slot with that + passphrase? + + That is as intended. You are asked a passphrase of an existing + key-slot first, before you can enter the passphrase for the new + key-slot. Otherwise you could break the encryption by just adding a + new key-slot. This way, you have to know the passphrase of one of + the already configured key-slots in order to be able to configure a + new key-slot. + + + * 2.8 Encryption on top of RAID or the other way round? + + Unless you have special needs, place encryption between RAID and + filesystem, i.e. encryption on top of RAID. You can do it the other + way round, but you have to be aware that you then need to give the + passphrase for each individual disk and RAID autodetection will not + work anymore. Therefore it is better to encrypt the RAID device, + e.g. /dev/dm0 . + + This means that the typical layering looks like this: + + Filesystem <- top + | + Encryption + | + RAID + | + Raw partitions + | + Raw disks <- bottom + + The big advantage is that you can manage the RAID container just like + any RAID container, it does not care that what is in it is encrypted. + + + * 2.9 How do I read a dm-crypt key from file? + + Use the --key-file option, like this: + + cryptsetup create --key-file keyfile e1 /dev/loop0 + + This will read the binary key from file, i.e. no hashing or + transformation will be applied to the keyfile before its bits are + used as key. Extra bits (beyond the length of the key) at the end + are ignored. Note that if you read from STDIN, the data will still + be hashed, just as a key read interactively from the terminal. See + the man-page sections "NOTES ON PASSPHRASE PROCESSING..." for more + detail. + + * 2.10 How do I read a LUKS slot key from file? + + What you really do here is to read a passphrase from file, just as + you would with manual entry of a passphrase for a key-slot. You can + add a new passphrase to a free key-slot, set the passphrase of an + specific key-slot or put an already configured passphrase into a + file. In the last case make sure no trailing newline (0x0a) is + contained in the key file, or the passphrase will not work because + the whole file is used as input. + + To add a new passphrase to a free key slot from file, use something + like this: + + cryptsetup luksAddKey /dev/loop0 keyfile + + + To add a new passphrase to a specific key-slot, use something + like this: + + cryptsetup luksAddKey --key-slot 7 /dev/loop0 keyfile + + + To supply a key from file to any LUKS command, use the --key-file + option, e.g. like this: + + cryptsetup luksOpen --key-file keyfile /dev/loop0 e1 + + + + * 2.11 How do I read the LUKS master key from file? + + The question you should ask yourself first is why you would want to + do this. The only legitimate reason I can think of is if you want to + have two LUKS devices with the same master key. Even then, I think + it would be preferable to just use key-slots with the same + passphrase, or to use plain dm-crypt instead. If you really have a + good reason, please tell me. If I am convinced, I will add how to do + this here. + + + * 2.12 What are the security requirements for a key read from file? + + A file-stored key or passphrase has the same security requirements as + one entered interactively, however you can use random bytes and + thereby use bytes you cannot type on the keyboard. You can use any + file you like as key file, for example a plain text file with a human + readable passphrase. To generate a file with random bytes, use + something like this: + + head -c 256 /dev/random > keyfile + + + + * 2.13 If I map a journaled file system using dm-crypt/LUKS, does + it still provide its usual transactional guarantees? + + Yes, it does, unless a very old kernel is used. The required flags + come from the filesystem layer and are processed and passed onwards + by dm-crypt. A bit more information on the process by which + transactional guarantees are implemented can be found here: + + http://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 their buffers. Some other things can go wrong as well. The + filesystem developers are aware of these problems and typically can + make it work anyways. That said, dm-crypt/LUKS will not make things + worse. + + One specific problem you can run into though is that you can get + short freezes and other slowdowns due to the encryption layer. + Encryption takes time and forced flushes will block for that time. + For example, I did run into frequent small freezes (1-2 sec) when + putting a vmware image on ext3 over dm-crypt. When I went back to + ext2, the problem went away. This seems to have gotten better with + kernel 2.6.36 and the reworking of filesystem flush locking mechanism + (less blocking of CPU activity during flushes). It should improve + further and eventually the problem should go away. + + + * 2.14 Can I use LUKS or cryptsetup with a more secure (external) + medium for key storage, e.g. TPM or a smartcard? + + Yes, see the answers on using a file-supplied key. You do have to + write the glue-logic yourself though. Basically you can have + cryptsetup read 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 partition? + + Yes, you can, as neither dm-crypt nor LUKS stores partition size. + Whether you should is a different question. Personally I recommend + backup, recreation of the encrypted partition with new size, + recreation of the filesystem and restore. This gets around the + tricky business of resizing the filesystem. Resizing a dm-crypt or + LUKS container does not resize the filesystem in it. The backup is + really non-optional here, as a lot can go wrong, resulting in partial + or complete data loss. Using something like gparted to resize an + encrypted partition is slow, but typically works. This will not + change the size of the filesystem hidden under the encryption though. + + You also need to be aware of size-based limitations. The one + currently relevant is that aes-xts-plain should not be used for + encrypted container sizes larger than 2TiB. Use aes-xts-plain64 for + that. + + + * 2.16 How do I Benchmark the Ciphers, Hashes and Modes? + + Since version 1.60 cryptsetup supports the "benchmark" command. + Simply run as root: + + cryptsetup benchmark + + It will output first iterations/second for the key-derivation + function PBKDF2 parameterized with different hash-functions, and then + the raw encryption speed of ciphers with different modes and + key-sizes. You can get more than the default benchmarks, see the + man-page for the relevant parameters. Note that XTS mode takes two + keys, hence the listed key sizes are double that for other modes and + half of it is the cipher key, the other half is the XTS key. + + + * 2.17 How do I Verify I have an Authentic cryptsetup Source Package? + + Current maintainer is Milan Broz and he signs the release packages + with his PGP key. The key he currently uses is the "RSA key ID + D93E98FC", fingerprint 2A29 1824 3FDE 4664 8D06 86F9 D9B0 577B D93E + 98FC. While I have every confidence this really is his key and that + he is who he claims to be, don't depend on it if your life is at + stake. For that matter, if your life is at stake, don't depend on me + being who I claim to be either. + + That said, as cryptsetup is under good version control, a malicious + change should be noticed sooner or later, but it may take a while. + Also, the attacker model makes compromising the sources in a + non-obvious way pretty hard. Sure, you could put the master-key + somewhere on disk, but that is rather obvious as soon as somebody + looks as there would be data in an empty LUKS container in a place it + should not be. Doing this in a more nefarious way, for example + hiding the master-key in the salts, would need a look at the sources + to be discovered, but I think that somebody would find that sooner or + later as well. + + That said, this discussion is really a lot more complicated and + longer as an FAQ can sustain. If in doubt, ask on the mailing list. + + + * 2.18 Is there a concern with 4k Sectors? + + Not from dm-crypt itself. Encryption will be done in 512B blocks, but + if the partition and filesystem are aligned correctly and the + filesystem uses multiples of 4kiB as block size, the dm-crypt layer + will just process 8 x 512B = 4096B at a time with negligible + overhead. LUKS does place data at an offset, which is 2MiB per + default and will not break alignment. See also Item 6.12 of this FAQ + for more details. Note that if your partition or filesystem is + misaligned, dm-crypt can make the effect worse though. + + + * 2.19 How can I wipe a device with crypto-grade randomness? + + The conventional recommendation if you want to not just do a + zero-wipe is to use something like + + cat /dev/urandom > + + That is very slow and painful at 10-20MB/s on a fast computer. + Using cryptsetup and a plain dm-crypt device with a random key, + it is much faster and gives you the same level of security. The + defaults are quite enough. + + For device set-up, do the following: + + cryptsetup open --type plain -d /dev/urandom /dev/ to_be_wiped + + This maps the container as plain under /dev/mapper/to_be_wiped with a + random password. For the actual wipe you have several options. + Simple wipe without progress-indicator: + + cat /dev/zero > /dev/mapper/to_be_wiped + + Progress-indicator by dd_rescue: + + 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 ): + + cat /dev/zero | wcs > /dev/mapper/to_be_wiped + + + Remove the mapping at the end and you are done. + + * 2.20 How to I wipe only the LUKS header? + + This is not the emergency wipe procedure. That is in Item 5.4. This procedure + is intended to be used when the data should stay intact, e.g. when you change + your LUKS container to use a detached header and want to remove the old one. + + Most safe way is this (backup is still a good idea): + + 01) Determine header size in 512 Byte sectors with "luksDump": + + cryptsetup luksDump + +-> ... + Payload offset: + ... + + 02) Take the result number and write number * 512 zeros to the start of the + device, e.g. like this: + + dd bs=512 count= if=/dev/zero of= + + That is it. + + +3. Common Problems + + + * 3.1 My dm-crypt/LUKS mapping does not work! What general steps + are there to investigate the problem? + + If you get a specific error message, investigate what it claims + first. If not, you may want to check the following things. + + - Check that "/dev", including "/dev/mapper/control" is there. If it + is missing, you may have a problem with the "/dev" tree itself or you + may have broken udev rules. + + - Check that you have the device mapper and the crypt target in your + kernel. The output of "dmsetup targets" should list a "crypt" + target. If it is not there or the command fails, add device mapper + and crypt-target to the kernel. + + - Check that the hash-functions and ciphers you want to use are in + the kernel. The output of "cat /proc/crypto" needs to list them. + + + * 3.2 My dm-crypt mapping suddenly stopped when upgrading cryptsetup. + + The default cipher, hash or mode may have changed (the mode changed + from 1.0.x to 1.1.x). See under "Issues With Specific Versions of + cryptsetup". + + + * 3.3 When I call cryptsetup from cron/CGI, I get errors about + unknown features? + + If you get errors about unknown parameters or the like that are not + present when cryptsetup is called from the shell, make sure you have + no older version of cryptsetup on your system that then gets called + by cron/CGI. For example some distributions install cryptsetup into + /usr/sbin, while a manual install could go to /usr/local/sbin. As a + debugging aid, call "cryptsetup --version" from cron/CGI or the + non-shell mechanism to be sure the right version gets called. + + + * 3.4 Unlocking a LUKS device takes very long. Why? + + The iteration time for a key-slot (see Section 5 for an explanation + what iteration does) is calculated when setting a passphrase. By + default it is 1 second on the machine where the passphrase is set. + If you set a passphrase on a fast machine and then unlock it on a + slow machine, the unlocking time can be much longer. Also take into + account that up to 8 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 an iteration count adjusted to 1 second on + the slow machine. Use luksKeyAdd and then luksKillSlot or + luksRemoveKey. + + However, this operation will not change volume key iteration count + (MK iterations in output of "cryptsetup luksDump"). In order to + change that, you will have to backup the data in the LUKS container + (i.e. your encrypted data), luksFormat on the slow machine and + restore the data. Note that in the original LUKS specification this + value was fixed to 10, but it is now derived from the PBKDF2 + benchmark as well and set to iterations in 0.125 sec or 1000, + whichever is larger. Also note that MK iterations are not very + security relevant. But as each key-slot already takes 1 second, + spending the additional 0.125 seconds really does not matter. + + * 3.5 "blkid" sees a LUKS UUID and an ext2/swap UUID on the same + device. What is wrong? + + Some old versions of cryptsetup have a bug where the header does not + get completely wiped during LUKS format and an older ext2/swap + signature remains on the device. This confuses blkid. + + Fix: Wipe the unused header areas by doing a backup and restore of + the header with cryptsetup 1.1.x: + + cryptsetup luksHeaderBackup --header-backup-file + cryptsetup luksHeaderRestore --header-backup-file + + + + * 3.6 cryptsetup segfaults on Gentoo amd64 hardened ... + + There seems to be some interference between the hardening and and the + way cryptsetup benchmarks PBKDF2. The solution to this is currently + not quite clear for an encrypted root filesystem. For other uses, + you can apparently specify USE="dynamic" as compile flag, see + http://bugs.gentoo.org/show_bug.cgi?id=283470 + + +4. Troubleshooting + + + * 4.1 I get the error "LUKS keyslot x is invalid." What does that mean? + + This means that the given keyslot has an offset that points outside + the valid keyslot area. Typically, the reason is a corrupted LUKS + header because something was written to the start of the device the + LUKS container is on. Refer to Section "Backup and Data Recovery" + and ask on the mailing list if you have trouble diagnosing and (if + still possible) repairing this. + + + * 4.2 I cannot unlock my LUKS container! What could be the problem? + + First, make sure you have a correct passphrase. Then make sure you + have the correct key-map and correct keyboard. And then make sure + you have the correct character set and encoding, see also "PASSPHRASE + CHARACTER SET" under Section 1.2. + + If you are sure you are entering the passphrase right, there is the + possibility that the respective key-slot has been damaged. There is + no way to recover a damaged key-slot, except from a header backup + (see Section 6). For security reasons, there is also no checksum in + the key-slots that could tell you whether a key-slot has been + damaged. The only checksum present allows recognition of a correct + passphrase, but that only works if the passphrase is correct and the + respective key-slot 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 + automates this 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 a libcryptsetup from cryptsetup 1.6.0 or + later (which means libcryptsetup.so.4.5.0 or later). If the tool + complains about missing functions in libcryptsetup, you likely have + an earlier version from your distribution still installed. You can + either point the symbolic link(s) from libcryptsetup.so.4 to the new + version manually, or you can uninstall the distribution version of + cryptsetup and re-install that from cryptsetup >= 1.6.0 again to fix + this. + + + * 4.3 Can a bad RAM module cause problems? + + LUKS and dm-crypt can give the RAM quite a workout, especially when + combined with software RAID. In particular the combination RAID5 + + LUKS + XFS seems to uncover RAM problems that never caused obvious + problems before. Symptoms vary, but often the problem manifest + itself when copying large amounts of data, typically several times + larger than your main memory. + + Side note: One thing you should always do on large data + copy/movements is to run a verify, for example with the "-d" option + of "tar" or by doing a set of MD5 checksums on the source or target + with + + find . -type f -exec md5sum \{\} \; > checksum-file + + and then a "md5sum -c checksum-file" on the other side. If you get + mismatches here, RAM is the primary suspect. A lesser suspect is an + overclocked CPU. I have found countless hardware problems in verify + runs after copying or making backups. Bit errors are much more + common than most people think. + + Some RAM issues are even worse and corrupt structures in one of the + layers. This typically results in lockups, CPU state dumps in the + system logs, kernel panic or other things. It is quite possible to + have the problem with an encrypted device, but not with an otherwise + the same unencrypted device. The reason for that is that encryption + has an error amplification property: You flip one bit in an encrypted + data block, and the decrypted version has half of its bits flipped. + This is an important security property for modern ciphers. With the + usual modes in cryptsetup (CBC, ESSIV, XTS), you get up to a + completely changed 512 byte block per bit error. A corrupt block + causes a lot more havoc than the occasionally flipped single bit and + can result in various obscure errors. + + Note that a verify run on copying between encrypted or unencrypted + devices will reliably detect corruption, even when the copying itself + did not report any problems. If you find defect RAM, assume all + backups and copied data to be suspect, unless you did a verify. + + + * 4.4 How do I test RAM? + + First you should know that overclocking often makes memory problems + worse. So if you overclock (which I strongly recommend against in a + system holding data that has some worth), run the tests with the + overclocking active. + + There are two good options. One is Memtest86+ and the other is + "memtester" by Charles Cazabon. Memtest86+ requires a reboot and + then takes over the machine, while memtester runs from a root-shell. + Both use different testing methods and I have found problems fast + with each one that the other needed long to find. I recommend + running the following procedure until the first error is found: + + - Run Memtest86+ for one cycle + + - Run memtester for one cycle (shut down as many other applications + as possible) + + - Run Memtest86+ for 24h or more + + - Run memtester for 24h or more + + If all that does not produce error messages, your RAM may be sound, + but I have had one weak bit that Memtest86+ needed around 60 hours to + find. If you can reproduce the original problem reliably, a good + additional test may be to remove half of the RAM (if you have more + than one module) and try whether the problem is still there and if + so, try with the other half. If you just have one module, get a + different one and try with that. If you do overclocking, reduce the + settings to the most conservative ones available and try with that. + + + * 4.5 Is there a risk using debugging tools like strace? + + There most definitely is. An dump from strace and friends can contain + all data entered, including the full passphrase. Example with strace + and passphrase "test": + + > strace cryptsetup luksOpen /dev/sda10 c1 + ... + read(6, "test\n", 512) = 5 + ... + + Depending on different factors and the tool used, the passphrase may + also be encoded and not plainly visible. Hence it is never a good + idea to give such a trace from a live container to anybody. Recreate + the problem with a test container or set a temporary passphrase like + "test" and use that for the trace generation. Item 2.6 explains how + to create a loop-file backed LUKS container that may come in handy + for this purpose. + + See also Item 6.10 for another set of data you should not give to + others. + + +5. Security Aspects + + + * 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 recommendation is at the end of this item. + + First, passphrase length is not really the right measure, passphrase + entropy is. For example, a random lowercase letter (a-z) gives you + 4.7 bit of entropy, one element of a-z0-9 gives you 5.2 bits of + entropy, an element of a-zA-Z0-9 gives you 5.9 bits and + a-zA-Z0-9!@#$%\^&:-+ gives you 6.2 bits. On the other hand, a random + English word only gives you 0.6...1.3 bits of entropy per character. + Using sentences that make sense gives lower entropy, series of random + words gives higher entropy. Do not use sentences that can be tied to + you or found on your computer. This type of attack is done routinely + today. + + That said, it does not matter too much what scheme you use, but it + does matter how much entropy your passphrase contains, because an + attacker has to try on average + + 1/2 * 2^(bits of entropy in passphrase) + + different passphrases to guess correctly. + + Historically, estimations tended to use computing time estimates, but + more modern approaches try to estimate cost of guessing a passphrase. + + As an example, I will try to get an estimate from the numbers in + http://it.slashdot.org/story/12/12/05/0623215/new-25-gpu-monster-devours-strong-passwords-in-minutes + More references can be found a 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 + vastly higher cost than estimated here. + + LUKS uses SHA1 for hashing per default. The claim in the reference is + 63 billion tries/second for SHA1. We will leave aside the check + whether a try actually decrypts a key-slot. Now, the machine has 25 + GPUs, which I will estimate at an overall lifetime cost of USD/EUR + 1000 each, and an useful lifetime of 2 years. (This is on the low + side.) Disregarding downtime, the machine can then break + + N = 63*10^9 * 3600 * 24 * 365 * 2 ~ 4*10^18 + + passphrases for EUR/USD 25k. That is one 62 bit passphrase hashed + once with SHA1 for EUR/USD 25k. Note that as this can be + parallelized, it can be done faster than 2 years with several of + these machines. + + For plain dm-crypt (no hash iteration) this is it. This gives (with + SHA1, plain dm-crypt default is ripemd160 which seems to be slightly + slower than SHA1): + + Passphrase entropy Cost to break + 60 bit EUR/USD 6k + 65 bit EUR/USD 200K + 70 bit EUR/USD 6M + 75 bit EUR/USD 200M + 80 bit EUR/USD 6B + 85 bit EUR/USD 200B + ... ... + + + For LUKS, you have to take into account hash iteration in PBKDF2. + For a current CPU, there are about 100k iterations (as can be queried + with ''cryptsetup luksDump''. + + The table above then becomes: + + Passphrase entropy Cost to break + 50 bit EUR/USD 600k + 55 bit EUR/USD 20M + 60 bit EUR/USD 600M + 65 bit EUR/USD 20B + 70 bit EUR/USD 600B + 75 bit EUR/USD 20T + ... ... + + + Recommendation: + + To get reasonable security for the next 10 years, it is a good idea + to overestimate by a factor of at least 1000. + + Then there is the question of how much the attacker is willing to + spend. That is up to your own security evaluation. For general use, + I will assume the attacker is willing to spend up to 1 million + EUR/USD. Then we get the following recommendations: + + Plain dm-crypt: Use > 80 bit. That is e.g. 17 random chars from a-z + or a random English sentence of > 135 characters length. + + LUKS: Use > 65 bit. That is e.g. 14 random chars from a-z or a random + English sentence of > 108 characters length. + + If paranoid, add at least 20 bit. That is roughly four additional + characters for random passphrases and roughly 32 characters for a + random English sentence. + + + * 5.2 Is LUKS insecure? Everybody can see I have encrypted data! + + In practice it does not really matter. In most civilized countries + you can just refuse to hand over the keys, no harm done. In some + countries they can force you to hand over the keys, if they suspect + encryption. However the suspicion is enough, they do not have to + prove anything. This is for practical reasons, as even the presence + of a header (like the LUKS header) is not enough to prove that you + have any keys. It might have been an experiment, for example. Or it + was used as encrypted swap with a key from /dev/random. So they make + you prove you do not have encrypted data. Of course that is just as + impossible as the other way round. + + This means that if you have a large set of random-looking data, they + can 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 luck. Anybody could claim that. + + Still, if you are concerned about the LUKS header, use plain dm-crypt + with a good passphrase. See also Section 2, "What is the difference + between "plain" and LUKS format?" + + + * 5.3 Should I initialize (overwrite) a new LUKS/dm-crypt partition? + + If you just create a filesystem on it, most of the old data will + still be there. If the old data is sensitive, you should overwrite + it before encrypting. In any case, not initializing will leave the + old data there until the specific sector gets written. That may + enable an attacker to determine how much and where on the partition + data was written. If you think this is a risk, you can prevent this + by overwriting the encrypted device (here assumed to be named "e1") + with zeros like this: + + dd_rescue -w /dev/zero /dev/mapper/e1 + + or alternatively with one of the following more standard commands: + + cat /dev/zero > /dev/mapper/e1 + dd if=/dev/zero of=/dev/mapper/e1 + + + + * 5.4 How do I securely erase a LUKS (or other) partition? + + For LUKS, if you are in a desperate hurry, overwrite the LUKS header + and key-slot area. This means overwriting the first (keyslots x + stripes x keysize) + offset bytes. For the default parameters, this + is the 1'052'672 bytes, i.e. 1MiB + 4096 of the LUKS partition. For + 512 bit key length (e.g. for aes-xts-plain with 512 bit key) this is + 2MiB. (The different offset stems from differences in the sector + alignment of the key-slots.) If in doubt, just be generous and + overwrite the first 10MB or so, it will likely still be fast enough. + A single overwrite with zeros should be enough. If you anticipate + being in a desperate hurry, prepare the command beforehand. Example + with /dev/sde1 as the LUKS partition and default parameters: + + head -c 1052672 /dev/zero > /dev/sde1; sync + + A LUKS header backup or full backup will still grant access to most + or all data, so make sure that an attacker does not have access to + backups or destroy them as well. + + If you have time, overwrite the whole LUKS partition with a single + pass of zeros. This is enough for current HDDs. For SSDs or FLASH + (USB sticks) you may want to overwrite the whole drive several times + to be sure data is not retained by wear leveling. This is possibly + still insecure as SSD technology is not fully understood in this + regard. Still, due to the anti-forensic properties of the LUKS + key-slots, a single overwrite of an SSD or FLASH drive 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 + + Keep in mind to also erase all backups. + + Example for a zero-overwrite erase of partition sde1 done with + dd_rescue: + + dd_rescue -w /dev/zero /dev/sde1 + + + + * 5.5 How do I securely erase a backup of a LUKS partition or header? + + That depends on the medium it is stored on. For HDD and SSD, use + overwrite with zeros. For an SSD or FLASH drive (USB stick), you may + want to overwrite the complete SSD several times and use physical + destruction in addition, see last item. For re-writable CD/DVD, a + single overwrite should also be enough, due to the anti-forensic + properties of the LUKS keyslots. For write-once media, use physical + destruction. For low security requirements, just cut the CD/DVD into + several parts. For high security needs, shred or burn the medium. + If your backup is on magnetic tape, I advise physical destruction by + 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 at all during + overwrites. + + + * 5.6 What about backup? Does it compromise security? + + That depends. See item 6.7. + + + * 5.7 Why is all my data permanently gone if I overwrite the LUKS header? + + 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 writing to the raw partition. + + The LUKS header contains a 256 bit "salt" per key-slot and without + that no decryption is possible. While the salts are not secret, they + are key-grade material and cannot be reconstructed. This is a + cryptographically strong "cannot". From observations on the + cryptsetup mailing-list, people typically go though the usual stages + of grief (Denial, Anger, Bargaining, Depression, Acceptance) when + this happens to them. Observed times vary between 1 day and 2 weeks + to complete the cycle. Seeking help on the mailing-list is fine. + Even if we usually cannot help with getting back your data, most + people found the feedback comforting. + + If your header does not contain an intact key-slot salt, best go + directly to the last stage ("Acceptance") and think about what to do + now. There is one exception that I know of: If your LUKS container + is still open, then it may be possible to extract the master key from + the running system. See Item "How do I recover the master key from a + mapped LUKS container?" in Section "Backup and Data Recovery". + + + * 5.8 What is a "salt"? + + A salt is a random key-grade value added to the passphrase before it + is processed. It is not kept secret. The reason for using salts is + as follows: If an attacker wants to crack the password for a single + LUKS container, then every possible passphrase has to be tried. + Typically an attacker will not try every binary value, but will try + words and sentences from a dictionary. + + If an attacker wants to attack several LUKS containers with the same + dictionary, then a different approach makes sense: Compute the + resulting slot-key for each dictionary element and store it on disk. + Then the test for each entry is just the slow unlocking with the slot + key (say 0.00001 sec) instead of calculating the slot-key first (1 + sec). For a single attack, this does not help. But if you have more + than one container to attack, this helps tremendously, also because + you can prepare your table before you even have the container to + attack! The calculation is also very simple to parallelize. You + could, for example, use the night-time unused CPU power of your + desktop PCs for this. + + This is where the salt comes in. If the salt is combined with the + passphrase (in the simplest form, just appended to it), you suddenly + need a separate table for each salt value. With a reasonably-sized + salt value (256 bit, e.g.) this is quite infeasible. + + + * 5.9 Is LUKS secure with a low-entropy (bad) passphrase? + + Note: You should only use the 94 printable characters from 7 bit + ASCII code to prevent your passphrase from failing when the character + encoding changes, e.g. because of a system upgrade, see also the + note at the very start of this FAQ under "WARNINGS". + + This needs a bit of theory. The quality of your passphrase is + directly related to its entropy (information theoretic, not + thermodynamic). The entropy says how many bits of "uncertainty" or + "randomness" are in you passphrase. In other words, that is how + difficult guessing the passphrase is. + + Example: A random English sentence has about 1 bit of entropy per + character. A random lowercase (or uppercase) character has about 4.7 + bit of entropy. + + Now, if n is the number of bits of entropy in your passphrase and t + is the time it takes to process a passphrase in order to open the + LUKS container, then an attacker has to spend at maximum + + attack_time_max = 2^n * t + + time for a successful attack and on average half that. There is no + way getting around that relationship. However, there is one thing + that does help, namely increasing t, the time it takes to use a + passphrase, see next FAQ item. + + Still, if you want good security, a high-entropy passphrase is the + only option. For example, a low-entropy passphrase can never be + considered secure against a TLA-level (Three Letter Agency level, + i.e. government-level) attacker, no matter what tricks are used in + the key-derivation function. Use at least 64 bits for secret stuff. + That is 64 characters of English text (but only if randomly chosen) + or a 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 to 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 and is entirely feasible. To put that into perspective, + using a number of Amazon EC2 High-CPU Extra Large instances (each + gives about 8 real cores), this test costs currently about 50USD/EUR, + but can be made to run arbitrarily fast. + + On the other hand, choosing 1.5 lines from, say, the Wheel of Time + is in itself not more secure, but the book selection adds quite + a bit of entropy. (Now that I have mentioned it here, don't use + tWoT either!) If you add 2 or 3 typos or switch some words around, + then this is good passphrase material. + + + * 5.10 What is "iteration count" and why is decreasing it a bad idea? + + Iteration count is the number of PBKDF2 iterations a passphrase is + put through before it is used to unlock a key-slot. Iterations are + done with the explicit purpose to increase the time that it takes to + unlock a key-slot. This provides some protection against use of + low-entropy passphrases. + + The idea is that an attacker has to try all possible passphrases. + Even if the attacker knows the passphrase is low-entropy (see last + item), it is possible to make each individual try take longer. The + way to do this is to repeatedly hash the passphrase for a certain + time. The attacker then has to spend the same time (given the same + computing power) as the user per try. With LUKS, the default is 1 + second of PBKDF2 hashing. + + Example 1: Lets assume we have a really bad passphrase (e.g. a + girlfriends name) with 10 bits of entropy. With the same CPU, an + attacker would need to spend around 500 seconds on average to break + that passphrase. Without iteration, it would be more like 0.0001 + seconds on a modern CPU. + + Example 2: The user did a bit better and has 32 chars of English + text. That would be about 32 bits of entropy. With 1 second + iteration, that means an attacker on the same CPU needs around 136 + years. That is pretty impressive for such a weak passphrase. + Without the iterations, it would be more like 50 days on a modern + CPU, and possibly far less. + + In addition, the attacker can both parallelize and use special + hardware like GPUs or FPGAs to speed up the attack. The attack can + also happen quite some time after the luksFormat operation and CPUs + can have become faster and cheaper. For that reason you want a bit + of extra security. Anyways, in Example 1 your are screwed. In + example 2, not necessarily. Even if the attack is faster, it still + has a certain cost associated with it, say 10000 EUR/USD with + iteration and 1 EUR/USD without iteration. The first can be + prohibitively expensive, while the second is something you try even + without solid proof that the decryption will yield something useful. + + The numbers above are mostly made up, but show the idea. Of course + the best thing is to have a high-entropy passphrase. + + Would a 100 sec iteration time be even better? Yes and no. + Cryptographically it would be a lot better, namely 100 times better. + However, usability is a very important factor for security technology + and one that gets overlooked surprisingly often. For LUKS, if you + have to wait 2 minutes to unlock the LUKS container, most people will + not bother and use less secure storage instead. It is better to have + less protection against low-entropy passphrases and people actually + use LUKS, than having them do without encryption altogether. + + Now, what about decreasing the iteration time? This is generally a + very bad idea, unless you know and can enforce that the users only + use high-entropy passphrases. If you decrease the iteration time + without ensuring that, then you put your users at increased risk, and + considering how rarely LUKS containers are unlocked in a typical + work-flow, you do so without a good reason. Don't do it. The + iteration time is already low enough that users with entropy low + passphrases are vulnerable. Lowering it even further increases this + danger significantly. + + + * 5.11 Some people say PBKDF2 is insecure? + + There is some discussion that a hash-function should have a "large + memory" property, i.e. that it should require a lot of memory to be + computed. This serves to prevent attacks using special programmable + circuits, like FPGAs, and attacks using graphics cards. PBKDF2 does + not need a lot of memory and is vulnerable to these attacks. + However, the publication usually referred in these discussions is not + very convincing in proving that the presented hash really is "large + memory" (that may change, email the FAQ maintainer when it does) and + it is of limited usefulness anyways. Attackers that use clusters of + normal PCs will not be affected at all by a "large memory" property. + For example the US Secret Service is known to use the off-hour time + of all the office PCs of the Treasury for password breaking. The + Treasury has about 110'000 employees. Assuming every one has an + office PC, that is significant computing power, all of it with plenty + of memory for computing "large memory" hashes. Bot-net operators + also have all the memory they want. The only protection against a + resourceful attacker is a high-entropy passphrase, see items 5.9 and + 5.10. + + + * 5.12 What about iteration count with plain dm-crypt? + + Simple: There is none. There is also no salting. If you use plain + dm-crypt, the only way to be secure is to use a high entropy + passphrase. If in doubt, use LUKS instead. + + + * 5.13 Is LUKS with default parameters less secure on a slow CPU? + + Unfortunately, yes. However the only aspect affected is the + protection for low-entropy passphrase or master-key. All other + security aspects are independent of CPU speed. + + The master key is less critical, as you really have to work at it to + give it low entropy. One possibility is to supply the master key + yourself. If that key is low-entropy, then you get what you deserve. + The other known possibility is to use /dev/urandom for key generation + in an entropy-starved situation (e.g. automatic installation on an + embedded device without network and other entropy sources). + + For the passphrase, don't use a low-entropy passphrase. If your + passphrase is good, then a slow CPU will not matter. If you insist + on a low-entropy passphrase on a slow CPU, use something like + "--iter-time=10000" or higher and wait a long time on each LUKS + unlock and pray that the attacker does not find out in which way + exactly your passphrase is low entropy. This also applies to + low-entropy passphrases on fast CPUs. Technology can do only so much + to compensate for problems in front of the keyboard. + + Also note that power-saving modes will make your CPU slower. This + will reduce iteration count on LUKS container creation. It will keep + unlock times at the expected values though at this CPU speed. + + + * 5.14 Why was the default aes-cbc-plain replaced with aes-cbc-essiv? + + Note: This item applies both to plain dm-crypt and to LUKS + + The problem is that cbc-plain has a fingerprint vulnerability, where + a specially crafted file placed into the crypto-container can be + recognized from the outside. The issue here is that for cbc-plain + the initialization vector (IV) is the sector number. The IV gets + XORed to the first data chunk of the sector to be encrypted. If you + make sure that the first data block to be stored in a sector contains + the sector number as well, the first data block to be encrypted is + all zeros and always encrypted to the same ciphertext. This also + works if the first data chunk just has a constant XOR with the sector + number. By having several shifted patterns you can take care of the + case of a non-power-of-two start sector number of the file. + + This mechanism allows you to create a pattern of sectors that have + the same first ciphertext block and signal one bit per sector to the + outside, allowing you to e.g. mark media files that way for + recognition without decryption. For large files this is a practical + attack. For small ones, you do not have enough blocks to signal and + take care of different file starting offsets. + + In order to prevent this attack, the default was changed to + cbc-essiv. ESSIV uses a keyed hash of the sector number, with the + encryption key as key. This makes the IV unpredictable without + knowing the encryption key and the watermarking attack fails. + + + * 5.15 Are there any problems with "plain" IV? What is "plain64"? + + First, "plain" and "plain64" are both not secure to use with CBC, + see previous FAQ item. + + However there are modes, like XTS, that are secure with "plain" IV. + The next limit is that "plain" is 64 bit, with the upper 32 bit set + to zero. This means that on volumes larger than 2TiB, the IV + repeats, creating a vulnerability that potentially leaks some data. + To avoid this, use "plain64", which uses the full sector number up to + 64 bit. Note that "plain64" requires a kernel 2.6.33 or more recent. + Also note that "plain64" is backwards compatible for volume sizes of + maximum size 2TiB, but not for those > 2TiB. Finally, "plain64" does + not cause any performance penalty compared to "plain". + + + * 5.16 What about XTS mode? + + XTS mode is potentially even more secure than cbc-essiv (but only if + cbc-essiv is insecure in your scenario). It is a NIST standard and + used, e.g. in Truecrypt. From version 1.6.0 of cryptsetup onwards, + aes-xts-plain64 is the default for LUKS. If you want to use it with + a cryptsetup before version 1.6.0 or with plain dm-crypt, you have to + specify it manually as "aes-xts-plain", i.e. + + cryptsetup -c aes-xts-plain luksFormat + + For volumes >2TiB and kernels >= 2.6.33 use "plain64" (see FAQ item + on "plain" and "plain64"): + + 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. + + + * 5.17 Is LUKS FIPS-140-2 certified? + + No. But that is more a problem of FIPS-140-2 than of LUKS. From a + technical point-of-view, LUKS with the right parameters would be + FIPS-140-2 compliant, but in order to make it certified, somebody has + to pay real money for that. And then, whenever cryptsetup is changed + or extended, the certification lapses and has to be obtained again. + + From the aspect of actual security, LUKS with default parameters + should be as good as most things that are FIPS-140-2 certified, + although you may want to make sure to use /dev/random (by specifying + --use-random on luksFormat) as randomness source for the master key + to avoid being potentially insecure in an entropy-starved situation. + + + * 5.18 What about Plausible Deniability? + + First let me attempt a definition for the case of encrypted + filesystems: Plausible deniability is when you store data + inside an encrypted container and it is not possible to prove it is + there without having a special passphrase. And at the same time + it must be "plausible" that there actually is no hidden data there. + + As a simple entropy-analysis will show that here may be data there, + the second part is what makes it tricky. + + There seem to be a lot of misunderstandings what that + means, so let me make clear that this refers to the situation where + the attackers can prove that there is data that may be random or + may be part of a plausible-deniability scheme, they just cannot + prove which one it is. Hence a plausible-deniability + scheme must hold up when the attackers know there is + something potentially fishy. If you just hide data and rely on + it not being found, that is just simple deniability, not "plausible" + deniability and I am not talking about that in the following. + Simple deniability against a low-competence attacker may + be as simple as renaming a file or putting data into an unused + part of a disk. Simple deniability against a high-skill attacker + with time to invest is usually pointless though unless you go + for advanced steganographic techniques, which have their own + drawbacks, such as low data capacity. + + Now, the idea of plausible deniability is compelling and on first + glance it seems possible to do it. And from a cryptographic point + of view, it actually is possible. + + So, does it work in practice? No, unfortunately. The reasoning used + by its proponents is fundamentally flawed in several ways and the + cryptographic properties fail fatally when colliding with the real + world. + + First, why should "I do not have a hidden partition" be any more + plausible than "I forgot my crypto key" or "I wiped that partition + with random data, nothing in there"? I do not see any reason. + + Second, there are two types of situations: Either they cannot force + you to give them the key (then you simply do not) or they can. In the + second case, they can always do bad things to you, because they + cannot prove that you have the key in the first place! This means + they do not have to prove you have the key, or that this random + looking data on your disk is actually encrypted data. So the + situation will allow them to waterboard/lock-up/deport you anyways, + regardless of how "plausible" your deniability is. Do not have a + hidden partition you could show to them, but there are indications + you may? Too bad for you. Unfortunately "plausible deniability" + also means you cannot prove there is no hidden data. + + Third, hidden partitions are not that hidden. There are basically + just two possibilities: a) Make a large crypto container, but put a + smaller filesystem in there and put the hidden partition into the + free space. Unfortunately this is glaringly obvious and can be + detected in an automated fashion. This means that the initial + suspicion to put you under duress in order to make you reveal you + hidden data is given. b) Make a filesystem that spans the whole + encrypted partition, and put the hidden partition into space not + currently used by that filesystem. Unfortunately that is also + glaringly obvious, as you then cannot write to the filesystem without + a high risk of destroying data in the hidden container. Have not + written anything to the encrypted filesystem in a while? Too bad, + they have the suspicion they need to do unpleasant things to you. + + To be fair, if you prepare option b) carefully and directly before + going into danger, it may work. But then, the mere presence of + encrypted data may already be enough to get you into trouble in those + places were they 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. + + 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 can figure out how to do it yourself. + + + * 5.19 What about SSDs, Flash and Hybrid Drives? + + The problem is that you cannot reliably erase parts of these devices, + mainly due to wear-leveling and possibly defect management. + + Basically, when overwriting a sector (of 512B), what the device does + is to move an internal sector (may be 128kB or even larger) to some + pool of discarded, not-yet erased unused sectors, take a fresh empty + sector from the empty-sector pool and copy the old sector over with + the changes to the small part you wrote. This is done in some + fashion so that larger writes do not cause a lot of small internal + updates. + + The thing is that the mappings between outside-addressable sectors + and inside sectors is arbitrary (and the vendors are not talking). + Also the discarded sectors are not necessarily erased immediately. + They may linger a long time. + + For plain dm-crypt, the consequences are that older encrypted data + may be lying around in some internal pools of the device. Thus may + or may not be a problem and depends on the application. Remember the + same can happen with a filesystem if consecutive writes to the same + area of a file can go to different sectors. + + However, for LUKS, the worst case is that key-slots and LUKS header + may end up in these internal pools. This means that password + management functionality is compromised (the old passwords may still + be around, potentially for a very long time) and that fast erase by + overwriting the header and key-slot area is insecure. + + Also keep in mind that the discarded/used pool may be large. For + example, a 240GB SSD has about 16GB of spare area in the chips that + it is free to do with as it likes. You would need to make each + individual key-slot larger than that to allow reliable overwriting. + And that assumes the disk thinks all other space is in use. Reading + the internal pools using forensic tools is not that hard, but may + involve some soldering. + + What to do? + + If you trust the device vendor (you probably should not...) you can + try an ATA "secure erase" command for SSDs. That does not work for + USB keys though and may or may not be secure for a hybrid drive. If + it finishes on an SSD after a few seconds, it was possibly faked. + Unfortunately, for hybrid drives that indicator does not work, as the + drive may well take the time to truly erase the magnetic part, but + only mark the SSD/Flash part as erased while data is still in there. + + If you can do without password management and are fine with doing + physical destruction for permanently deleting data (always after one + or several full overwrites!), you can use plain dm-crypt or LUKS. + + If you want or need all the original LUKS security features to work, + you can use a detached LUKS header and put that on a conventional, + magnetic disk. That leaves potentially old encrypted data in the + pools on the disk, but otherwise you get LUKS with the same security + as on a magnetic disk. + + If you are concerned about your laptop being stolen, you are likely + fine using LUKS on an SSD or hybrid drive. An attacker would need to + have access to an old passphrase (and the key-slot for this old + passphrase would actually need to still be somewhere in the SSD) for + your data to be at risk. So unless you pasted your old passphrase + all over the Internet or the attacker has knowledge of it from some + other source and does a targeted laptop theft to get at your data, + you should be fine. + + + * 5.20 LUKS is broken! It uses SHA-1! + + No, it is not. SHA-1 is (academically) broken for finding collisions, + but not for using it in a key-derivation function. And that + collision vulnerability is for non-iterated use only. And you need + the hash-value in verbatim. + + This basically means that if you already have a slot-key, and you + have set the PBKDF2 iteration count to 1 (it is > 10'000 normally), + you could (maybe) derive a different passphrase that gives you the + the same slot-key. But if you have the slot-key, you can already + unlock the key-slot and get the master key, breaking everything. So + basically, this SHA-1 vulnerability allows you to open a LUKS + container with high effort when you already have it open. + + The real problem here is people that do not understand crypto and + claim things are broken just because some mechanism is used that has + been broken for a specific different use. The way the mechanism is + used matters very much. A hash that is broken for one use can be + completely secure for other uses and here it is. + + + * 5.21 Why is there no "Nuke-Option"? + + A "Nuke-Option" or "Kill-switch" is a password that when entered upon + unlocking instead wipes the header and all passwords. So when + somebody forces you to enter your password, you can destroy the data + instead. + + While this sounds attractive at first glance, it does not make sense + once a real security analysis is done. One problem is that you have + to have some kind of HSM (Hardware Security Module) in order to + implement it securely. In the movies, a HSM starts to smoke and melt + once the Nuke-Option has been activated. In reality, it just wipes + some battery-backed RAM cells. A proper HSM costs something like + 20'000...100'000 EUR/USD and there a Nuke-Option may make some sense. + BTW, a chipcard or a TPM is not a HSM, although some vendors are + promoting that myth. + + Now, a proper HSMs will have a wipe option but not a Nuke-Option, + i.e. you can explicitly wipe the HSM, but by a different process + than unlocking it takes. Why is that? Simple: If somebody can force + you to reveal passwords, then they can also do bad things to you if + you do not or if you enter a nuke password instead. Think locking + you up for a few years for "destroying evidence" or for far longer + and without trial for being a "terrorist suspect". No HSM maker will + want to expose its customers to that risk. + + Now think of the typical LUKS application scenario, i.e. disk + encryption. Usually the ones forcing you to hand over your password + will have access to the disk as well, and, if they have any real + suspicion, they will mirror your disk before entering anything + supplied by you. This neatly negates any Nuke-Option. If they have + no suspicion (just harassing people that cross some border for + example), the Nuke-Option would work, but see above about likely + negative consequences and remember that a Nuke-Option may not work + reliably on SSD and hybrid drives anyways. + + Hence my advice is to never take data that you do not want to reveal + into any such situation in the first place. There is no need to + transfer data on physical carriers today. The Internet makes it + quite possible to transfer data between arbitrary places and modern + encryption makes it secure. If you do it right, nobody will even be + able to identify source or destination. (How to do that is out of + scope of this 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 good. + + Still, if you have a good use-case (i.e. non-abstract real-world + situation) where a Nuke-Option would actually be beneficial, please + let me know. + + + * 5.22 Does cryptsetup open network connections to websites, etc. ? + + This question seems not to make much sense at first glance, but here + is an example form the real world: The TrueCrypt GUI has a "Donation" + button. Press it, and a web-connection to the TrueCrypt website is + opened via the default browser, telling everybody that listens that + you use TrueCrypt. In the worst case, things like this can get + people tortured or killed. + + So: Cryptsetup will never open any network connections except the + local netlink socket it needs to talk to the kernel crypto API. + + In addition, the installation package should contain all + documentation, including this FAQ, so that you do not have to go to a + web-site to read it. (If your distro cuts the docu, please complain + to them.) In security software, any connection initiated to anywhere + outside your machine should always be the result of an explicit + request for such a connection by the user and cryptsetup will stay + true to that principle. + + +6. Backup and Data Recovery + + + * 6.1 Why do I need Backup? + + First, disks die. The rate for well-treated (!) disk is about 5% per + year, which is high enough to worry about. There is some indication + that this may be even worse for some SSDs. This applies both to LUKS + and plain dm-crypt partitions. + + Second, for LUKS, if anything damages the LUKS header or the + key-stripe area then decrypting the LUKS device can become + impossible. This is a frequent occurrence. For example an + accidental format as FAT or some software overwriting the first + sector where it suspects a partition boot sector typically makes a + LUKS partition permanently inaccessible. See more below on LUKS + header damage. + + So, data-backup in some form is non-optional. For LUKS, you may also + want to store a header backup in some secure location. This only + needs an update if you change passphrases. + + + * 6.2 How do I backup a LUKS header? + + While you could just copy the appropriate number of bytes from the + start of the LUKS partition, the best way is to use command option + "luksHeaderBackup" of cryptsetup. This protects also against errors + when non-standard parameters have been used in LUKS partition + creation. Example: + + cryptsetup luksHeaderBackup --header-backup-file + + To restore, use the inverse command, i.e. + + cryptsetup luksHeaderRestore --header-backup-file + + If you are unsure about a header to be restored, make a backup of the + current one first! You can also test the header-file without restoring + it by using the --header option for a detached header like this: + + cryptsetup --header luksOpen + + If that unlocks your keys-lot, you are good. Do not forget to close + the device again. + + Under some circumstances (damaged header), this fails. Then use the + following steps: + + First determine the master-key size: + + cryptsetup luksDump + + gives a line of the form + + MK bits: + + with bits equal to 256 for the old defaults and 512 for the new + defaults. 256 bits equals a total header size of 1'052'672 Bytes and + 512 bits one of 2MiB. (See also Item 6.12) If luksDump fails, assume + 2MiB, but be aware that if you restore that, you may also restore the + first 1M or so of the filesystem. Do not change the filesystem if + you were unable to determine the header size! With that, restoring a + too-large header backup is still safe. + + Second, dump the header to file. There are many ways to do it, I + prefer the following: + + head -c 1052672 > header_backup.dmp + + or + + head -c 2M > header_backup.dmp + + for a 2MiB header. Verify the size of the dump-file to be sure. + + To restore such a backup, you can try luksHeaderRestore or do a more + basic + + cat header_backup.dmp > + + + + * 6.3 How do I test a LUKS header? + + Use + + cryptsetup -v isLuks + + on the device. Without the "-v" it just signals its result via + exit-status. You can also use the more general test + + blkid -p + + which will also detect other types and give some more info. Omit + "-p" for old versions of blkid that do not support it. + + + * 6.4 How do I backup a LUKS or dm-crypt partition? + + There are two options, a sector-image and a plain file or filesystem + backup of the contents of the partition. The sector image is already + encrypted, but cannot be compressed and contains all empty space. + The filesystem backup can be compressed, can contain only part of the + encrypted device, but needs to be encrypted separately if so desired. + + A sector-image will contain the whole partition in encrypted form, + for LUKS the LUKS header, the keys-slots and the data area. It can + be done under Linux e.g. with dd_rescue (for a direct image copy) + and with "cat" or "dd". Example: + + cat /dev/sda10 > sda10.img + dd_rescue /dev/sda10 sda10.img + + You can also use any other backup software that is capable of making + a sector image of a partition. Note that compression is ineffective + for encrypted data, hence it does not make sense to use it. + + For a filesystem backup, you decrypt and mount the encrypted + partition and back it up as you would a normal filesystem. In this + case the backup is not encrypted, unless your encryption method does + that. For example you can encrypt a backup with "tar" as follows + with GnuPG: + + tar cjf - | gpg --cipher-algo AES -c - > backup.tbz2.gpg + + And verify the backup like this if you are at "path": + + cat backup.tbz2.gpg | gpg - | tar djf - + + Note: Always verify backups, especially encrypted ones! + + There is one problem with verifying like this: The kernel may still + have some files cached and in fact verify them against RAM or may + even verify RAM against RAM, which defeats the purpose of the + exercise. The following command empties the kernel caches: + + echo 3 > /proc/sys/vm/drop_caches + + Run it after backup and before verify. + + In both cases GnuPG will ask you interactively for your symmetric + key. The verify will only output errors. Use "tar dvjf -" to get + all comparison results. To make sure no data is written to disk + unencrypted, turn off swap if it is not encrypted before doing the + backup. + + Restore works like certification with the 'd' ('difference') replaced + by 'x' ('eXtract'). Refer to the man-page of tar for more + explanations and instructions. Note that with default options tar + will overwrite already existing files without warning. If you are + unsure about how to use tar, experiment with it in a location where + you cannot do damage. + + You can of course use different or no compression and you can use an + asymmetric key if you have one and have a backup of the secret key + that belongs to it. + + A second option for a filesystem-level backup that can be used when + the backup is also on local disk (e.g. an external USB drive) is to + use a LUKS container there and copy the files to be backed up between + both mounted containers. Also see next item. + + + * 6.5 Do I need a backup of the full partition? Would the header + 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 to recover a damaged LUKS partition are related to user + error. For example, if you create a new filesystem on a LUKS + partition, chances are good that all data is lost permanently. + + For this case, a header+key-slot backup would often be enough. But + keep in mind that a well-treated (!) HDD has roughly a failure risk + of 5% per year. It is highly advisable to have a complete backup to + protect against this case. + + + * 6.6 What do I need to backup if I use "decrypt_derived"? + + This is a script in Debian, intended for mounting /tmp or swap with a + key derived from the master key of an already decrypted device. If + you use this for an device with data that should be persistent, you + need to make sure you either do not lose access to that master key or + have a backup of the data. If you derive from a LUKS device, a + header backup of that device would cover backing up the master key. + Keep in mind that this does not protect against disk loss. + + Note: If you recreate the LUKS header of the device you derive from + (using luksFormat), the master key changes even if you use the same + passphrase(s) and you will not be able to decrypt the derived device + with the new LUKS header. + + + * 6.7 Does a backup compromise security? + + Depends on how you do it. However if you do not have one, you are + going to eventually lose your encrypted data. + + There are risks introduced by backups. For example if you + change/disable a key-slot in LUKS, a binary backup of the partition + will still have the old key-slot. To deal with this, you have to be + able to change the key-slot on the backup as well, securely erase the + backup or do a filesystem-level backup instead of a binary one. + + If you use dm-crypt, backup is simpler: As there is no key + management, the main risk is that you cannot wipe the backup when + wiping the original. However wiping the original for dm-crypt should + consist of forgetting the passphrase and that you can do without + actual access to the backup. + + In both cases, there is an additional (usually small) risk with + binary backups: An attacker can see how many sectors and which ones + have been changed since the backup. To prevent this, use a + filesystem level backup method that encrypts the whole backup in one + go, e.g. as described above with tar and GnuPG. + + My personal advice is to use one USB disk (low value data) or three + disks (high value data) in rotating order for backups, and either use + independent LUKS partitions on them, or use encrypted backup with tar + and GnuPG. + + If you do network-backup or tape-backup, I strongly recommend to go + the filesystem backup path with independent encryption, as you + typically cannot reliably delete data in these scenarios, especially + in a cloud setting. (Well, you can burn the tape if it is under your + control...) + + + * 6.8 What happens if I overwrite the start of a LUKS partition or + damage the LUKS header or key-slots? + + There are two critical components for decryption: The salt values in + the key-slot descriptors of the header and the key-slots. If the + salt values are overwritten or changed, nothing (in the + cryptographically strong sense) can be done to access the data, + unless there is a backup of the LUKS header. If a key-slot is + damaged, the data can still be read with a different key-slot, if + there is a remaining undamaged and used key-slot. Note that in order + to make a key-slot unrecoverable in a cryptographically strong sense, + changing about 4-6 bits in random locations of its 128kiB size is + quite enough. + + + * 6.9 What happens if I (quick) format a LUKS partition? + + I have not tried the different ways to do this, but very likely you + will have written a new boot-sector, which in turn overwrites the + LUKS header, including the salts, making your data permanently + irretrievable, unless you have a LUKS header backup. You may also + damage the key-slots in part or in full. See also last item. + + + * 6.10 How do I recover the master key from a mapped LUKS container? + + This is typically only needed if you managed to damage your LUKS + header, but the container is still mapped, i.e. "luksOpen"ed. It + also helps if you have a mapped container that you forgot or do not + know a passphrase for (e.g. on a long running server.) + + WARNING: Things go wrong, do a full backup before trying this! + + WARNING: This exposes the master key of the LUKS container. Note + that both ways to recreate a LUKS header with the old master key + described below will write the master key to disk. Unless you are + sure you have securely erased it afterwards, e.g. by writing it to + an encrypted partition, RAM disk or by erasing the filesystem you + wrote it to by a complete overwrite, you should change the master key + afterwards. Changing the master key requires a full data backup, + luksFormat and then restore of the backup. + + First, there is a script by Milan that automates the whole process, + except generating a new LUKS header with the old master key (it + prints the command for that though): + + https://gitlab.com/cryptsetup/cryptsetup/blob/master/misc/luks-header-from-active + + You can also do this manually. Here is how: + + - Get the master key from the device mapper. This is done by the + following command. Substitute c5 for whatever you mapped to: + + # dmsetup table --target crypt --showkey /dev/mapper/c5 + + Result: + 0 200704 crypt aes-cbc-essiv:sha256 + a1704d9715f73a1bb4db581dcacadaf405e700d591e93e2eaade13ba653d0d09 + 0 7:0 4096 + + The result is actually one line, wrapped here for clarity. The long + hex string is the master key. + + - Convert the master key to a binary file representation. You can do + this manually, e.g. with hexedit. You can also use the tool "xxd" + from vim like this: + + echo "a1704d9....53d0d09" | xxd -r -p > + + + - Do a luksFormat to create a new LUKS header. + + NOTE: If your header is intact and you just forgot the passphrase, + you can just set a new passphrase, see next sub-item. + + Unmap the device before you do that (luksClose). Then do + + cryptsetup luksFormat --master-key-file= + + Note that if the container was created with other than the default + settings of the cryptsetup version you are using, you need to give + additional parameters specifying the deviations. If in doubt, try + the script by Milan. It does recover the other parameters as well. + + Side note: This is the way the decrypt_derived script gets at the + master key. It just omits the conversion and hashes the master key + string. + + - If the header is intact and you just forgot the passphrase, just + set a new passphrase like this: + + cryptsetup luksAddKey --master-key-file= + + You may want to disable the old one afterwards. + + + * 6.11 What does the on-disk structure of dm-crypt look like? + + There is none. dm-crypt takes a block device and gives encrypted + access to each of its blocks with a key derived from the passphrase + given. If you use a cipher different than the default, you have to + specify that as a parameter to cryptsetup too. If you want to change + the password, you basically have to create a second encrypted device + with the new passphrase and copy your data over. On the plus side, + if you accidentally overwrite any part of a dm-crypt device, the + damage will be limited to the area you overwrote. + + + * 6.12 What does the on-disk structure of LUKS look like? + + A LUKS partition consists of a header, followed by 8 key-slot + descriptors, followed by 8 key slots, followed by the encrypted data + area. + + Header and key-slot descriptors fill the first 592 bytes. The + key-slot size depends on the creation parameters, namely on the + number of anti-forensic stripes, key material offset and master key + size. + + With the default parameters, each key-slot is a bit less than 128kiB + in size. Due to sector alignment of the key-slot start, that means + the key block 0 is at offset 0x1000-0x20400, key block 1 at offset + 0x21000-0x40400, and key block 7 at offset 0xc1000-0xe0400. The + space to the next full sector address is padded with zeros. Never + used key-slots are filled with what the disk originally contained + there, a key-slot removed with "luksRemoveKey" or "luksKillSlot" gets + filled with 0xff. Due to 2MiB default alignment, start of the data + area for cryptsetup 1.3 and later is at 2MiB, i.e. at 0x200000. For + older versions, it is at 0x101000, i.e. at 1'052'672 bytes, i.e. at + 1MiB + 4096 bytes from the start of the partition. Incidentally, + "luksHeaderBackup" for a LUKS container created with default + parameters dumps exactly the first 2MiB (or 1'052'672 bytes for + headers created with cryptsetup versions < 1.3) to file and + "luksHeaderRestore" restores them. + + For non-default parameters, you have to figure out placement + yourself. "luksDump" helps. See also next item. For the most + common non-default settings, namely aes-xts-plain with 512 bit key, + the offsets are: 1st keyslot 0x1000-0x3f800, 2nd keyslot + 0x40000-0x7e000, 3rd keyslot 0x7e000-0xbd800, ..., and start of bulk + data at 0x200000. + + The exact specification of the format is here: + https://gitlab.com/cryptsetup/cryptsetup/wikis/Specification + + For your convenience, here is the LUKS header with hex offsets. + NOTE: The spec counts key-slots from 1 to 8, but the cryptsetup tool + counts from 0 to 7. The numbers here refer to the cryptsetup + numbers. + + +Refers to LUKS On-Disk Format Specification Version 1.2.1 + +LUKS header: + +offset length name data type description +----------------------------------------------------------------------- +0x0000 0x06 magic byte[] 'L','U','K','S', 0xba, 0xbe + 0 6 +0x0006 0x02 version uint16_t LUKS version + 6 3 +0x0008 0x20 cipher-name char[] cipher name spec. + 8 32 +0x0028 0x20 cipher-mode char[] cipher mode spec. + 40 32 +0x0048 0x20 hash-spec char[] hash spec. + 72 32 +0x0068 0x04 payload-offset uint32_t bulk data offset in sectors + 104 4 (512 bytes per sector) +0x006c 0x04 key-bytes uint32_t number of bytes in key + 108 4 +0x0070 0x14 mk-digest byte[] master key checksum + 112 20 calculated with PBKDF2 +0x0084 0x20 mk-digest-salt byte[] salt for PBKDF2 when + 132 32 calculating mk-digest +0x00a4 0x04 mk-digest-iter uint32_t iteration count for PBKDF2 + 164 4 when calculating mk-digest +0x00a8 0x28 uuid char[] partition UUID + 168 40 +0x00d0 0x30 key-slot-0 key slot key slot 0 + 208 48 +0x0100 0x30 key-slot-1 key slot key slot 1 + 256 48 +0x0130 0x30 key-slot-2 key slot key slot 2 + 304 48 +0x0160 0x30 key-slot-3 key slot key slot 3 + 352 48 +0x0190 0x30 key-slot-4 key slot key slot 4 + 400 48 +0x01c0 0x30 key-slot-5 key slot key slot 5 + 448 48 +0x01f0 0x30 key-slot-6 key slot key slot 6 + 496 48 +0x0220 0x30 key-slot-7 key slot key slot 7 + 544 48 + + +Key slot: + +offset length name data type description +------------------------------------------------------------------------- +0x0000 0x04 active uint32_t key slot enabled/disabled + 0 4 +0x0004 0x04 iterations uint32_t PBKDF2 iteration count + 4 4 +0x0008 0x20 salt byte[] PBKDF2 salt + 8 32 +0x0028 0x04 key-material-offset uint32_t key start sector + 40 4 (512 bytes/sector) +0x002c 0x04 stripes uint32_t number of anti-forensic + 44 4 stripes + + + + * 6.13 What is the smallest possible LUKS container? + + Note: From cryptsetup 1.3 onwards, alignment is set to 1MB. With + modern Linux partitioning tools that also align to 1MB, this will + result in alignment to 2k sectors and typical Flash/SSD sectors, + which is highly desirable for a number of reasons. Changing the + alignment is not recommended. + + That said, with default parameters, the data area starts at exactly + 2MB offset (at 0x101000 for cryptsetup versions before 1.3). The + smallest data area you can have is one sector of 512 bytes. Data + areas of 0 bytes can be created, but fail on mapping. + + While you cannot put a filesystem into something this small, it may + still be used to contain, for example, key. Note that with current + formatting tools, a partition for a container this size will be 3MiB + anyways. If you put the LUKS container into a file (via losetup and + a loopback device), the file needs to be 2097664 bytes in size, i.e. + 2MiB + 512B. + + The two ways to influence the start of the data area are key-size and + alignment. + + For alignment, you can go down to 1 on the parameter. This will still + leave you with a data-area starting at 0x101000, i.e. 1MiB+4096B + (default parameters) as alignment will be rounded up to the next + multiple of 8 (i.e. 4096 bytes) If in doubt, do a dry-run on a + larger file and dump the LUKS header to get actual information. + + For key-size, you can use 128 bit (e.g. AES-128 with CBC), 256 bit + (e.g. AES-256 with CBC) or 512 bit (e.g. AES-256 with XTS mode). + You can do 64 bit (e.g. blowfish-64 with CBC), but anything below + 128 bit has to be considered insecure today. + + Example 1 - AES 128 bit with CBC: + + cryptsetup luksFormat -s 128 --align-payload=8 + + This results in a data offset of 0x81000, i.e. 516KiB or 528384 + bytes. Add one 512 byte sector and the smallest LUKS container size + with these parameters is 516KiB + 512B or 528896 bytes. + + Example 2 - Blowfish 64 bit with CBC (WARNING: insecure): + + cryptsetup luksFormat -c blowfish -s 64 --align-payload=8 /dev/loop0 + + This results in a data offset of 0x41000, i.e. 260kiB or 266240 + bytes, with a minimal LUKS container size of 260kiB + 512B or 266752 + bytes. + + + * 6.14 I think this is overly complicated. Is there an alternative? + + Not really. Encryption comes at a price. You can use plain dm-crypt + to simplify things a bit. It does not allow multiple passphrases, + but on the plus side, it has zero on disk description and if you + overwrite some part of a plain dm-crypt partition, exactly the + overwritten parts are lost (rounded up to sector borders). + + * 6.15 Can I clone a LUKS container? + + You can, but it breaks security, because the cloned container has the + same header and hence the same master key. You cannot change the + master key on a LUKS container, even if you change the passphrase(s), + the master key stays the same. That means whoever has access to one + of the clones can decrypt them all, completely bypassing the + passphrases. + + The right way to do this is to first luksFormat the target container, + then to clone the contents of the source container, with both + containers mapped, i.e. decrypted. You can clone the decrypted + contents of a LUKS container in binary mode, although you may run + into secondary issues with GUIDs in filesystems, partition tables, + RAID-components and the like. These are just the normal problems + binary cloning causes. + + Note that if you need to ship (e.g.) cloned LUKS containers with a + default passphrase, that is fine as long as each container was + individually created (and hence has its own master key). In this + case, changing the default passphrase will make it secure again. + + +7. Interoperability with other Disk Encryption Tools + + + * 7.1 What is this section about? + + Cryptsetup for plain dm-crypt can be used to access a number of + on-disk formats created by tools like loop-aes patched into losetup. + This sometimes works and sometimes does not. This section collects + insights into what works, what does not and where more information is + required. + + Additional information may be found in the mailing-list archives, + mentioned at the start of this FAQ document. If you have a solution + working that is not yet documented here and think a wider audience + may be interested, please email the FAQ maintainer. + + + * 7.2 loop-aes: General observations. + + One problem is that there are different versions of losetup around. + loop-aes is a patch for losetup. Possible problems and deviations + from cryptsetup option syntax include: + + - Offsets specified in bytes (cryptsetup: 512 byte sectors) + + - The need to specify an IV offset + + - Encryption mode needs specifying (e.g. "-c twofish-cbc-plain") + + - Key size needs specifying (e.g. "-s 128" for 128 bit keys) + + - Passphrase hash algorithm needs specifying + + Also note that because plain dm-crypt and loop-aes format does not + have metadata, and while the loopAES extension for cryptsetup tries + autodetection (see command loopaesOpen), it may not always work. If + you still have the old set-up, using a verbosity option (-v) on + mapping with the old tool or having a look into the system logs after + setup could give you the information you need. Below, there are also + some things that worked for somebody. + + + * 7.3 loop-aes patched into losetup on Debian 5.x, kernel 2.6.32 + + In this case, the main problem seems to be that this variant of + losetup takes the offset (-o option) in bytes, while cryptsetup takes + it in sectors of 512 bytes each. + + Example: The losetup command + + losetup -e twofish -o 2560 /dev/loop0 /dev/sdb1 + mount /dev/loop0 mount-point + + translates to + + cryptsetup create -c twofish -o 5 --skip 5 e1 /dev/sdb1 + mount /dev/mapper/e1 mount-point + + + + * 7.4 loop-aes with 160 bit key + + This seems to be sometimes used with twofish and blowfish and + represents a 160 bit ripemed160 hash output padded to 196 bit key + length. It seems the corresponding options for cryptsetup are + + --cipher twofish-cbc-null -s 192 -h ripemd160:20 + + + + * 7.5 loop-aes v1 format OpenSUSE + + Apparently this is done by older OpenSUSE distros and stopped working + from OpenSUSE 12.1 to 12.2. One user had success with the following: + + cryptsetup create -c aes -s 128 -h sha256 + + + + * 7.6 Kernel encrypted loop device (cryptoloop) + + There are a number of different losetup implementations for using + encrypted loop devices so getting this to work may need a bit of + experimentation. + + NOTE: Do NOT use this for new containers! Some of the existing + implementations are insecure and future support is uncertain. + + Example for a compatible mapping: + + losetup -e twofish -N /dev/loop0 /image.img + + translates to + + cryptsetup create image_plain /image.img -c twofish-cbc-plain -H plain + + with the mapping being done to /dev/mapper/image_plain instead of + to /dev/loop0. + + More details: + + Cipher, mode and password hash (or no hash): + + -e cipher [-N] => -c cipher-cbc-plain -H plain [-s 256] + -e cipher => -c cipher-cbc-plain -H ripemd160 [-s 256] + + + Key size and offsets (losetup: bytes, cryptsetuop: sectors of 512 bytes): + + -k 128 => -s 128 + -o 2560 => -o 5 -p 5 # 2560/512 = 5 + + + There is no replacement for --pass-fd, it has to be emulated using + keyfiles, see the cryptsetup man-page. + + +8. Issues with Specific Versions of cryptsetup + + + * 8.1 When using the create command for plain dm-crypt with + cryptsetup 1.1.x, the mapping is incompatible and my data is not + accessible anymore! + + With cryptsetup 1.1.x, the distro maintainer can define different + default encryption modes. You can check the compiled-in defaults + using "cryptsetup --help". Moreover, the plain device default + changed because the old IV mode was vulnerable to a watermarking + attack. + + If you are using a plain device and you need a compatible mode, just + specify cipher, key size and hash algorithm explicitly. For + compatibility with cryptsetup 1.0.x defaults, simple use the + following: + + cryptsetup create -c aes-cbc-plain -s 256 -h ripemd160 + + + LUKS stores cipher and mode in the metadata on disk, avoiding this + problem. + + + * 8.2 cryptsetup on SLED 10 has problems... + + SLED 10 is missing an essential kernel patch for dm-crypt, which is + broken in its kernel as a result. There may be a very old version of + cryptsetup (1.0.x) provided by SLED, which should also not be used + anymore as well. My advice would be to drop SLED 10. + + + * 8.3 Gcrypt 1.6.x and later break Whirlpool + + It is the other way round: In gcrypt 1.5.x, Whirlpool is broken and + it was fixed in 1.6.0 and later. If you selected whirlpool as hash + on creation of a LUKS container, it does not work anymore with the + fixed library. This shows one serious risk of using rarely used + settings. + + Note that at the time this FAQ item was written, 1.5.4 was the latest + 1.5.x version and it has the flaw, i.e. works with the old Whirlpool + version. Possibly later 1.5.x versions will work as well. If not, + please let me know. + + The only two ways to access older LUKS containers created with + Whirlpool are to either decrypt with an old gcrypt version that has + the flaw or to use a compatibility feature introduced in cryptsetup + 1.6.4 and gcrypt 1.6.1 or later. Version 1.6.0 cannot be used. + + Steps: + + - Make at least a header backup or better, refresh your full backup. + (You have a full backup, right? See Item 6.1 and following.) + + - Make sure you have cryptsetup 1.6.4 or later and check the gcrypt + version: + + + cryptsetup luksDump --debug | grep backend + + + If gcrypt is at version 1.5.x or before: + + - Reencrypt the LUKS header with a different hash. (Requires entering + all keyslot passphrases. If you do not have all, remove the ones you + do not have before.): + + + cryptsetup-reencrypt --keep-key --hash sha256 + + + If gcrypt is at version 1.6.1 or later: + + - Patch the hash name in the LUKS header from "whirlpool" to + "whirlpool_gcryptbug". This activates the broken implementation. + The detailed header layout is in Item 6.12 of this FAQ and in the + LUKS on-disk format specification. One way to change the hash is + with the following command: + + + echo -n -e 'whirlpool_gcryptbug\0' | dd of= bs=1 seek=72 conv=notrunc + + + - You can now open the device again. It is highly advisable to change + the hash now with cryptsetup-reencrypt as described above. While you + can reencrypt to use the fixed whirlpool, that may not be a good idea + as almost nobody seems to use it and hence the long time until the + bug was discovered. + + +9. The Initrd question + +* 9.1 My initrd is broken with cryptsetup or does now work as I want it to + +That is not nice! However the initrd is supplied by your distribution, not by +the cryptsetup project and hence you should complain to them. We cannot +really do anything about it. + +* 9.2 CVE-2016-4484 says cryptsetup is broken! + +Not really. It says the initrd in some Debian versions have a behavior that +under some very special and unusual conditions may be considered +a vulnerability. Incidentally, at this time (1-Jan-17) CVE-2016-4484 still says +absolutely nothing, which means that the reporters could not be bothered +do actually describe the problem so far and hence it cannot be that bad. +If it were, you would expect that they would have a CVE description in +there more than 30 days (!) after reporting the problem to the press. + +What happens is that you can trick the initrd to go to a rescue-shell +if you enter the LUKS password wrongly in a specific way. But falling +back to a rescue shell on initrd errors is a sensible default behavior +in the first place. It gives you about as much access as booting +a rescue system from CD or USB-Stick or as removing the disk would +give you. So this only applies when an attacker has physical access, +but cannot boot anything else or remove the disk. These will be rare +circumstances indeed, and if you rely on the default distribution +initrd to keep you safe under these circumstances, than you have +bigger problems than this somewhat expected behavior. + +My take is this was much more driven by some big egos that wanted +to make a splash for self-aggrandizement, than by any actual +security concerns. Ignore it. + +* 9.3 How do I do my own initrd with cryptsetup? + +It depends on the distribution. Below, I give a very simple example +and step-by-step instructions for Debian. With a bit of work, it +should be possible to adapt this to other distributions. Note that +the description is pretty general, so if you want to do other things +with an initrd it provides an useful starting point for that too. + +01) Unpacking an existing initrd to use as template + +A Linux initrd is in gzip'ed cpio format. To unpack it, use something +like this: + + md tmp; cd tmp; cat ../initrd | gunzip | cpio -id + +After this, you have the full initrd content in tmp/ + +02) Inspecting the init-script +The init-script is the only thing the kernel cares about. All activity +starts there. Its traditional location is /sbin/init on disk, but /init +in an initrd. In an initrd unpacked as above it is tmp/init. + +While init can be a binary despite usually being called "init script", +in Debian the main init on the root partition is a binary, but the +init in the initrd (and only that one is called by the kernel) is a script +and starts like this: + + #!/bin/sh + .... + +The "sh" used here is in tmp/bin/sh as just unpacked, and in +Debian it currently is a busybox. + +03) Creating your own initrd +The two examples below should give you most of what is needed. + +Here is a really minimal example. It does nothing but set up some +things and then drop to an interactive shell. It is perfect to try +out things that you want to go into the init-script. + +!/bin/sh +export PATH=/sbin:/bin +[ -d /sys ] || mkdir /sys +[ -d /proc ] || mkdir /proc +[ -d /tmp ] || mkdir /tmp +mount -t sysfs -o nodev,noexec,nosuid sysfs /sys +mount -t proc -o nodev,noexec,nosuid proc /proc +echo "initrd is running, starting BusyBox..." +exec /bin/sh --login + + +Here is an example that opens the first LUKS-partition it +finds with the hard-coded password "test2" and then +mounts it as root-filesystem. This is intended to be +used on an USB-stick that after boot goes into a safe, +as it contains the LUKS-passphrase in plain text and is +not secure to be left in the system. The script contains +debug-output that should make it easier to see what +is going on. Note that the final hand-over to the +init on the encrypted root-partition is done +by "exec switch_root /mnt/root /sbin/init", after +mounting the decrypted LUKS container +with "mount /dev/mapper/c1 /mnt/root". +The second argument of switch_root is relative to the +first argument, i.e. the init started with this command +is really /mnt/sbin/init before switch_root runs. + +!/bin/sh +export PATH=/sbin:/bin +[ -d /sys ] || mkdir /sys +[ -d /proc ] || mkdir /proc +[ -d /tmp ] || mkdir /tmp +mount -t sysfs -o nodev,noexec,nosuid sysfs /sys +mount -t proc -o nodev,noexec,nosuid proc /proc +echo "detecting LUKS containers in sda1-10, sdb1-10"; sleep 1 +for i in a b +do + for j in 1 2 3 4 5 6 7 8 9 10 + do + sleep 0.5 + d="/dev/sd"$i""$j + echo -n $d + cryptsetup isLuks $d >/dev/null 2>&1 + r=$? + echo -n " result: "$r"" + # 0 = is LUKS, 1 = is not LUKS, 4 = other error + if expr $r = 0 > /dev/null + then + echo " is LUKS, attempting unlock" + echo -n "test2" | cryptsetup luksOpen --key-file=- $d c1 + r=$? + echo " result of unlock attempt: "$r"" + sleep 2 + if expr $r = 0 > /dev/null + then + echo "*** LUKS partition unlocked, switching root *** (waiting 30 seconds before doing that)" + mount /dev/mapper/c1 /mnt/root + sleep 30 + exec switch_root /mnt/root /sbin/init + fi + else + echo " is not LUKS" + fi + done +done +echo "FAIL finding root on LUKS, loading BusyBox..."; sleep 5 +exec /bin/sh --login + + +04) What if I want a binary in the initrd, but libraries are missing? + +That is a bit tricky. One option is to compile statically, but that +does not work for everything. Debian puts some libraries into +lib/ and lib64/ which are usually enough. If you need more, you +can add the libraries you need there. That may or may not need a +configuration change for the dynamic linker "ld" as well. +Refer to standard Linux documentation +on how to add a library to a Linux system. A running initrd is +just a running Linux system after all, it is not special in any way. + +05) How do I repack the initrd? + +Simply repack the changed directory. While in tmp/, do +the following: + +find . | cpio --create --format='newc' | gzip > ../new_initrd + +Rename "new_initrd" to however you want it called (the name of +the initrd is a kernel-parameter) and move to /boot. That is it. + +10. References and Further Reading + + * Purpose of this Section + + The purpose of this section is to collect references to all materials + that do not fit the FAQ but are relevant in some fashion. This can + be core topics like the LUKS spec or disk encryption, but it can also + be more tangential, like secure storage management or cryptography + used in LUKS. It should still have relevance to cryptsetup and its + applications. + + If you want to see something added here, send email to the maintainer + (or the cryptsetup mailing list) giving an URL, a description (1-3 + lines preferred) and a section to put it in. You can also propose + new sections. + + At this time I would like to limit the references to things that are + available on the web. + + * Specifications + + - LUKS on-disk format spec: + https://gitlab.com/cryptsetup/cryptsetup/wikis/Specification + + * Code Examples + + - Some code examples are in the source package under docs/examples + + - LUKS AF Splitter in Ruby by John Lane: https://rubygems.org/gems/afsplitter + + * Brute-forcing passphrases + + - 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 + + * Tools + + * SSD and Flash Disk Related + + * Disk Encryption + + * Attacks Against Disk Encryption + + * Risk Management as Relevant for Disk Encryption + + * Cryptography + + * Secure Storage + + +A. Contributors +In no particular order: + + - Arno Wagner + + - Milan Broz + +___ diff --git a/INSTALL b/INSTALL new file mode 100644 index 0000000..45ff9bb --- /dev/null +++ b/INSTALL @@ -0,0 +1,229 @@ +Copyright 1994, 1995, 1996, 1999, 2000, 2001, 2002 Free Software +Foundation, Inc. + + This file is free documentation; the Free Software Foundation gives +unlimited permission to copy, distribute and modify it. + +Basic Installation +================== + + These are generic installation instructions. + + The `configure' shell script attempts to guess correct values for +various system-dependent variables used during compilation. It uses +those values to create a `Makefile' in each directory of the package. +It may also create one or more `.h' files containing system-dependent +definitions. Finally, it creates a shell script `config.status' that +you can run in the future to recreate the current configuration, and a +file `config.log' containing compiler output (useful mainly for +debugging `configure'). + + It can also use an optional file (typically called `config.cache' +and enabled with `--cache-file=config.cache' or simply `-C') that saves +the results of its tests to speed up reconfiguring. (Caching is +disabled by default to prevent problems with accidental use of stale +cache files.) + + If you need to do unusual things to compile the package, please try +to figure out how `configure' could check whether to do them, and mail +diffs or instructions to the address given in the `README' so they can +be considered for the next release. If you are using the cache, and at +some point `config.cache' contains results you don't want to keep, you +may remove or edit it. + + The file `configure.ac' (or `configure.in') is used to create +`configure' by a program called `autoconf'. You only need +`configure.ac' if you want to change it or regenerate `configure' using +a newer version of `autoconf'. + +The simplest way to compile this package is: + + 1. `cd' to the directory containing the package's source code and type + `./configure' to configure the package for your system. If you're + using `csh' on an old version of System V, you might need to type + `sh ./configure' instead to prevent `csh' from trying to execute + `configure' itself. + + Running `configure' takes a while. While running, it prints some + messages telling which features it is checking for. + + 2. Type `make' to compile the package. + + 3. Optionally, type `make check' to run any self-tests that come with + the package. + + 4. Type `make install' to install the programs and any data files and + documentation. + + 5. You can remove the program binaries and object files from the + source code directory by typing `make clean'. To also remove the + files that `configure' created (so you can compile the package for + a different kind of computer), type `make distclean'. There is + also a `make maintainer-clean' target, but that is intended mainly + for the package's developers. If you use it, you may have to get + all sorts of other programs in order to regenerate files that came + with the distribution. + +Compilers and Options +===================== + + Some systems require unusual options for compilation or linking that +the `configure' script does not know about. Run `./configure --help' +for details on some of the pertinent environment variables. + + You can give `configure' initial values for configuration parameters +by setting variables in the command line or in the environment. Here +is an example: + + ./configure CC=c89 CFLAGS=-O2 LIBS=-lposix + + *Note Defining Variables::, for more details. + +Compiling For Multiple Architectures +==================================== + + You can compile the package for more than one kind of computer at the +same time, by placing the object files for each architecture in their +own directory. To do this, you must use a version of `make' that +supports the `VPATH' variable, such as GNU `make'. `cd' to the +directory where you want the object files and executables to go and run +the `configure' script. `configure' automatically checks for the +source code in the directory that `configure' is in and in `..'. + + If you have to use a `make' that does not support the `VPATH' +variable, you have to compile the package for one architecture at a +time in the source code directory. After you have installed the +package for one architecture, use `make distclean' before reconfiguring +for another architecture. + +Installation Names +================== + + By default, `make install' will install the package's files in +`/usr/local/bin', `/usr/local/man', etc. You can specify an +installation prefix other than `/usr/local' by giving `configure' the +option `--prefix=PATH'. + + You can specify separate installation prefixes for +architecture-specific files and architecture-independent files. If you +give `configure' the option `--exec-prefix=PATH', the package will use +PATH as the prefix for installing programs and libraries. +Documentation and other data files will still use the regular prefix. + + In addition, if you use an unusual directory layout you can give +options like `--bindir=PATH' to specify different values for particular +kinds of files. Run `configure --help' for a list of the directories +you can set and what kinds of files go in them. + + If the package supports it, you can cause programs to be installed +with an extra prefix or suffix on their names by giving `configure' the +option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. + +Optional Features +================= + + Some packages pay attention to `--enable-FEATURE' options to +`configure', where FEATURE indicates an optional part of the package. +They may also pay attention to `--with-PACKAGE' options, where PACKAGE +is something like `gnu-as' or `x' (for the X Window System). The +`README' should mention any `--enable-' and `--with-' options that the +package recognizes. + + For packages that use the X Window System, `configure' can usually +find the X include and library files automatically, but if it doesn't, +you can use the `configure' options `--x-includes=DIR' and +`--x-libraries=DIR' to specify their locations. + +Specifying the System Type +========================== + + There may be some features `configure' cannot figure out +automatically, but needs to determine by the type of machine the package +will run on. Usually, assuming the package is built to be run on the +_same_ architectures, `configure' can figure that out, but if it prints +a message saying it cannot guess the machine type, give it the +`--build=TYPE' option. TYPE can either be a short name for the system +type, such as `sun4', or a canonical name which has the form: + + CPU-COMPANY-SYSTEM + +where SYSTEM can have one of these forms: + + OS KERNEL-OS + + See the file `config.sub' for the possible values of each field. If +`config.sub' isn't included in this package, then this package doesn't +need to know the machine type. + + If you are _building_ compiler tools for cross-compiling, you should +use the `--target=TYPE' option to select the type of system they will +produce code for. + + If you want to _use_ a cross compiler, that generates code for a +platform different from the build platform, you should specify the +"host" platform (i.e., that on which the generated programs will +eventually be run) with `--host=TYPE'. + +Sharing Defaults +================ + + If you want to set default values for `configure' scripts to share, +you can create a site shell script called `config.site' that gives +default values for variables like `CC', `cache_file', and `prefix'. +`configure' looks for `PREFIX/share/config.site' if it exists, then +`PREFIX/etc/config.site' if it exists. Or, you can set the +`CONFIG_SITE' environment variable to the location of the site script. +A warning: not all `configure' scripts look for a site script. + +Defining Variables +================== + + Variables not defined in a site shell script can be set in the +environment passed to `configure'. However, some packages may run +configure again during the build, and the customized values of these +variables may be lost. In order to avoid this problem, you should set +them in the `configure' command line, using `VAR=value'. For example: + + ./configure CC=/usr/local2/bin/gcc + +will cause the specified gcc to be used as the C compiler (unless it is +overridden in the site shell script). + +`configure' Invocation +====================== + + `configure' recognizes the following options to control how it +operates. + +`--help' +`-h' + Print a summary of the options to `configure', and exit. + +`--version' +`-V' + Print the version of Autoconf used to generate the `configure' + script, and exit. + +`--cache-file=FILE' + Enable the cache: use and save the results of the tests in FILE, + traditionally `config.cache'. FILE defaults to `/dev/null' to + disable caching. + +`--config-cache' +`-C' + Alias for `--cache-file=config.cache'. + +`--quiet' +`--silent' +`-q' + Do not print messages saying which checks are being made. To + suppress all normal output, redirect it to `/dev/null' (any error + messages will still be shown). + +`--srcdir=DIR' + Look for the package's source code in directory DIR. Usually + `configure' can determine that directory automatically. + +`configure' also accepts some other, not widely useful, options. Run +`configure --help' for more details. + diff --git a/Makefile.am b/Makefile.am new file mode 100644 index 0000000..de0d2a2 --- /dev/null +++ b/Makefile.am @@ -0,0 +1,50 @@ +EXTRA_DIST = COPYING.LGPL FAQ docs misc +SUBDIRS = po tests +CLEANFILES = +DISTCLEAN_TARGETS = + +AM_CPPFLAGS = \ + -include config.h \ + -I$(top_srcdir)/lib \ + -DDATADIR=\""$(datadir)"\" \ + -DLOCALEDIR=\""$(datadir)/locale"\" \ + -DLIBDIR=\""$(libdir)"\" \ + -DPREFIX=\""$(prefix)"\" \ + -DSYSCONFDIR=\""$(sysconfdir)"\" \ + -DVERSION=\""$(VERSION)"\" +AM_CFLAGS = -Wall +AM_LDFLAGS = + +LDADD = $(LTLIBINTL) -lm + +tmpfilesddir = @DEFAULT_TMPFILESDIR@ + +noinst_LTLIBRARIES = +sbin_PROGRAMS = +man8_MANS = +tmpfilesd_DATA = + +include man/Makemodule.am + +include scripts/Makemodule.am + +if CRYPTO_INTERNAL_ARGON2 +include lib/crypto_backend/argon2/Makemodule.am +endif +include lib/crypto_backend/Makemodule.am +include lib/Makemodule.am + +include src/Makemodule.am + +ACLOCAL_AMFLAGS = -I m4 + +DISTCHECK_CONFIGURE_FLAGS = \ + --with-tmpfilesdir=$$dc_install_base/usr/lib/tmpfiles.d \ + --enable-internal-argon2 --enable-internal-sse-argon2 + +distclean-local: + -find . -name \*~ -o -name \*.orig -o -name \*.rej | xargs rm -f + rm -rf autom4te.cache + +clean-local: + -rm -rf docs/doxygen_api_docs libargon2.la diff --git a/Makefile.in b/Makefile.in new file mode 100644 index 0000000..7959dee --- /dev/null +++ b/Makefile.in @@ -0,0 +1,2888 @@ +# Makefile.in generated by automake 1.16.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2018 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + + + + +VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +sbin_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3) \ + $(am__EXEEXT_4) $(am__EXEEXT_5) $(am__EXEEXT_6) \ + $(am__EXEEXT_7) $(am__EXEEXT_8) +@VERITYSETUP_TRUE@am__append_1 = man/veritysetup.8 +@REENCRYPT_TRUE@am__append_2 = man/cryptsetup-reencrypt.8 +@INTEGRITYSETUP_TRUE@am__append_3 = man/integritysetup.8 +@CRYPTSETUP_TMPFILE_TRUE@am__append_4 = scripts/cryptsetup.conf +@CRYPTO_INTERNAL_ARGON2_TRUE@am__append_5 = libargon2.la +@CRYPTO_INTERNAL_ARGON2_TRUE@@CRYPTO_INTERNAL_SSE_ARGON2_TRUE@am__append_6 = lib/crypto_backend/argon2/blake2/blamka-round-opt.h \ +@CRYPTO_INTERNAL_ARGON2_TRUE@@CRYPTO_INTERNAL_SSE_ARGON2_TRUE@ lib/crypto_backend/argon2/opt.c + +@CRYPTO_INTERNAL_ARGON2_TRUE@@CRYPTO_INTERNAL_SSE_ARGON2_FALSE@am__append_7 = lib/crypto_backend/argon2/blake2/blamka-round-ref.h \ +@CRYPTO_INTERNAL_ARGON2_TRUE@@CRYPTO_INTERNAL_SSE_ARGON2_FALSE@ lib/crypto_backend/argon2/ref.c + +@CRYPTO_INTERNAL_ARGON2_TRUE@am__append_8 = lib/crypto_backend/argon2/LICENSE \ +@CRYPTO_INTERNAL_ARGON2_TRUE@ lib/crypto_backend/argon2/README +@CRYPTO_BACKEND_GCRYPT_TRUE@am__append_9 = lib/crypto_backend/crypto_gcrypt.c +@CRYPTO_BACKEND_OPENSSL_TRUE@am__append_10 = lib/crypto_backend/crypto_openssl.c +@CRYPTO_BACKEND_NSS_TRUE@am__append_11 = lib/crypto_backend/crypto_nss.c +@CRYPTO_BACKEND_KERNEL_TRUE@am__append_12 = lib/crypto_backend/crypto_kernel.c +@CRYPTO_BACKEND_NETTLE_TRUE@am__append_13 = lib/crypto_backend/crypto_nettle.c +@CRYPTO_INTERNAL_PBKDF2_TRUE@am__append_14 = lib/crypto_backend/pbkdf2_generic.c +@CRYPTSETUP_TRUE@am__append_15 = cryptsetup +@CRYPTSETUP_TRUE@@STATIC_TOOLS_TRUE@am__append_16 = cryptsetup.static +@VERITYSETUP_TRUE@am__append_17 = veritysetup +@STATIC_TOOLS_TRUE@@VERITYSETUP_TRUE@am__append_18 = veritysetup.static +@INTEGRITYSETUP_TRUE@am__append_19 = integritysetup +@INTEGRITYSETUP_TRUE@@STATIC_TOOLS_TRUE@am__append_20 = integritysetup.static +@REENCRYPT_TRUE@am__append_21 = cryptsetup-reencrypt +@REENCRYPT_TRUE@@STATIC_TOOLS_TRUE@am__append_22 = cryptsetup-reencrypt.static +subdir = . +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ + $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \ + $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ + $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ + $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ + $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ + $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \ + $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \ + $(am__configure_deps) $(include_HEADERS) $(am__DIST_COMMON) +am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ + configure.lineno config.status.lineno +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = config.h +CONFIG_CLEAN_FILES = lib/libcryptsetup.pc scripts/cryptsetup.conf +CONFIG_CLEAN_VPATH_FILES = +@CRYPTSETUP_TRUE@am__EXEEXT_1 = cryptsetup$(EXEEXT) +@CRYPTSETUP_TRUE@@STATIC_TOOLS_TRUE@am__EXEEXT_2 = cryptsetup.static$(EXEEXT) +@VERITYSETUP_TRUE@am__EXEEXT_3 = veritysetup$(EXEEXT) +@STATIC_TOOLS_TRUE@@VERITYSETUP_TRUE@am__EXEEXT_4 = veritysetup.static$(EXEEXT) +@INTEGRITYSETUP_TRUE@am__EXEEXT_5 = integritysetup$(EXEEXT) +@INTEGRITYSETUP_TRUE@@STATIC_TOOLS_TRUE@am__EXEEXT_6 = integritysetup.static$(EXEEXT) +@REENCRYPT_TRUE@am__EXEEXT_7 = cryptsetup-reencrypt$(EXEEXT) +@REENCRYPT_TRUE@@STATIC_TOOLS_TRUE@am__EXEEXT_8 = cryptsetup-reencrypt.static$(EXEEXT) +am__installdirs = "$(DESTDIR)$(sbindir)" "$(DESTDIR)$(libdir)" \ + "$(DESTDIR)$(man8dir)" "$(DESTDIR)$(pkgconfigdir)" \ + "$(DESTDIR)$(tmpfilesddir)" "$(DESTDIR)$(includedir)" +PROGRAMS = $(sbin_PROGRAMS) +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +LTLIBRARIES = $(lib_LTLIBRARIES) $(noinst_LTLIBRARIES) +libargon2_la_LIBADD = +am__libargon2_la_SOURCES_DIST = \ + lib/crypto_backend/argon2/blake2/blake2b.c \ + lib/crypto_backend/argon2/blake2/blake2.h \ + lib/crypto_backend/argon2/blake2/blake2-impl.h \ + lib/crypto_backend/argon2/argon2.c \ + lib/crypto_backend/argon2/argon2.h \ + lib/crypto_backend/argon2/core.c \ + lib/crypto_backend/argon2/core.h \ + lib/crypto_backend/argon2/encoding.c \ + lib/crypto_backend/argon2/encoding.h \ + lib/crypto_backend/argon2/thread.c \ + lib/crypto_backend/argon2/thread.h \ + lib/crypto_backend/argon2/blake2/blamka-round-opt.h \ + lib/crypto_backend/argon2/opt.c \ + lib/crypto_backend/argon2/blake2/blamka-round-ref.h \ + lib/crypto_backend/argon2/ref.c +am__dirstamp = $(am__leading_dot)dirstamp +@CRYPTO_INTERNAL_ARGON2_TRUE@@CRYPTO_INTERNAL_SSE_ARGON2_TRUE@am__objects_1 = lib/crypto_backend/argon2/libargon2_la-opt.lo +@CRYPTO_INTERNAL_ARGON2_TRUE@@CRYPTO_INTERNAL_SSE_ARGON2_FALSE@am__objects_2 = lib/crypto_backend/argon2/libargon2_la-ref.lo +@CRYPTO_INTERNAL_ARGON2_TRUE@am_libargon2_la_OBJECTS = lib/crypto_backend/argon2/blake2/libargon2_la-blake2b.lo \ +@CRYPTO_INTERNAL_ARGON2_TRUE@ lib/crypto_backend/argon2/libargon2_la-argon2.lo \ +@CRYPTO_INTERNAL_ARGON2_TRUE@ lib/crypto_backend/argon2/libargon2_la-core.lo \ +@CRYPTO_INTERNAL_ARGON2_TRUE@ lib/crypto_backend/argon2/libargon2_la-encoding.lo \ +@CRYPTO_INTERNAL_ARGON2_TRUE@ lib/crypto_backend/argon2/libargon2_la-thread.lo \ +@CRYPTO_INTERNAL_ARGON2_TRUE@ $(am__objects_1) $(am__objects_2) +libargon2_la_OBJECTS = $(am_libargon2_la_OBJECTS) +AM_V_lt = $(am__v_lt_@AM_V@) +am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) +am__v_lt_0 = --silent +am__v_lt_1 = +libargon2_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(libargon2_la_CFLAGS) \ + $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +@CRYPTO_INTERNAL_ARGON2_TRUE@am_libargon2_la_rpath = +am__libcrypto_backend_la_SOURCES_DIST = \ + lib/crypto_backend/crypto_backend.h \ + lib/crypto_backend/crypto_backend_internal.h \ + lib/crypto_backend/crypto_cipher_kernel.c \ + lib/crypto_backend/crypto_storage.c \ + lib/crypto_backend/pbkdf_check.c lib/crypto_backend/crc32.c \ + lib/crypto_backend/argon2_generic.c \ + lib/crypto_backend/cipher_generic.c \ + lib/crypto_backend/cipher_check.c \ + lib/crypto_backend/crypto_gcrypt.c \ + lib/crypto_backend/crypto_openssl.c \ + lib/crypto_backend/crypto_nss.c \ + lib/crypto_backend/crypto_kernel.c \ + lib/crypto_backend/crypto_nettle.c \ + lib/crypto_backend/pbkdf2_generic.c +@CRYPTO_BACKEND_GCRYPT_TRUE@am__objects_3 = lib/crypto_backend/libcrypto_backend_la-crypto_gcrypt.lo +@CRYPTO_BACKEND_OPENSSL_TRUE@am__objects_4 = lib/crypto_backend/libcrypto_backend_la-crypto_openssl.lo +@CRYPTO_BACKEND_NSS_TRUE@am__objects_5 = lib/crypto_backend/libcrypto_backend_la-crypto_nss.lo +@CRYPTO_BACKEND_KERNEL_TRUE@am__objects_6 = lib/crypto_backend/libcrypto_backend_la-crypto_kernel.lo +@CRYPTO_BACKEND_NETTLE_TRUE@am__objects_7 = lib/crypto_backend/libcrypto_backend_la-crypto_nettle.lo +@CRYPTO_INTERNAL_PBKDF2_TRUE@am__objects_8 = lib/crypto_backend/libcrypto_backend_la-pbkdf2_generic.lo +am_libcrypto_backend_la_OBJECTS = lib/crypto_backend/libcrypto_backend_la-crypto_cipher_kernel.lo \ + lib/crypto_backend/libcrypto_backend_la-crypto_storage.lo \ + lib/crypto_backend/libcrypto_backend_la-pbkdf_check.lo \ + lib/crypto_backend/libcrypto_backend_la-crc32.lo \ + lib/crypto_backend/libcrypto_backend_la-argon2_generic.lo \ + lib/crypto_backend/libcrypto_backend_la-cipher_generic.lo \ + lib/crypto_backend/libcrypto_backend_la-cipher_check.lo \ + $(am__objects_3) $(am__objects_4) $(am__objects_5) \ + $(am__objects_6) $(am__objects_7) $(am__objects_8) +libcrypto_backend_la_OBJECTS = $(am_libcrypto_backend_la_OBJECTS) +libcrypto_backend_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ + $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ + $(libcrypto_backend_la_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +am_libcryptsetup_la_OBJECTS = lib/libcryptsetup_la-setup.lo \ + lib/libcryptsetup_la-utils.lo \ + lib/libcryptsetup_la-utils_benchmark.lo \ + lib/libcryptsetup_la-utils_crypt.lo \ + lib/libcryptsetup_la-utils_loop.lo \ + lib/libcryptsetup_la-utils_devpath.lo \ + lib/libcryptsetup_la-utils_wipe.lo \ + lib/libcryptsetup_la-utils_fips.lo \ + lib/libcryptsetup_la-utils_device.lo \ + lib/libcryptsetup_la-utils_keyring.lo \ + lib/libcryptsetup_la-utils_device_locking.lo \ + lib/libcryptsetup_la-utils_pbkdf.lo \ + lib/libcryptsetup_la-utils_storage_wrappers.lo \ + lib/libcryptsetup_la-libdevmapper.lo \ + lib/libcryptsetup_la-volumekey.lo \ + lib/libcryptsetup_la-random.lo \ + lib/libcryptsetup_la-crypt_plain.lo \ + lib/libcryptsetup_la-base64.lo \ + lib/integrity/libcryptsetup_la-integrity.lo \ + lib/loopaes/libcryptsetup_la-loopaes.lo \ + lib/tcrypt/libcryptsetup_la-tcrypt.lo \ + lib/luks1/libcryptsetup_la-af.lo \ + lib/luks1/libcryptsetup_la-keyencryption.lo \ + lib/luks1/libcryptsetup_la-keymanage.lo \ + lib/verity/libcryptsetup_la-verity_hash.lo \ + lib/verity/libcryptsetup_la-verity_fec.lo \ + lib/verity/libcryptsetup_la-verity.lo \ + lib/verity/libcryptsetup_la-rs_encode_char.lo \ + lib/verity/libcryptsetup_la-rs_decode_char.lo \ + lib/luks2/libcryptsetup_la-luks2_disk_metadata.lo \ + lib/luks2/libcryptsetup_la-luks2_json_format.lo \ + lib/luks2/libcryptsetup_la-luks2_json_metadata.lo \ + lib/luks2/libcryptsetup_la-luks2_luks1_convert.lo \ + lib/luks2/libcryptsetup_la-luks2_digest.lo \ + lib/luks2/libcryptsetup_la-luks2_digest_pbkdf2.lo \ + lib/luks2/libcryptsetup_la-luks2_keyslot.lo \ + lib/luks2/libcryptsetup_la-luks2_keyslot_luks2.lo \ + lib/luks2/libcryptsetup_la-luks2_keyslot_reenc.lo \ + lib/luks2/libcryptsetup_la-luks2_reencrypt.lo \ + lib/luks2/libcryptsetup_la-luks2_segment.lo \ + lib/luks2/libcryptsetup_la-luks2_token_keyring.lo \ + lib/luks2/libcryptsetup_la-luks2_token.lo \ + lib/libcryptsetup_la-utils_blkid.lo +libcryptsetup_la_OBJECTS = $(am_libcryptsetup_la_OBJECTS) +libcryptsetup_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ + $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ + $(libcryptsetup_la_CFLAGS) $(CFLAGS) \ + $(libcryptsetup_la_LDFLAGS) $(LDFLAGS) -o $@ +libutils_io_la_LIBADD = +am_libutils_io_la_OBJECTS = lib/libutils_io_la-utils_io.lo +libutils_io_la_OBJECTS = $(am_libutils_io_la_OBJECTS) +libutils_io_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ + $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ + $(libutils_io_la_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o \ + $@ +am__cryptsetup_SOURCES_DIST = lib/utils_crypt.c lib/utils_loop.c \ + lib/utils_io.c lib/utils_blkid.c src/utils_tools.c \ + src/utils_password.c src/utils_luks2.c src/utils_blockdev.c \ + src/cryptsetup.c src/cryptsetup.h +@CRYPTSETUP_TRUE@am_cryptsetup_OBJECTS = lib/utils_crypt.$(OBJEXT) \ +@CRYPTSETUP_TRUE@ lib/utils_loop.$(OBJEXT) \ +@CRYPTSETUP_TRUE@ lib/utils_io.$(OBJEXT) \ +@CRYPTSETUP_TRUE@ lib/utils_blkid.$(OBJEXT) \ +@CRYPTSETUP_TRUE@ src/utils_tools.$(OBJEXT) \ +@CRYPTSETUP_TRUE@ src/utils_password.$(OBJEXT) \ +@CRYPTSETUP_TRUE@ src/utils_luks2.$(OBJEXT) \ +@CRYPTSETUP_TRUE@ src/utils_blockdev.$(OBJEXT) \ +@CRYPTSETUP_TRUE@ src/cryptsetup.$(OBJEXT) +cryptsetup_OBJECTS = $(am_cryptsetup_OBJECTS) +am__DEPENDENCIES_1 = +am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) +@CRYPTSETUP_TRUE@cryptsetup_DEPENDENCIES = $(am__DEPENDENCIES_2) \ +@CRYPTSETUP_TRUE@ libcryptsetup.la +am__cryptsetup_reencrypt_SOURCES_DIST = lib/utils_crypt.c \ + lib/utils_io.c lib/utils_blkid.c src/utils_tools.c \ + lib/utils_loop.c src/utils_password.c \ + src/cryptsetup_reencrypt.c src/cryptsetup.h +@REENCRYPT_TRUE@am_cryptsetup_reencrypt_OBJECTS = \ +@REENCRYPT_TRUE@ lib/utils_crypt.$(OBJEXT) \ +@REENCRYPT_TRUE@ lib/utils_io.$(OBJEXT) \ +@REENCRYPT_TRUE@ lib/utils_blkid.$(OBJEXT) \ +@REENCRYPT_TRUE@ src/utils_tools.$(OBJEXT) \ +@REENCRYPT_TRUE@ lib/utils_loop.$(OBJEXT) \ +@REENCRYPT_TRUE@ src/utils_password.$(OBJEXT) \ +@REENCRYPT_TRUE@ src/cryptsetup_reencrypt.$(OBJEXT) +cryptsetup_reencrypt_OBJECTS = $(am_cryptsetup_reencrypt_OBJECTS) +@REENCRYPT_TRUE@cryptsetup_reencrypt_DEPENDENCIES = \ +@REENCRYPT_TRUE@ $(am__DEPENDENCIES_2) libcryptsetup.la +am__cryptsetup_reencrypt_static_SOURCES_DIST = lib/utils_crypt.c \ + lib/utils_io.c lib/utils_blkid.c src/utils_tools.c \ + lib/utils_loop.c src/utils_password.c \ + src/cryptsetup_reencrypt.c src/cryptsetup.h +@REENCRYPT_TRUE@am__objects_9 = lib/utils_crypt.$(OBJEXT) \ +@REENCRYPT_TRUE@ lib/utils_io.$(OBJEXT) \ +@REENCRYPT_TRUE@ lib/utils_blkid.$(OBJEXT) \ +@REENCRYPT_TRUE@ src/utils_tools.$(OBJEXT) \ +@REENCRYPT_TRUE@ lib/utils_loop.$(OBJEXT) \ +@REENCRYPT_TRUE@ src/utils_password.$(OBJEXT) \ +@REENCRYPT_TRUE@ src/cryptsetup_reencrypt.$(OBJEXT) +@REENCRYPT_TRUE@@STATIC_TOOLS_TRUE@am_cryptsetup_reencrypt_static_OBJECTS = \ +@REENCRYPT_TRUE@@STATIC_TOOLS_TRUE@ $(am__objects_9) +cryptsetup_reencrypt_static_OBJECTS = \ + $(am_cryptsetup_reencrypt_static_OBJECTS) +@REENCRYPT_TRUE@am__DEPENDENCIES_3 = $(am__DEPENDENCIES_2) \ +@REENCRYPT_TRUE@ libcryptsetup.la +@REENCRYPT_TRUE@@STATIC_TOOLS_TRUE@cryptsetup_reencrypt_static_DEPENDENCIES = \ +@REENCRYPT_TRUE@@STATIC_TOOLS_TRUE@ $(am__DEPENDENCIES_3) +cryptsetup_reencrypt_static_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ + $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ + $(AM_CFLAGS) $(CFLAGS) $(cryptsetup_reencrypt_static_LDFLAGS) \ + $(LDFLAGS) -o $@ +am__cryptsetup_static_SOURCES_DIST = lib/utils_crypt.c \ + lib/utils_loop.c lib/utils_io.c lib/utils_blkid.c \ + src/utils_tools.c src/utils_password.c src/utils_luks2.c \ + src/utils_blockdev.c src/cryptsetup.c src/cryptsetup.h +@CRYPTSETUP_TRUE@am__objects_10 = lib/utils_crypt.$(OBJEXT) \ +@CRYPTSETUP_TRUE@ lib/utils_loop.$(OBJEXT) \ +@CRYPTSETUP_TRUE@ lib/utils_io.$(OBJEXT) \ +@CRYPTSETUP_TRUE@ lib/utils_blkid.$(OBJEXT) \ +@CRYPTSETUP_TRUE@ src/utils_tools.$(OBJEXT) \ +@CRYPTSETUP_TRUE@ src/utils_password.$(OBJEXT) \ +@CRYPTSETUP_TRUE@ src/utils_luks2.$(OBJEXT) \ +@CRYPTSETUP_TRUE@ src/utils_blockdev.$(OBJEXT) \ +@CRYPTSETUP_TRUE@ src/cryptsetup.$(OBJEXT) +@CRYPTSETUP_TRUE@@STATIC_TOOLS_TRUE@am_cryptsetup_static_OBJECTS = \ +@CRYPTSETUP_TRUE@@STATIC_TOOLS_TRUE@ $(am__objects_10) +cryptsetup_static_OBJECTS = $(am_cryptsetup_static_OBJECTS) +@CRYPTSETUP_TRUE@am__DEPENDENCIES_4 = $(am__DEPENDENCIES_2) \ +@CRYPTSETUP_TRUE@ libcryptsetup.la +@CRYPTSETUP_TRUE@@STATIC_TOOLS_TRUE@cryptsetup_static_DEPENDENCIES = \ +@CRYPTSETUP_TRUE@@STATIC_TOOLS_TRUE@ $(am__DEPENDENCIES_4) +cryptsetup_static_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ + $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ + $(AM_CFLAGS) $(CFLAGS) $(cryptsetup_static_LDFLAGS) $(LDFLAGS) \ + -o $@ +am__integritysetup_SOURCES_DIST = lib/utils_crypt.c lib/utils_loop.c \ + lib/utils_io.c lib/utils_blkid.c src/utils_tools.c \ + src/integritysetup.c src/cryptsetup.h +@INTEGRITYSETUP_TRUE@am_integritysetup_OBJECTS = \ +@INTEGRITYSETUP_TRUE@ lib/utils_crypt.$(OBJEXT) \ +@INTEGRITYSETUP_TRUE@ lib/utils_loop.$(OBJEXT) \ +@INTEGRITYSETUP_TRUE@ lib/utils_io.$(OBJEXT) \ +@INTEGRITYSETUP_TRUE@ lib/utils_blkid.$(OBJEXT) \ +@INTEGRITYSETUP_TRUE@ src/utils_tools.$(OBJEXT) \ +@INTEGRITYSETUP_TRUE@ src/integritysetup.$(OBJEXT) +integritysetup_OBJECTS = $(am_integritysetup_OBJECTS) +@INTEGRITYSETUP_TRUE@integritysetup_DEPENDENCIES = \ +@INTEGRITYSETUP_TRUE@ $(am__DEPENDENCIES_2) libcryptsetup.la +am__integritysetup_static_SOURCES_DIST = lib/utils_crypt.c \ + lib/utils_loop.c lib/utils_io.c lib/utils_blkid.c \ + src/utils_tools.c src/integritysetup.c src/cryptsetup.h +@INTEGRITYSETUP_TRUE@am__objects_11 = lib/utils_crypt.$(OBJEXT) \ +@INTEGRITYSETUP_TRUE@ lib/utils_loop.$(OBJEXT) \ +@INTEGRITYSETUP_TRUE@ lib/utils_io.$(OBJEXT) \ +@INTEGRITYSETUP_TRUE@ lib/utils_blkid.$(OBJEXT) \ +@INTEGRITYSETUP_TRUE@ src/utils_tools.$(OBJEXT) \ +@INTEGRITYSETUP_TRUE@ src/integritysetup.$(OBJEXT) +@INTEGRITYSETUP_TRUE@@STATIC_TOOLS_TRUE@am_integritysetup_static_OBJECTS = \ +@INTEGRITYSETUP_TRUE@@STATIC_TOOLS_TRUE@ $(am__objects_11) +integritysetup_static_OBJECTS = $(am_integritysetup_static_OBJECTS) +@INTEGRITYSETUP_TRUE@am__DEPENDENCIES_5 = $(am__DEPENDENCIES_2) \ +@INTEGRITYSETUP_TRUE@ libcryptsetup.la +@INTEGRITYSETUP_TRUE@@STATIC_TOOLS_TRUE@integritysetup_static_DEPENDENCIES = \ +@INTEGRITYSETUP_TRUE@@STATIC_TOOLS_TRUE@ $(am__DEPENDENCIES_5) +integritysetup_static_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ + $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ + $(AM_CFLAGS) $(CFLAGS) $(integritysetup_static_LDFLAGS) \ + $(LDFLAGS) -o $@ +am__veritysetup_SOURCES_DIST = lib/utils_crypt.c lib/utils_loop.c \ + lib/utils_io.c lib/utils_blkid.c src/utils_tools.c \ + src/veritysetup.c src/cryptsetup.h +@VERITYSETUP_TRUE@am_veritysetup_OBJECTS = lib/utils_crypt.$(OBJEXT) \ +@VERITYSETUP_TRUE@ lib/utils_loop.$(OBJEXT) \ +@VERITYSETUP_TRUE@ lib/utils_io.$(OBJEXT) \ +@VERITYSETUP_TRUE@ lib/utils_blkid.$(OBJEXT) \ +@VERITYSETUP_TRUE@ src/utils_tools.$(OBJEXT) \ +@VERITYSETUP_TRUE@ src/veritysetup.$(OBJEXT) +veritysetup_OBJECTS = $(am_veritysetup_OBJECTS) +@VERITYSETUP_TRUE@veritysetup_DEPENDENCIES = $(am__DEPENDENCIES_2) \ +@VERITYSETUP_TRUE@ libcryptsetup.la +am__veritysetup_static_SOURCES_DIST = lib/utils_crypt.c \ + lib/utils_loop.c lib/utils_io.c lib/utils_blkid.c \ + src/utils_tools.c src/veritysetup.c src/cryptsetup.h +@VERITYSETUP_TRUE@am__objects_12 = lib/utils_crypt.$(OBJEXT) \ +@VERITYSETUP_TRUE@ lib/utils_loop.$(OBJEXT) \ +@VERITYSETUP_TRUE@ lib/utils_io.$(OBJEXT) \ +@VERITYSETUP_TRUE@ lib/utils_blkid.$(OBJEXT) \ +@VERITYSETUP_TRUE@ src/utils_tools.$(OBJEXT) \ +@VERITYSETUP_TRUE@ src/veritysetup.$(OBJEXT) +@STATIC_TOOLS_TRUE@@VERITYSETUP_TRUE@am_veritysetup_static_OBJECTS = \ +@STATIC_TOOLS_TRUE@@VERITYSETUP_TRUE@ $(am__objects_12) +veritysetup_static_OBJECTS = $(am_veritysetup_static_OBJECTS) +@VERITYSETUP_TRUE@am__DEPENDENCIES_6 = $(am__DEPENDENCIES_2) \ +@VERITYSETUP_TRUE@ libcryptsetup.la +@STATIC_TOOLS_TRUE@@VERITYSETUP_TRUE@veritysetup_static_DEPENDENCIES = \ +@STATIC_TOOLS_TRUE@@VERITYSETUP_TRUE@ $(am__DEPENDENCIES_6) +veritysetup_static_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ + $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ + $(AM_CFLAGS) $(CFLAGS) $(veritysetup_static_LDFLAGS) \ + $(LDFLAGS) -o $@ +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +DEFAULT_INCLUDES = -I.@am__isrc@ +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__maybe_remake_depfiles = depfiles +am__depfiles_remade = lib/$(DEPDIR)/libcryptsetup_la-base64.Plo \ + lib/$(DEPDIR)/libcryptsetup_la-crypt_plain.Plo \ + lib/$(DEPDIR)/libcryptsetup_la-libdevmapper.Plo \ + lib/$(DEPDIR)/libcryptsetup_la-random.Plo \ + lib/$(DEPDIR)/libcryptsetup_la-setup.Plo \ + lib/$(DEPDIR)/libcryptsetup_la-utils.Plo \ + lib/$(DEPDIR)/libcryptsetup_la-utils_benchmark.Plo \ + lib/$(DEPDIR)/libcryptsetup_la-utils_blkid.Plo \ + lib/$(DEPDIR)/libcryptsetup_la-utils_crypt.Plo \ + lib/$(DEPDIR)/libcryptsetup_la-utils_device.Plo \ + lib/$(DEPDIR)/libcryptsetup_la-utils_device_locking.Plo \ + lib/$(DEPDIR)/libcryptsetup_la-utils_devpath.Plo \ + lib/$(DEPDIR)/libcryptsetup_la-utils_fips.Plo \ + lib/$(DEPDIR)/libcryptsetup_la-utils_keyring.Plo \ + lib/$(DEPDIR)/libcryptsetup_la-utils_loop.Plo \ + lib/$(DEPDIR)/libcryptsetup_la-utils_pbkdf.Plo \ + lib/$(DEPDIR)/libcryptsetup_la-utils_storage_wrappers.Plo \ + lib/$(DEPDIR)/libcryptsetup_la-utils_wipe.Plo \ + lib/$(DEPDIR)/libcryptsetup_la-volumekey.Plo \ + lib/$(DEPDIR)/libutils_io_la-utils_io.Plo \ + lib/$(DEPDIR)/utils_blkid.Po lib/$(DEPDIR)/utils_crypt.Po \ + lib/$(DEPDIR)/utils_io.Po lib/$(DEPDIR)/utils_loop.Po \ + lib/crypto_backend/$(DEPDIR)/libcrypto_backend_la-argon2_generic.Plo \ + lib/crypto_backend/$(DEPDIR)/libcrypto_backend_la-cipher_check.Plo \ + lib/crypto_backend/$(DEPDIR)/libcrypto_backend_la-cipher_generic.Plo \ + lib/crypto_backend/$(DEPDIR)/libcrypto_backend_la-crc32.Plo \ + lib/crypto_backend/$(DEPDIR)/libcrypto_backend_la-crypto_cipher_kernel.Plo \ + lib/crypto_backend/$(DEPDIR)/libcrypto_backend_la-crypto_gcrypt.Plo \ + lib/crypto_backend/$(DEPDIR)/libcrypto_backend_la-crypto_kernel.Plo \ + lib/crypto_backend/$(DEPDIR)/libcrypto_backend_la-crypto_nettle.Plo \ + lib/crypto_backend/$(DEPDIR)/libcrypto_backend_la-crypto_nss.Plo \ + lib/crypto_backend/$(DEPDIR)/libcrypto_backend_la-crypto_openssl.Plo \ + lib/crypto_backend/$(DEPDIR)/libcrypto_backend_la-crypto_storage.Plo \ + lib/crypto_backend/$(DEPDIR)/libcrypto_backend_la-pbkdf2_generic.Plo \ + lib/crypto_backend/$(DEPDIR)/libcrypto_backend_la-pbkdf_check.Plo \ + lib/crypto_backend/argon2/$(DEPDIR)/libargon2_la-argon2.Plo \ + lib/crypto_backend/argon2/$(DEPDIR)/libargon2_la-core.Plo \ + lib/crypto_backend/argon2/$(DEPDIR)/libargon2_la-encoding.Plo \ + lib/crypto_backend/argon2/$(DEPDIR)/libargon2_la-opt.Plo \ + lib/crypto_backend/argon2/$(DEPDIR)/libargon2_la-ref.Plo \ + lib/crypto_backend/argon2/$(DEPDIR)/libargon2_la-thread.Plo \ + lib/crypto_backend/argon2/blake2/$(DEPDIR)/libargon2_la-blake2b.Plo \ + lib/integrity/$(DEPDIR)/libcryptsetup_la-integrity.Plo \ + lib/loopaes/$(DEPDIR)/libcryptsetup_la-loopaes.Plo \ + lib/luks1/$(DEPDIR)/libcryptsetup_la-af.Plo \ + lib/luks1/$(DEPDIR)/libcryptsetup_la-keyencryption.Plo \ + lib/luks1/$(DEPDIR)/libcryptsetup_la-keymanage.Plo \ + lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_digest.Plo \ + lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_digest_pbkdf2.Plo \ + lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_disk_metadata.Plo \ + lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_json_format.Plo \ + lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_json_metadata.Plo \ + lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_keyslot.Plo \ + lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_keyslot_luks2.Plo \ + lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_keyslot_reenc.Plo \ + lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_luks1_convert.Plo \ + lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_reencrypt.Plo \ + lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_segment.Plo \ + lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_token.Plo \ + lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_token_keyring.Plo \ + lib/tcrypt/$(DEPDIR)/libcryptsetup_la-tcrypt.Plo \ + lib/verity/$(DEPDIR)/libcryptsetup_la-rs_decode_char.Plo \ + lib/verity/$(DEPDIR)/libcryptsetup_la-rs_encode_char.Plo \ + lib/verity/$(DEPDIR)/libcryptsetup_la-verity.Plo \ + lib/verity/$(DEPDIR)/libcryptsetup_la-verity_fec.Plo \ + lib/verity/$(DEPDIR)/libcryptsetup_la-verity_hash.Plo \ + src/$(DEPDIR)/cryptsetup.Po \ + src/$(DEPDIR)/cryptsetup_reencrypt.Po \ + src/$(DEPDIR)/integritysetup.Po \ + src/$(DEPDIR)/utils_blockdev.Po src/$(DEPDIR)/utils_luks2.Po \ + src/$(DEPDIR)/utils_password.Po src/$(DEPDIR)/utils_tools.Po \ + src/$(DEPDIR)/veritysetup.Po +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_@AM_V@) +am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) +am__v_CC_0 = @echo " CC " $@; +am__v_CC_1 = +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_@AM_V@) +am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) +am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_1 = +SOURCES = $(libargon2_la_SOURCES) $(libcrypto_backend_la_SOURCES) \ + $(libcryptsetup_la_SOURCES) $(libutils_io_la_SOURCES) \ + $(cryptsetup_SOURCES) $(cryptsetup_reencrypt_SOURCES) \ + $(cryptsetup_reencrypt_static_SOURCES) \ + $(cryptsetup_static_SOURCES) $(integritysetup_SOURCES) \ + $(integritysetup_static_SOURCES) $(veritysetup_SOURCES) \ + $(veritysetup_static_SOURCES) +DIST_SOURCES = $(am__libargon2_la_SOURCES_DIST) \ + $(am__libcrypto_backend_la_SOURCES_DIST) \ + $(libcryptsetup_la_SOURCES) $(libutils_io_la_SOURCES) \ + $(am__cryptsetup_SOURCES_DIST) \ + $(am__cryptsetup_reencrypt_SOURCES_DIST) \ + $(am__cryptsetup_reencrypt_static_SOURCES_DIST) \ + $(am__cryptsetup_static_SOURCES_DIST) \ + $(am__integritysetup_SOURCES_DIST) \ + $(am__integritysetup_static_SOURCES_DIST) \ + $(am__veritysetup_SOURCES_DIST) \ + $(am__veritysetup_static_SOURCES_DIST) +RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ + ctags-recursive dvi-recursive html-recursive info-recursive \ + install-data-recursive install-dvi-recursive \ + install-exec-recursive install-html-recursive \ + install-info-recursive install-pdf-recursive \ + install-ps-recursive install-recursive installcheck-recursive \ + installdirs-recursive pdf-recursive ps-recursive \ + tags-recursive uninstall-recursive +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +man8dir = $(mandir)/man8 +NROFF = nroff +MANS = $(man8_MANS) +DATA = $(pkgconfig_DATA) $(tmpfilesd_DATA) +HEADERS = $(include_HEADERS) +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +am__recursive_targets = \ + $(RECURSIVE_TARGETS) \ + $(RECURSIVE_CLEAN_TARGETS) \ + $(am__extra_recursive_targets) +AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ + cscope distdir distdir-am dist dist-all distcheck +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ + $(LISP)config.h.in +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +CSCOPE = cscope +DIST_SUBDIRS = $(SUBDIRS) +am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/config.h.in \ + $(srcdir)/lib/Makemodule.am \ + $(srcdir)/lib/crypto_backend/Makemodule.am \ + $(srcdir)/lib/crypto_backend/argon2/Makemodule.am \ + $(srcdir)/man/Makemodule.am $(srcdir)/scripts/Makemodule.am \ + $(srcdir)/src/Makemodule.am \ + $(top_srcdir)/lib/libcryptsetup.pc.in \ + $(top_srcdir)/scripts/cryptsetup.conf.in ABOUT-NLS AUTHORS \ + COPYING ChangeLog INSTALL NEWS README TODO compile \ + config.guess config.rpath config.sub depcomp install-sh \ + ltmain.sh missing +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +distdir = $(PACKAGE)-$(VERSION) +top_distdir = $(distdir) +am__remove_distdir = \ + if test -d "$(distdir)"; then \ + find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ + && rm -rf "$(distdir)" \ + || { sleep 5 && rm -rf "$(distdir)"; }; \ + else :; fi +am__post_remove_distdir = $(am__remove_distdir) +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +DIST_ARCHIVES = $(distdir).tar.gz $(distdir).tar.xz +GZIP_ENV = --best +DIST_TARGETS = dist-xz dist-gzip +distuninstallcheck_listfiles = find . -type f -print +am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ + | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' +distcleancheck_listfiles = find . -type f -print +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BLKID_CFLAGS = @BLKID_CFLAGS@ +BLKID_LIBS = @BLKID_LIBS@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CRYPTO_CFLAGS = @CRYPTO_CFLAGS@ +CRYPTO_LIBS = @CRYPTO_LIBS@ +CRYPTO_STATIC_LIBS = @CRYPTO_STATIC_LIBS@ +CYGPATH_W = @CYGPATH_W@ +DEFAULT_LUKS2_LOCK_DIR_PERMS = @DEFAULT_LUKS2_LOCK_DIR_PERMS@ +DEFAULT_LUKS2_LOCK_PATH = @DEFAULT_LUKS2_LOCK_PATH@ +DEFAULT_TMPFILESDIR = @DEFAULT_TMPFILESDIR@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DEVMAPPER_CFLAGS = @DEVMAPPER_CFLAGS@ +DEVMAPPER_LIBS = @DEVMAPPER_LIBS@ +DEVMAPPER_STATIC_CFLAGS = @DEVMAPPER_STATIC_CFLAGS@ +DEVMAPPER_STATIC_LIBS = @DEVMAPPER_STATIC_LIBS@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ +GMSGFMT = @GMSGFMT@ +GMSGFMT_015 = @GMSGFMT_015@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTLLIBS = @INTLLIBS@ +INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +JSON_C_CFLAGS = @JSON_C_CFLAGS@ +JSON_C_LIBS = @JSON_C_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBARGON2_CFLAGS = @LIBARGON2_CFLAGS@ +LIBARGON2_LIBS = @LIBARGON2_LIBS@ +LIBCRYPTSETUP_VERSION = @LIBCRYPTSETUP_VERSION@ +LIBCRYPTSETUP_VERSION_INFO = @LIBCRYPTSETUP_VERSION_INFO@ +LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@ +LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@ +LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +MSGFMT = @MSGFMT@ +MSGFMT_015 = @MSGFMT_015@ +MSGMERGE = @MSGMERGE@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NSS_CFLAGS = @NSS_CFLAGS@ +NSS_LIBS = @NSS_LIBS@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OPENSSL_CFLAGS = @OPENSSL_CFLAGS@ +OPENSSL_LIBS = @OPENSSL_LIBS@ +OPENSSL_STATIC_CFLAGS = @OPENSSL_STATIC_CFLAGS@ +OPENSSL_STATIC_LIBS = @OPENSSL_STATIC_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PASSWDQC_LIBS = @PASSWDQC_LIBS@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +POPT_LIBS = @POPT_LIBS@ +POSUB = @POSUB@ +PWQUALITY_CFLAGS = @PWQUALITY_CFLAGS@ +PWQUALITY_LIBS = @PWQUALITY_LIBS@ +PWQUALITY_STATIC_LIBS = @PWQUALITY_STATIC_LIBS@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +USE_NLS = @USE_NLS@ +UUID_LIBS = @UUID_LIBS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +XGETTEXT_015 = @XGETTEXT_015@ +XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +runstatedir = @runstatedir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +systemd_tmpfilesdir = @systemd_tmpfilesdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +EXTRA_DIST = COPYING.LGPL FAQ docs misc man/cryptsetup.8 \ + man/integritysetup.8 man/veritysetup.8 \ + man/cryptsetup-reencrypt.8 $(am__append_8) \ + lib/libcryptsetup.pc.in lib/libcryptsetup.sym +SUBDIRS = po tests +CLEANFILES = +DISTCLEAN_TARGETS = scripts/cryptsetup.conf +AM_CPPFLAGS = \ + -include config.h \ + -I$(top_srcdir)/lib \ + -DDATADIR=\""$(datadir)"\" \ + -DLOCALEDIR=\""$(datadir)/locale"\" \ + -DLIBDIR=\""$(libdir)"\" \ + -DPREFIX=\""$(prefix)"\" \ + -DSYSCONFDIR=\""$(sysconfdir)"\" \ + -DVERSION=\""$(VERSION)"\" + +AM_CFLAGS = -Wall +AM_LDFLAGS = +LDADD = $(LTLIBINTL) -lm +tmpfilesddir = @DEFAULT_TMPFILESDIR@ +noinst_LTLIBRARIES = $(am__append_5) libcrypto_backend.la \ + libutils_io.la +man8_MANS = man/cryptsetup.8 $(am__append_1) $(am__append_2) \ + $(am__append_3) +tmpfilesd_DATA = $(am__append_4) +@CRYPTO_INTERNAL_ARGON2_TRUE@libargon2_la_CFLAGS = $(AM_CFLAGS) -std=c89 -pthread -O3 +@CRYPTO_INTERNAL_ARGON2_TRUE@libargon2_la_CPPFLAGS = $(AM_CPPFLAGS) \ +@CRYPTO_INTERNAL_ARGON2_TRUE@ -I lib/crypto_backend/argon2 \ +@CRYPTO_INTERNAL_ARGON2_TRUE@ -I lib/crypto_backend/argon2/blake2 + +@CRYPTO_INTERNAL_ARGON2_TRUE@libargon2_la_SOURCES = lib/crypto_backend/argon2/blake2/blake2b.c \ +@CRYPTO_INTERNAL_ARGON2_TRUE@ lib/crypto_backend/argon2/blake2/blake2.h \ +@CRYPTO_INTERNAL_ARGON2_TRUE@ lib/crypto_backend/argon2/blake2/blake2-impl.h \ +@CRYPTO_INTERNAL_ARGON2_TRUE@ lib/crypto_backend/argon2/argon2.c \ +@CRYPTO_INTERNAL_ARGON2_TRUE@ lib/crypto_backend/argon2/argon2.h \ +@CRYPTO_INTERNAL_ARGON2_TRUE@ lib/crypto_backend/argon2/core.c \ +@CRYPTO_INTERNAL_ARGON2_TRUE@ lib/crypto_backend/argon2/core.h \ +@CRYPTO_INTERNAL_ARGON2_TRUE@ lib/crypto_backend/argon2/encoding.c \ +@CRYPTO_INTERNAL_ARGON2_TRUE@ lib/crypto_backend/argon2/encoding.h \ +@CRYPTO_INTERNAL_ARGON2_TRUE@ lib/crypto_backend/argon2/thread.c \ +@CRYPTO_INTERNAL_ARGON2_TRUE@ lib/crypto_backend/argon2/thread.h \ +@CRYPTO_INTERNAL_ARGON2_TRUE@ $(am__append_6) $(am__append_7) +libcrypto_backend_la_CFLAGS = $(AM_CFLAGS) @CRYPTO_CFLAGS@ +libcrypto_backend_la_SOURCES = lib/crypto_backend/crypto_backend.h \ + lib/crypto_backend/crypto_backend_internal.h \ + lib/crypto_backend/crypto_cipher_kernel.c \ + lib/crypto_backend/crypto_storage.c \ + lib/crypto_backend/pbkdf_check.c lib/crypto_backend/crc32.c \ + lib/crypto_backend/argon2_generic.c \ + lib/crypto_backend/cipher_generic.c \ + lib/crypto_backend/cipher_check.c $(am__append_9) \ + $(am__append_10) $(am__append_11) $(am__append_12) \ + $(am__append_13) $(am__append_14) +@CRYPTO_INTERNAL_ARGON2_TRUE@libcrypto_backend_la_DEPENDENCIES = libargon2.la +@CRYPTO_INTERNAL_ARGON2_TRUE@libcrypto_backend_la_LIBADD = libargon2.la +pkgconfigdir = $(libdir)/pkgconfig +pkgconfig_DATA = lib/libcryptsetup.pc +lib_LTLIBRARIES = libcryptsetup.la +include_HEADERS = lib/libcryptsetup.h +libutils_io_la_CFLAGS = $(AM_CFLAGS) +libutils_io_la_SOURCES = \ + lib/utils_io.c \ + lib/utils_io.h + +libcryptsetup_la_CPPFLAGS = $(AM_CPPFLAGS) \ + -I $(top_srcdir)/lib/crypto_backend \ + -I $(top_srcdir)/lib/luks1 \ + -I $(top_srcdir)/lib/luks2 \ + -I $(top_srcdir)/lib/loopaes \ + -I $(top_srcdir)/lib/verity \ + -I $(top_srcdir)/lib/tcrypt \ + -I $(top_srcdir)/lib/integrity + +libcryptsetup_la_DEPENDENCIES = libutils_io.la libcrypto_backend.la lib/libcryptsetup.sym +libcryptsetup_la_LDFLAGS = $(AM_LDFLAGS) -no-undefined \ + -Wl,--version-script=$(top_srcdir)/lib/libcryptsetup.sym \ + -version-info @LIBCRYPTSETUP_VERSION_INFO@ + +libcryptsetup_la_CFLAGS = $(AM_CFLAGS) @CRYPTO_CFLAGS@ +libcryptsetup_la_LIBADD = \ + @UUID_LIBS@ \ + @DEVMAPPER_LIBS@ \ + @CRYPTO_LIBS@ \ + @LIBARGON2_LIBS@ \ + @JSON_C_LIBS@ \ + @BLKID_LIBS@ \ + libcrypto_backend.la \ + libutils_io.la + +libcryptsetup_la_SOURCES = \ + lib/setup.c \ + lib/internal.h \ + lib/bitops.h \ + lib/nls.h \ + lib/libcryptsetup.h \ + lib/utils.c \ + lib/utils_benchmark.c \ + lib/utils_crypt.c \ + lib/utils_crypt.h \ + lib/utils_loop.c \ + lib/utils_loop.h \ + lib/utils_devpath.c \ + lib/utils_wipe.c \ + lib/utils_fips.c \ + lib/utils_fips.h \ + lib/utils_device.c \ + lib/utils_keyring.c \ + lib/utils_keyring.h \ + lib/utils_device_locking.c \ + lib/utils_device_locking.h \ + lib/utils_pbkdf.c \ + lib/utils_storage_wrappers.c \ + lib/utils_storage_wrappers.h \ + lib/libdevmapper.c \ + lib/utils_dm.h \ + lib/volumekey.c \ + lib/random.c \ + lib/crypt_plain.c \ + lib/base64.h \ + lib/base64.c \ + lib/integrity/integrity.h \ + lib/integrity/integrity.c \ + lib/loopaes/loopaes.h \ + lib/loopaes/loopaes.c \ + lib/tcrypt/tcrypt.h \ + lib/tcrypt/tcrypt.c \ + lib/luks1/af.h \ + lib/luks1/af.c \ + lib/luks1/keyencryption.c \ + lib/luks1/keymanage.c \ + lib/luks1/luks.h \ + lib/verity/verity_hash.c \ + lib/verity/verity_fec.c \ + lib/verity/verity.c \ + lib/verity/verity.h \ + lib/verity/rs_encode_char.c \ + lib/verity/rs_decode_char.c \ + lib/verity/rs.h \ + lib/luks2/luks2_disk_metadata.c \ + lib/luks2/luks2_json_format.c \ + lib/luks2/luks2_json_metadata.c \ + lib/luks2/luks2_luks1_convert.c \ + lib/luks2/luks2_digest.c \ + lib/luks2/luks2_digest_pbkdf2.c \ + lib/luks2/luks2_keyslot.c \ + lib/luks2/luks2_keyslot_luks2.c \ + lib/luks2/luks2_keyslot_reenc.c \ + lib/luks2/luks2_reencrypt.c \ + lib/luks2/luks2_segment.c \ + lib/luks2/luks2_token_keyring.c \ + lib/luks2/luks2_token.c \ + lib/luks2/luks2_internal.h \ + lib/luks2/luks2.h \ + lib/utils_blkid.c \ + lib/utils_blkid.h + + +# cryptsetup +@CRYPTSETUP_TRUE@cryptsetup_SOURCES = \ +@CRYPTSETUP_TRUE@ lib/utils_crypt.c \ +@CRYPTSETUP_TRUE@ lib/utils_loop.c \ +@CRYPTSETUP_TRUE@ lib/utils_io.c \ +@CRYPTSETUP_TRUE@ lib/utils_blkid.c \ +@CRYPTSETUP_TRUE@ src/utils_tools.c \ +@CRYPTSETUP_TRUE@ src/utils_password.c \ +@CRYPTSETUP_TRUE@ src/utils_luks2.c \ +@CRYPTSETUP_TRUE@ src/utils_blockdev.c \ +@CRYPTSETUP_TRUE@ src/cryptsetup.c \ +@CRYPTSETUP_TRUE@ src/cryptsetup.h + +@CRYPTSETUP_TRUE@cryptsetup_LDADD = $(LDADD) \ +@CRYPTSETUP_TRUE@ libcryptsetup.la \ +@CRYPTSETUP_TRUE@ @POPT_LIBS@ \ +@CRYPTSETUP_TRUE@ @PWQUALITY_LIBS@ \ +@CRYPTSETUP_TRUE@ @PASSWDQC_LIBS@ \ +@CRYPTSETUP_TRUE@ @UUID_LIBS@ \ +@CRYPTSETUP_TRUE@ @BLKID_LIBS@ + +@CRYPTSETUP_TRUE@@STATIC_TOOLS_TRUE@cryptsetup_static_SOURCES = $(cryptsetup_SOURCES) +@CRYPTSETUP_TRUE@@STATIC_TOOLS_TRUE@cryptsetup_static_LDFLAGS = $(AM_LDFLAGS) -all-static +@CRYPTSETUP_TRUE@@STATIC_TOOLS_TRUE@cryptsetup_static_LDADD = \ +@CRYPTSETUP_TRUE@@STATIC_TOOLS_TRUE@ $(cryptsetup_LDADD) \ +@CRYPTSETUP_TRUE@@STATIC_TOOLS_TRUE@ @CRYPTO_STATIC_LIBS@ \ +@CRYPTSETUP_TRUE@@STATIC_TOOLS_TRUE@ @PWQUALITY_STATIC_LIBS@ \ +@CRYPTSETUP_TRUE@@STATIC_TOOLS_TRUE@ @DEVMAPPER_STATIC_LIBS@ + + +# veritysetup +@VERITYSETUP_TRUE@veritysetup_SOURCES = \ +@VERITYSETUP_TRUE@ lib/utils_crypt.c \ +@VERITYSETUP_TRUE@ lib/utils_loop.c \ +@VERITYSETUP_TRUE@ lib/utils_io.c \ +@VERITYSETUP_TRUE@ lib/utils_blkid.c \ +@VERITYSETUP_TRUE@ src/utils_tools.c \ +@VERITYSETUP_TRUE@ src/veritysetup.c \ +@VERITYSETUP_TRUE@ src/cryptsetup.h + +@VERITYSETUP_TRUE@veritysetup_LDADD = $(LDADD) \ +@VERITYSETUP_TRUE@ libcryptsetup.la \ +@VERITYSETUP_TRUE@ @POPT_LIBS@ \ +@VERITYSETUP_TRUE@ @BLKID_LIBS@ + +@STATIC_TOOLS_TRUE@@VERITYSETUP_TRUE@veritysetup_static_SOURCES = $(veritysetup_SOURCES) +@STATIC_TOOLS_TRUE@@VERITYSETUP_TRUE@veritysetup_static_LDFLAGS = $(AM_LDFLAGS) -all-static +@STATIC_TOOLS_TRUE@@VERITYSETUP_TRUE@veritysetup_static_LDADD = \ +@STATIC_TOOLS_TRUE@@VERITYSETUP_TRUE@ $(veritysetup_LDADD) \ +@STATIC_TOOLS_TRUE@@VERITYSETUP_TRUE@ @CRYPTO_STATIC_LIBS@ \ +@STATIC_TOOLS_TRUE@@VERITYSETUP_TRUE@ @DEVMAPPER_STATIC_LIBS@ \ +@STATIC_TOOLS_TRUE@@VERITYSETUP_TRUE@ @UUID_LIBS@ + + +# integritysetup +@INTEGRITYSETUP_TRUE@integritysetup_SOURCES = \ +@INTEGRITYSETUP_TRUE@ lib/utils_crypt.c \ +@INTEGRITYSETUP_TRUE@ lib/utils_loop.c \ +@INTEGRITYSETUP_TRUE@ lib/utils_io.c \ +@INTEGRITYSETUP_TRUE@ lib/utils_blkid.c \ +@INTEGRITYSETUP_TRUE@ src/utils_tools.c \ +@INTEGRITYSETUP_TRUE@ src/integritysetup.c \ +@INTEGRITYSETUP_TRUE@ src/cryptsetup.h + +@INTEGRITYSETUP_TRUE@integritysetup_LDADD = $(LDADD) \ +@INTEGRITYSETUP_TRUE@ libcryptsetup.la \ +@INTEGRITYSETUP_TRUE@ @POPT_LIBS@ \ +@INTEGRITYSETUP_TRUE@ @UUID_LIBS@ \ +@INTEGRITYSETUP_TRUE@ @BLKID_LIBS@ + +@INTEGRITYSETUP_TRUE@@STATIC_TOOLS_TRUE@integritysetup_static_SOURCES = $(integritysetup_SOURCES) +@INTEGRITYSETUP_TRUE@@STATIC_TOOLS_TRUE@integritysetup_static_LDFLAGS = $(AM_LDFLAGS) -all-static +@INTEGRITYSETUP_TRUE@@STATIC_TOOLS_TRUE@integritysetup_static_LDADD = \ +@INTEGRITYSETUP_TRUE@@STATIC_TOOLS_TRUE@ $(integritysetup_LDADD) \ +@INTEGRITYSETUP_TRUE@@STATIC_TOOLS_TRUE@ @CRYPTO_STATIC_LIBS@ \ +@INTEGRITYSETUP_TRUE@@STATIC_TOOLS_TRUE@ @DEVMAPPER_STATIC_LIBS@ \ +@INTEGRITYSETUP_TRUE@@STATIC_TOOLS_TRUE@ @UUID_LIBS@ + + +# reencrypt +@REENCRYPT_TRUE@cryptsetup_reencrypt_SOURCES = \ +@REENCRYPT_TRUE@ lib/utils_crypt.c \ +@REENCRYPT_TRUE@ lib/utils_io.c \ +@REENCRYPT_TRUE@ lib/utils_blkid.c \ +@REENCRYPT_TRUE@ src/utils_tools.c \ +@REENCRYPT_TRUE@ lib/utils_loop.c \ +@REENCRYPT_TRUE@ src/utils_password.c \ +@REENCRYPT_TRUE@ src/cryptsetup_reencrypt.c \ +@REENCRYPT_TRUE@ src/cryptsetup.h + +@REENCRYPT_TRUE@cryptsetup_reencrypt_LDADD = $(LDADD) \ +@REENCRYPT_TRUE@ libcryptsetup.la \ +@REENCRYPT_TRUE@ @POPT_LIBS@ \ +@REENCRYPT_TRUE@ @PWQUALITY_LIBS@ \ +@REENCRYPT_TRUE@ @PASSWDQC_LIBS@ \ +@REENCRYPT_TRUE@ @UUID_LIBS@ \ +@REENCRYPT_TRUE@ @BLKID_LIBS@ + +@REENCRYPT_TRUE@@STATIC_TOOLS_TRUE@cryptsetup_reencrypt_static_SOURCES = $(cryptsetup_reencrypt_SOURCES) +@REENCRYPT_TRUE@@STATIC_TOOLS_TRUE@cryptsetup_reencrypt_static_LDFLAGS = $(AM_LDFLAGS) -all-static +@REENCRYPT_TRUE@@STATIC_TOOLS_TRUE@cryptsetup_reencrypt_static_LDADD = \ +@REENCRYPT_TRUE@@STATIC_TOOLS_TRUE@ $(cryptsetup_reencrypt_LDADD) \ +@REENCRYPT_TRUE@@STATIC_TOOLS_TRUE@ @CRYPTO_STATIC_LIBS@ \ +@REENCRYPT_TRUE@@STATIC_TOOLS_TRUE@ @PWQUALITY_STATIC_LIBS@ \ +@REENCRYPT_TRUE@@STATIC_TOOLS_TRUE@ @DEVMAPPER_STATIC_LIBS@ + +ACLOCAL_AMFLAGS = -I m4 +DISTCHECK_CONFIGURE_FLAGS = \ + --with-tmpfilesdir=$$dc_install_base/usr/lib/tmpfiles.d \ + --enable-internal-argon2 --enable-internal-sse-argon2 + +all: config.h + $(MAKE) $(AM_MAKEFLAGS) all-recursive + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +am--refresh: Makefile + @: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(srcdir)/man/Makemodule.am $(srcdir)/scripts/Makemodule.am $(srcdir)/lib/crypto_backend/argon2/Makemodule.am $(srcdir)/lib/crypto_backend/Makemodule.am $(srcdir)/lib/Makemodule.am $(srcdir)/src/Makemodule.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \ + $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + echo ' $(SHELL) ./config.status'; \ + $(SHELL) ./config.status;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles);; \ + esac; +$(srcdir)/man/Makemodule.am $(srcdir)/scripts/Makemodule.am $(srcdir)/lib/crypto_backend/argon2/Makemodule.am $(srcdir)/lib/crypto_backend/Makemodule.am $(srcdir)/lib/Makemodule.am $(srcdir)/src/Makemodule.am $(am__empty): + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + $(SHELL) ./config.status --recheck + +$(top_srcdir)/configure: $(am__configure_deps) + $(am__cd) $(srcdir) && $(AUTOCONF) +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) +$(am__aclocal_m4_deps): + +config.h: stamp-h1 + @test -f $@ || rm -f stamp-h1 + @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1 + +stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status + @rm -f stamp-h1 + cd $(top_builddir) && $(SHELL) ./config.status config.h +$(srcdir)/config.h.in: $(am__configure_deps) + ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) + rm -f stamp-h1 + touch $@ + +distclean-hdr: + -rm -f config.h stamp-h1 +lib/libcryptsetup.pc: $(top_builddir)/config.status $(top_srcdir)/lib/libcryptsetup.pc.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +scripts/cryptsetup.conf: $(top_builddir)/config.status $(top_srcdir)/scripts/cryptsetup.conf.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +install-sbinPROGRAMS: $(sbin_PROGRAMS) + @$(NORMAL_INSTALL) + @list='$(sbin_PROGRAMS)'; test -n "$(sbindir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(sbindir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(sbindir)" || exit 1; \ + fi; \ + for p in $$list; do echo "$$p $$p"; done | \ + sed 's/$(EXEEXT)$$//' | \ + while read p p1; do if test -f $$p \ + || test -f $$p1 \ + ; then echo "$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n;h' \ + -e 's|.*|.|' \ + -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ + sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) files[d] = files[d] " " $$1; \ + else { print "f", $$3 "/" $$4, $$1; } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(sbindir)$$dir'"; \ + $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(sbindir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-sbinPROGRAMS: + @$(NORMAL_UNINSTALL) + @list='$(sbin_PROGRAMS)'; test -n "$(sbindir)" || list=; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ + -e 's/$$/$(EXEEXT)/' \ + `; \ + test -n "$$list" || exit 0; \ + echo " ( cd '$(DESTDIR)$(sbindir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(sbindir)" && rm -f $$files + +clean-sbinPROGRAMS: + @list='$(sbin_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list + +install-libLTLIBRARIES: $(lib_LTLIBRARIES) + @$(NORMAL_INSTALL) + @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ + list2=; for p in $$list; do \ + if test -f $$p; then \ + list2="$$list2 $$p"; \ + else :; fi; \ + done; \ + test -z "$$list2" || { \ + echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ + } + +uninstall-libLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ + done + +clean-libLTLIBRARIES: + -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) + @list='$(lib_LTLIBRARIES)'; \ + locs=`for p in $$list; do echo $$p; done | \ + sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ + sort -u`; \ + test -z "$$locs" || { \ + echo rm -f $${locs}; \ + rm -f $${locs}; \ + } + +clean-noinstLTLIBRARIES: + -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) + @list='$(noinst_LTLIBRARIES)'; \ + locs=`for p in $$list; do echo $$p; done | \ + sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ + sort -u`; \ + test -z "$$locs" || { \ + echo rm -f $${locs}; \ + rm -f $${locs}; \ + } +lib/crypto_backend/argon2/blake2/$(am__dirstamp): + @$(MKDIR_P) lib/crypto_backend/argon2/blake2 + @: > lib/crypto_backend/argon2/blake2/$(am__dirstamp) +lib/crypto_backend/argon2/blake2/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) lib/crypto_backend/argon2/blake2/$(DEPDIR) + @: > lib/crypto_backend/argon2/blake2/$(DEPDIR)/$(am__dirstamp) +lib/crypto_backend/argon2/blake2/libargon2_la-blake2b.lo: \ + lib/crypto_backend/argon2/blake2/$(am__dirstamp) \ + lib/crypto_backend/argon2/blake2/$(DEPDIR)/$(am__dirstamp) +lib/crypto_backend/argon2/$(am__dirstamp): + @$(MKDIR_P) lib/crypto_backend/argon2 + @: > lib/crypto_backend/argon2/$(am__dirstamp) +lib/crypto_backend/argon2/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) lib/crypto_backend/argon2/$(DEPDIR) + @: > lib/crypto_backend/argon2/$(DEPDIR)/$(am__dirstamp) +lib/crypto_backend/argon2/libargon2_la-argon2.lo: \ + lib/crypto_backend/argon2/$(am__dirstamp) \ + lib/crypto_backend/argon2/$(DEPDIR)/$(am__dirstamp) +lib/crypto_backend/argon2/libargon2_la-core.lo: \ + lib/crypto_backend/argon2/$(am__dirstamp) \ + lib/crypto_backend/argon2/$(DEPDIR)/$(am__dirstamp) +lib/crypto_backend/argon2/libargon2_la-encoding.lo: \ + lib/crypto_backend/argon2/$(am__dirstamp) \ + lib/crypto_backend/argon2/$(DEPDIR)/$(am__dirstamp) +lib/crypto_backend/argon2/libargon2_la-thread.lo: \ + lib/crypto_backend/argon2/$(am__dirstamp) \ + lib/crypto_backend/argon2/$(DEPDIR)/$(am__dirstamp) +lib/crypto_backend/argon2/libargon2_la-opt.lo: \ + lib/crypto_backend/argon2/$(am__dirstamp) \ + lib/crypto_backend/argon2/$(DEPDIR)/$(am__dirstamp) +lib/crypto_backend/argon2/libargon2_la-ref.lo: \ + lib/crypto_backend/argon2/$(am__dirstamp) \ + lib/crypto_backend/argon2/$(DEPDIR)/$(am__dirstamp) + +libargon2.la: $(libargon2_la_OBJECTS) $(libargon2_la_DEPENDENCIES) $(EXTRA_libargon2_la_DEPENDENCIES) + $(AM_V_CCLD)$(libargon2_la_LINK) $(am_libargon2_la_rpath) $(libargon2_la_OBJECTS) $(libargon2_la_LIBADD) $(LIBS) +lib/crypto_backend/$(am__dirstamp): + @$(MKDIR_P) lib/crypto_backend + @: > lib/crypto_backend/$(am__dirstamp) +lib/crypto_backend/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) lib/crypto_backend/$(DEPDIR) + @: > lib/crypto_backend/$(DEPDIR)/$(am__dirstamp) +lib/crypto_backend/libcrypto_backend_la-crypto_cipher_kernel.lo: \ + lib/crypto_backend/$(am__dirstamp) \ + lib/crypto_backend/$(DEPDIR)/$(am__dirstamp) +lib/crypto_backend/libcrypto_backend_la-crypto_storage.lo: \ + lib/crypto_backend/$(am__dirstamp) \ + lib/crypto_backend/$(DEPDIR)/$(am__dirstamp) +lib/crypto_backend/libcrypto_backend_la-pbkdf_check.lo: \ + lib/crypto_backend/$(am__dirstamp) \ + lib/crypto_backend/$(DEPDIR)/$(am__dirstamp) +lib/crypto_backend/libcrypto_backend_la-crc32.lo: \ + lib/crypto_backend/$(am__dirstamp) \ + lib/crypto_backend/$(DEPDIR)/$(am__dirstamp) +lib/crypto_backend/libcrypto_backend_la-argon2_generic.lo: \ + lib/crypto_backend/$(am__dirstamp) \ + lib/crypto_backend/$(DEPDIR)/$(am__dirstamp) +lib/crypto_backend/libcrypto_backend_la-cipher_generic.lo: \ + lib/crypto_backend/$(am__dirstamp) \ + lib/crypto_backend/$(DEPDIR)/$(am__dirstamp) +lib/crypto_backend/libcrypto_backend_la-cipher_check.lo: \ + lib/crypto_backend/$(am__dirstamp) \ + lib/crypto_backend/$(DEPDIR)/$(am__dirstamp) +lib/crypto_backend/libcrypto_backend_la-crypto_gcrypt.lo: \ + lib/crypto_backend/$(am__dirstamp) \ + lib/crypto_backend/$(DEPDIR)/$(am__dirstamp) +lib/crypto_backend/libcrypto_backend_la-crypto_openssl.lo: \ + lib/crypto_backend/$(am__dirstamp) \ + lib/crypto_backend/$(DEPDIR)/$(am__dirstamp) +lib/crypto_backend/libcrypto_backend_la-crypto_nss.lo: \ + lib/crypto_backend/$(am__dirstamp) \ + lib/crypto_backend/$(DEPDIR)/$(am__dirstamp) +lib/crypto_backend/libcrypto_backend_la-crypto_kernel.lo: \ + lib/crypto_backend/$(am__dirstamp) \ + lib/crypto_backend/$(DEPDIR)/$(am__dirstamp) +lib/crypto_backend/libcrypto_backend_la-crypto_nettle.lo: \ + lib/crypto_backend/$(am__dirstamp) \ + lib/crypto_backend/$(DEPDIR)/$(am__dirstamp) +lib/crypto_backend/libcrypto_backend_la-pbkdf2_generic.lo: \ + lib/crypto_backend/$(am__dirstamp) \ + lib/crypto_backend/$(DEPDIR)/$(am__dirstamp) + +libcrypto_backend.la: $(libcrypto_backend_la_OBJECTS) $(libcrypto_backend_la_DEPENDENCIES) $(EXTRA_libcrypto_backend_la_DEPENDENCIES) + $(AM_V_CCLD)$(libcrypto_backend_la_LINK) $(libcrypto_backend_la_OBJECTS) $(libcrypto_backend_la_LIBADD) $(LIBS) +lib/$(am__dirstamp): + @$(MKDIR_P) lib + @: > lib/$(am__dirstamp) +lib/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) lib/$(DEPDIR) + @: > lib/$(DEPDIR)/$(am__dirstamp) +lib/libcryptsetup_la-setup.lo: lib/$(am__dirstamp) \ + lib/$(DEPDIR)/$(am__dirstamp) +lib/libcryptsetup_la-utils.lo: lib/$(am__dirstamp) \ + lib/$(DEPDIR)/$(am__dirstamp) +lib/libcryptsetup_la-utils_benchmark.lo: lib/$(am__dirstamp) \ + lib/$(DEPDIR)/$(am__dirstamp) +lib/libcryptsetup_la-utils_crypt.lo: lib/$(am__dirstamp) \ + lib/$(DEPDIR)/$(am__dirstamp) +lib/libcryptsetup_la-utils_loop.lo: lib/$(am__dirstamp) \ + lib/$(DEPDIR)/$(am__dirstamp) +lib/libcryptsetup_la-utils_devpath.lo: lib/$(am__dirstamp) \ + lib/$(DEPDIR)/$(am__dirstamp) +lib/libcryptsetup_la-utils_wipe.lo: lib/$(am__dirstamp) \ + lib/$(DEPDIR)/$(am__dirstamp) +lib/libcryptsetup_la-utils_fips.lo: lib/$(am__dirstamp) \ + lib/$(DEPDIR)/$(am__dirstamp) +lib/libcryptsetup_la-utils_device.lo: lib/$(am__dirstamp) \ + lib/$(DEPDIR)/$(am__dirstamp) +lib/libcryptsetup_la-utils_keyring.lo: lib/$(am__dirstamp) \ + lib/$(DEPDIR)/$(am__dirstamp) +lib/libcryptsetup_la-utils_device_locking.lo: lib/$(am__dirstamp) \ + lib/$(DEPDIR)/$(am__dirstamp) +lib/libcryptsetup_la-utils_pbkdf.lo: lib/$(am__dirstamp) \ + lib/$(DEPDIR)/$(am__dirstamp) +lib/libcryptsetup_la-utils_storage_wrappers.lo: lib/$(am__dirstamp) \ + lib/$(DEPDIR)/$(am__dirstamp) +lib/libcryptsetup_la-libdevmapper.lo: lib/$(am__dirstamp) \ + lib/$(DEPDIR)/$(am__dirstamp) +lib/libcryptsetup_la-volumekey.lo: lib/$(am__dirstamp) \ + lib/$(DEPDIR)/$(am__dirstamp) +lib/libcryptsetup_la-random.lo: lib/$(am__dirstamp) \ + lib/$(DEPDIR)/$(am__dirstamp) +lib/libcryptsetup_la-crypt_plain.lo: lib/$(am__dirstamp) \ + lib/$(DEPDIR)/$(am__dirstamp) +lib/libcryptsetup_la-base64.lo: lib/$(am__dirstamp) \ + lib/$(DEPDIR)/$(am__dirstamp) +lib/integrity/$(am__dirstamp): + @$(MKDIR_P) lib/integrity + @: > lib/integrity/$(am__dirstamp) +lib/integrity/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) lib/integrity/$(DEPDIR) + @: > lib/integrity/$(DEPDIR)/$(am__dirstamp) +lib/integrity/libcryptsetup_la-integrity.lo: \ + lib/integrity/$(am__dirstamp) \ + lib/integrity/$(DEPDIR)/$(am__dirstamp) +lib/loopaes/$(am__dirstamp): + @$(MKDIR_P) lib/loopaes + @: > lib/loopaes/$(am__dirstamp) +lib/loopaes/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) lib/loopaes/$(DEPDIR) + @: > lib/loopaes/$(DEPDIR)/$(am__dirstamp) +lib/loopaes/libcryptsetup_la-loopaes.lo: lib/loopaes/$(am__dirstamp) \ + lib/loopaes/$(DEPDIR)/$(am__dirstamp) +lib/tcrypt/$(am__dirstamp): + @$(MKDIR_P) lib/tcrypt + @: > lib/tcrypt/$(am__dirstamp) +lib/tcrypt/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) lib/tcrypt/$(DEPDIR) + @: > lib/tcrypt/$(DEPDIR)/$(am__dirstamp) +lib/tcrypt/libcryptsetup_la-tcrypt.lo: lib/tcrypt/$(am__dirstamp) \ + lib/tcrypt/$(DEPDIR)/$(am__dirstamp) +lib/luks1/$(am__dirstamp): + @$(MKDIR_P) lib/luks1 + @: > lib/luks1/$(am__dirstamp) +lib/luks1/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) lib/luks1/$(DEPDIR) + @: > lib/luks1/$(DEPDIR)/$(am__dirstamp) +lib/luks1/libcryptsetup_la-af.lo: lib/luks1/$(am__dirstamp) \ + lib/luks1/$(DEPDIR)/$(am__dirstamp) +lib/luks1/libcryptsetup_la-keyencryption.lo: \ + lib/luks1/$(am__dirstamp) lib/luks1/$(DEPDIR)/$(am__dirstamp) +lib/luks1/libcryptsetup_la-keymanage.lo: lib/luks1/$(am__dirstamp) \ + lib/luks1/$(DEPDIR)/$(am__dirstamp) +lib/verity/$(am__dirstamp): + @$(MKDIR_P) lib/verity + @: > lib/verity/$(am__dirstamp) +lib/verity/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) lib/verity/$(DEPDIR) + @: > lib/verity/$(DEPDIR)/$(am__dirstamp) +lib/verity/libcryptsetup_la-verity_hash.lo: \ + lib/verity/$(am__dirstamp) \ + lib/verity/$(DEPDIR)/$(am__dirstamp) +lib/verity/libcryptsetup_la-verity_fec.lo: lib/verity/$(am__dirstamp) \ + lib/verity/$(DEPDIR)/$(am__dirstamp) +lib/verity/libcryptsetup_la-verity.lo: lib/verity/$(am__dirstamp) \ + lib/verity/$(DEPDIR)/$(am__dirstamp) +lib/verity/libcryptsetup_la-rs_encode_char.lo: \ + lib/verity/$(am__dirstamp) \ + lib/verity/$(DEPDIR)/$(am__dirstamp) +lib/verity/libcryptsetup_la-rs_decode_char.lo: \ + lib/verity/$(am__dirstamp) \ + lib/verity/$(DEPDIR)/$(am__dirstamp) +lib/luks2/$(am__dirstamp): + @$(MKDIR_P) lib/luks2 + @: > lib/luks2/$(am__dirstamp) +lib/luks2/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) lib/luks2/$(DEPDIR) + @: > lib/luks2/$(DEPDIR)/$(am__dirstamp) +lib/luks2/libcryptsetup_la-luks2_disk_metadata.lo: \ + lib/luks2/$(am__dirstamp) lib/luks2/$(DEPDIR)/$(am__dirstamp) +lib/luks2/libcryptsetup_la-luks2_json_format.lo: \ + lib/luks2/$(am__dirstamp) lib/luks2/$(DEPDIR)/$(am__dirstamp) +lib/luks2/libcryptsetup_la-luks2_json_metadata.lo: \ + lib/luks2/$(am__dirstamp) lib/luks2/$(DEPDIR)/$(am__dirstamp) +lib/luks2/libcryptsetup_la-luks2_luks1_convert.lo: \ + lib/luks2/$(am__dirstamp) lib/luks2/$(DEPDIR)/$(am__dirstamp) +lib/luks2/libcryptsetup_la-luks2_digest.lo: lib/luks2/$(am__dirstamp) \ + lib/luks2/$(DEPDIR)/$(am__dirstamp) +lib/luks2/libcryptsetup_la-luks2_digest_pbkdf2.lo: \ + lib/luks2/$(am__dirstamp) lib/luks2/$(DEPDIR)/$(am__dirstamp) +lib/luks2/libcryptsetup_la-luks2_keyslot.lo: \ + lib/luks2/$(am__dirstamp) lib/luks2/$(DEPDIR)/$(am__dirstamp) +lib/luks2/libcryptsetup_la-luks2_keyslot_luks2.lo: \ + lib/luks2/$(am__dirstamp) lib/luks2/$(DEPDIR)/$(am__dirstamp) +lib/luks2/libcryptsetup_la-luks2_keyslot_reenc.lo: \ + lib/luks2/$(am__dirstamp) lib/luks2/$(DEPDIR)/$(am__dirstamp) +lib/luks2/libcryptsetup_la-luks2_reencrypt.lo: \ + lib/luks2/$(am__dirstamp) lib/luks2/$(DEPDIR)/$(am__dirstamp) +lib/luks2/libcryptsetup_la-luks2_segment.lo: \ + lib/luks2/$(am__dirstamp) lib/luks2/$(DEPDIR)/$(am__dirstamp) +lib/luks2/libcryptsetup_la-luks2_token_keyring.lo: \ + lib/luks2/$(am__dirstamp) lib/luks2/$(DEPDIR)/$(am__dirstamp) +lib/luks2/libcryptsetup_la-luks2_token.lo: lib/luks2/$(am__dirstamp) \ + lib/luks2/$(DEPDIR)/$(am__dirstamp) +lib/libcryptsetup_la-utils_blkid.lo: lib/$(am__dirstamp) \ + lib/$(DEPDIR)/$(am__dirstamp) + +libcryptsetup.la: $(libcryptsetup_la_OBJECTS) $(libcryptsetup_la_DEPENDENCIES) $(EXTRA_libcryptsetup_la_DEPENDENCIES) + $(AM_V_CCLD)$(libcryptsetup_la_LINK) -rpath $(libdir) $(libcryptsetup_la_OBJECTS) $(libcryptsetup_la_LIBADD) $(LIBS) +lib/libutils_io_la-utils_io.lo: lib/$(am__dirstamp) \ + lib/$(DEPDIR)/$(am__dirstamp) + +libutils_io.la: $(libutils_io_la_OBJECTS) $(libutils_io_la_DEPENDENCIES) $(EXTRA_libutils_io_la_DEPENDENCIES) + $(AM_V_CCLD)$(libutils_io_la_LINK) $(libutils_io_la_OBJECTS) $(libutils_io_la_LIBADD) $(LIBS) +lib/utils_crypt.$(OBJEXT): lib/$(am__dirstamp) \ + lib/$(DEPDIR)/$(am__dirstamp) +lib/utils_loop.$(OBJEXT): lib/$(am__dirstamp) \ + lib/$(DEPDIR)/$(am__dirstamp) +lib/utils_io.$(OBJEXT): lib/$(am__dirstamp) \ + lib/$(DEPDIR)/$(am__dirstamp) +lib/utils_blkid.$(OBJEXT): lib/$(am__dirstamp) \ + lib/$(DEPDIR)/$(am__dirstamp) +src/$(am__dirstamp): + @$(MKDIR_P) src + @: > src/$(am__dirstamp) +src/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) src/$(DEPDIR) + @: > src/$(DEPDIR)/$(am__dirstamp) +src/utils_tools.$(OBJEXT): src/$(am__dirstamp) \ + src/$(DEPDIR)/$(am__dirstamp) +src/utils_password.$(OBJEXT): src/$(am__dirstamp) \ + src/$(DEPDIR)/$(am__dirstamp) +src/utils_luks2.$(OBJEXT): src/$(am__dirstamp) \ + src/$(DEPDIR)/$(am__dirstamp) +src/utils_blockdev.$(OBJEXT): src/$(am__dirstamp) \ + src/$(DEPDIR)/$(am__dirstamp) +src/cryptsetup.$(OBJEXT): src/$(am__dirstamp) \ + src/$(DEPDIR)/$(am__dirstamp) + +cryptsetup$(EXEEXT): $(cryptsetup_OBJECTS) $(cryptsetup_DEPENDENCIES) $(EXTRA_cryptsetup_DEPENDENCIES) + @rm -f cryptsetup$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(cryptsetup_OBJECTS) $(cryptsetup_LDADD) $(LIBS) +src/cryptsetup_reencrypt.$(OBJEXT): src/$(am__dirstamp) \ + src/$(DEPDIR)/$(am__dirstamp) + +cryptsetup-reencrypt$(EXEEXT): $(cryptsetup_reencrypt_OBJECTS) $(cryptsetup_reencrypt_DEPENDENCIES) $(EXTRA_cryptsetup_reencrypt_DEPENDENCIES) + @rm -f cryptsetup-reencrypt$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(cryptsetup_reencrypt_OBJECTS) $(cryptsetup_reencrypt_LDADD) $(LIBS) + +cryptsetup-reencrypt.static$(EXEEXT): $(cryptsetup_reencrypt_static_OBJECTS) $(cryptsetup_reencrypt_static_DEPENDENCIES) $(EXTRA_cryptsetup_reencrypt_static_DEPENDENCIES) + @rm -f cryptsetup-reencrypt.static$(EXEEXT) + $(AM_V_CCLD)$(cryptsetup_reencrypt_static_LINK) $(cryptsetup_reencrypt_static_OBJECTS) $(cryptsetup_reencrypt_static_LDADD) $(LIBS) + +cryptsetup.static$(EXEEXT): $(cryptsetup_static_OBJECTS) $(cryptsetup_static_DEPENDENCIES) $(EXTRA_cryptsetup_static_DEPENDENCIES) + @rm -f cryptsetup.static$(EXEEXT) + $(AM_V_CCLD)$(cryptsetup_static_LINK) $(cryptsetup_static_OBJECTS) $(cryptsetup_static_LDADD) $(LIBS) +src/integritysetup.$(OBJEXT): src/$(am__dirstamp) \ + src/$(DEPDIR)/$(am__dirstamp) + +integritysetup$(EXEEXT): $(integritysetup_OBJECTS) $(integritysetup_DEPENDENCIES) $(EXTRA_integritysetup_DEPENDENCIES) + @rm -f integritysetup$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(integritysetup_OBJECTS) $(integritysetup_LDADD) $(LIBS) + +integritysetup.static$(EXEEXT): $(integritysetup_static_OBJECTS) $(integritysetup_static_DEPENDENCIES) $(EXTRA_integritysetup_static_DEPENDENCIES) + @rm -f integritysetup.static$(EXEEXT) + $(AM_V_CCLD)$(integritysetup_static_LINK) $(integritysetup_static_OBJECTS) $(integritysetup_static_LDADD) $(LIBS) +src/veritysetup.$(OBJEXT): src/$(am__dirstamp) \ + src/$(DEPDIR)/$(am__dirstamp) + +veritysetup$(EXEEXT): $(veritysetup_OBJECTS) $(veritysetup_DEPENDENCIES) $(EXTRA_veritysetup_DEPENDENCIES) + @rm -f veritysetup$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(veritysetup_OBJECTS) $(veritysetup_LDADD) $(LIBS) + +veritysetup.static$(EXEEXT): $(veritysetup_static_OBJECTS) $(veritysetup_static_DEPENDENCIES) $(EXTRA_veritysetup_static_DEPENDENCIES) + @rm -f veritysetup.static$(EXEEXT) + $(AM_V_CCLD)$(veritysetup_static_LINK) $(veritysetup_static_OBJECTS) $(veritysetup_static_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + -rm -f lib/*.$(OBJEXT) + -rm -f lib/*.lo + -rm -f lib/crypto_backend/*.$(OBJEXT) + -rm -f lib/crypto_backend/*.lo + -rm -f lib/crypto_backend/argon2/*.$(OBJEXT) + -rm -f lib/crypto_backend/argon2/*.lo + -rm -f lib/crypto_backend/argon2/blake2/*.$(OBJEXT) + -rm -f lib/crypto_backend/argon2/blake2/*.lo + -rm -f lib/integrity/*.$(OBJEXT) + -rm -f lib/integrity/*.lo + -rm -f lib/loopaes/*.$(OBJEXT) + -rm -f lib/loopaes/*.lo + -rm -f lib/luks1/*.$(OBJEXT) + -rm -f lib/luks1/*.lo + -rm -f lib/luks2/*.$(OBJEXT) + -rm -f lib/luks2/*.lo + -rm -f lib/tcrypt/*.$(OBJEXT) + -rm -f lib/tcrypt/*.lo + -rm -f lib/verity/*.$(OBJEXT) + -rm -f lib/verity/*.lo + -rm -f src/*.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libcryptsetup_la-base64.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libcryptsetup_la-crypt_plain.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libcryptsetup_la-libdevmapper.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libcryptsetup_la-random.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libcryptsetup_la-setup.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libcryptsetup_la-utils.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libcryptsetup_la-utils_benchmark.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libcryptsetup_la-utils_blkid.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libcryptsetup_la-utils_crypt.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libcryptsetup_la-utils_device.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libcryptsetup_la-utils_device_locking.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libcryptsetup_la-utils_devpath.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libcryptsetup_la-utils_fips.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libcryptsetup_la-utils_keyring.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libcryptsetup_la-utils_loop.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libcryptsetup_la-utils_pbkdf.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libcryptsetup_la-utils_storage_wrappers.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libcryptsetup_la-utils_wipe.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libcryptsetup_la-volumekey.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libutils_io_la-utils_io.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/utils_blkid.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/utils_crypt.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/utils_io.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/utils_loop.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@lib/crypto_backend/$(DEPDIR)/libcrypto_backend_la-argon2_generic.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@lib/crypto_backend/$(DEPDIR)/libcrypto_backend_la-cipher_check.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@lib/crypto_backend/$(DEPDIR)/libcrypto_backend_la-cipher_generic.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@lib/crypto_backend/$(DEPDIR)/libcrypto_backend_la-crc32.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@lib/crypto_backend/$(DEPDIR)/libcrypto_backend_la-crypto_cipher_kernel.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@lib/crypto_backend/$(DEPDIR)/libcrypto_backend_la-crypto_gcrypt.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@lib/crypto_backend/$(DEPDIR)/libcrypto_backend_la-crypto_kernel.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@lib/crypto_backend/$(DEPDIR)/libcrypto_backend_la-crypto_nettle.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@lib/crypto_backend/$(DEPDIR)/libcrypto_backend_la-crypto_nss.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@lib/crypto_backend/$(DEPDIR)/libcrypto_backend_la-crypto_openssl.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@lib/crypto_backend/$(DEPDIR)/libcrypto_backend_la-crypto_storage.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@lib/crypto_backend/$(DEPDIR)/libcrypto_backend_la-pbkdf2_generic.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@lib/crypto_backend/$(DEPDIR)/libcrypto_backend_la-pbkdf_check.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@lib/crypto_backend/argon2/$(DEPDIR)/libargon2_la-argon2.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@lib/crypto_backend/argon2/$(DEPDIR)/libargon2_la-core.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@lib/crypto_backend/argon2/$(DEPDIR)/libargon2_la-encoding.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@lib/crypto_backend/argon2/$(DEPDIR)/libargon2_la-opt.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@lib/crypto_backend/argon2/$(DEPDIR)/libargon2_la-ref.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@lib/crypto_backend/argon2/$(DEPDIR)/libargon2_la-thread.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@lib/crypto_backend/argon2/blake2/$(DEPDIR)/libargon2_la-blake2b.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@lib/integrity/$(DEPDIR)/libcryptsetup_la-integrity.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@lib/loopaes/$(DEPDIR)/libcryptsetup_la-loopaes.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@lib/luks1/$(DEPDIR)/libcryptsetup_la-af.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@lib/luks1/$(DEPDIR)/libcryptsetup_la-keyencryption.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@lib/luks1/$(DEPDIR)/libcryptsetup_la-keymanage.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_digest.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_digest_pbkdf2.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_disk_metadata.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_json_format.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_json_metadata.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_keyslot.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_keyslot_luks2.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_keyslot_reenc.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_luks1_convert.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_reencrypt.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_segment.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_token.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_token_keyring.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@lib/tcrypt/$(DEPDIR)/libcryptsetup_la-tcrypt.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@lib/verity/$(DEPDIR)/libcryptsetup_la-rs_decode_char.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@lib/verity/$(DEPDIR)/libcryptsetup_la-rs_encode_char.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@lib/verity/$(DEPDIR)/libcryptsetup_la-verity.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@lib/verity/$(DEPDIR)/libcryptsetup_la-verity_fec.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@lib/verity/$(DEPDIR)/libcryptsetup_la-verity_hash.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/cryptsetup.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/cryptsetup_reencrypt.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/integritysetup.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/utils_blockdev.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/utils_luks2.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/utils_password.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/utils_tools.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/veritysetup.Po@am__quote@ # am--include-marker + +$(am__depfiles_remade): + @$(MKDIR_P) $(@D) + @echo '# dummy' >$@-t && $(am__mv) $@-t $@ + +am--depfiles: $(am__depfiles_remade) + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ +@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ +@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ +@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ +@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< + +lib/crypto_backend/argon2/blake2/libargon2_la-blake2b.lo: lib/crypto_backend/argon2/blake2/blake2b.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libargon2_la_CPPFLAGS) $(CPPFLAGS) $(libargon2_la_CFLAGS) $(CFLAGS) -MT lib/crypto_backend/argon2/blake2/libargon2_la-blake2b.lo -MD -MP -MF lib/crypto_backend/argon2/blake2/$(DEPDIR)/libargon2_la-blake2b.Tpo -c -o lib/crypto_backend/argon2/blake2/libargon2_la-blake2b.lo `test -f 'lib/crypto_backend/argon2/blake2/blake2b.c' || echo '$(srcdir)/'`lib/crypto_backend/argon2/blake2/blake2b.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/crypto_backend/argon2/blake2/$(DEPDIR)/libargon2_la-blake2b.Tpo lib/crypto_backend/argon2/blake2/$(DEPDIR)/libargon2_la-blake2b.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/crypto_backend/argon2/blake2/blake2b.c' object='lib/crypto_backend/argon2/blake2/libargon2_la-blake2b.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libargon2_la_CPPFLAGS) $(CPPFLAGS) $(libargon2_la_CFLAGS) $(CFLAGS) -c -o lib/crypto_backend/argon2/blake2/libargon2_la-blake2b.lo `test -f 'lib/crypto_backend/argon2/blake2/blake2b.c' || echo '$(srcdir)/'`lib/crypto_backend/argon2/blake2/blake2b.c + +lib/crypto_backend/argon2/libargon2_la-argon2.lo: lib/crypto_backend/argon2/argon2.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libargon2_la_CPPFLAGS) $(CPPFLAGS) $(libargon2_la_CFLAGS) $(CFLAGS) -MT lib/crypto_backend/argon2/libargon2_la-argon2.lo -MD -MP -MF lib/crypto_backend/argon2/$(DEPDIR)/libargon2_la-argon2.Tpo -c -o lib/crypto_backend/argon2/libargon2_la-argon2.lo `test -f 'lib/crypto_backend/argon2/argon2.c' || echo '$(srcdir)/'`lib/crypto_backend/argon2/argon2.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/crypto_backend/argon2/$(DEPDIR)/libargon2_la-argon2.Tpo lib/crypto_backend/argon2/$(DEPDIR)/libargon2_la-argon2.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/crypto_backend/argon2/argon2.c' object='lib/crypto_backend/argon2/libargon2_la-argon2.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libargon2_la_CPPFLAGS) $(CPPFLAGS) $(libargon2_la_CFLAGS) $(CFLAGS) -c -o lib/crypto_backend/argon2/libargon2_la-argon2.lo `test -f 'lib/crypto_backend/argon2/argon2.c' || echo '$(srcdir)/'`lib/crypto_backend/argon2/argon2.c + +lib/crypto_backend/argon2/libargon2_la-core.lo: lib/crypto_backend/argon2/core.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libargon2_la_CPPFLAGS) $(CPPFLAGS) $(libargon2_la_CFLAGS) $(CFLAGS) -MT lib/crypto_backend/argon2/libargon2_la-core.lo -MD -MP -MF lib/crypto_backend/argon2/$(DEPDIR)/libargon2_la-core.Tpo -c -o lib/crypto_backend/argon2/libargon2_la-core.lo `test -f 'lib/crypto_backend/argon2/core.c' || echo '$(srcdir)/'`lib/crypto_backend/argon2/core.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/crypto_backend/argon2/$(DEPDIR)/libargon2_la-core.Tpo lib/crypto_backend/argon2/$(DEPDIR)/libargon2_la-core.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/crypto_backend/argon2/core.c' object='lib/crypto_backend/argon2/libargon2_la-core.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libargon2_la_CPPFLAGS) $(CPPFLAGS) $(libargon2_la_CFLAGS) $(CFLAGS) -c -o lib/crypto_backend/argon2/libargon2_la-core.lo `test -f 'lib/crypto_backend/argon2/core.c' || echo '$(srcdir)/'`lib/crypto_backend/argon2/core.c + +lib/crypto_backend/argon2/libargon2_la-encoding.lo: lib/crypto_backend/argon2/encoding.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libargon2_la_CPPFLAGS) $(CPPFLAGS) $(libargon2_la_CFLAGS) $(CFLAGS) -MT lib/crypto_backend/argon2/libargon2_la-encoding.lo -MD -MP -MF lib/crypto_backend/argon2/$(DEPDIR)/libargon2_la-encoding.Tpo -c -o lib/crypto_backend/argon2/libargon2_la-encoding.lo `test -f 'lib/crypto_backend/argon2/encoding.c' || echo '$(srcdir)/'`lib/crypto_backend/argon2/encoding.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/crypto_backend/argon2/$(DEPDIR)/libargon2_la-encoding.Tpo lib/crypto_backend/argon2/$(DEPDIR)/libargon2_la-encoding.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/crypto_backend/argon2/encoding.c' object='lib/crypto_backend/argon2/libargon2_la-encoding.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libargon2_la_CPPFLAGS) $(CPPFLAGS) $(libargon2_la_CFLAGS) $(CFLAGS) -c -o lib/crypto_backend/argon2/libargon2_la-encoding.lo `test -f 'lib/crypto_backend/argon2/encoding.c' || echo '$(srcdir)/'`lib/crypto_backend/argon2/encoding.c + +lib/crypto_backend/argon2/libargon2_la-thread.lo: lib/crypto_backend/argon2/thread.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libargon2_la_CPPFLAGS) $(CPPFLAGS) $(libargon2_la_CFLAGS) $(CFLAGS) -MT lib/crypto_backend/argon2/libargon2_la-thread.lo -MD -MP -MF lib/crypto_backend/argon2/$(DEPDIR)/libargon2_la-thread.Tpo -c -o lib/crypto_backend/argon2/libargon2_la-thread.lo `test -f 'lib/crypto_backend/argon2/thread.c' || echo '$(srcdir)/'`lib/crypto_backend/argon2/thread.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/crypto_backend/argon2/$(DEPDIR)/libargon2_la-thread.Tpo lib/crypto_backend/argon2/$(DEPDIR)/libargon2_la-thread.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/crypto_backend/argon2/thread.c' object='lib/crypto_backend/argon2/libargon2_la-thread.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libargon2_la_CPPFLAGS) $(CPPFLAGS) $(libargon2_la_CFLAGS) $(CFLAGS) -c -o lib/crypto_backend/argon2/libargon2_la-thread.lo `test -f 'lib/crypto_backend/argon2/thread.c' || echo '$(srcdir)/'`lib/crypto_backend/argon2/thread.c + +lib/crypto_backend/argon2/libargon2_la-opt.lo: lib/crypto_backend/argon2/opt.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libargon2_la_CPPFLAGS) $(CPPFLAGS) $(libargon2_la_CFLAGS) $(CFLAGS) -MT lib/crypto_backend/argon2/libargon2_la-opt.lo -MD -MP -MF lib/crypto_backend/argon2/$(DEPDIR)/libargon2_la-opt.Tpo -c -o lib/crypto_backend/argon2/libargon2_la-opt.lo `test -f 'lib/crypto_backend/argon2/opt.c' || echo '$(srcdir)/'`lib/crypto_backend/argon2/opt.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/crypto_backend/argon2/$(DEPDIR)/libargon2_la-opt.Tpo lib/crypto_backend/argon2/$(DEPDIR)/libargon2_la-opt.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/crypto_backend/argon2/opt.c' object='lib/crypto_backend/argon2/libargon2_la-opt.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libargon2_la_CPPFLAGS) $(CPPFLAGS) $(libargon2_la_CFLAGS) $(CFLAGS) -c -o lib/crypto_backend/argon2/libargon2_la-opt.lo `test -f 'lib/crypto_backend/argon2/opt.c' || echo '$(srcdir)/'`lib/crypto_backend/argon2/opt.c + +lib/crypto_backend/argon2/libargon2_la-ref.lo: lib/crypto_backend/argon2/ref.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libargon2_la_CPPFLAGS) $(CPPFLAGS) $(libargon2_la_CFLAGS) $(CFLAGS) -MT lib/crypto_backend/argon2/libargon2_la-ref.lo -MD -MP -MF lib/crypto_backend/argon2/$(DEPDIR)/libargon2_la-ref.Tpo -c -o lib/crypto_backend/argon2/libargon2_la-ref.lo `test -f 'lib/crypto_backend/argon2/ref.c' || echo '$(srcdir)/'`lib/crypto_backend/argon2/ref.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/crypto_backend/argon2/$(DEPDIR)/libargon2_la-ref.Tpo lib/crypto_backend/argon2/$(DEPDIR)/libargon2_la-ref.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/crypto_backend/argon2/ref.c' object='lib/crypto_backend/argon2/libargon2_la-ref.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libargon2_la_CPPFLAGS) $(CPPFLAGS) $(libargon2_la_CFLAGS) $(CFLAGS) -c -o lib/crypto_backend/argon2/libargon2_la-ref.lo `test -f 'lib/crypto_backend/argon2/ref.c' || echo '$(srcdir)/'`lib/crypto_backend/argon2/ref.c + +lib/crypto_backend/libcrypto_backend_la-crypto_cipher_kernel.lo: lib/crypto_backend/crypto_cipher_kernel.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcrypto_backend_la_CFLAGS) $(CFLAGS) -MT lib/crypto_backend/libcrypto_backend_la-crypto_cipher_kernel.lo -MD -MP -MF lib/crypto_backend/$(DEPDIR)/libcrypto_backend_la-crypto_cipher_kernel.Tpo -c -o lib/crypto_backend/libcrypto_backend_la-crypto_cipher_kernel.lo `test -f 'lib/crypto_backend/crypto_cipher_kernel.c' || echo '$(srcdir)/'`lib/crypto_backend/crypto_cipher_kernel.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/crypto_backend/$(DEPDIR)/libcrypto_backend_la-crypto_cipher_kernel.Tpo lib/crypto_backend/$(DEPDIR)/libcrypto_backend_la-crypto_cipher_kernel.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/crypto_backend/crypto_cipher_kernel.c' object='lib/crypto_backend/libcrypto_backend_la-crypto_cipher_kernel.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcrypto_backend_la_CFLAGS) $(CFLAGS) -c -o lib/crypto_backend/libcrypto_backend_la-crypto_cipher_kernel.lo `test -f 'lib/crypto_backend/crypto_cipher_kernel.c' || echo '$(srcdir)/'`lib/crypto_backend/crypto_cipher_kernel.c + +lib/crypto_backend/libcrypto_backend_la-crypto_storage.lo: lib/crypto_backend/crypto_storage.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcrypto_backend_la_CFLAGS) $(CFLAGS) -MT lib/crypto_backend/libcrypto_backend_la-crypto_storage.lo -MD -MP -MF lib/crypto_backend/$(DEPDIR)/libcrypto_backend_la-crypto_storage.Tpo -c -o lib/crypto_backend/libcrypto_backend_la-crypto_storage.lo `test -f 'lib/crypto_backend/crypto_storage.c' || echo '$(srcdir)/'`lib/crypto_backend/crypto_storage.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/crypto_backend/$(DEPDIR)/libcrypto_backend_la-crypto_storage.Tpo lib/crypto_backend/$(DEPDIR)/libcrypto_backend_la-crypto_storage.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/crypto_backend/crypto_storage.c' object='lib/crypto_backend/libcrypto_backend_la-crypto_storage.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcrypto_backend_la_CFLAGS) $(CFLAGS) -c -o lib/crypto_backend/libcrypto_backend_la-crypto_storage.lo `test -f 'lib/crypto_backend/crypto_storage.c' || echo '$(srcdir)/'`lib/crypto_backend/crypto_storage.c + +lib/crypto_backend/libcrypto_backend_la-pbkdf_check.lo: lib/crypto_backend/pbkdf_check.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcrypto_backend_la_CFLAGS) $(CFLAGS) -MT lib/crypto_backend/libcrypto_backend_la-pbkdf_check.lo -MD -MP -MF lib/crypto_backend/$(DEPDIR)/libcrypto_backend_la-pbkdf_check.Tpo -c -o lib/crypto_backend/libcrypto_backend_la-pbkdf_check.lo `test -f 'lib/crypto_backend/pbkdf_check.c' || echo '$(srcdir)/'`lib/crypto_backend/pbkdf_check.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/crypto_backend/$(DEPDIR)/libcrypto_backend_la-pbkdf_check.Tpo lib/crypto_backend/$(DEPDIR)/libcrypto_backend_la-pbkdf_check.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/crypto_backend/pbkdf_check.c' object='lib/crypto_backend/libcrypto_backend_la-pbkdf_check.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcrypto_backend_la_CFLAGS) $(CFLAGS) -c -o lib/crypto_backend/libcrypto_backend_la-pbkdf_check.lo `test -f 'lib/crypto_backend/pbkdf_check.c' || echo '$(srcdir)/'`lib/crypto_backend/pbkdf_check.c + +lib/crypto_backend/libcrypto_backend_la-crc32.lo: lib/crypto_backend/crc32.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcrypto_backend_la_CFLAGS) $(CFLAGS) -MT lib/crypto_backend/libcrypto_backend_la-crc32.lo -MD -MP -MF lib/crypto_backend/$(DEPDIR)/libcrypto_backend_la-crc32.Tpo -c -o lib/crypto_backend/libcrypto_backend_la-crc32.lo `test -f 'lib/crypto_backend/crc32.c' || echo '$(srcdir)/'`lib/crypto_backend/crc32.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/crypto_backend/$(DEPDIR)/libcrypto_backend_la-crc32.Tpo lib/crypto_backend/$(DEPDIR)/libcrypto_backend_la-crc32.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/crypto_backend/crc32.c' object='lib/crypto_backend/libcrypto_backend_la-crc32.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcrypto_backend_la_CFLAGS) $(CFLAGS) -c -o lib/crypto_backend/libcrypto_backend_la-crc32.lo `test -f 'lib/crypto_backend/crc32.c' || echo '$(srcdir)/'`lib/crypto_backend/crc32.c + +lib/crypto_backend/libcrypto_backend_la-argon2_generic.lo: lib/crypto_backend/argon2_generic.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcrypto_backend_la_CFLAGS) $(CFLAGS) -MT lib/crypto_backend/libcrypto_backend_la-argon2_generic.lo -MD -MP -MF lib/crypto_backend/$(DEPDIR)/libcrypto_backend_la-argon2_generic.Tpo -c -o lib/crypto_backend/libcrypto_backend_la-argon2_generic.lo `test -f 'lib/crypto_backend/argon2_generic.c' || echo '$(srcdir)/'`lib/crypto_backend/argon2_generic.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/crypto_backend/$(DEPDIR)/libcrypto_backend_la-argon2_generic.Tpo lib/crypto_backend/$(DEPDIR)/libcrypto_backend_la-argon2_generic.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/crypto_backend/argon2_generic.c' object='lib/crypto_backend/libcrypto_backend_la-argon2_generic.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcrypto_backend_la_CFLAGS) $(CFLAGS) -c -o lib/crypto_backend/libcrypto_backend_la-argon2_generic.lo `test -f 'lib/crypto_backend/argon2_generic.c' || echo '$(srcdir)/'`lib/crypto_backend/argon2_generic.c + +lib/crypto_backend/libcrypto_backend_la-cipher_generic.lo: lib/crypto_backend/cipher_generic.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcrypto_backend_la_CFLAGS) $(CFLAGS) -MT lib/crypto_backend/libcrypto_backend_la-cipher_generic.lo -MD -MP -MF lib/crypto_backend/$(DEPDIR)/libcrypto_backend_la-cipher_generic.Tpo -c -o lib/crypto_backend/libcrypto_backend_la-cipher_generic.lo `test -f 'lib/crypto_backend/cipher_generic.c' || echo '$(srcdir)/'`lib/crypto_backend/cipher_generic.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/crypto_backend/$(DEPDIR)/libcrypto_backend_la-cipher_generic.Tpo lib/crypto_backend/$(DEPDIR)/libcrypto_backend_la-cipher_generic.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/crypto_backend/cipher_generic.c' object='lib/crypto_backend/libcrypto_backend_la-cipher_generic.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcrypto_backend_la_CFLAGS) $(CFLAGS) -c -o lib/crypto_backend/libcrypto_backend_la-cipher_generic.lo `test -f 'lib/crypto_backend/cipher_generic.c' || echo '$(srcdir)/'`lib/crypto_backend/cipher_generic.c + +lib/crypto_backend/libcrypto_backend_la-cipher_check.lo: lib/crypto_backend/cipher_check.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcrypto_backend_la_CFLAGS) $(CFLAGS) -MT lib/crypto_backend/libcrypto_backend_la-cipher_check.lo -MD -MP -MF lib/crypto_backend/$(DEPDIR)/libcrypto_backend_la-cipher_check.Tpo -c -o lib/crypto_backend/libcrypto_backend_la-cipher_check.lo `test -f 'lib/crypto_backend/cipher_check.c' || echo '$(srcdir)/'`lib/crypto_backend/cipher_check.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/crypto_backend/$(DEPDIR)/libcrypto_backend_la-cipher_check.Tpo lib/crypto_backend/$(DEPDIR)/libcrypto_backend_la-cipher_check.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/crypto_backend/cipher_check.c' object='lib/crypto_backend/libcrypto_backend_la-cipher_check.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcrypto_backend_la_CFLAGS) $(CFLAGS) -c -o lib/crypto_backend/libcrypto_backend_la-cipher_check.lo `test -f 'lib/crypto_backend/cipher_check.c' || echo '$(srcdir)/'`lib/crypto_backend/cipher_check.c + +lib/crypto_backend/libcrypto_backend_la-crypto_gcrypt.lo: lib/crypto_backend/crypto_gcrypt.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcrypto_backend_la_CFLAGS) $(CFLAGS) -MT lib/crypto_backend/libcrypto_backend_la-crypto_gcrypt.lo -MD -MP -MF lib/crypto_backend/$(DEPDIR)/libcrypto_backend_la-crypto_gcrypt.Tpo -c -o lib/crypto_backend/libcrypto_backend_la-crypto_gcrypt.lo `test -f 'lib/crypto_backend/crypto_gcrypt.c' || echo '$(srcdir)/'`lib/crypto_backend/crypto_gcrypt.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/crypto_backend/$(DEPDIR)/libcrypto_backend_la-crypto_gcrypt.Tpo lib/crypto_backend/$(DEPDIR)/libcrypto_backend_la-crypto_gcrypt.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/crypto_backend/crypto_gcrypt.c' object='lib/crypto_backend/libcrypto_backend_la-crypto_gcrypt.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcrypto_backend_la_CFLAGS) $(CFLAGS) -c -o lib/crypto_backend/libcrypto_backend_la-crypto_gcrypt.lo `test -f 'lib/crypto_backend/crypto_gcrypt.c' || echo '$(srcdir)/'`lib/crypto_backend/crypto_gcrypt.c + +lib/crypto_backend/libcrypto_backend_la-crypto_openssl.lo: lib/crypto_backend/crypto_openssl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcrypto_backend_la_CFLAGS) $(CFLAGS) -MT lib/crypto_backend/libcrypto_backend_la-crypto_openssl.lo -MD -MP -MF lib/crypto_backend/$(DEPDIR)/libcrypto_backend_la-crypto_openssl.Tpo -c -o lib/crypto_backend/libcrypto_backend_la-crypto_openssl.lo `test -f 'lib/crypto_backend/crypto_openssl.c' || echo '$(srcdir)/'`lib/crypto_backend/crypto_openssl.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/crypto_backend/$(DEPDIR)/libcrypto_backend_la-crypto_openssl.Tpo lib/crypto_backend/$(DEPDIR)/libcrypto_backend_la-crypto_openssl.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/crypto_backend/crypto_openssl.c' object='lib/crypto_backend/libcrypto_backend_la-crypto_openssl.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcrypto_backend_la_CFLAGS) $(CFLAGS) -c -o lib/crypto_backend/libcrypto_backend_la-crypto_openssl.lo `test -f 'lib/crypto_backend/crypto_openssl.c' || echo '$(srcdir)/'`lib/crypto_backend/crypto_openssl.c + +lib/crypto_backend/libcrypto_backend_la-crypto_nss.lo: lib/crypto_backend/crypto_nss.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcrypto_backend_la_CFLAGS) $(CFLAGS) -MT lib/crypto_backend/libcrypto_backend_la-crypto_nss.lo -MD -MP -MF lib/crypto_backend/$(DEPDIR)/libcrypto_backend_la-crypto_nss.Tpo -c -o lib/crypto_backend/libcrypto_backend_la-crypto_nss.lo `test -f 'lib/crypto_backend/crypto_nss.c' || echo '$(srcdir)/'`lib/crypto_backend/crypto_nss.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/crypto_backend/$(DEPDIR)/libcrypto_backend_la-crypto_nss.Tpo lib/crypto_backend/$(DEPDIR)/libcrypto_backend_la-crypto_nss.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/crypto_backend/crypto_nss.c' object='lib/crypto_backend/libcrypto_backend_la-crypto_nss.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcrypto_backend_la_CFLAGS) $(CFLAGS) -c -o lib/crypto_backend/libcrypto_backend_la-crypto_nss.lo `test -f 'lib/crypto_backend/crypto_nss.c' || echo '$(srcdir)/'`lib/crypto_backend/crypto_nss.c + +lib/crypto_backend/libcrypto_backend_la-crypto_kernel.lo: lib/crypto_backend/crypto_kernel.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcrypto_backend_la_CFLAGS) $(CFLAGS) -MT lib/crypto_backend/libcrypto_backend_la-crypto_kernel.lo -MD -MP -MF lib/crypto_backend/$(DEPDIR)/libcrypto_backend_la-crypto_kernel.Tpo -c -o lib/crypto_backend/libcrypto_backend_la-crypto_kernel.lo `test -f 'lib/crypto_backend/crypto_kernel.c' || echo '$(srcdir)/'`lib/crypto_backend/crypto_kernel.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/crypto_backend/$(DEPDIR)/libcrypto_backend_la-crypto_kernel.Tpo lib/crypto_backend/$(DEPDIR)/libcrypto_backend_la-crypto_kernel.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/crypto_backend/crypto_kernel.c' object='lib/crypto_backend/libcrypto_backend_la-crypto_kernel.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcrypto_backend_la_CFLAGS) $(CFLAGS) -c -o lib/crypto_backend/libcrypto_backend_la-crypto_kernel.lo `test -f 'lib/crypto_backend/crypto_kernel.c' || echo '$(srcdir)/'`lib/crypto_backend/crypto_kernel.c + +lib/crypto_backend/libcrypto_backend_la-crypto_nettle.lo: lib/crypto_backend/crypto_nettle.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcrypto_backend_la_CFLAGS) $(CFLAGS) -MT lib/crypto_backend/libcrypto_backend_la-crypto_nettle.lo -MD -MP -MF lib/crypto_backend/$(DEPDIR)/libcrypto_backend_la-crypto_nettle.Tpo -c -o lib/crypto_backend/libcrypto_backend_la-crypto_nettle.lo `test -f 'lib/crypto_backend/crypto_nettle.c' || echo '$(srcdir)/'`lib/crypto_backend/crypto_nettle.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/crypto_backend/$(DEPDIR)/libcrypto_backend_la-crypto_nettle.Tpo lib/crypto_backend/$(DEPDIR)/libcrypto_backend_la-crypto_nettle.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/crypto_backend/crypto_nettle.c' object='lib/crypto_backend/libcrypto_backend_la-crypto_nettle.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcrypto_backend_la_CFLAGS) $(CFLAGS) -c -o lib/crypto_backend/libcrypto_backend_la-crypto_nettle.lo `test -f 'lib/crypto_backend/crypto_nettle.c' || echo '$(srcdir)/'`lib/crypto_backend/crypto_nettle.c + +lib/crypto_backend/libcrypto_backend_la-pbkdf2_generic.lo: lib/crypto_backend/pbkdf2_generic.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcrypto_backend_la_CFLAGS) $(CFLAGS) -MT lib/crypto_backend/libcrypto_backend_la-pbkdf2_generic.lo -MD -MP -MF lib/crypto_backend/$(DEPDIR)/libcrypto_backend_la-pbkdf2_generic.Tpo -c -o lib/crypto_backend/libcrypto_backend_la-pbkdf2_generic.lo `test -f 'lib/crypto_backend/pbkdf2_generic.c' || echo '$(srcdir)/'`lib/crypto_backend/pbkdf2_generic.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/crypto_backend/$(DEPDIR)/libcrypto_backend_la-pbkdf2_generic.Tpo lib/crypto_backend/$(DEPDIR)/libcrypto_backend_la-pbkdf2_generic.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/crypto_backend/pbkdf2_generic.c' object='lib/crypto_backend/libcrypto_backend_la-pbkdf2_generic.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcrypto_backend_la_CFLAGS) $(CFLAGS) -c -o lib/crypto_backend/libcrypto_backend_la-pbkdf2_generic.lo `test -f 'lib/crypto_backend/pbkdf2_generic.c' || echo '$(srcdir)/'`lib/crypto_backend/pbkdf2_generic.c + +lib/libcryptsetup_la-setup.lo: lib/setup.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcryptsetup_la_CPPFLAGS) $(CPPFLAGS) $(libcryptsetup_la_CFLAGS) $(CFLAGS) -MT lib/libcryptsetup_la-setup.lo -MD -MP -MF lib/$(DEPDIR)/libcryptsetup_la-setup.Tpo -c -o lib/libcryptsetup_la-setup.lo `test -f 'lib/setup.c' || echo '$(srcdir)/'`lib/setup.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/$(DEPDIR)/libcryptsetup_la-setup.Tpo lib/$(DEPDIR)/libcryptsetup_la-setup.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/setup.c' object='lib/libcryptsetup_la-setup.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcryptsetup_la_CPPFLAGS) $(CPPFLAGS) $(libcryptsetup_la_CFLAGS) $(CFLAGS) -c -o lib/libcryptsetup_la-setup.lo `test -f 'lib/setup.c' || echo '$(srcdir)/'`lib/setup.c + +lib/libcryptsetup_la-utils.lo: lib/utils.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcryptsetup_la_CPPFLAGS) $(CPPFLAGS) $(libcryptsetup_la_CFLAGS) $(CFLAGS) -MT lib/libcryptsetup_la-utils.lo -MD -MP -MF lib/$(DEPDIR)/libcryptsetup_la-utils.Tpo -c -o lib/libcryptsetup_la-utils.lo `test -f 'lib/utils.c' || echo '$(srcdir)/'`lib/utils.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/$(DEPDIR)/libcryptsetup_la-utils.Tpo lib/$(DEPDIR)/libcryptsetup_la-utils.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/utils.c' object='lib/libcryptsetup_la-utils.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcryptsetup_la_CPPFLAGS) $(CPPFLAGS) $(libcryptsetup_la_CFLAGS) $(CFLAGS) -c -o lib/libcryptsetup_la-utils.lo `test -f 'lib/utils.c' || echo '$(srcdir)/'`lib/utils.c + +lib/libcryptsetup_la-utils_benchmark.lo: lib/utils_benchmark.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcryptsetup_la_CPPFLAGS) $(CPPFLAGS) $(libcryptsetup_la_CFLAGS) $(CFLAGS) -MT lib/libcryptsetup_la-utils_benchmark.lo -MD -MP -MF lib/$(DEPDIR)/libcryptsetup_la-utils_benchmark.Tpo -c -o lib/libcryptsetup_la-utils_benchmark.lo `test -f 'lib/utils_benchmark.c' || echo '$(srcdir)/'`lib/utils_benchmark.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/$(DEPDIR)/libcryptsetup_la-utils_benchmark.Tpo lib/$(DEPDIR)/libcryptsetup_la-utils_benchmark.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/utils_benchmark.c' object='lib/libcryptsetup_la-utils_benchmark.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcryptsetup_la_CPPFLAGS) $(CPPFLAGS) $(libcryptsetup_la_CFLAGS) $(CFLAGS) -c -o lib/libcryptsetup_la-utils_benchmark.lo `test -f 'lib/utils_benchmark.c' || echo '$(srcdir)/'`lib/utils_benchmark.c + +lib/libcryptsetup_la-utils_crypt.lo: lib/utils_crypt.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcryptsetup_la_CPPFLAGS) $(CPPFLAGS) $(libcryptsetup_la_CFLAGS) $(CFLAGS) -MT lib/libcryptsetup_la-utils_crypt.lo -MD -MP -MF lib/$(DEPDIR)/libcryptsetup_la-utils_crypt.Tpo -c -o lib/libcryptsetup_la-utils_crypt.lo `test -f 'lib/utils_crypt.c' || echo '$(srcdir)/'`lib/utils_crypt.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/$(DEPDIR)/libcryptsetup_la-utils_crypt.Tpo lib/$(DEPDIR)/libcryptsetup_la-utils_crypt.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/utils_crypt.c' object='lib/libcryptsetup_la-utils_crypt.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcryptsetup_la_CPPFLAGS) $(CPPFLAGS) $(libcryptsetup_la_CFLAGS) $(CFLAGS) -c -o lib/libcryptsetup_la-utils_crypt.lo `test -f 'lib/utils_crypt.c' || echo '$(srcdir)/'`lib/utils_crypt.c + +lib/libcryptsetup_la-utils_loop.lo: lib/utils_loop.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcryptsetup_la_CPPFLAGS) $(CPPFLAGS) $(libcryptsetup_la_CFLAGS) $(CFLAGS) -MT lib/libcryptsetup_la-utils_loop.lo -MD -MP -MF lib/$(DEPDIR)/libcryptsetup_la-utils_loop.Tpo -c -o lib/libcryptsetup_la-utils_loop.lo `test -f 'lib/utils_loop.c' || echo '$(srcdir)/'`lib/utils_loop.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/$(DEPDIR)/libcryptsetup_la-utils_loop.Tpo lib/$(DEPDIR)/libcryptsetup_la-utils_loop.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/utils_loop.c' object='lib/libcryptsetup_la-utils_loop.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcryptsetup_la_CPPFLAGS) $(CPPFLAGS) $(libcryptsetup_la_CFLAGS) $(CFLAGS) -c -o lib/libcryptsetup_la-utils_loop.lo `test -f 'lib/utils_loop.c' || echo '$(srcdir)/'`lib/utils_loop.c + +lib/libcryptsetup_la-utils_devpath.lo: lib/utils_devpath.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcryptsetup_la_CPPFLAGS) $(CPPFLAGS) $(libcryptsetup_la_CFLAGS) $(CFLAGS) -MT lib/libcryptsetup_la-utils_devpath.lo -MD -MP -MF lib/$(DEPDIR)/libcryptsetup_la-utils_devpath.Tpo -c -o lib/libcryptsetup_la-utils_devpath.lo `test -f 'lib/utils_devpath.c' || echo '$(srcdir)/'`lib/utils_devpath.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/$(DEPDIR)/libcryptsetup_la-utils_devpath.Tpo lib/$(DEPDIR)/libcryptsetup_la-utils_devpath.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/utils_devpath.c' object='lib/libcryptsetup_la-utils_devpath.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcryptsetup_la_CPPFLAGS) $(CPPFLAGS) $(libcryptsetup_la_CFLAGS) $(CFLAGS) -c -o lib/libcryptsetup_la-utils_devpath.lo `test -f 'lib/utils_devpath.c' || echo '$(srcdir)/'`lib/utils_devpath.c + +lib/libcryptsetup_la-utils_wipe.lo: lib/utils_wipe.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcryptsetup_la_CPPFLAGS) $(CPPFLAGS) $(libcryptsetup_la_CFLAGS) $(CFLAGS) -MT lib/libcryptsetup_la-utils_wipe.lo -MD -MP -MF lib/$(DEPDIR)/libcryptsetup_la-utils_wipe.Tpo -c -o lib/libcryptsetup_la-utils_wipe.lo `test -f 'lib/utils_wipe.c' || echo '$(srcdir)/'`lib/utils_wipe.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/$(DEPDIR)/libcryptsetup_la-utils_wipe.Tpo lib/$(DEPDIR)/libcryptsetup_la-utils_wipe.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/utils_wipe.c' object='lib/libcryptsetup_la-utils_wipe.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcryptsetup_la_CPPFLAGS) $(CPPFLAGS) $(libcryptsetup_la_CFLAGS) $(CFLAGS) -c -o lib/libcryptsetup_la-utils_wipe.lo `test -f 'lib/utils_wipe.c' || echo '$(srcdir)/'`lib/utils_wipe.c + +lib/libcryptsetup_la-utils_fips.lo: lib/utils_fips.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcryptsetup_la_CPPFLAGS) $(CPPFLAGS) $(libcryptsetup_la_CFLAGS) $(CFLAGS) -MT lib/libcryptsetup_la-utils_fips.lo -MD -MP -MF lib/$(DEPDIR)/libcryptsetup_la-utils_fips.Tpo -c -o lib/libcryptsetup_la-utils_fips.lo `test -f 'lib/utils_fips.c' || echo '$(srcdir)/'`lib/utils_fips.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/$(DEPDIR)/libcryptsetup_la-utils_fips.Tpo lib/$(DEPDIR)/libcryptsetup_la-utils_fips.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/utils_fips.c' object='lib/libcryptsetup_la-utils_fips.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcryptsetup_la_CPPFLAGS) $(CPPFLAGS) $(libcryptsetup_la_CFLAGS) $(CFLAGS) -c -o lib/libcryptsetup_la-utils_fips.lo `test -f 'lib/utils_fips.c' || echo '$(srcdir)/'`lib/utils_fips.c + +lib/libcryptsetup_la-utils_device.lo: lib/utils_device.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcryptsetup_la_CPPFLAGS) $(CPPFLAGS) $(libcryptsetup_la_CFLAGS) $(CFLAGS) -MT lib/libcryptsetup_la-utils_device.lo -MD -MP -MF lib/$(DEPDIR)/libcryptsetup_la-utils_device.Tpo -c -o lib/libcryptsetup_la-utils_device.lo `test -f 'lib/utils_device.c' || echo '$(srcdir)/'`lib/utils_device.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/$(DEPDIR)/libcryptsetup_la-utils_device.Tpo lib/$(DEPDIR)/libcryptsetup_la-utils_device.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/utils_device.c' object='lib/libcryptsetup_la-utils_device.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcryptsetup_la_CPPFLAGS) $(CPPFLAGS) $(libcryptsetup_la_CFLAGS) $(CFLAGS) -c -o lib/libcryptsetup_la-utils_device.lo `test -f 'lib/utils_device.c' || echo '$(srcdir)/'`lib/utils_device.c + +lib/libcryptsetup_la-utils_keyring.lo: lib/utils_keyring.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcryptsetup_la_CPPFLAGS) $(CPPFLAGS) $(libcryptsetup_la_CFLAGS) $(CFLAGS) -MT lib/libcryptsetup_la-utils_keyring.lo -MD -MP -MF lib/$(DEPDIR)/libcryptsetup_la-utils_keyring.Tpo -c -o lib/libcryptsetup_la-utils_keyring.lo `test -f 'lib/utils_keyring.c' || echo '$(srcdir)/'`lib/utils_keyring.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/$(DEPDIR)/libcryptsetup_la-utils_keyring.Tpo lib/$(DEPDIR)/libcryptsetup_la-utils_keyring.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/utils_keyring.c' object='lib/libcryptsetup_la-utils_keyring.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcryptsetup_la_CPPFLAGS) $(CPPFLAGS) $(libcryptsetup_la_CFLAGS) $(CFLAGS) -c -o lib/libcryptsetup_la-utils_keyring.lo `test -f 'lib/utils_keyring.c' || echo '$(srcdir)/'`lib/utils_keyring.c + +lib/libcryptsetup_la-utils_device_locking.lo: lib/utils_device_locking.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcryptsetup_la_CPPFLAGS) $(CPPFLAGS) $(libcryptsetup_la_CFLAGS) $(CFLAGS) -MT lib/libcryptsetup_la-utils_device_locking.lo -MD -MP -MF lib/$(DEPDIR)/libcryptsetup_la-utils_device_locking.Tpo -c -o lib/libcryptsetup_la-utils_device_locking.lo `test -f 'lib/utils_device_locking.c' || echo '$(srcdir)/'`lib/utils_device_locking.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/$(DEPDIR)/libcryptsetup_la-utils_device_locking.Tpo lib/$(DEPDIR)/libcryptsetup_la-utils_device_locking.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/utils_device_locking.c' object='lib/libcryptsetup_la-utils_device_locking.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcryptsetup_la_CPPFLAGS) $(CPPFLAGS) $(libcryptsetup_la_CFLAGS) $(CFLAGS) -c -o lib/libcryptsetup_la-utils_device_locking.lo `test -f 'lib/utils_device_locking.c' || echo '$(srcdir)/'`lib/utils_device_locking.c + +lib/libcryptsetup_la-utils_pbkdf.lo: lib/utils_pbkdf.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcryptsetup_la_CPPFLAGS) $(CPPFLAGS) $(libcryptsetup_la_CFLAGS) $(CFLAGS) -MT lib/libcryptsetup_la-utils_pbkdf.lo -MD -MP -MF lib/$(DEPDIR)/libcryptsetup_la-utils_pbkdf.Tpo -c -o lib/libcryptsetup_la-utils_pbkdf.lo `test -f 'lib/utils_pbkdf.c' || echo '$(srcdir)/'`lib/utils_pbkdf.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/$(DEPDIR)/libcryptsetup_la-utils_pbkdf.Tpo lib/$(DEPDIR)/libcryptsetup_la-utils_pbkdf.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/utils_pbkdf.c' object='lib/libcryptsetup_la-utils_pbkdf.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcryptsetup_la_CPPFLAGS) $(CPPFLAGS) $(libcryptsetup_la_CFLAGS) $(CFLAGS) -c -o lib/libcryptsetup_la-utils_pbkdf.lo `test -f 'lib/utils_pbkdf.c' || echo '$(srcdir)/'`lib/utils_pbkdf.c + +lib/libcryptsetup_la-utils_storage_wrappers.lo: lib/utils_storage_wrappers.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcryptsetup_la_CPPFLAGS) $(CPPFLAGS) $(libcryptsetup_la_CFLAGS) $(CFLAGS) -MT lib/libcryptsetup_la-utils_storage_wrappers.lo -MD -MP -MF lib/$(DEPDIR)/libcryptsetup_la-utils_storage_wrappers.Tpo -c -o lib/libcryptsetup_la-utils_storage_wrappers.lo `test -f 'lib/utils_storage_wrappers.c' || echo '$(srcdir)/'`lib/utils_storage_wrappers.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/$(DEPDIR)/libcryptsetup_la-utils_storage_wrappers.Tpo lib/$(DEPDIR)/libcryptsetup_la-utils_storage_wrappers.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/utils_storage_wrappers.c' object='lib/libcryptsetup_la-utils_storage_wrappers.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcryptsetup_la_CPPFLAGS) $(CPPFLAGS) $(libcryptsetup_la_CFLAGS) $(CFLAGS) -c -o lib/libcryptsetup_la-utils_storage_wrappers.lo `test -f 'lib/utils_storage_wrappers.c' || echo '$(srcdir)/'`lib/utils_storage_wrappers.c + +lib/libcryptsetup_la-libdevmapper.lo: lib/libdevmapper.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcryptsetup_la_CPPFLAGS) $(CPPFLAGS) $(libcryptsetup_la_CFLAGS) $(CFLAGS) -MT lib/libcryptsetup_la-libdevmapper.lo -MD -MP -MF lib/$(DEPDIR)/libcryptsetup_la-libdevmapper.Tpo -c -o lib/libcryptsetup_la-libdevmapper.lo `test -f 'lib/libdevmapper.c' || echo '$(srcdir)/'`lib/libdevmapper.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/$(DEPDIR)/libcryptsetup_la-libdevmapper.Tpo lib/$(DEPDIR)/libcryptsetup_la-libdevmapper.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/libdevmapper.c' object='lib/libcryptsetup_la-libdevmapper.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcryptsetup_la_CPPFLAGS) $(CPPFLAGS) $(libcryptsetup_la_CFLAGS) $(CFLAGS) -c -o lib/libcryptsetup_la-libdevmapper.lo `test -f 'lib/libdevmapper.c' || echo '$(srcdir)/'`lib/libdevmapper.c + +lib/libcryptsetup_la-volumekey.lo: lib/volumekey.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcryptsetup_la_CPPFLAGS) $(CPPFLAGS) $(libcryptsetup_la_CFLAGS) $(CFLAGS) -MT lib/libcryptsetup_la-volumekey.lo -MD -MP -MF lib/$(DEPDIR)/libcryptsetup_la-volumekey.Tpo -c -o lib/libcryptsetup_la-volumekey.lo `test -f 'lib/volumekey.c' || echo '$(srcdir)/'`lib/volumekey.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/$(DEPDIR)/libcryptsetup_la-volumekey.Tpo lib/$(DEPDIR)/libcryptsetup_la-volumekey.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/volumekey.c' object='lib/libcryptsetup_la-volumekey.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcryptsetup_la_CPPFLAGS) $(CPPFLAGS) $(libcryptsetup_la_CFLAGS) $(CFLAGS) -c -o lib/libcryptsetup_la-volumekey.lo `test -f 'lib/volumekey.c' || echo '$(srcdir)/'`lib/volumekey.c + +lib/libcryptsetup_la-random.lo: lib/random.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcryptsetup_la_CPPFLAGS) $(CPPFLAGS) $(libcryptsetup_la_CFLAGS) $(CFLAGS) -MT lib/libcryptsetup_la-random.lo -MD -MP -MF lib/$(DEPDIR)/libcryptsetup_la-random.Tpo -c -o lib/libcryptsetup_la-random.lo `test -f 'lib/random.c' || echo '$(srcdir)/'`lib/random.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/$(DEPDIR)/libcryptsetup_la-random.Tpo lib/$(DEPDIR)/libcryptsetup_la-random.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/random.c' object='lib/libcryptsetup_la-random.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcryptsetup_la_CPPFLAGS) $(CPPFLAGS) $(libcryptsetup_la_CFLAGS) $(CFLAGS) -c -o lib/libcryptsetup_la-random.lo `test -f 'lib/random.c' || echo '$(srcdir)/'`lib/random.c + +lib/libcryptsetup_la-crypt_plain.lo: lib/crypt_plain.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcryptsetup_la_CPPFLAGS) $(CPPFLAGS) $(libcryptsetup_la_CFLAGS) $(CFLAGS) -MT lib/libcryptsetup_la-crypt_plain.lo -MD -MP -MF lib/$(DEPDIR)/libcryptsetup_la-crypt_plain.Tpo -c -o lib/libcryptsetup_la-crypt_plain.lo `test -f 'lib/crypt_plain.c' || echo '$(srcdir)/'`lib/crypt_plain.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/$(DEPDIR)/libcryptsetup_la-crypt_plain.Tpo lib/$(DEPDIR)/libcryptsetup_la-crypt_plain.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/crypt_plain.c' object='lib/libcryptsetup_la-crypt_plain.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcryptsetup_la_CPPFLAGS) $(CPPFLAGS) $(libcryptsetup_la_CFLAGS) $(CFLAGS) -c -o lib/libcryptsetup_la-crypt_plain.lo `test -f 'lib/crypt_plain.c' || echo '$(srcdir)/'`lib/crypt_plain.c + +lib/libcryptsetup_la-base64.lo: lib/base64.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcryptsetup_la_CPPFLAGS) $(CPPFLAGS) $(libcryptsetup_la_CFLAGS) $(CFLAGS) -MT lib/libcryptsetup_la-base64.lo -MD -MP -MF lib/$(DEPDIR)/libcryptsetup_la-base64.Tpo -c -o lib/libcryptsetup_la-base64.lo `test -f 'lib/base64.c' || echo '$(srcdir)/'`lib/base64.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/$(DEPDIR)/libcryptsetup_la-base64.Tpo lib/$(DEPDIR)/libcryptsetup_la-base64.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/base64.c' object='lib/libcryptsetup_la-base64.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcryptsetup_la_CPPFLAGS) $(CPPFLAGS) $(libcryptsetup_la_CFLAGS) $(CFLAGS) -c -o lib/libcryptsetup_la-base64.lo `test -f 'lib/base64.c' || echo '$(srcdir)/'`lib/base64.c + +lib/integrity/libcryptsetup_la-integrity.lo: lib/integrity/integrity.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcryptsetup_la_CPPFLAGS) $(CPPFLAGS) $(libcryptsetup_la_CFLAGS) $(CFLAGS) -MT lib/integrity/libcryptsetup_la-integrity.lo -MD -MP -MF lib/integrity/$(DEPDIR)/libcryptsetup_la-integrity.Tpo -c -o lib/integrity/libcryptsetup_la-integrity.lo `test -f 'lib/integrity/integrity.c' || echo '$(srcdir)/'`lib/integrity/integrity.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/integrity/$(DEPDIR)/libcryptsetup_la-integrity.Tpo lib/integrity/$(DEPDIR)/libcryptsetup_la-integrity.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/integrity/integrity.c' object='lib/integrity/libcryptsetup_la-integrity.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcryptsetup_la_CPPFLAGS) $(CPPFLAGS) $(libcryptsetup_la_CFLAGS) $(CFLAGS) -c -o lib/integrity/libcryptsetup_la-integrity.lo `test -f 'lib/integrity/integrity.c' || echo '$(srcdir)/'`lib/integrity/integrity.c + +lib/loopaes/libcryptsetup_la-loopaes.lo: lib/loopaes/loopaes.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcryptsetup_la_CPPFLAGS) $(CPPFLAGS) $(libcryptsetup_la_CFLAGS) $(CFLAGS) -MT lib/loopaes/libcryptsetup_la-loopaes.lo -MD -MP -MF lib/loopaes/$(DEPDIR)/libcryptsetup_la-loopaes.Tpo -c -o lib/loopaes/libcryptsetup_la-loopaes.lo `test -f 'lib/loopaes/loopaes.c' || echo '$(srcdir)/'`lib/loopaes/loopaes.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/loopaes/$(DEPDIR)/libcryptsetup_la-loopaes.Tpo lib/loopaes/$(DEPDIR)/libcryptsetup_la-loopaes.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/loopaes/loopaes.c' object='lib/loopaes/libcryptsetup_la-loopaes.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcryptsetup_la_CPPFLAGS) $(CPPFLAGS) $(libcryptsetup_la_CFLAGS) $(CFLAGS) -c -o lib/loopaes/libcryptsetup_la-loopaes.lo `test -f 'lib/loopaes/loopaes.c' || echo '$(srcdir)/'`lib/loopaes/loopaes.c + +lib/tcrypt/libcryptsetup_la-tcrypt.lo: lib/tcrypt/tcrypt.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcryptsetup_la_CPPFLAGS) $(CPPFLAGS) $(libcryptsetup_la_CFLAGS) $(CFLAGS) -MT lib/tcrypt/libcryptsetup_la-tcrypt.lo -MD -MP -MF lib/tcrypt/$(DEPDIR)/libcryptsetup_la-tcrypt.Tpo -c -o lib/tcrypt/libcryptsetup_la-tcrypt.lo `test -f 'lib/tcrypt/tcrypt.c' || echo '$(srcdir)/'`lib/tcrypt/tcrypt.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/tcrypt/$(DEPDIR)/libcryptsetup_la-tcrypt.Tpo lib/tcrypt/$(DEPDIR)/libcryptsetup_la-tcrypt.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/tcrypt/tcrypt.c' object='lib/tcrypt/libcryptsetup_la-tcrypt.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcryptsetup_la_CPPFLAGS) $(CPPFLAGS) $(libcryptsetup_la_CFLAGS) $(CFLAGS) -c -o lib/tcrypt/libcryptsetup_la-tcrypt.lo `test -f 'lib/tcrypt/tcrypt.c' || echo '$(srcdir)/'`lib/tcrypt/tcrypt.c + +lib/luks1/libcryptsetup_la-af.lo: lib/luks1/af.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcryptsetup_la_CPPFLAGS) $(CPPFLAGS) $(libcryptsetup_la_CFLAGS) $(CFLAGS) -MT lib/luks1/libcryptsetup_la-af.lo -MD -MP -MF lib/luks1/$(DEPDIR)/libcryptsetup_la-af.Tpo -c -o lib/luks1/libcryptsetup_la-af.lo `test -f 'lib/luks1/af.c' || echo '$(srcdir)/'`lib/luks1/af.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/luks1/$(DEPDIR)/libcryptsetup_la-af.Tpo lib/luks1/$(DEPDIR)/libcryptsetup_la-af.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/luks1/af.c' object='lib/luks1/libcryptsetup_la-af.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcryptsetup_la_CPPFLAGS) $(CPPFLAGS) $(libcryptsetup_la_CFLAGS) $(CFLAGS) -c -o lib/luks1/libcryptsetup_la-af.lo `test -f 'lib/luks1/af.c' || echo '$(srcdir)/'`lib/luks1/af.c + +lib/luks1/libcryptsetup_la-keyencryption.lo: lib/luks1/keyencryption.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcryptsetup_la_CPPFLAGS) $(CPPFLAGS) $(libcryptsetup_la_CFLAGS) $(CFLAGS) -MT lib/luks1/libcryptsetup_la-keyencryption.lo -MD -MP -MF lib/luks1/$(DEPDIR)/libcryptsetup_la-keyencryption.Tpo -c -o lib/luks1/libcryptsetup_la-keyencryption.lo `test -f 'lib/luks1/keyencryption.c' || echo '$(srcdir)/'`lib/luks1/keyencryption.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/luks1/$(DEPDIR)/libcryptsetup_la-keyencryption.Tpo lib/luks1/$(DEPDIR)/libcryptsetup_la-keyencryption.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/luks1/keyencryption.c' object='lib/luks1/libcryptsetup_la-keyencryption.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcryptsetup_la_CPPFLAGS) $(CPPFLAGS) $(libcryptsetup_la_CFLAGS) $(CFLAGS) -c -o lib/luks1/libcryptsetup_la-keyencryption.lo `test -f 'lib/luks1/keyencryption.c' || echo '$(srcdir)/'`lib/luks1/keyencryption.c + +lib/luks1/libcryptsetup_la-keymanage.lo: lib/luks1/keymanage.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcryptsetup_la_CPPFLAGS) $(CPPFLAGS) $(libcryptsetup_la_CFLAGS) $(CFLAGS) -MT lib/luks1/libcryptsetup_la-keymanage.lo -MD -MP -MF lib/luks1/$(DEPDIR)/libcryptsetup_la-keymanage.Tpo -c -o lib/luks1/libcryptsetup_la-keymanage.lo `test -f 'lib/luks1/keymanage.c' || echo '$(srcdir)/'`lib/luks1/keymanage.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/luks1/$(DEPDIR)/libcryptsetup_la-keymanage.Tpo lib/luks1/$(DEPDIR)/libcryptsetup_la-keymanage.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/luks1/keymanage.c' object='lib/luks1/libcryptsetup_la-keymanage.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcryptsetup_la_CPPFLAGS) $(CPPFLAGS) $(libcryptsetup_la_CFLAGS) $(CFLAGS) -c -o lib/luks1/libcryptsetup_la-keymanage.lo `test -f 'lib/luks1/keymanage.c' || echo '$(srcdir)/'`lib/luks1/keymanage.c + +lib/verity/libcryptsetup_la-verity_hash.lo: lib/verity/verity_hash.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcryptsetup_la_CPPFLAGS) $(CPPFLAGS) $(libcryptsetup_la_CFLAGS) $(CFLAGS) -MT lib/verity/libcryptsetup_la-verity_hash.lo -MD -MP -MF lib/verity/$(DEPDIR)/libcryptsetup_la-verity_hash.Tpo -c -o lib/verity/libcryptsetup_la-verity_hash.lo `test -f 'lib/verity/verity_hash.c' || echo '$(srcdir)/'`lib/verity/verity_hash.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/verity/$(DEPDIR)/libcryptsetup_la-verity_hash.Tpo lib/verity/$(DEPDIR)/libcryptsetup_la-verity_hash.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/verity/verity_hash.c' object='lib/verity/libcryptsetup_la-verity_hash.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcryptsetup_la_CPPFLAGS) $(CPPFLAGS) $(libcryptsetup_la_CFLAGS) $(CFLAGS) -c -o lib/verity/libcryptsetup_la-verity_hash.lo `test -f 'lib/verity/verity_hash.c' || echo '$(srcdir)/'`lib/verity/verity_hash.c + +lib/verity/libcryptsetup_la-verity_fec.lo: lib/verity/verity_fec.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcryptsetup_la_CPPFLAGS) $(CPPFLAGS) $(libcryptsetup_la_CFLAGS) $(CFLAGS) -MT lib/verity/libcryptsetup_la-verity_fec.lo -MD -MP -MF lib/verity/$(DEPDIR)/libcryptsetup_la-verity_fec.Tpo -c -o lib/verity/libcryptsetup_la-verity_fec.lo `test -f 'lib/verity/verity_fec.c' || echo '$(srcdir)/'`lib/verity/verity_fec.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/verity/$(DEPDIR)/libcryptsetup_la-verity_fec.Tpo lib/verity/$(DEPDIR)/libcryptsetup_la-verity_fec.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/verity/verity_fec.c' object='lib/verity/libcryptsetup_la-verity_fec.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcryptsetup_la_CPPFLAGS) $(CPPFLAGS) $(libcryptsetup_la_CFLAGS) $(CFLAGS) -c -o lib/verity/libcryptsetup_la-verity_fec.lo `test -f 'lib/verity/verity_fec.c' || echo '$(srcdir)/'`lib/verity/verity_fec.c + +lib/verity/libcryptsetup_la-verity.lo: lib/verity/verity.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcryptsetup_la_CPPFLAGS) $(CPPFLAGS) $(libcryptsetup_la_CFLAGS) $(CFLAGS) -MT lib/verity/libcryptsetup_la-verity.lo -MD -MP -MF lib/verity/$(DEPDIR)/libcryptsetup_la-verity.Tpo -c -o lib/verity/libcryptsetup_la-verity.lo `test -f 'lib/verity/verity.c' || echo '$(srcdir)/'`lib/verity/verity.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/verity/$(DEPDIR)/libcryptsetup_la-verity.Tpo lib/verity/$(DEPDIR)/libcryptsetup_la-verity.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/verity/verity.c' object='lib/verity/libcryptsetup_la-verity.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcryptsetup_la_CPPFLAGS) $(CPPFLAGS) $(libcryptsetup_la_CFLAGS) $(CFLAGS) -c -o lib/verity/libcryptsetup_la-verity.lo `test -f 'lib/verity/verity.c' || echo '$(srcdir)/'`lib/verity/verity.c + +lib/verity/libcryptsetup_la-rs_encode_char.lo: lib/verity/rs_encode_char.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcryptsetup_la_CPPFLAGS) $(CPPFLAGS) $(libcryptsetup_la_CFLAGS) $(CFLAGS) -MT lib/verity/libcryptsetup_la-rs_encode_char.lo -MD -MP -MF lib/verity/$(DEPDIR)/libcryptsetup_la-rs_encode_char.Tpo -c -o lib/verity/libcryptsetup_la-rs_encode_char.lo `test -f 'lib/verity/rs_encode_char.c' || echo '$(srcdir)/'`lib/verity/rs_encode_char.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/verity/$(DEPDIR)/libcryptsetup_la-rs_encode_char.Tpo lib/verity/$(DEPDIR)/libcryptsetup_la-rs_encode_char.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/verity/rs_encode_char.c' object='lib/verity/libcryptsetup_la-rs_encode_char.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcryptsetup_la_CPPFLAGS) $(CPPFLAGS) $(libcryptsetup_la_CFLAGS) $(CFLAGS) -c -o lib/verity/libcryptsetup_la-rs_encode_char.lo `test -f 'lib/verity/rs_encode_char.c' || echo '$(srcdir)/'`lib/verity/rs_encode_char.c + +lib/verity/libcryptsetup_la-rs_decode_char.lo: lib/verity/rs_decode_char.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcryptsetup_la_CPPFLAGS) $(CPPFLAGS) $(libcryptsetup_la_CFLAGS) $(CFLAGS) -MT lib/verity/libcryptsetup_la-rs_decode_char.lo -MD -MP -MF lib/verity/$(DEPDIR)/libcryptsetup_la-rs_decode_char.Tpo -c -o lib/verity/libcryptsetup_la-rs_decode_char.lo `test -f 'lib/verity/rs_decode_char.c' || echo '$(srcdir)/'`lib/verity/rs_decode_char.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/verity/$(DEPDIR)/libcryptsetup_la-rs_decode_char.Tpo lib/verity/$(DEPDIR)/libcryptsetup_la-rs_decode_char.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/verity/rs_decode_char.c' object='lib/verity/libcryptsetup_la-rs_decode_char.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcryptsetup_la_CPPFLAGS) $(CPPFLAGS) $(libcryptsetup_la_CFLAGS) $(CFLAGS) -c -o lib/verity/libcryptsetup_la-rs_decode_char.lo `test -f 'lib/verity/rs_decode_char.c' || echo '$(srcdir)/'`lib/verity/rs_decode_char.c + +lib/luks2/libcryptsetup_la-luks2_disk_metadata.lo: lib/luks2/luks2_disk_metadata.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcryptsetup_la_CPPFLAGS) $(CPPFLAGS) $(libcryptsetup_la_CFLAGS) $(CFLAGS) -MT lib/luks2/libcryptsetup_la-luks2_disk_metadata.lo -MD -MP -MF lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_disk_metadata.Tpo -c -o lib/luks2/libcryptsetup_la-luks2_disk_metadata.lo `test -f 'lib/luks2/luks2_disk_metadata.c' || echo '$(srcdir)/'`lib/luks2/luks2_disk_metadata.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_disk_metadata.Tpo lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_disk_metadata.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/luks2/luks2_disk_metadata.c' object='lib/luks2/libcryptsetup_la-luks2_disk_metadata.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcryptsetup_la_CPPFLAGS) $(CPPFLAGS) $(libcryptsetup_la_CFLAGS) $(CFLAGS) -c -o lib/luks2/libcryptsetup_la-luks2_disk_metadata.lo `test -f 'lib/luks2/luks2_disk_metadata.c' || echo '$(srcdir)/'`lib/luks2/luks2_disk_metadata.c + +lib/luks2/libcryptsetup_la-luks2_json_format.lo: lib/luks2/luks2_json_format.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcryptsetup_la_CPPFLAGS) $(CPPFLAGS) $(libcryptsetup_la_CFLAGS) $(CFLAGS) -MT lib/luks2/libcryptsetup_la-luks2_json_format.lo -MD -MP -MF lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_json_format.Tpo -c -o lib/luks2/libcryptsetup_la-luks2_json_format.lo `test -f 'lib/luks2/luks2_json_format.c' || echo '$(srcdir)/'`lib/luks2/luks2_json_format.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_json_format.Tpo lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_json_format.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/luks2/luks2_json_format.c' object='lib/luks2/libcryptsetup_la-luks2_json_format.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcryptsetup_la_CPPFLAGS) $(CPPFLAGS) $(libcryptsetup_la_CFLAGS) $(CFLAGS) -c -o lib/luks2/libcryptsetup_la-luks2_json_format.lo `test -f 'lib/luks2/luks2_json_format.c' || echo '$(srcdir)/'`lib/luks2/luks2_json_format.c + +lib/luks2/libcryptsetup_la-luks2_json_metadata.lo: lib/luks2/luks2_json_metadata.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcryptsetup_la_CPPFLAGS) $(CPPFLAGS) $(libcryptsetup_la_CFLAGS) $(CFLAGS) -MT lib/luks2/libcryptsetup_la-luks2_json_metadata.lo -MD -MP -MF lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_json_metadata.Tpo -c -o lib/luks2/libcryptsetup_la-luks2_json_metadata.lo `test -f 'lib/luks2/luks2_json_metadata.c' || echo '$(srcdir)/'`lib/luks2/luks2_json_metadata.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_json_metadata.Tpo lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_json_metadata.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/luks2/luks2_json_metadata.c' object='lib/luks2/libcryptsetup_la-luks2_json_metadata.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcryptsetup_la_CPPFLAGS) $(CPPFLAGS) $(libcryptsetup_la_CFLAGS) $(CFLAGS) -c -o lib/luks2/libcryptsetup_la-luks2_json_metadata.lo `test -f 'lib/luks2/luks2_json_metadata.c' || echo '$(srcdir)/'`lib/luks2/luks2_json_metadata.c + +lib/luks2/libcryptsetup_la-luks2_luks1_convert.lo: lib/luks2/luks2_luks1_convert.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcryptsetup_la_CPPFLAGS) $(CPPFLAGS) $(libcryptsetup_la_CFLAGS) $(CFLAGS) -MT lib/luks2/libcryptsetup_la-luks2_luks1_convert.lo -MD -MP -MF lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_luks1_convert.Tpo -c -o lib/luks2/libcryptsetup_la-luks2_luks1_convert.lo `test -f 'lib/luks2/luks2_luks1_convert.c' || echo '$(srcdir)/'`lib/luks2/luks2_luks1_convert.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_luks1_convert.Tpo lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_luks1_convert.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/luks2/luks2_luks1_convert.c' object='lib/luks2/libcryptsetup_la-luks2_luks1_convert.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcryptsetup_la_CPPFLAGS) $(CPPFLAGS) $(libcryptsetup_la_CFLAGS) $(CFLAGS) -c -o lib/luks2/libcryptsetup_la-luks2_luks1_convert.lo `test -f 'lib/luks2/luks2_luks1_convert.c' || echo '$(srcdir)/'`lib/luks2/luks2_luks1_convert.c + +lib/luks2/libcryptsetup_la-luks2_digest.lo: lib/luks2/luks2_digest.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcryptsetup_la_CPPFLAGS) $(CPPFLAGS) $(libcryptsetup_la_CFLAGS) $(CFLAGS) -MT lib/luks2/libcryptsetup_la-luks2_digest.lo -MD -MP -MF lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_digest.Tpo -c -o lib/luks2/libcryptsetup_la-luks2_digest.lo `test -f 'lib/luks2/luks2_digest.c' || echo '$(srcdir)/'`lib/luks2/luks2_digest.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_digest.Tpo lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_digest.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/luks2/luks2_digest.c' object='lib/luks2/libcryptsetup_la-luks2_digest.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcryptsetup_la_CPPFLAGS) $(CPPFLAGS) $(libcryptsetup_la_CFLAGS) $(CFLAGS) -c -o lib/luks2/libcryptsetup_la-luks2_digest.lo `test -f 'lib/luks2/luks2_digest.c' || echo '$(srcdir)/'`lib/luks2/luks2_digest.c + +lib/luks2/libcryptsetup_la-luks2_digest_pbkdf2.lo: lib/luks2/luks2_digest_pbkdf2.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcryptsetup_la_CPPFLAGS) $(CPPFLAGS) $(libcryptsetup_la_CFLAGS) $(CFLAGS) -MT lib/luks2/libcryptsetup_la-luks2_digest_pbkdf2.lo -MD -MP -MF lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_digest_pbkdf2.Tpo -c -o lib/luks2/libcryptsetup_la-luks2_digest_pbkdf2.lo `test -f 'lib/luks2/luks2_digest_pbkdf2.c' || echo '$(srcdir)/'`lib/luks2/luks2_digest_pbkdf2.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_digest_pbkdf2.Tpo lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_digest_pbkdf2.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/luks2/luks2_digest_pbkdf2.c' object='lib/luks2/libcryptsetup_la-luks2_digest_pbkdf2.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcryptsetup_la_CPPFLAGS) $(CPPFLAGS) $(libcryptsetup_la_CFLAGS) $(CFLAGS) -c -o lib/luks2/libcryptsetup_la-luks2_digest_pbkdf2.lo `test -f 'lib/luks2/luks2_digest_pbkdf2.c' || echo '$(srcdir)/'`lib/luks2/luks2_digest_pbkdf2.c + +lib/luks2/libcryptsetup_la-luks2_keyslot.lo: lib/luks2/luks2_keyslot.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcryptsetup_la_CPPFLAGS) $(CPPFLAGS) $(libcryptsetup_la_CFLAGS) $(CFLAGS) -MT lib/luks2/libcryptsetup_la-luks2_keyslot.lo -MD -MP -MF lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_keyslot.Tpo -c -o lib/luks2/libcryptsetup_la-luks2_keyslot.lo `test -f 'lib/luks2/luks2_keyslot.c' || echo '$(srcdir)/'`lib/luks2/luks2_keyslot.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_keyslot.Tpo lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_keyslot.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/luks2/luks2_keyslot.c' object='lib/luks2/libcryptsetup_la-luks2_keyslot.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcryptsetup_la_CPPFLAGS) $(CPPFLAGS) $(libcryptsetup_la_CFLAGS) $(CFLAGS) -c -o lib/luks2/libcryptsetup_la-luks2_keyslot.lo `test -f 'lib/luks2/luks2_keyslot.c' || echo '$(srcdir)/'`lib/luks2/luks2_keyslot.c + +lib/luks2/libcryptsetup_la-luks2_keyslot_luks2.lo: lib/luks2/luks2_keyslot_luks2.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcryptsetup_la_CPPFLAGS) $(CPPFLAGS) $(libcryptsetup_la_CFLAGS) $(CFLAGS) -MT lib/luks2/libcryptsetup_la-luks2_keyslot_luks2.lo -MD -MP -MF lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_keyslot_luks2.Tpo -c -o lib/luks2/libcryptsetup_la-luks2_keyslot_luks2.lo `test -f 'lib/luks2/luks2_keyslot_luks2.c' || echo '$(srcdir)/'`lib/luks2/luks2_keyslot_luks2.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_keyslot_luks2.Tpo lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_keyslot_luks2.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/luks2/luks2_keyslot_luks2.c' object='lib/luks2/libcryptsetup_la-luks2_keyslot_luks2.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcryptsetup_la_CPPFLAGS) $(CPPFLAGS) $(libcryptsetup_la_CFLAGS) $(CFLAGS) -c -o lib/luks2/libcryptsetup_la-luks2_keyslot_luks2.lo `test -f 'lib/luks2/luks2_keyslot_luks2.c' || echo '$(srcdir)/'`lib/luks2/luks2_keyslot_luks2.c + +lib/luks2/libcryptsetup_la-luks2_keyslot_reenc.lo: lib/luks2/luks2_keyslot_reenc.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcryptsetup_la_CPPFLAGS) $(CPPFLAGS) $(libcryptsetup_la_CFLAGS) $(CFLAGS) -MT lib/luks2/libcryptsetup_la-luks2_keyslot_reenc.lo -MD -MP -MF lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_keyslot_reenc.Tpo -c -o lib/luks2/libcryptsetup_la-luks2_keyslot_reenc.lo `test -f 'lib/luks2/luks2_keyslot_reenc.c' || echo '$(srcdir)/'`lib/luks2/luks2_keyslot_reenc.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_keyslot_reenc.Tpo lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_keyslot_reenc.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/luks2/luks2_keyslot_reenc.c' object='lib/luks2/libcryptsetup_la-luks2_keyslot_reenc.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcryptsetup_la_CPPFLAGS) $(CPPFLAGS) $(libcryptsetup_la_CFLAGS) $(CFLAGS) -c -o lib/luks2/libcryptsetup_la-luks2_keyslot_reenc.lo `test -f 'lib/luks2/luks2_keyslot_reenc.c' || echo '$(srcdir)/'`lib/luks2/luks2_keyslot_reenc.c + +lib/luks2/libcryptsetup_la-luks2_reencrypt.lo: lib/luks2/luks2_reencrypt.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcryptsetup_la_CPPFLAGS) $(CPPFLAGS) $(libcryptsetup_la_CFLAGS) $(CFLAGS) -MT lib/luks2/libcryptsetup_la-luks2_reencrypt.lo -MD -MP -MF lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_reencrypt.Tpo -c -o lib/luks2/libcryptsetup_la-luks2_reencrypt.lo `test -f 'lib/luks2/luks2_reencrypt.c' || echo '$(srcdir)/'`lib/luks2/luks2_reencrypt.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_reencrypt.Tpo lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_reencrypt.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/luks2/luks2_reencrypt.c' object='lib/luks2/libcryptsetup_la-luks2_reencrypt.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcryptsetup_la_CPPFLAGS) $(CPPFLAGS) $(libcryptsetup_la_CFLAGS) $(CFLAGS) -c -o lib/luks2/libcryptsetup_la-luks2_reencrypt.lo `test -f 'lib/luks2/luks2_reencrypt.c' || echo '$(srcdir)/'`lib/luks2/luks2_reencrypt.c + +lib/luks2/libcryptsetup_la-luks2_segment.lo: lib/luks2/luks2_segment.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcryptsetup_la_CPPFLAGS) $(CPPFLAGS) $(libcryptsetup_la_CFLAGS) $(CFLAGS) -MT lib/luks2/libcryptsetup_la-luks2_segment.lo -MD -MP -MF lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_segment.Tpo -c -o lib/luks2/libcryptsetup_la-luks2_segment.lo `test -f 'lib/luks2/luks2_segment.c' || echo '$(srcdir)/'`lib/luks2/luks2_segment.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_segment.Tpo lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_segment.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/luks2/luks2_segment.c' object='lib/luks2/libcryptsetup_la-luks2_segment.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcryptsetup_la_CPPFLAGS) $(CPPFLAGS) $(libcryptsetup_la_CFLAGS) $(CFLAGS) -c -o lib/luks2/libcryptsetup_la-luks2_segment.lo `test -f 'lib/luks2/luks2_segment.c' || echo '$(srcdir)/'`lib/luks2/luks2_segment.c + +lib/luks2/libcryptsetup_la-luks2_token_keyring.lo: lib/luks2/luks2_token_keyring.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcryptsetup_la_CPPFLAGS) $(CPPFLAGS) $(libcryptsetup_la_CFLAGS) $(CFLAGS) -MT lib/luks2/libcryptsetup_la-luks2_token_keyring.lo -MD -MP -MF lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_token_keyring.Tpo -c -o lib/luks2/libcryptsetup_la-luks2_token_keyring.lo `test -f 'lib/luks2/luks2_token_keyring.c' || echo '$(srcdir)/'`lib/luks2/luks2_token_keyring.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_token_keyring.Tpo lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_token_keyring.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/luks2/luks2_token_keyring.c' object='lib/luks2/libcryptsetup_la-luks2_token_keyring.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcryptsetup_la_CPPFLAGS) $(CPPFLAGS) $(libcryptsetup_la_CFLAGS) $(CFLAGS) -c -o lib/luks2/libcryptsetup_la-luks2_token_keyring.lo `test -f 'lib/luks2/luks2_token_keyring.c' || echo '$(srcdir)/'`lib/luks2/luks2_token_keyring.c + +lib/luks2/libcryptsetup_la-luks2_token.lo: lib/luks2/luks2_token.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcryptsetup_la_CPPFLAGS) $(CPPFLAGS) $(libcryptsetup_la_CFLAGS) $(CFLAGS) -MT lib/luks2/libcryptsetup_la-luks2_token.lo -MD -MP -MF lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_token.Tpo -c -o lib/luks2/libcryptsetup_la-luks2_token.lo `test -f 'lib/luks2/luks2_token.c' || echo '$(srcdir)/'`lib/luks2/luks2_token.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_token.Tpo lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_token.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/luks2/luks2_token.c' object='lib/luks2/libcryptsetup_la-luks2_token.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcryptsetup_la_CPPFLAGS) $(CPPFLAGS) $(libcryptsetup_la_CFLAGS) $(CFLAGS) -c -o lib/luks2/libcryptsetup_la-luks2_token.lo `test -f 'lib/luks2/luks2_token.c' || echo '$(srcdir)/'`lib/luks2/luks2_token.c + +lib/libcryptsetup_la-utils_blkid.lo: lib/utils_blkid.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcryptsetup_la_CPPFLAGS) $(CPPFLAGS) $(libcryptsetup_la_CFLAGS) $(CFLAGS) -MT lib/libcryptsetup_la-utils_blkid.lo -MD -MP -MF lib/$(DEPDIR)/libcryptsetup_la-utils_blkid.Tpo -c -o lib/libcryptsetup_la-utils_blkid.lo `test -f 'lib/utils_blkid.c' || echo '$(srcdir)/'`lib/utils_blkid.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/$(DEPDIR)/libcryptsetup_la-utils_blkid.Tpo lib/$(DEPDIR)/libcryptsetup_la-utils_blkid.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/utils_blkid.c' object='lib/libcryptsetup_la-utils_blkid.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcryptsetup_la_CPPFLAGS) $(CPPFLAGS) $(libcryptsetup_la_CFLAGS) $(CFLAGS) -c -o lib/libcryptsetup_la-utils_blkid.lo `test -f 'lib/utils_blkid.c' || echo '$(srcdir)/'`lib/utils_blkid.c + +lib/libutils_io_la-utils_io.lo: lib/utils_io.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libutils_io_la_CFLAGS) $(CFLAGS) -MT lib/libutils_io_la-utils_io.lo -MD -MP -MF lib/$(DEPDIR)/libutils_io_la-utils_io.Tpo -c -o lib/libutils_io_la-utils_io.lo `test -f 'lib/utils_io.c' || echo '$(srcdir)/'`lib/utils_io.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/$(DEPDIR)/libutils_io_la-utils_io.Tpo lib/$(DEPDIR)/libutils_io_la-utils_io.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/utils_io.c' object='lib/libutils_io_la-utils_io.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libutils_io_la_CFLAGS) $(CFLAGS) -c -o lib/libutils_io_la-utils_io.lo `test -f 'lib/utils_io.c' || echo '$(srcdir)/'`lib/utils_io.c + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + -rm -rf lib/.libs lib/_libs + -rm -rf lib/crypto_backend/.libs lib/crypto_backend/_libs + -rm -rf lib/crypto_backend/argon2/.libs lib/crypto_backend/argon2/_libs + -rm -rf lib/crypto_backend/argon2/blake2/.libs lib/crypto_backend/argon2/blake2/_libs + -rm -rf lib/integrity/.libs lib/integrity/_libs + -rm -rf lib/loopaes/.libs lib/loopaes/_libs + -rm -rf lib/luks1/.libs lib/luks1/_libs + -rm -rf lib/luks2/.libs lib/luks2/_libs + -rm -rf lib/tcrypt/.libs lib/tcrypt/_libs + -rm -rf lib/verity/.libs lib/verity/_libs + +distclean-libtool: + -rm -f libtool config.lt +install-man8: $(man8_MANS) + @$(NORMAL_INSTALL) + @list1='$(man8_MANS)'; \ + list2=''; \ + test -n "$(man8dir)" \ + && test -n "`echo $$list1$$list2`" \ + || exit 0; \ + echo " $(MKDIR_P) '$(DESTDIR)$(man8dir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(man8dir)" || exit 1; \ + { for i in $$list1; do echo "$$i"; done; \ + if test -n "$$list2"; then \ + for i in $$list2; do echo "$$i"; done \ + | sed -n '/\.8[a-z]*$$/p'; \ + fi; \ + } | while read p; do \ + if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; echo "$$p"; \ + done | \ + sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ + sed 'N;N;s,\n, ,g' | { \ + list=; while read file base inst; do \ + if test "$$base" = "$$inst"; then list="$$list $$file"; else \ + echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man8dir)/$$inst'"; \ + $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man8dir)/$$inst" || exit $$?; \ + fi; \ + done; \ + for i in $$list; do echo "$$i"; done | $(am__base_list) | \ + while read files; do \ + test -z "$$files" || { \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man8dir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(man8dir)" || exit $$?; }; \ + done; } + +uninstall-man8: + @$(NORMAL_UNINSTALL) + @list='$(man8_MANS)'; test -n "$(man8dir)" || exit 0; \ + files=`{ for i in $$list; do echo "$$i"; done; \ + } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ + dir='$(DESTDIR)$(man8dir)'; $(am__uninstall_files_from_dir) +install-pkgconfigDATA: $(pkgconfig_DATA) + @$(NORMAL_INSTALL) + @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(pkgconfigdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgconfigdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \ + done + +uninstall-pkgconfigDATA: + @$(NORMAL_UNINSTALL) + @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(pkgconfigdir)'; $(am__uninstall_files_from_dir) +install-tmpfilesdDATA: $(tmpfilesd_DATA) + @$(NORMAL_INSTALL) + @list='$(tmpfilesd_DATA)'; test -n "$(tmpfilesddir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(tmpfilesddir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(tmpfilesddir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(tmpfilesddir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(tmpfilesddir)" || exit $$?; \ + done + +uninstall-tmpfilesdDATA: + @$(NORMAL_UNINSTALL) + @list='$(tmpfilesd_DATA)'; test -n "$(tmpfilesddir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(tmpfilesddir)'; $(am__uninstall_files_from_dir) +install-includeHEADERS: $(include_HEADERS) + @$(NORMAL_INSTALL) + @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(includedir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(includedir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(includedir)'"; \ + $(INSTALL_HEADER) $$files "$(DESTDIR)$(includedir)" || exit $$?; \ + done + +uninstall-includeHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(includedir)'; $(am__uninstall_files_from_dir) + +# This directory's subdirectories are mostly independent; you can cd +# into them and run 'make' without going through this Makefile. +# To change the values of 'make' variables: instead of editing Makefiles, +# (1) if the variable is set in 'config.status', edit 'config.status' +# (which will cause the Makefiles to be regenerated when you run 'make'); +# (2) otherwise, pass the desired values on the 'make' command line. +$(am__recursive_targets): + @fail=; \ + if $(am__make_keepgoing); then \ + failcom='fail=yes'; \ + else \ + failcom='exit 1'; \ + fi; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-recursive +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-recursive + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscope: cscope.files + test ! -s cscope.files \ + || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) +clean-cscope: + -rm -f cscope.files +cscope.files: clean-cscope cscopelist +cscopelist: cscopelist-recursive + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + -rm -f cscope.out cscope.in.out cscope.po.out cscope.files + +distdir: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) distdir-am + +distdir-am: $(DISTFILES) + $(am__remove_distdir) + test -d "$(distdir)" || mkdir "$(distdir)" + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + $(am__make_dryrun) \ + || test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done + -test -n "$(am__skip_mode_fix)" \ + || find "$(distdir)" -type d ! -perm -755 \ + -exec chmod u+rwx,go+rx {} \; -o \ + ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ + || chmod -R a+r "$(distdir)" +dist-gzip: distdir + tardir=$(distdir) && $(am__tar) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).tar.gz + $(am__post_remove_distdir) + +dist-bzip2: distdir + tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 + $(am__post_remove_distdir) + +dist-lzip: distdir + tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz + $(am__post_remove_distdir) +dist-xz: distdir + tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz + $(am__post_remove_distdir) + +dist-tarZ: distdir + @echo WARNING: "Support for distribution archives compressed with" \ + "legacy program 'compress' is deprecated." >&2 + @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 + tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z + $(am__post_remove_distdir) + +dist-shar: distdir + @echo WARNING: "Support for shar distribution archives is" \ + "deprecated." >&2 + @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 + shar $(distdir) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).shar.gz + $(am__post_remove_distdir) + +dist-zip: distdir + -rm -f $(distdir).zip + zip -rq $(distdir).zip $(distdir) + $(am__post_remove_distdir) + +dist dist-all: + $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:' + $(am__post_remove_distdir) + +# This target untars the dist file and tries a VPATH configuration. Then +# it guarantees that the distribution is self-contained by making another +# tarfile. +distcheck: dist + case '$(DIST_ARCHIVES)' in \ + *.tar.gz*) \ + eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).tar.gz | $(am__untar) ;;\ + *.tar.bz2*) \ + bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ + *.tar.lz*) \ + lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ + *.tar.xz*) \ + xz -dc $(distdir).tar.xz | $(am__untar) ;;\ + *.tar.Z*) \ + uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ + *.shar.gz*) \ + eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\ + *.zip*) \ + unzip $(distdir).zip ;;\ + esac + chmod -R a-w $(distdir) + chmod u+w $(distdir) + mkdir $(distdir)/_build $(distdir)/_build/sub $(distdir)/_inst + chmod a-w $(distdir) + test -d $(distdir)/_build || exit 0; \ + dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ + && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ + && am__cwd=`pwd` \ + && $(am__cd) $(distdir)/_build/sub \ + && ../../configure \ + $(AM_DISTCHECK_CONFIGURE_FLAGS) \ + $(DISTCHECK_CONFIGURE_FLAGS) \ + --srcdir=../.. --prefix="$$dc_install_base" \ + && $(MAKE) $(AM_MAKEFLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) dvi \ + && $(MAKE) $(AM_MAKEFLAGS) check \ + && $(MAKE) $(AM_MAKEFLAGS) install \ + && $(MAKE) $(AM_MAKEFLAGS) installcheck \ + && $(MAKE) $(AM_MAKEFLAGS) uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ + distuninstallcheck \ + && chmod -R a-w "$$dc_install_base" \ + && ({ \ + (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ + distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ + } || { rm -rf "$$dc_destdir"; exit 1; }) \ + && rm -rf "$$dc_destdir" \ + && $(MAKE) $(AM_MAKEFLAGS) dist \ + && rm -rf $(DIST_ARCHIVES) \ + && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ + && cd "$$am__cwd" \ + || exit 1 + $(am__post_remove_distdir) + @(echo "$(distdir) archives ready for distribution: "; \ + list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ + sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' +distuninstallcheck: + @test -n '$(distuninstallcheck_dir)' || { \ + echo 'ERROR: trying to run $@ with an empty' \ + '$$(distuninstallcheck_dir)' >&2; \ + exit 1; \ + }; \ + $(am__cd) '$(distuninstallcheck_dir)' || { \ + echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ + exit 1; \ + }; \ + test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ + || { echo "ERROR: files left after uninstall:" ; \ + if test -n "$(DESTDIR)"; then \ + echo " (check DESTDIR support)"; \ + fi ; \ + $(distuninstallcheck_listfiles) ; \ + exit 1; } >&2 +distcleancheck: distclean + @if test '$(srcdir)' = . ; then \ + echo "ERROR: distcleancheck can only run from a VPATH build" ; \ + exit 1 ; \ + fi + @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ + || { echo "ERROR: files left in build directory after distclean:" ; \ + $(distcleancheck_listfiles) ; \ + exit 1; } >&2 +check-am: all-am +check: check-recursive +all-am: Makefile $(PROGRAMS) $(LTLIBRARIES) $(MANS) $(DATA) $(HEADERS) \ + config.h +installdirs: installdirs-recursive +installdirs-am: + for dir in "$(DESTDIR)$(sbindir)" "$(DESTDIR)$(libdir)" "$(DESTDIR)$(man8dir)" "$(DESTDIR)$(pkgconfigdir)" "$(DESTDIR)$(tmpfilesddir)" "$(DESTDIR)$(includedir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + -rm -f lib/$(DEPDIR)/$(am__dirstamp) + -rm -f lib/$(am__dirstamp) + -rm -f lib/crypto_backend/$(DEPDIR)/$(am__dirstamp) + -rm -f lib/crypto_backend/$(am__dirstamp) + -rm -f lib/crypto_backend/argon2/$(DEPDIR)/$(am__dirstamp) + -rm -f lib/crypto_backend/argon2/$(am__dirstamp) + -rm -f lib/crypto_backend/argon2/blake2/$(DEPDIR)/$(am__dirstamp) + -rm -f lib/crypto_backend/argon2/blake2/$(am__dirstamp) + -rm -f lib/integrity/$(DEPDIR)/$(am__dirstamp) + -rm -f lib/integrity/$(am__dirstamp) + -rm -f lib/loopaes/$(DEPDIR)/$(am__dirstamp) + -rm -f lib/loopaes/$(am__dirstamp) + -rm -f lib/luks1/$(DEPDIR)/$(am__dirstamp) + -rm -f lib/luks1/$(am__dirstamp) + -rm -f lib/luks2/$(DEPDIR)/$(am__dirstamp) + -rm -f lib/luks2/$(am__dirstamp) + -rm -f lib/tcrypt/$(DEPDIR)/$(am__dirstamp) + -rm -f lib/tcrypt/$(am__dirstamp) + -rm -f lib/verity/$(DEPDIR)/$(am__dirstamp) + -rm -f lib/verity/$(am__dirstamp) + -rm -f src/$(DEPDIR)/$(am__dirstamp) + -rm -f src/$(am__dirstamp) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic clean-libLTLIBRARIES clean-libtool clean-local \ + clean-noinstLTLIBRARIES clean-sbinPROGRAMS mostlyclean-am + +distclean: distclean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -f lib/$(DEPDIR)/libcryptsetup_la-base64.Plo + -rm -f lib/$(DEPDIR)/libcryptsetup_la-crypt_plain.Plo + -rm -f lib/$(DEPDIR)/libcryptsetup_la-libdevmapper.Plo + -rm -f lib/$(DEPDIR)/libcryptsetup_la-random.Plo + -rm -f lib/$(DEPDIR)/libcryptsetup_la-setup.Plo + -rm -f lib/$(DEPDIR)/libcryptsetup_la-utils.Plo + -rm -f lib/$(DEPDIR)/libcryptsetup_la-utils_benchmark.Plo + -rm -f lib/$(DEPDIR)/libcryptsetup_la-utils_blkid.Plo + -rm -f lib/$(DEPDIR)/libcryptsetup_la-utils_crypt.Plo + -rm -f lib/$(DEPDIR)/libcryptsetup_la-utils_device.Plo + -rm -f lib/$(DEPDIR)/libcryptsetup_la-utils_device_locking.Plo + -rm -f lib/$(DEPDIR)/libcryptsetup_la-utils_devpath.Plo + -rm -f lib/$(DEPDIR)/libcryptsetup_la-utils_fips.Plo + -rm -f lib/$(DEPDIR)/libcryptsetup_la-utils_keyring.Plo + -rm -f lib/$(DEPDIR)/libcryptsetup_la-utils_loop.Plo + -rm -f lib/$(DEPDIR)/libcryptsetup_la-utils_pbkdf.Plo + -rm -f lib/$(DEPDIR)/libcryptsetup_la-utils_storage_wrappers.Plo + -rm -f lib/$(DEPDIR)/libcryptsetup_la-utils_wipe.Plo + -rm -f lib/$(DEPDIR)/libcryptsetup_la-volumekey.Plo + -rm -f lib/$(DEPDIR)/libutils_io_la-utils_io.Plo + -rm -f lib/$(DEPDIR)/utils_blkid.Po + -rm -f lib/$(DEPDIR)/utils_crypt.Po + -rm -f lib/$(DEPDIR)/utils_io.Po + -rm -f lib/$(DEPDIR)/utils_loop.Po + -rm -f lib/crypto_backend/$(DEPDIR)/libcrypto_backend_la-argon2_generic.Plo + -rm -f lib/crypto_backend/$(DEPDIR)/libcrypto_backend_la-cipher_check.Plo + -rm -f lib/crypto_backend/$(DEPDIR)/libcrypto_backend_la-cipher_generic.Plo + -rm -f lib/crypto_backend/$(DEPDIR)/libcrypto_backend_la-crc32.Plo + -rm -f lib/crypto_backend/$(DEPDIR)/libcrypto_backend_la-crypto_cipher_kernel.Plo + -rm -f lib/crypto_backend/$(DEPDIR)/libcrypto_backend_la-crypto_gcrypt.Plo + -rm -f lib/crypto_backend/$(DEPDIR)/libcrypto_backend_la-crypto_kernel.Plo + -rm -f lib/crypto_backend/$(DEPDIR)/libcrypto_backend_la-crypto_nettle.Plo + -rm -f lib/crypto_backend/$(DEPDIR)/libcrypto_backend_la-crypto_nss.Plo + -rm -f lib/crypto_backend/$(DEPDIR)/libcrypto_backend_la-crypto_openssl.Plo + -rm -f lib/crypto_backend/$(DEPDIR)/libcrypto_backend_la-crypto_storage.Plo + -rm -f lib/crypto_backend/$(DEPDIR)/libcrypto_backend_la-pbkdf2_generic.Plo + -rm -f lib/crypto_backend/$(DEPDIR)/libcrypto_backend_la-pbkdf_check.Plo + -rm -f lib/crypto_backend/argon2/$(DEPDIR)/libargon2_la-argon2.Plo + -rm -f lib/crypto_backend/argon2/$(DEPDIR)/libargon2_la-core.Plo + -rm -f lib/crypto_backend/argon2/$(DEPDIR)/libargon2_la-encoding.Plo + -rm -f lib/crypto_backend/argon2/$(DEPDIR)/libargon2_la-opt.Plo + -rm -f lib/crypto_backend/argon2/$(DEPDIR)/libargon2_la-ref.Plo + -rm -f lib/crypto_backend/argon2/$(DEPDIR)/libargon2_la-thread.Plo + -rm -f lib/crypto_backend/argon2/blake2/$(DEPDIR)/libargon2_la-blake2b.Plo + -rm -f lib/integrity/$(DEPDIR)/libcryptsetup_la-integrity.Plo + -rm -f lib/loopaes/$(DEPDIR)/libcryptsetup_la-loopaes.Plo + -rm -f lib/luks1/$(DEPDIR)/libcryptsetup_la-af.Plo + -rm -f lib/luks1/$(DEPDIR)/libcryptsetup_la-keyencryption.Plo + -rm -f lib/luks1/$(DEPDIR)/libcryptsetup_la-keymanage.Plo + -rm -f lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_digest.Plo + -rm -f lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_digest_pbkdf2.Plo + -rm -f lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_disk_metadata.Plo + -rm -f lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_json_format.Plo + -rm -f lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_json_metadata.Plo + -rm -f lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_keyslot.Plo + -rm -f lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_keyslot_luks2.Plo + -rm -f lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_keyslot_reenc.Plo + -rm -f lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_luks1_convert.Plo + -rm -f lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_reencrypt.Plo + -rm -f lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_segment.Plo + -rm -f lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_token.Plo + -rm -f lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_token_keyring.Plo + -rm -f lib/tcrypt/$(DEPDIR)/libcryptsetup_la-tcrypt.Plo + -rm -f lib/verity/$(DEPDIR)/libcryptsetup_la-rs_decode_char.Plo + -rm -f lib/verity/$(DEPDIR)/libcryptsetup_la-rs_encode_char.Plo + -rm -f lib/verity/$(DEPDIR)/libcryptsetup_la-verity.Plo + -rm -f lib/verity/$(DEPDIR)/libcryptsetup_la-verity_fec.Plo + -rm -f lib/verity/$(DEPDIR)/libcryptsetup_la-verity_hash.Plo + -rm -f src/$(DEPDIR)/cryptsetup.Po + -rm -f src/$(DEPDIR)/cryptsetup_reencrypt.Po + -rm -f src/$(DEPDIR)/integritysetup.Po + -rm -f src/$(DEPDIR)/utils_blockdev.Po + -rm -f src/$(DEPDIR)/utils_luks2.Po + -rm -f src/$(DEPDIR)/utils_password.Po + -rm -f src/$(DEPDIR)/utils_tools.Po + -rm -f src/$(DEPDIR)/veritysetup.Po + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-hdr distclean-libtool distclean-local distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: install-includeHEADERS install-man \ + install-pkgconfigDATA install-tmpfilesdDATA + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: install-libLTLIBRARIES install-sbinPROGRAMS + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: install-man8 + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -rf $(top_srcdir)/autom4te.cache + -rm -f lib/$(DEPDIR)/libcryptsetup_la-base64.Plo + -rm -f lib/$(DEPDIR)/libcryptsetup_la-crypt_plain.Plo + -rm -f lib/$(DEPDIR)/libcryptsetup_la-libdevmapper.Plo + -rm -f lib/$(DEPDIR)/libcryptsetup_la-random.Plo + -rm -f lib/$(DEPDIR)/libcryptsetup_la-setup.Plo + -rm -f lib/$(DEPDIR)/libcryptsetup_la-utils.Plo + -rm -f lib/$(DEPDIR)/libcryptsetup_la-utils_benchmark.Plo + -rm -f lib/$(DEPDIR)/libcryptsetup_la-utils_blkid.Plo + -rm -f lib/$(DEPDIR)/libcryptsetup_la-utils_crypt.Plo + -rm -f lib/$(DEPDIR)/libcryptsetup_la-utils_device.Plo + -rm -f lib/$(DEPDIR)/libcryptsetup_la-utils_device_locking.Plo + -rm -f lib/$(DEPDIR)/libcryptsetup_la-utils_devpath.Plo + -rm -f lib/$(DEPDIR)/libcryptsetup_la-utils_fips.Plo + -rm -f lib/$(DEPDIR)/libcryptsetup_la-utils_keyring.Plo + -rm -f lib/$(DEPDIR)/libcryptsetup_la-utils_loop.Plo + -rm -f lib/$(DEPDIR)/libcryptsetup_la-utils_pbkdf.Plo + -rm -f lib/$(DEPDIR)/libcryptsetup_la-utils_storage_wrappers.Plo + -rm -f lib/$(DEPDIR)/libcryptsetup_la-utils_wipe.Plo + -rm -f lib/$(DEPDIR)/libcryptsetup_la-volumekey.Plo + -rm -f lib/$(DEPDIR)/libutils_io_la-utils_io.Plo + -rm -f lib/$(DEPDIR)/utils_blkid.Po + -rm -f lib/$(DEPDIR)/utils_crypt.Po + -rm -f lib/$(DEPDIR)/utils_io.Po + -rm -f lib/$(DEPDIR)/utils_loop.Po + -rm -f lib/crypto_backend/$(DEPDIR)/libcrypto_backend_la-argon2_generic.Plo + -rm -f lib/crypto_backend/$(DEPDIR)/libcrypto_backend_la-cipher_check.Plo + -rm -f lib/crypto_backend/$(DEPDIR)/libcrypto_backend_la-cipher_generic.Plo + -rm -f lib/crypto_backend/$(DEPDIR)/libcrypto_backend_la-crc32.Plo + -rm -f lib/crypto_backend/$(DEPDIR)/libcrypto_backend_la-crypto_cipher_kernel.Plo + -rm -f lib/crypto_backend/$(DEPDIR)/libcrypto_backend_la-crypto_gcrypt.Plo + -rm -f lib/crypto_backend/$(DEPDIR)/libcrypto_backend_la-crypto_kernel.Plo + -rm -f lib/crypto_backend/$(DEPDIR)/libcrypto_backend_la-crypto_nettle.Plo + -rm -f lib/crypto_backend/$(DEPDIR)/libcrypto_backend_la-crypto_nss.Plo + -rm -f lib/crypto_backend/$(DEPDIR)/libcrypto_backend_la-crypto_openssl.Plo + -rm -f lib/crypto_backend/$(DEPDIR)/libcrypto_backend_la-crypto_storage.Plo + -rm -f lib/crypto_backend/$(DEPDIR)/libcrypto_backend_la-pbkdf2_generic.Plo + -rm -f lib/crypto_backend/$(DEPDIR)/libcrypto_backend_la-pbkdf_check.Plo + -rm -f lib/crypto_backend/argon2/$(DEPDIR)/libargon2_la-argon2.Plo + -rm -f lib/crypto_backend/argon2/$(DEPDIR)/libargon2_la-core.Plo + -rm -f lib/crypto_backend/argon2/$(DEPDIR)/libargon2_la-encoding.Plo + -rm -f lib/crypto_backend/argon2/$(DEPDIR)/libargon2_la-opt.Plo + -rm -f lib/crypto_backend/argon2/$(DEPDIR)/libargon2_la-ref.Plo + -rm -f lib/crypto_backend/argon2/$(DEPDIR)/libargon2_la-thread.Plo + -rm -f lib/crypto_backend/argon2/blake2/$(DEPDIR)/libargon2_la-blake2b.Plo + -rm -f lib/integrity/$(DEPDIR)/libcryptsetup_la-integrity.Plo + -rm -f lib/loopaes/$(DEPDIR)/libcryptsetup_la-loopaes.Plo + -rm -f lib/luks1/$(DEPDIR)/libcryptsetup_la-af.Plo + -rm -f lib/luks1/$(DEPDIR)/libcryptsetup_la-keyencryption.Plo + -rm -f lib/luks1/$(DEPDIR)/libcryptsetup_la-keymanage.Plo + -rm -f lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_digest.Plo + -rm -f lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_digest_pbkdf2.Plo + -rm -f lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_disk_metadata.Plo + -rm -f lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_json_format.Plo + -rm -f lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_json_metadata.Plo + -rm -f lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_keyslot.Plo + -rm -f lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_keyslot_luks2.Plo + -rm -f lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_keyslot_reenc.Plo + -rm -f lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_luks1_convert.Plo + -rm -f lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_reencrypt.Plo + -rm -f lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_segment.Plo + -rm -f lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_token.Plo + -rm -f lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_token_keyring.Plo + -rm -f lib/tcrypt/$(DEPDIR)/libcryptsetup_la-tcrypt.Plo + -rm -f lib/verity/$(DEPDIR)/libcryptsetup_la-rs_decode_char.Plo + -rm -f lib/verity/$(DEPDIR)/libcryptsetup_la-rs_encode_char.Plo + -rm -f lib/verity/$(DEPDIR)/libcryptsetup_la-verity.Plo + -rm -f lib/verity/$(DEPDIR)/libcryptsetup_la-verity_fec.Plo + -rm -f lib/verity/$(DEPDIR)/libcryptsetup_la-verity_hash.Plo + -rm -f src/$(DEPDIR)/cryptsetup.Po + -rm -f src/$(DEPDIR)/cryptsetup_reencrypt.Po + -rm -f src/$(DEPDIR)/integritysetup.Po + -rm -f src/$(DEPDIR)/utils_blockdev.Po + -rm -f src/$(DEPDIR)/utils_luks2.Po + -rm -f src/$(DEPDIR)/utils_password.Po + -rm -f src/$(DEPDIR)/utils_tools.Po + -rm -f src/$(DEPDIR)/veritysetup.Po + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: uninstall-includeHEADERS uninstall-libLTLIBRARIES \ + uninstall-man uninstall-pkgconfigDATA uninstall-sbinPROGRAMS \ + uninstall-tmpfilesdDATA + +uninstall-man: uninstall-man8 + +.MAKE: $(am__recursive_targets) all install-am install-strip + +.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ + am--depfiles am--refresh check check-am clean clean-cscope \ + clean-generic clean-libLTLIBRARIES clean-libtool clean-local \ + clean-noinstLTLIBRARIES clean-sbinPROGRAMS cscope \ + cscopelist-am ctags ctags-am dist dist-all dist-bzip2 \ + dist-gzip dist-lzip dist-shar dist-tarZ dist-xz dist-zip \ + distcheck distclean distclean-compile distclean-generic \ + distclean-hdr distclean-libtool distclean-local distclean-tags \ + distcleancheck distdir distuninstallcheck dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am \ + install-includeHEADERS install-info install-info-am \ + install-libLTLIBRARIES install-man install-man8 install-pdf \ + install-pdf-am install-pkgconfigDATA install-ps install-ps-am \ + install-sbinPROGRAMS install-strip install-tmpfilesdDATA \ + installcheck installcheck-am installdirs installdirs-am \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ + pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \ + uninstall-includeHEADERS uninstall-libLTLIBRARIES \ + uninstall-man uninstall-man8 uninstall-pkgconfigDATA \ + uninstall-sbinPROGRAMS uninstall-tmpfilesdDATA + +.PRECIOUS: Makefile + + +distclean-local: + -find . -name \*~ -o -name \*.orig -o -name \*.rej | xargs rm -f + rm -rf autom4te.cache + +clean-local: + -rm -rf docs/doxygen_api_docs libargon2.la + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/NEWS b/NEWS new file mode 100644 index 0000000..168617a --- /dev/null +++ b/NEWS @@ -0,0 +1 @@ +See docs/* directory for Release Notes. diff --git a/README b/README new file mode 100644 index 0000000..613aa09 --- /dev/null +++ b/README @@ -0,0 +1,31 @@ + + cryptsetup + +setup cryptographic volumes for dm-crypt (including LUKS extension) + +WEB PAGE: + + https://gitlab.com/cryptsetup/cryptsetup/ + +FAQ: + + https://gitlab.com/cryptsetup/cryptsetup/wikis/FrequentlyAskedQuestions + +MAILING LIST: + + E-MAIL: dm-crypt@saout.de + URL: http://www.saout.de/mailman/listinfo/dm-crypt + +DOWNLOAD: + + https://www.kernel.org/pub/linux/utils/cryptsetup/ + +SOURCE CODE: + + URL: https://gitlab.com/cryptsetup/cryptsetup/tree/master + Checkout: git clone https://gitlab.com/cryptsetup/cryptsetup.git + +NLS (PO TRANSLATIONS): + + PO files are maintained by: + http://translationproject.org/domain/cryptsetup.html diff --git a/README.OpenSource b/README.OpenSource new file mode 100755 index 0000000..0b48b8d --- /dev/null +++ b/README.OpenSource @@ -0,0 +1,11 @@ +[ + { + "Name" : "cryptsetup", + "License" : "GNU General Public License,Version 2", + "License File" : "COPYING", + "Version Number" : "2.2.2", + "Owner" : "jiangxiaofeng8@huawei.com", + "Upstream URL" : "https://gitlab.com/cryptsetup/cryptsetup", + "Description" : "Cryptsetup is utility used to conveniently setup disk encryption based on DMCrypt kernel module." + } +] diff --git a/README.en.md b/README.en.md deleted file mode 100644 index c823543..0000000 --- a/README.en.md +++ /dev/null @@ -1,36 +0,0 @@ -# third_party_cryptsetup - -#### Description -{**When you're done, you can delete the content in this README and update the file with details for others getting started with your repository**} - -#### Software Architecture -Software architecture description - -#### Installation - -1. xxxx -2. xxxx -3. xxxx - -#### Instructions - -1. xxxx -2. xxxx -3. xxxx - -#### Contribution - -1. Fork the repository -2. Create Feat_xxx branch -3. Commit your code -4. Create Pull Request - - -#### Gitee Feature - -1. You can use Readme\_XXX.md to support different languages, such as Readme\_en.md, Readme\_zh.md -2. Gitee blog [blog.gitee.com](https://blog.gitee.com) -3. Explore open source project [https://gitee.com/explore](https://gitee.com/explore) -4. The most valuable open source project [GVP](https://gitee.com/gvp) -5. The manual of Gitee [https://gitee.com/help](https://gitee.com/help) -6. The most popular members [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/) diff --git a/README.md b/README.md deleted file mode 100644 index 68b3c45..0000000 --- a/README.md +++ /dev/null @@ -1,39 +0,0 @@ -# third_party_cryptsetup - -#### 介绍 -{**以下是 Gitee 平台说明,您可以替换此简介** -Gitee 是 OSCHINA 推出的基于 Git 的代码托管平台(同时支持 SVN)。专为开发者提供稳定、高效、安全的云端软件开发协作平台 -无论是个人、团队、或是企业,都能够用 Gitee 实现代码托管、项目管理、协作开发。企业项目请看 [https://gitee.com/enterprises](https://gitee.com/enterprises)} - -#### 软件架构 -软件架构说明 - - -#### 安装教程 - -1. xxxx -2. xxxx -3. xxxx - -#### 使用说明 - -1. xxxx -2. xxxx -3. xxxx - -#### 参与贡献 - -1. Fork 本仓库 -2. 新建 Feat_xxx 分支 -3. 提交代码 -4. 新建 Pull Request - - -#### 特技 - -1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md -2. Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com) -3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解 Gitee 上的优秀开源项目 -4. [GVP](https://gitee.com/gvp) 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目 -5. Gitee 官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help) -6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/) diff --git a/TODO b/TODO new file mode 100644 index 0000000..58e5cc9 --- /dev/null +++ b/TODO @@ -0,0 +1 @@ +Please see issues tracked at https://gitlab.com/cryptsetup/cryptsetup/issues. diff --git a/aclocal.m4 b/aclocal.m4 new file mode 100644 index 0000000..927ee4a --- /dev/null +++ b/aclocal.m4 @@ -0,0 +1,1593 @@ +# generated automatically by aclocal 1.16.1 -*- Autoconf -*- + +# Copyright (C) 1996-2018 Free Software Foundation, Inc. + +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],, +[m4_warning([this file was generated for autoconf 2.69. +You have another version of autoconf. It may work, but is not guaranteed to. +If you have problems, you may need to regenerate the build system entirely. +To do so, use the procedure documented by the package, typically 'autoreconf'.])]) + +# libgcrypt.m4 - Autoconf macros to detect libgcrypt +# Copyright (C) 2002, 2003, 2004, 2011, 2014, 2018 g10 Code GmbH +# +# This file is free software; as a special exception the author gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. +# +# This file is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# +# Last-changed: 2018-11-13 + + +dnl AM_PATH_LIBGCRYPT([MINIMUM-VERSION, +dnl [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND ]]]) +dnl Test for libgcrypt and define LIBGCRYPT_CFLAGS and LIBGCRYPT_LIBS. +dnl MINIMUN-VERSION is a string with the version number optionalliy prefixed +dnl with the API version to also check the API compatibility. Example: +dnl a MINIMUN-VERSION of 1:1.2.5 won't pass the test unless the installed +dnl version of libgcrypt is at least 1.2.5 *and* the API number is 1. Using +dnl this features allows to prevent build against newer versions of libgcrypt +dnl with a changed API. +dnl +dnl If a prefix option is not used, the config script is first +dnl searched in $SYSROOT/bin and then along $PATH. If the used +dnl config script does not match the host specification the script +dnl is added to the gpg_config_script_warn variable. +dnl +AC_DEFUN([AM_PATH_LIBGCRYPT], +[ AC_REQUIRE([AC_CANONICAL_HOST]) + AC_ARG_WITH(libgcrypt-prefix, + AC_HELP_STRING([--with-libgcrypt-prefix=PFX], + [prefix where LIBGCRYPT is installed (optional)]), + libgcrypt_config_prefix="$withval", libgcrypt_config_prefix="") + if test x"${LIBGCRYPT_CONFIG}" = x ; then + if test x"${libgcrypt_config_prefix}" != x ; then + LIBGCRYPT_CONFIG="${libgcrypt_config_prefix}/bin/libgcrypt-config" + fi + fi + + use_gpgrt_config="" + if test x"${LIBGCRYPT_CONFIG}" = x -a x"$GPGRT_CONFIG" != x -a "$GPGRT_CONFIG" != "no"; then + if $GPGRT_CONFIG libgcrypt --exists; then + LIBGCRYPT_CONFIG="$GPGRT_CONFIG libgcrypt" + AC_MSG_NOTICE([Use gpgrt-config as libgcrypt-config]) + use_gpgrt_config=yes + fi + fi + if test -z "$use_gpgrt_config"; then + if test x"${LIBGCRYPT_CONFIG}" = x ; then + case "${SYSROOT}" in + /*) + if test -x "${SYSROOT}/bin/libgcrypt-config" ; then + LIBGCRYPT_CONFIG="${SYSROOT}/bin/libgcrypt-config" + fi + ;; + '') + ;; + *) + AC_MSG_WARN([Ignoring \$SYSROOT as it is not an absolute path.]) + ;; + esac + fi + AC_PATH_PROG(LIBGCRYPT_CONFIG, libgcrypt-config, no) + fi + + tmp=ifelse([$1], ,1:1.2.0,$1) + if echo "$tmp" | grep ':' >/dev/null 2>/dev/null ; then + req_libgcrypt_api=`echo "$tmp" | sed 's/\(.*\):\(.*\)/\1/'` + min_libgcrypt_version=`echo "$tmp" | sed 's/\(.*\):\(.*\)/\2/'` + else + req_libgcrypt_api=0 + min_libgcrypt_version="$tmp" + fi + + AC_MSG_CHECKING(for LIBGCRYPT - version >= $min_libgcrypt_version) + ok=no + if test "$LIBGCRYPT_CONFIG" != "no" ; then + req_major=`echo $min_libgcrypt_version | \ + sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\1/'` + req_minor=`echo $min_libgcrypt_version | \ + sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\2/'` + req_micro=`echo $min_libgcrypt_version | \ + sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\3/'` + if test -z "$use_gpgrt_config"; then + libgcrypt_config_version=`$LIBGCRYPT_CONFIG --version` + else + libgcrypt_config_version=`$LIBGCRYPT_CONFIG --modversion` + fi + major=`echo $libgcrypt_config_version | \ + sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*/\1/'` + minor=`echo $libgcrypt_config_version | \ + sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*/\2/'` + micro=`echo $libgcrypt_config_version | \ + sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*/\3/'` + if test "$major" -gt "$req_major"; then + ok=yes + else + if test "$major" -eq "$req_major"; then + if test "$minor" -gt "$req_minor"; then + ok=yes + else + if test "$minor" -eq "$req_minor"; then + if test "$micro" -ge "$req_micro"; then + ok=yes + fi + fi + fi + fi + fi + fi + if test $ok = yes; then + AC_MSG_RESULT([yes ($libgcrypt_config_version)]) + else + AC_MSG_RESULT(no) + fi + if test $ok = yes; then + # If we have a recent libgcrypt, we should also check that the + # API is compatible + if test "$req_libgcrypt_api" -gt 0 ; then + if test -z "$use_gpgrt_config"; then + tmp=`$LIBGCRYPT_CONFIG --api-version 2>/dev/null || echo 0` + else + tmp=`$LIBGCRYPT_CONFIG --variable=api_version 2>/dev/null || echo 0` + fi + if test "$tmp" -gt 0 ; then + AC_MSG_CHECKING([LIBGCRYPT API version]) + if test "$req_libgcrypt_api" -eq "$tmp" ; then + AC_MSG_RESULT([okay]) + else + ok=no + AC_MSG_RESULT([does not match. want=$req_libgcrypt_api got=$tmp]) + fi + fi + fi + fi + if test $ok = yes; then + LIBGCRYPT_CFLAGS=`$LIBGCRYPT_CONFIG --cflags` + LIBGCRYPT_LIBS=`$LIBGCRYPT_CONFIG --libs` + ifelse([$2], , :, [$2]) + if test -z "$use_gpgrt_config"; then + libgcrypt_config_host=`$LIBGCRYPT_CONFIG --host 2>/dev/null || echo none` + else + libgcrypt_config_host=`$LIBGCRYPT_CONFIG --variable=host 2>/dev/null || echo none` + fi + if test x"$libgcrypt_config_host" != xnone ; then + if test x"$libgcrypt_config_host" != x"$host" ; then + AC_MSG_WARN([[ +*** +*** The config script "$LIBGCRYPT_CONFIG" was +*** built for $libgcrypt_config_host and thus may not match the +*** used host $host. +*** You may want to use the configure option --with-libgcrypt-prefix +*** to specify a matching config script or use \$SYSROOT. +***]]) + gpg_config_script_warn="$gpg_config_script_warn libgcrypt" + fi + fi + else + LIBGCRYPT_CFLAGS="" + LIBGCRYPT_LIBS="" + ifelse([$3], , :, [$3]) + fi + AC_SUBST(LIBGCRYPT_CFLAGS) + AC_SUBST(LIBGCRYPT_LIBS) +]) + +dnl pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- +dnl serial 11 (pkg-config-0.29) +dnl +dnl Copyright © 2004 Scott James Remnant . +dnl Copyright © 2012-2015 Dan Nicholson +dnl +dnl This program is free software; you can redistribute it and/or modify +dnl it under the terms of the GNU General Public License as published by +dnl the Free Software Foundation; either version 2 of the License, or +dnl (at your option) any later version. +dnl +dnl This program is distributed in the hope that it will be useful, but +dnl WITHOUT ANY WARRANTY; without even the implied warranty of +dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +dnl General Public License for more details. +dnl +dnl You should have received a copy of the GNU General Public License +dnl along with this program; if not, write to the Free Software +dnl Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +dnl 02111-1307, USA. +dnl +dnl As a special exception to the GNU General Public License, if you +dnl distribute this file as part of a program that contains a +dnl configuration script generated by Autoconf, you may include it under +dnl the same distribution terms that you use for the rest of that +dnl program. + +dnl PKG_PREREQ(MIN-VERSION) +dnl ----------------------- +dnl Since: 0.29 +dnl +dnl Verify that the version of the pkg-config macros are at least +dnl MIN-VERSION. Unlike PKG_PROG_PKG_CONFIG, which checks the user's +dnl installed version of pkg-config, this checks the developer's version +dnl of pkg.m4 when generating configure. +dnl +dnl To ensure that this macro is defined, also add: +dnl m4_ifndef([PKG_PREREQ], +dnl [m4_fatal([must install pkg-config 0.29 or later before running autoconf/autogen])]) +dnl +dnl See the "Since" comment for each macro you use to see what version +dnl of the macros you require. +m4_defun([PKG_PREREQ], +[m4_define([PKG_MACROS_VERSION], [0.29]) +m4_if(m4_version_compare(PKG_MACROS_VERSION, [$1]), -1, + [m4_fatal([pkg.m4 version $1 or higher is required but ]PKG_MACROS_VERSION[ found])]) +])dnl PKG_PREREQ + +dnl PKG_PROG_PKG_CONFIG([MIN-VERSION]) +dnl ---------------------------------- +dnl Since: 0.16 +dnl +dnl Search for the pkg-config tool and set the PKG_CONFIG variable to +dnl first found in the path. Checks that the version of pkg-config found +dnl is at least MIN-VERSION. If MIN-VERSION is not specified, 0.9.0 is +dnl used since that's the first version where most current features of +dnl pkg-config existed. +AC_DEFUN([PKG_PROG_PKG_CONFIG], +[m4_pattern_forbid([^_?PKG_[A-Z_]+$]) +m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$]) +m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$]) +AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility]) +AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path]) +AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path]) + +if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then + AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) +fi +if test -n "$PKG_CONFIG"; then + _pkg_min_version=m4_default([$1], [0.9.0]) + AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) + if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + PKG_CONFIG="" + fi +fi[]dnl +])dnl PKG_PROG_PKG_CONFIG + +dnl PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) +dnl ------------------------------------------------------------------- +dnl Since: 0.18 +dnl +dnl Check to see whether a particular set of modules exists. Similar to +dnl PKG_CHECK_MODULES(), but does not set variables or print errors. +dnl +dnl Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG]) +dnl only at the first occurence in configure.ac, so if the first place +dnl it's called might be skipped (such as if it is within an "if", you +dnl have to call PKG_CHECK_EXISTS manually +AC_DEFUN([PKG_CHECK_EXISTS], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl +if test -n "$PKG_CONFIG" && \ + AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then + m4_default([$2], [:]) +m4_ifvaln([$3], [else + $3])dnl +fi]) + +dnl _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) +dnl --------------------------------------------- +dnl Internal wrapper calling pkg-config via PKG_CONFIG and setting +dnl pkg_failed based on the result. +m4_define([_PKG_CONFIG], +[if test -n "$$1"; then + pkg_cv_[]$1="$$1" + elif test -n "$PKG_CONFIG"; then + PKG_CHECK_EXISTS([$3], + [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes ], + [pkg_failed=yes]) + else + pkg_failed=untried +fi[]dnl +])dnl _PKG_CONFIG + +dnl _PKG_SHORT_ERRORS_SUPPORTED +dnl --------------------------- +dnl Internal check to see if pkg-config supports short errors. +AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG]) +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi[]dnl +])dnl _PKG_SHORT_ERRORS_SUPPORTED + + +dnl PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], +dnl [ACTION-IF-NOT-FOUND]) +dnl -------------------------------------------------------------- +dnl Since: 0.4.0 +dnl +dnl Note that if there is a possibility the first call to +dnl PKG_CHECK_MODULES might not happen, you should be sure to include an +dnl explicit call to PKG_PROG_PKG_CONFIG in your configure.ac +AC_DEFUN([PKG_CHECK_MODULES], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl +AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl +AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl + +pkg_failed=no +AC_MSG_CHECKING([for $1]) + +_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) +_PKG_CONFIG([$1][_LIBS], [libs], [$2]) + +m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS +and $1[]_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details.]) + +if test $pkg_failed = yes; then + AC_MSG_RESULT([no]) + _PKG_SHORT_ERRORS_SUPPORTED + if test $_pkg_short_errors_supported = yes; then + $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1` + else + $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD + + m4_default([$4], [AC_MSG_ERROR( +[Package requirements ($2) were not met: + +$$1_PKG_ERRORS + +Consider adjusting the PKG_CONFIG_PATH environment variable if you +installed software in a non-standard prefix. + +_PKG_TEXT])[]dnl + ]) +elif test $pkg_failed = untried; then + AC_MSG_RESULT([no]) + m4_default([$4], [AC_MSG_FAILURE( +[The pkg-config script could not be found or is too old. Make sure it +is in your PATH or set the PKG_CONFIG environment variable to the full +path to pkg-config. + +_PKG_TEXT + +To get pkg-config, see .])[]dnl + ]) +else + $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS + $1[]_LIBS=$pkg_cv_[]$1[]_LIBS + AC_MSG_RESULT([yes]) + $3 +fi[]dnl +])dnl PKG_CHECK_MODULES + + +dnl PKG_CHECK_MODULES_STATIC(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], +dnl [ACTION-IF-NOT-FOUND]) +dnl --------------------------------------------------------------------- +dnl Since: 0.29 +dnl +dnl Checks for existence of MODULES and gathers its build flags with +dnl static libraries enabled. Sets VARIABLE-PREFIX_CFLAGS from --cflags +dnl and VARIABLE-PREFIX_LIBS from --libs. +dnl +dnl Note that if there is a possibility the first call to +dnl PKG_CHECK_MODULES_STATIC might not happen, you should be sure to +dnl include an explicit call to PKG_PROG_PKG_CONFIG in your +dnl configure.ac. +AC_DEFUN([PKG_CHECK_MODULES_STATIC], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl +_save_PKG_CONFIG=$PKG_CONFIG +PKG_CONFIG="$PKG_CONFIG --static" +PKG_CHECK_MODULES($@) +PKG_CONFIG=$_save_PKG_CONFIG[]dnl +])dnl PKG_CHECK_MODULES_STATIC + + +dnl PKG_INSTALLDIR([DIRECTORY]) +dnl ------------------------- +dnl Since: 0.27 +dnl +dnl Substitutes the variable pkgconfigdir as the location where a module +dnl should install pkg-config .pc files. By default the directory is +dnl $libdir/pkgconfig, but the default can be changed by passing +dnl DIRECTORY. The user can override through the --with-pkgconfigdir +dnl parameter. +AC_DEFUN([PKG_INSTALLDIR], +[m4_pushdef([pkg_default], [m4_default([$1], ['${libdir}/pkgconfig'])]) +m4_pushdef([pkg_description], + [pkg-config installation directory @<:@]pkg_default[@:>@]) +AC_ARG_WITH([pkgconfigdir], + [AS_HELP_STRING([--with-pkgconfigdir], pkg_description)],, + [with_pkgconfigdir=]pkg_default) +AC_SUBST([pkgconfigdir], [$with_pkgconfigdir]) +m4_popdef([pkg_default]) +m4_popdef([pkg_description]) +])dnl PKG_INSTALLDIR + + +dnl PKG_NOARCH_INSTALLDIR([DIRECTORY]) +dnl -------------------------------- +dnl Since: 0.27 +dnl +dnl Substitutes the variable noarch_pkgconfigdir as the location where a +dnl module should install arch-independent pkg-config .pc files. By +dnl default the directory is $datadir/pkgconfig, but the default can be +dnl changed by passing DIRECTORY. The user can override through the +dnl --with-noarch-pkgconfigdir parameter. +AC_DEFUN([PKG_NOARCH_INSTALLDIR], +[m4_pushdef([pkg_default], [m4_default([$1], ['${datadir}/pkgconfig'])]) +m4_pushdef([pkg_description], + [pkg-config arch-independent installation directory @<:@]pkg_default[@:>@]) +AC_ARG_WITH([noarch-pkgconfigdir], + [AS_HELP_STRING([--with-noarch-pkgconfigdir], pkg_description)],, + [with_noarch_pkgconfigdir=]pkg_default) +AC_SUBST([noarch_pkgconfigdir], [$with_noarch_pkgconfigdir]) +m4_popdef([pkg_default]) +m4_popdef([pkg_description]) +])dnl PKG_NOARCH_INSTALLDIR + + +dnl PKG_CHECK_VAR(VARIABLE, MODULE, CONFIG-VARIABLE, +dnl [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) +dnl ------------------------------------------- +dnl Since: 0.28 +dnl +dnl Retrieves the value of the pkg-config variable for the given module. +AC_DEFUN([PKG_CHECK_VAR], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl +AC_ARG_VAR([$1], [value of $3 for $2, overriding pkg-config])dnl + +_PKG_CONFIG([$1], [variable="][$3]["], [$2]) +AS_VAR_COPY([$1], [pkg_cv_][$1]) + +AS_VAR_IF([$1], [""], [$5], [$4])dnl +])dnl PKG_CHECK_VAR + +# Copyright (C) 2002-2018 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_AUTOMAKE_VERSION(VERSION) +# ---------------------------- +# Automake X.Y traces this macro to ensure aclocal.m4 has been +# generated from the m4 files accompanying Automake X.Y. +# (This private macro should not be called outside this file.) +AC_DEFUN([AM_AUTOMAKE_VERSION], +[am__api_version='1.16' +dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to +dnl require some minimum version. Point them to the right macro. +m4_if([$1], [1.16.1], [], + [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl +]) + +# _AM_AUTOCONF_VERSION(VERSION) +# ----------------------------- +# aclocal traces this macro to find the Autoconf version. +# This is a private macro too. Using m4_define simplifies +# the logic in aclocal, which can simply ignore this definition. +m4_define([_AM_AUTOCONF_VERSION], []) + +# AM_SET_CURRENT_AUTOMAKE_VERSION +# ------------------------------- +# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. +# This function is AC_REQUIREd by AM_INIT_AUTOMAKE. +AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], +[AM_AUTOMAKE_VERSION([1.16.1])dnl +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) + +# AM_AUX_DIR_EXPAND -*- Autoconf -*- + +# Copyright (C) 2001-2018 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets +# $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to +# '$srcdir', '$srcdir/..', or '$srcdir/../..'. +# +# Of course, Automake must honor this variable whenever it calls a +# tool from the auxiliary directory. The problem is that $srcdir (and +# therefore $ac_aux_dir as well) can be either absolute or relative, +# depending on how configure is run. This is pretty annoying, since +# it makes $ac_aux_dir quite unusable in subdirectories: in the top +# source directory, any form will work fine, but in subdirectories a +# relative path needs to be adjusted first. +# +# $ac_aux_dir/missing +# fails when called from a subdirectory if $ac_aux_dir is relative +# $top_srcdir/$ac_aux_dir/missing +# fails if $ac_aux_dir is absolute, +# fails when called from a subdirectory in a VPATH build with +# a relative $ac_aux_dir +# +# The reason of the latter failure is that $top_srcdir and $ac_aux_dir +# are both prefixed by $srcdir. In an in-source build this is usually +# harmless because $srcdir is '.', but things will broke when you +# start a VPATH build or use an absolute $srcdir. +# +# So we could use something similar to $top_srcdir/$ac_aux_dir/missing, +# iff we strip the leading $srcdir from $ac_aux_dir. That would be: +# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` +# and then we would define $MISSING as +# MISSING="\${SHELL} $am_aux_dir/missing" +# This will work as long as MISSING is not called from configure, because +# unfortunately $(top_srcdir) has no meaning in configure. +# However there are other variables, like CC, which are often used in +# configure, and could therefore not use this "fixed" $ac_aux_dir. +# +# Another solution, used here, is to always expand $ac_aux_dir to an +# absolute PATH. The drawback is that using absolute paths prevent a +# configured tree to be moved without reconfiguration. + +AC_DEFUN([AM_AUX_DIR_EXPAND], +[AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl +# Expand $ac_aux_dir to an absolute path. +am_aux_dir=`cd "$ac_aux_dir" && pwd` +]) + +# AM_CONDITIONAL -*- Autoconf -*- + +# Copyright (C) 1997-2018 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_CONDITIONAL(NAME, SHELL-CONDITION) +# ------------------------------------- +# Define a conditional. +AC_DEFUN([AM_CONDITIONAL], +[AC_PREREQ([2.52])dnl + m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], + [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl +AC_SUBST([$1_TRUE])dnl +AC_SUBST([$1_FALSE])dnl +_AM_SUBST_NOTMAKE([$1_TRUE])dnl +_AM_SUBST_NOTMAKE([$1_FALSE])dnl +m4_define([_AM_COND_VALUE_$1], [$2])dnl +if $2; then + $1_TRUE= + $1_FALSE='#' +else + $1_TRUE='#' + $1_FALSE= +fi +AC_CONFIG_COMMANDS_PRE( +[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then + AC_MSG_ERROR([[conditional "$1" was never defined. +Usually this means the macro was only invoked conditionally.]]) +fi])]) + +# Copyright (C) 1999-2018 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + + +# There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be +# written in clear, in which case automake, when reading aclocal.m4, +# will think it sees a *use*, and therefore will trigger all it's +# C support machinery. Also note that it means that autoscan, seeing +# CC etc. in the Makefile, will ask for an AC_PROG_CC use... + + +# _AM_DEPENDENCIES(NAME) +# ---------------------- +# See how the compiler implements dependency checking. +# NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC". +# We try a few techniques and use that to set a single cache variable. +# +# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was +# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular +# dependency, and given that the user is not expected to run this macro, +# just rely on AC_PROG_CC. +AC_DEFUN([_AM_DEPENDENCIES], +[AC_REQUIRE([AM_SET_DEPDIR])dnl +AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl +AC_REQUIRE([AM_MAKE_INCLUDE])dnl +AC_REQUIRE([AM_DEP_TRACK])dnl + +m4_if([$1], [CC], [depcc="$CC" am_compiler_list=], + [$1], [CXX], [depcc="$CXX" am_compiler_list=], + [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'], + [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'], + [$1], [UPC], [depcc="$UPC" am_compiler_list=], + [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'], + [depcc="$$1" am_compiler_list=]) + +AC_CACHE_CHECK([dependency style of $depcc], + [am_cv_$1_dependencies_compiler_type], +[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named 'D' -- because '-MD' means "put the output + # in D". + rm -rf conftest.dir + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_$1_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` + fi + am__universal=false + m4_case([$1], [CC], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac], + [CXX], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac]) + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with + # Solaris 10 /bin/sh. + echo '/* dummy */' > sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with '-c' and '-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle '-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs. + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # After this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested. + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvc7 | msvc7msys | msvisualcpp | msvcmsys) + # This compiler won't grok '-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_$1_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_$1_dependencies_compiler_type=none +fi +]) +AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) +AM_CONDITIONAL([am__fastdep$1], [ + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) +]) + + +# AM_SET_DEPDIR +# ------------- +# Choose a directory name for dependency files. +# This macro is AC_REQUIREd in _AM_DEPENDENCIES. +AC_DEFUN([AM_SET_DEPDIR], +[AC_REQUIRE([AM_SET_LEADING_DOT])dnl +AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl +]) + + +# AM_DEP_TRACK +# ------------ +AC_DEFUN([AM_DEP_TRACK], +[AC_ARG_ENABLE([dependency-tracking], [dnl +AS_HELP_STRING( + [--enable-dependency-tracking], + [do not reject slow dependency extractors]) +AS_HELP_STRING( + [--disable-dependency-tracking], + [speeds up one-time build])]) +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' + am__nodep='_no' +fi +AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) +AC_SUBST([AMDEPBACKSLASH])dnl +_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl +AC_SUBST([am__nodep])dnl +_AM_SUBST_NOTMAKE([am__nodep])dnl +]) + +# Generate code to set up dependency tracking. -*- Autoconf -*- + +# Copyright (C) 1999-2018 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# _AM_OUTPUT_DEPENDENCY_COMMANDS +# ------------------------------ +AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], +[{ + # Older Autoconf quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + # TODO: see whether this extra hack can be removed once we start + # requiring Autoconf 2.70 or later. + AS_CASE([$CONFIG_FILES], + [*\'*], [eval set x "$CONFIG_FILES"], + [*], [set x $CONFIG_FILES]) + shift + # Used to flag and report bootstrapping failures. + am_rc=0 + for am_mf + do + # Strip MF so we end up with the name of the file. + am_mf=`AS_ECHO(["$am_mf"]) | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile which includes + # dependency-tracking related rules and includes. + # Grep'ing the whole file directly is not great: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \ + || continue + am_dirpart=`AS_DIRNAME(["$am_mf"])` + am_filepart=`AS_BASENAME(["$am_mf"])` + AM_RUN_LOG([cd "$am_dirpart" \ + && sed -e '/# am--include-marker/d' "$am_filepart" \ + | $MAKE -f - am--depfiles]) || am_rc=$? + done + if test $am_rc -ne 0; then + AC_MSG_FAILURE([Something went wrong bootstrapping makefile fragments + for automatic dependency tracking. Try re-running configure with the + '--disable-dependency-tracking' option to at least be able to build + the package (albeit without support for automatic dependency tracking).]) + fi + AS_UNSET([am_dirpart]) + AS_UNSET([am_filepart]) + AS_UNSET([am_mf]) + AS_UNSET([am_rc]) + rm -f conftest-deps.mk +} +])# _AM_OUTPUT_DEPENDENCY_COMMANDS + + +# AM_OUTPUT_DEPENDENCY_COMMANDS +# ----------------------------- +# This macro should only be invoked once -- use via AC_REQUIRE. +# +# This code is only required when automatic dependency tracking is enabled. +# This creates each '.Po' and '.Plo' makefile fragment that we'll need in +# order to bootstrap the dependency handling code. +AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], +[AC_CONFIG_COMMANDS([depfiles], + [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], + [AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}"])]) + +# Do all the work for Automake. -*- Autoconf -*- + +# Copyright (C) 1996-2018 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This macro actually does too much. Some checks are only needed if +# your package does certain things. But this isn't really a big deal. + +dnl Redefine AC_PROG_CC to automatically invoke _AM_PROG_CC_C_O. +m4_define([AC_PROG_CC], +m4_defn([AC_PROG_CC]) +[_AM_PROG_CC_C_O +]) + +# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) +# AM_INIT_AUTOMAKE([OPTIONS]) +# ----------------------------------------------- +# The call with PACKAGE and VERSION arguments is the old style +# call (pre autoconf-2.50), which is being phased out. PACKAGE +# and VERSION should now be passed to AC_INIT and removed from +# the call to AM_INIT_AUTOMAKE. +# We support both call styles for the transition. After +# the next Automake release, Autoconf can make the AC_INIT +# arguments mandatory, and then we can depend on a new Autoconf +# release and drop the old call support. +AC_DEFUN([AM_INIT_AUTOMAKE], +[AC_PREREQ([2.65])dnl +dnl Autoconf wants to disallow AM_ names. We explicitly allow +dnl the ones we care about. +m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl +AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl +AC_REQUIRE([AC_PROG_INSTALL])dnl +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi +AC_SUBST([CYGPATH_W]) + +# Define the identity of the package. +dnl Distinguish between old-style and new-style calls. +m4_ifval([$2], +[AC_DIAGNOSE([obsolete], + [$0: two- and three-arguments forms are deprecated.]) +m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl + AC_SUBST([PACKAGE], [$1])dnl + AC_SUBST([VERSION], [$2])], +[_AM_SET_OPTIONS([$1])dnl +dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. +m4_if( + m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]), + [ok:ok],, + [m4_fatal([AC_INIT should be called with package and version arguments])])dnl + AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl + AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl + +_AM_IF_OPTION([no-define],, +[AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package]) + AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl + +# Some tools Automake needs. +AC_REQUIRE([AM_SANITY_CHECK])dnl +AC_REQUIRE([AC_ARG_PROGRAM])dnl +AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) +AM_MISSING_PROG([AUTOCONF], [autoconf]) +AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) +AM_MISSING_PROG([AUTOHEADER], [autoheader]) +AM_MISSING_PROG([MAKEINFO], [makeinfo]) +AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl +AC_REQUIRE([AC_PROG_MKDIR_P])dnl +# For better backward compatibility. To be removed once Automake 1.9.x +# dies out for good. For more background, see: +# +# +AC_SUBST([mkdir_p], ['$(MKDIR_P)']) +# We need awk for the "check" target (and possibly the TAP driver). The +# system "awk" is bad on some platforms. +AC_REQUIRE([AC_PROG_AWK])dnl +AC_REQUIRE([AC_PROG_MAKE_SET])dnl +AC_REQUIRE([AM_SET_LEADING_DOT])dnl +_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], + [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], + [_AM_PROG_TAR([v7])])]) +_AM_IF_OPTION([no-dependencies],, +[AC_PROVIDE_IFELSE([AC_PROG_CC], + [_AM_DEPENDENCIES([CC])], + [m4_define([AC_PROG_CC], + m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl +AC_PROVIDE_IFELSE([AC_PROG_CXX], + [_AM_DEPENDENCIES([CXX])], + [m4_define([AC_PROG_CXX], + m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl +AC_PROVIDE_IFELSE([AC_PROG_OBJC], + [_AM_DEPENDENCIES([OBJC])], + [m4_define([AC_PROG_OBJC], + m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl +AC_PROVIDE_IFELSE([AC_PROG_OBJCXX], + [_AM_DEPENDENCIES([OBJCXX])], + [m4_define([AC_PROG_OBJCXX], + m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl +]) +AC_REQUIRE([AM_SILENT_RULES])dnl +dnl The testsuite driver may need to know about EXEEXT, so add the +dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This +dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below. +AC_CONFIG_COMMANDS_PRE(dnl +[m4_provide_if([_AM_COMPILER_EXEEXT], + [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl + +# POSIX will say in a future version that running "rm -f" with no argument +# is OK; and we want to be able to make that assumption in our Makefile +# recipes. So use an aggressive probe to check that the usage we want is +# actually supported "in the wild" to an acceptable degree. +# See automake bug#10828. +# To make any issue more visible, cause the running configure to be aborted +# by default if the 'rm' program in use doesn't match our expectations; the +# user can still override this though. +if rm -f && rm -fr && rm -rf; then : OK; else + cat >&2 <<'END' +Oops! + +Your 'rm' program seems unable to run without file operands specified +on the command line, even when the '-f' option is present. This is contrary +to the behaviour of most rm programs out there, and not conforming with +the upcoming POSIX standard: + +Please tell bug-automake@gnu.org about your system, including the value +of your $PATH and any error possibly output before this message. This +can help us improve future automake versions. + +END + if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then + echo 'Configuration will proceed anyway, since you have set the' >&2 + echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 + echo >&2 + else + cat >&2 <<'END' +Aborting the configuration process, to ensure you take notice of the issue. + +You can download and install GNU coreutils to get an 'rm' implementation +that behaves properly: . + +If you want to complete the configuration process using your problematic +'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM +to "yes", and re-run configure. + +END + AC_MSG_ERROR([Your 'rm' program is bad, sorry.]) + fi +fi +dnl The trailing newline in this macro's definition is deliberate, for +dnl backward compatibility and to allow trailing 'dnl'-style comments +dnl after the AM_INIT_AUTOMAKE invocation. See automake bug#16841. +]) + +dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not +dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further +dnl mangled by Autoconf and run in a shell conditional statement. +m4_define([_AC_COMPILER_EXEEXT], +m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) + +# When config.status generates a header, we must update the stamp-h file. +# This file resides in the same directory as the config header +# that is generated. The stamp files are numbered to have different names. + +# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the +# loop where config.status creates the headers, so we can generate +# our stamp files there. +AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], +[# Compute $1's index in $config_headers. +_am_arg=$1 +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) + +# Copyright (C) 2001-2018 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_INSTALL_SH +# ------------------ +# Define $install_sh. +AC_DEFUN([AM_PROG_INSTALL_SH], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +if test x"${install_sh+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi +AC_SUBST([install_sh])]) + +# Copyright (C) 2003-2018 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# Check whether the underlying file-system supports filenames +# with a leading dot. For instance MS-DOS doesn't. +AC_DEFUN([AM_SET_LEADING_DOT], +[rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null +AC_SUBST([am__leading_dot])]) + +# Check to see how 'make' treats includes. -*- Autoconf -*- + +# Copyright (C) 2001-2018 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_MAKE_INCLUDE() +# ----------------- +# Check whether make has an 'include' directive that can support all +# the idioms we need for our automatic dependency tracking code. +AC_DEFUN([AM_MAKE_INCLUDE], +[AC_MSG_CHECKING([whether ${MAKE-make} supports the include directive]) +cat > confinc.mk << 'END' +am__doit: + @echo this is the am__doit target >confinc.out +.PHONY: am__doit +END +am__include="#" +am__quote= +# BSD make does it like this. +echo '.include "confinc.mk" # ignored' > confmf.BSD +# Other make implementations (GNU, Solaris 10, AIX) do it like this. +echo 'include confinc.mk # ignored' > confmf.GNU +_am_result=no +for s in GNU BSD; do + AM_RUN_LOG([${MAKE-make} -f confmf.$s && cat confinc.out]) + AS_CASE([$?:`cat confinc.out 2>/dev/null`], + ['0:this is the am__doit target'], + [AS_CASE([$s], + [BSD], [am__include='.include' am__quote='"'], + [am__include='include' am__quote=''])]) + if test "$am__include" != "#"; then + _am_result="yes ($s style)" + break + fi +done +rm -f confinc.* confmf.* +AC_MSG_RESULT([${_am_result}]) +AC_SUBST([am__include])]) +AC_SUBST([am__quote])]) + +# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- + +# Copyright (C) 1997-2018 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_MISSING_PROG(NAME, PROGRAM) +# ------------------------------ +AC_DEFUN([AM_MISSING_PROG], +[AC_REQUIRE([AM_MISSING_HAS_RUN]) +$1=${$1-"${am_missing_run}$2"} +AC_SUBST($1)]) + +# AM_MISSING_HAS_RUN +# ------------------ +# Define MISSING if not defined so far and test if it is modern enough. +# If it is, set am_missing_run to use it, otherwise, to nothing. +AC_DEFUN([AM_MISSING_HAS_RUN], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +AC_REQUIRE_AUX_FILE([missing])dnl +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi +# Use eval to expand $SHELL +if eval "$MISSING --is-lightweight"; then + am_missing_run="$MISSING " +else + am_missing_run= + AC_MSG_WARN(['missing' script is too old or missing]) +fi +]) + +# Helper functions for option handling. -*- Autoconf -*- + +# Copyright (C) 2001-2018 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# _AM_MANGLE_OPTION(NAME) +# ----------------------- +AC_DEFUN([_AM_MANGLE_OPTION], +[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) + +# _AM_SET_OPTION(NAME) +# -------------------- +# Set option NAME. Presently that only means defining a flag for this option. +AC_DEFUN([_AM_SET_OPTION], +[m4_define(_AM_MANGLE_OPTION([$1]), [1])]) + +# _AM_SET_OPTIONS(OPTIONS) +# ------------------------ +# OPTIONS is a space-separated list of Automake options. +AC_DEFUN([_AM_SET_OPTIONS], +[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) + +# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) +# ------------------------------------------- +# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. +AC_DEFUN([_AM_IF_OPTION], +[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) + +# Copyright (C) 1999-2018 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# _AM_PROG_CC_C_O +# --------------- +# Like AC_PROG_CC_C_O, but changed for automake. We rewrite AC_PROG_CC +# to automatically call this. +AC_DEFUN([_AM_PROG_CC_C_O], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +AC_REQUIRE_AUX_FILE([compile])dnl +AC_LANG_PUSH([C])dnl +AC_CACHE_CHECK( + [whether $CC understands -c and -o together], + [am_cv_prog_cc_c_o], + [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])]) + # Make sure it works both with $CC and with simple cc. + # Following AC_PROG_CC_C_O, we do the test twice because some + # compilers refuse to overwrite an existing .o file with -o, + # though they will create one. + am_cv_prog_cc_c_o=yes + for am_i in 1 2; do + if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \ + && test -f conftest2.$ac_objext; then + : OK + else + am_cv_prog_cc_c_o=no + break + fi + done + rm -f core conftest* + unset am_i]) +if test "$am_cv_prog_cc_c_o" != yes; then + # Losing compiler, so override with the script. + # FIXME: It is wrong to rewrite CC. + # But if we don't then we get into trouble of one sort or another. + # A longer-term fix would be to have automake use am__CC in this case, + # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" + CC="$am_aux_dir/compile $CC" +fi +AC_LANG_POP([C])]) + +# For backward compatibility. +AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) + +# Copyright (C) 2001-2018 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_RUN_LOG(COMMAND) +# ------------------- +# Run COMMAND, save the exit status in ac_status, and log it. +# (This has been adapted from Autoconf's _AC_RUN_LOG macro.) +AC_DEFUN([AM_RUN_LOG], +[{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD + ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + (exit $ac_status); }]) + +# Check to make sure that the build environment is sane. -*- Autoconf -*- + +# Copyright (C) 1996-2018 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_SANITY_CHECK +# --------------- +AC_DEFUN([AM_SANITY_CHECK], +[AC_MSG_CHECKING([whether build environment is sane]) +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[[\\\"\#\$\&\'\`$am_lf]]*) + AC_MSG_ERROR([unsafe absolute working directory name]);; +esac +case $srcdir in + *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) + AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);; +esac + +# Do 'set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + am_has_slept=no + for am_try in 1 2; do + echo "timestamp, slept: $am_has_slept" > conftest.file + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$[*]" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + if test "$[*]" != "X $srcdir/configure conftest.file" \ + && test "$[*]" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken + alias in your environment]) + fi + if test "$[2]" = conftest.file || test $am_try -eq 2; then + break + fi + # Just in case. + sleep 1 + am_has_slept=yes + done + test "$[2]" = conftest.file + ) +then + # Ok. + : +else + AC_MSG_ERROR([newly created file is older than distributed files! +Check your system clock]) +fi +AC_MSG_RESULT([yes]) +# If we didn't sleep, we still need to ensure time stamps of config.status and +# generated files are strictly newer. +am_sleep_pid= +if grep 'slept: no' conftest.file >/dev/null 2>&1; then + ( sleep 1 ) & + am_sleep_pid=$! +fi +AC_CONFIG_COMMANDS_PRE( + [AC_MSG_CHECKING([that generated files are newer than configure]) + if test -n "$am_sleep_pid"; then + # Hide warnings about reused PIDs. + wait $am_sleep_pid 2>/dev/null + fi + AC_MSG_RESULT([done])]) +rm -f conftest.file +]) + +# Copyright (C) 2009-2018 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_SILENT_RULES([DEFAULT]) +# -------------------------- +# Enable less verbose build rules; with the default set to DEFAULT +# ("yes" being less verbose, "no" or empty being verbose). +AC_DEFUN([AM_SILENT_RULES], +[AC_ARG_ENABLE([silent-rules], [dnl +AS_HELP_STRING( + [--enable-silent-rules], + [less verbose build output (undo: "make V=1")]) +AS_HELP_STRING( + [--disable-silent-rules], + [verbose build output (undo: "make V=0")])dnl +]) +case $enable_silent_rules in @%:@ ((( + yes) AM_DEFAULT_VERBOSITY=0;; + no) AM_DEFAULT_VERBOSITY=1;; + *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; +esac +dnl +dnl A few 'make' implementations (e.g., NonStop OS and NextStep) +dnl do not support nested variable expansions. +dnl See automake bug#9928 and bug#10237. +am_make=${MAKE-make} +AC_CACHE_CHECK([whether $am_make supports nested variables], + [am_cv_make_support_nested_variables], + [if AS_ECHO([['TRUE=$(BAR$(V)) +BAR0=false +BAR1=true +V=1 +am__doit: + @$(TRUE) +.PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then + am_cv_make_support_nested_variables=yes +else + am_cv_make_support_nested_variables=no +fi]) +if test $am_cv_make_support_nested_variables = yes; then + dnl Using '$V' instead of '$(V)' breaks IRIX make. + AM_V='$(V)' + AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' +else + AM_V=$AM_DEFAULT_VERBOSITY + AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY +fi +AC_SUBST([AM_V])dnl +AM_SUBST_NOTMAKE([AM_V])dnl +AC_SUBST([AM_DEFAULT_V])dnl +AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl +AC_SUBST([AM_DEFAULT_VERBOSITY])dnl +AM_BACKSLASH='\' +AC_SUBST([AM_BACKSLASH])dnl +_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl +]) + +# Copyright (C) 2001-2018 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_INSTALL_STRIP +# --------------------- +# One issue with vendor 'install' (even GNU) is that you can't +# specify the program used to strip binaries. This is especially +# annoying in cross-compiling environments, where the build's strip +# is unlikely to handle the host's binaries. +# Fortunately install-sh will honor a STRIPPROG variable, so we +# always use install-sh in "make install-strip", and initialize +# STRIPPROG with the value of the STRIP variable (set by the user). +AC_DEFUN([AM_PROG_INSTALL_STRIP], +[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +# Installed binaries are usually stripped using 'strip' when the user +# run "make install-strip". However 'strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the 'STRIP' environment variable to overrule this program. +dnl Don't test for $cross_compiling = yes, because it might be 'maybe'. +if test "$cross_compiling" != no; then + AC_CHECK_TOOL([STRIP], [strip], :) +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" +AC_SUBST([INSTALL_STRIP_PROGRAM])]) + +# Copyright (C) 2006-2018 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# _AM_SUBST_NOTMAKE(VARIABLE) +# --------------------------- +# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. +# This macro is traced by Automake. +AC_DEFUN([_AM_SUBST_NOTMAKE]) + +# AM_SUBST_NOTMAKE(VARIABLE) +# -------------------------- +# Public sister of _AM_SUBST_NOTMAKE. +AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) + +# Check how to create a tarball. -*- Autoconf -*- + +# Copyright (C) 2004-2018 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# _AM_PROG_TAR(FORMAT) +# -------------------- +# Check how to create a tarball in format FORMAT. +# FORMAT should be one of 'v7', 'ustar', or 'pax'. +# +# Substitute a variable $(am__tar) that is a command +# writing to stdout a FORMAT-tarball containing the directory +# $tardir. +# tardir=directory && $(am__tar) > result.tar +# +# Substitute a variable $(am__untar) that extract such +# a tarball read from stdin. +# $(am__untar) < result.tar +# +AC_DEFUN([_AM_PROG_TAR], +[# Always define AMTAR for backward compatibility. Yes, it's still used +# in the wild :-( We should find a proper way to deprecate it ... +AC_SUBST([AMTAR], ['$${TAR-tar}']) + +# We'll loop over all known methods to create a tar archive until one works. +_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' + +m4_if([$1], [v7], + [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], + + [m4_case([$1], + [ustar], + [# The POSIX 1988 'ustar' format is defined with fixed-size fields. + # There is notably a 21 bits limit for the UID and the GID. In fact, + # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 + # and bug#13588). + am_max_uid=2097151 # 2^21 - 1 + am_max_gid=$am_max_uid + # The $UID and $GID variables are not portable, so we need to resort + # to the POSIX-mandated id(1) utility. Errors in the 'id' calls + # below are definitely unexpected, so allow the users to see them + # (that is, avoid stderr redirection). + am_uid=`id -u || echo unknown` + am_gid=`id -g || echo unknown` + AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format]) + if test $am_uid -le $am_max_uid; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + _am_tools=none + fi + AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format]) + if test $am_gid -le $am_max_gid; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + _am_tools=none + fi], + + [pax], + [], + + [m4_fatal([Unknown tar format])]) + + AC_MSG_CHECKING([how to create a $1 tar archive]) + + # Go ahead even if we have the value already cached. We do so because we + # need to set the values for the 'am__tar' and 'am__untar' variables. + _am_tools=${am_cv_prog_tar_$1-$_am_tools} + + for _am_tool in $_am_tools; do + case $_am_tool in + gnutar) + for _am_tar in tar gnutar gtar; do + AM_RUN_LOG([$_am_tar --version]) && break + done + am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' + am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' + am__untar="$_am_tar -xf -" + ;; + plaintar) + # Must skip GNU tar: if it does not support --format= it doesn't create + # ustar tarball either. + (tar --version) >/dev/null 2>&1 && continue + am__tar='tar chf - "$$tardir"' + am__tar_='tar chf - "$tardir"' + am__untar='tar xf -' + ;; + pax) + am__tar='pax -L -x $1 -w "$$tardir"' + am__tar_='pax -L -x $1 -w "$tardir"' + am__untar='pax -r' + ;; + cpio) + am__tar='find "$$tardir" -print | cpio -o -H $1 -L' + am__tar_='find "$tardir" -print | cpio -o -H $1 -L' + am__untar='cpio -i -H $1 -d' + ;; + none) + am__tar=false + am__tar_=false + am__untar=false + ;; + esac + + # If the value was cached, stop now. We just wanted to have am__tar + # and am__untar set. + test -n "${am_cv_prog_tar_$1}" && break + + # tar/untar a dummy directory, and stop if the command works. + rm -rf conftest.dir + mkdir conftest.dir + echo GrepMe > conftest.dir/file + AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) + rm -rf conftest.dir + if test -s conftest.tar; then + AM_RUN_LOG([$am__untar /dev/null 2>&1 && break + fi + done + rm -rf conftest.dir + + AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) + AC_MSG_RESULT([$am_cv_prog_tar_$1])]) + +AC_SUBST([am__tar]) +AC_SUBST([am__untar]) +]) # _AM_PROG_TAR + +m4_include([m4/gettext.m4]) +m4_include([m4/iconv.m4]) +m4_include([m4/intlmacosx.m4]) +m4_include([m4/lib-ld.m4]) +m4_include([m4/lib-link.m4]) +m4_include([m4/lib-prefix.m4]) +m4_include([m4/libtool.m4]) +m4_include([m4/ltoptions.m4]) +m4_include([m4/ltsugar.m4]) +m4_include([m4/ltversion.m4]) +m4_include([m4/lt~obsolete.m4]) +m4_include([m4/nls.m4]) +m4_include([m4/po.m4]) +m4_include([m4/progtest.m4]) diff --git a/compile b/compile new file mode 100755 index 0000000..99e5052 --- /dev/null +++ b/compile @@ -0,0 +1,348 @@ +#! /bin/sh +# Wrapper for compilers which do not understand '-c -o'. + +scriptversion=2018-03-07.03; # UTC + +# Copyright (C) 1999-2018 Free Software Foundation, Inc. +# Written by Tom Tromey . +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# This file is maintained in Automake, please report +# bugs to or send patches to +# . + +nl=' +' + +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent tools from complaining about whitespace usage. +IFS=" "" $nl" + +file_conv= + +# func_file_conv build_file lazy +# Convert a $build file to $host form and store it in $file +# Currently only supports Windows hosts. If the determined conversion +# type is listed in (the comma separated) LAZY, no conversion will +# take place. +func_file_conv () +{ + file=$1 + case $file in + / | /[!/]*) # absolute file, and not a UNC file + if test -z "$file_conv"; then + # lazily determine how to convert abs files + case `uname -s` in + MINGW*) + file_conv=mingw + ;; + CYGWIN*) + file_conv=cygwin + ;; + *) + file_conv=wine + ;; + esac + fi + case $file_conv/,$2, in + *,$file_conv,*) + ;; + mingw/*) + file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` + ;; + cygwin/*) + file=`cygpath -m "$file" || echo "$file"` + ;; + wine/*) + file=`winepath -w "$file" || echo "$file"` + ;; + esac + ;; + esac +} + +# func_cl_dashL linkdir +# Make cl look for libraries in LINKDIR +func_cl_dashL () +{ + func_file_conv "$1" + if test -z "$lib_path"; then + lib_path=$file + else + lib_path="$lib_path;$file" + fi + linker_opts="$linker_opts -LIBPATH:$file" +} + +# func_cl_dashl library +# Do a library search-path lookup for cl +func_cl_dashl () +{ + lib=$1 + found=no + save_IFS=$IFS + IFS=';' + for dir in $lib_path $LIB + do + IFS=$save_IFS + if $shared && test -f "$dir/$lib.dll.lib"; then + found=yes + lib=$dir/$lib.dll.lib + break + fi + if test -f "$dir/$lib.lib"; then + found=yes + lib=$dir/$lib.lib + break + fi + if test -f "$dir/lib$lib.a"; then + found=yes + lib=$dir/lib$lib.a + break + fi + done + IFS=$save_IFS + + if test "$found" != yes; then + lib=$lib.lib + fi +} + +# func_cl_wrapper cl arg... +# Adjust compile command to suit cl +func_cl_wrapper () +{ + # Assume a capable shell + lib_path= + shared=: + linker_opts= + for arg + do + if test -n "$eat"; then + eat= + else + case $1 in + -o) + # configure might choose to run compile as 'compile cc -o foo foo.c'. + eat=1 + case $2 in + *.o | *.[oO][bB][jJ]) + func_file_conv "$2" + set x "$@" -Fo"$file" + shift + ;; + *) + func_file_conv "$2" + set x "$@" -Fe"$file" + shift + ;; + esac + ;; + -I) + eat=1 + func_file_conv "$2" mingw + set x "$@" -I"$file" + shift + ;; + -I*) + func_file_conv "${1#-I}" mingw + set x "$@" -I"$file" + shift + ;; + -l) + eat=1 + func_cl_dashl "$2" + set x "$@" "$lib" + shift + ;; + -l*) + func_cl_dashl "${1#-l}" + set x "$@" "$lib" + shift + ;; + -L) + eat=1 + func_cl_dashL "$2" + ;; + -L*) + func_cl_dashL "${1#-L}" + ;; + -static) + shared=false + ;; + -Wl,*) + arg=${1#-Wl,} + save_ifs="$IFS"; IFS=',' + for flag in $arg; do + IFS="$save_ifs" + linker_opts="$linker_opts $flag" + done + IFS="$save_ifs" + ;; + -Xlinker) + eat=1 + linker_opts="$linker_opts $2" + ;; + -*) + set x "$@" "$1" + shift + ;; + *.cc | *.CC | *.cxx | *.CXX | *.[cC]++) + func_file_conv "$1" + set x "$@" -Tp"$file" + shift + ;; + *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO]) + func_file_conv "$1" mingw + set x "$@" "$file" + shift + ;; + *) + set x "$@" "$1" + shift + ;; + esac + fi + shift + done + if test -n "$linker_opts"; then + linker_opts="-link$linker_opts" + fi + exec "$@" $linker_opts + exit 1 +} + +eat= + +case $1 in + '') + echo "$0: No command. Try '$0 --help' for more information." 1>&2 + exit 1; + ;; + -h | --h*) + cat <<\EOF +Usage: compile [--help] [--version] PROGRAM [ARGS] + +Wrapper for compilers which do not understand '-c -o'. +Remove '-o dest.o' from ARGS, run PROGRAM with the remaining +arguments, and rename the output as expected. + +If you are trying to build a whole package this is not the +right script to run: please start by reading the file 'INSTALL'. + +Report bugs to . +EOF + exit $? + ;; + -v | --v*) + echo "compile $scriptversion" + exit $? + ;; + cl | *[/\\]cl | cl.exe | *[/\\]cl.exe | \ + icl | *[/\\]icl | icl.exe | *[/\\]icl.exe ) + func_cl_wrapper "$@" # Doesn't return... + ;; +esac + +ofile= +cfile= + +for arg +do + if test -n "$eat"; then + eat= + else + case $1 in + -o) + # configure might choose to run compile as 'compile cc -o foo foo.c'. + # So we strip '-o arg' only if arg is an object. + eat=1 + case $2 in + *.o | *.obj) + ofile=$2 + ;; + *) + set x "$@" -o "$2" + shift + ;; + esac + ;; + *.c) + cfile=$1 + set x "$@" "$1" + shift + ;; + *) + set x "$@" "$1" + shift + ;; + esac + fi + shift +done + +if test -z "$ofile" || test -z "$cfile"; then + # If no '-o' option was seen then we might have been invoked from a + # pattern rule where we don't need one. That is ok -- this is a + # normal compilation that the losing compiler can handle. If no + # '.c' file was seen then we are probably linking. That is also + # ok. + exec "$@" +fi + +# Name of file we expect compiler to create. +cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` + +# Create the lock directory. +# Note: use '[/\\:.-]' here to ensure that we don't use the same name +# that we are using for the .o file. Also, base the name on the expected +# object file name, since that is what matters with a parallel build. +lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d +while true; do + if mkdir "$lockdir" >/dev/null 2>&1; then + break + fi + sleep 1 +done +# FIXME: race condition here if user kills between mkdir and trap. +trap "rmdir '$lockdir'; exit 1" 1 2 15 + +# Run the compile. +"$@" +ret=$? + +if test -f "$cofile"; then + test "$cofile" = "$ofile" || mv "$cofile" "$ofile" +elif test -f "${cofile}bj"; then + test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile" +fi + +rmdir "$lockdir" +exit $ret + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'before-save-hook 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC0" +# time-stamp-end: "; # UTC" +# End: diff --git a/config.guess b/config.guess new file mode 100755 index 0000000..1f5c50c --- /dev/null +++ b/config.guess @@ -0,0 +1,1420 @@ +#! /bin/sh +# Attempt to guess a canonical system name. +# Copyright 1992-2014 Free Software Foundation, Inc. + +timestamp='2014-03-23' + +# This file is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, see . +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that +# program. This Exception is an additional permission under section 7 +# of the GNU General Public License, version 3 ("GPLv3"). +# +# Originally written by Per Bothner. +# +# You can get the latest version of this script from: +# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD +# +# Please send patches with a ChangeLog entry to config-patches@gnu.org. + + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] + +Output the configuration name of the system \`$me' is run on. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.guess ($timestamp) + +Originally written by Per Bothner. +Copyright 1992-2014 Free Software Foundation, 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." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" >&2 + exit 1 ;; + * ) + break ;; + esac +done + +if test $# != 0; then + echo "$me: too many arguments$help" >&2 + exit 1 +fi + +trap 'exit 1' 1 2 15 + +# CC_FOR_BUILD -- compiler used by this script. Note that the use of a +# compiler to aid in system detection is discouraged as it requires +# temporary files to be created and, as you can see below, it is a +# headache to deal with in a portable fashion. + +# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still +# use `HOST_CC' if defined, but it is deprecated. + +# Portable tmp directory creation inspired by the Autoconf team. + +set_cc_for_build=' +trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; +trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; +: ${TMPDIR=/tmp} ; + { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || + { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || + { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || + { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; +dummy=$tmp/dummy ; +tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; +case $CC_FOR_BUILD,$HOST_CC,$CC in + ,,) echo "int x;" > $dummy.c ; + for c in cc gcc c89 c99 ; do + if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then + CC_FOR_BUILD="$c"; break ; + fi ; + done ; + if test x"$CC_FOR_BUILD" = x ; then + CC_FOR_BUILD=no_compiler_found ; + fi + ;; + ,,*) CC_FOR_BUILD=$CC ;; + ,*,*) CC_FOR_BUILD=$HOST_CC ;; +esac ; set_cc_for_build= ;' + +# This is needed to find uname on a Pyramid OSx when run in the BSD universe. +# (ghazi@noc.rutgers.edu 1994-08-24) +if (test -f /.attbin/uname) >/dev/null 2>&1 ; then + PATH=$PATH:/.attbin ; export PATH +fi + +UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown +UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown +UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown +UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown + +case "${UNAME_SYSTEM}" in +Linux|GNU|GNU/*) + # If the system lacks a compiler, then just pick glibc. + # We could probably try harder. + LIBC=gnu + + eval $set_cc_for_build + cat <<-EOF > $dummy.c + #include + #if defined(__UCLIBC__) + LIBC=uclibc + #elif defined(__dietlibc__) + LIBC=dietlibc + #else + LIBC=gnu + #endif + EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC' | sed 's, ,,g'` + ;; +esac + +# Note: order is significant - the case branches are not exclusive. + +case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + *:NetBSD:*:*) + # NetBSD (nbsd) targets should (where applicable) match one or + # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, + # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently + # switched to ELF, *-*-netbsd* would select the old + # object file format. This provides both forward + # compatibility and a consistent mechanism for selecting the + # object file format. + # + # Note: NetBSD doesn't particularly care about the vendor + # portion of the name. We always set it to "unknown". + sysctl="sysctl -n hw.machine_arch" + UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ + /usr/sbin/$sysctl 2>/dev/null || echo unknown)` + case "${UNAME_MACHINE_ARCH}" in + armeb) machine=armeb-unknown ;; + arm*) machine=arm-unknown ;; + sh3el) machine=shl-unknown ;; + sh3eb) machine=sh-unknown ;; + sh5el) machine=sh5le-unknown ;; + *) machine=${UNAME_MACHINE_ARCH}-unknown ;; + esac + # The Operating System including object format, if it has switched + # to ELF recently, or will in the future. + case "${UNAME_MACHINE_ARCH}" in + arm*|i386|m68k|ns32k|sh3*|sparc|vax) + eval $set_cc_for_build + if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ELF__ + then + # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). + # Return netbsd for either. FIX? + os=netbsd + else + os=netbsdelf + fi + ;; + *) + os=netbsd + ;; + esac + # The OS release + # Debian GNU/NetBSD machines have a different userland, and + # thus, need a distinct triplet. However, they do not need + # kernel version information, so it can be replaced with a + # suitable tag, in the style of linux-gnu. + case "${UNAME_VERSION}" in + Debian*) + release='-gnu' + ;; + *) + release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + ;; + esac + # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: + # contains redundant information, the shorter form: + # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. + echo "${machine}-${os}${release}" + exit ;; + *:Bitrig:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` + echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE} + exit ;; + *:OpenBSD:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` + echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} + exit ;; + *:ekkoBSD:*:*) + echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} + exit ;; + *:SolidBSD:*:*) + echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} + exit ;; + macppc:MirBSD:*:*) + echo powerpc-unknown-mirbsd${UNAME_RELEASE} + exit ;; + *:MirBSD:*:*) + echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} + exit ;; + alpha:OSF1:*:*) + case $UNAME_RELEASE in + *4.0) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` + ;; + *5.*) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` + ;; + esac + # According to Compaq, /usr/sbin/psrinfo has been available on + # OSF/1 and Tru64 systems produced since 1995. I hope that + # covers most systems running today. This code pipes the CPU + # types through head -n 1, so we only detect the type of CPU 0. + ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` + case "$ALPHA_CPU_TYPE" in + "EV4 (21064)") + UNAME_MACHINE="alpha" ;; + "EV4.5 (21064)") + UNAME_MACHINE="alpha" ;; + "LCA4 (21066/21068)") + UNAME_MACHINE="alpha" ;; + "EV5 (21164)") + UNAME_MACHINE="alphaev5" ;; + "EV5.6 (21164A)") + UNAME_MACHINE="alphaev56" ;; + "EV5.6 (21164PC)") + UNAME_MACHINE="alphapca56" ;; + "EV5.7 (21164PC)") + UNAME_MACHINE="alphapca57" ;; + "EV6 (21264)") + UNAME_MACHINE="alphaev6" ;; + "EV6.7 (21264A)") + UNAME_MACHINE="alphaev67" ;; + "EV6.8CB (21264C)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8AL (21264B)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8CX (21264D)") + UNAME_MACHINE="alphaev68" ;; + "EV6.9A (21264/EV69A)") + UNAME_MACHINE="alphaev69" ;; + "EV7 (21364)") + UNAME_MACHINE="alphaev7" ;; + "EV7.9 (21364A)") + UNAME_MACHINE="alphaev79" ;; + esac + # A Pn.n version is a patched version. + # A Vn.n version is a released version. + # A Tn.n version is a released field test version. + # A Xn.n version is an unreleased experimental baselevel. + # 1.2 uses "1.2" for uname -r. + echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Reset EXIT trap before exiting to avoid spurious non-zero exit code. + exitcode=$? + trap '' 0 + exit $exitcode ;; + Alpha\ *:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # Should we change UNAME_MACHINE based on the output of uname instead + # of the specific Alpha model? + echo alpha-pc-interix + exit ;; + 21064:Windows_NT:50:3) + echo alpha-dec-winnt3.5 + exit ;; + Amiga*:UNIX_System_V:4.0:*) + echo m68k-unknown-sysv4 + exit ;; + *:[Aa]miga[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-amigaos + exit ;; + *:[Mm]orph[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-morphos + exit ;; + *:OS/390:*:*) + echo i370-ibm-openedition + exit ;; + *:z/VM:*:*) + echo s390-ibm-zvmoe + exit ;; + *:OS400:*:*) + echo powerpc-ibm-os400 + exit ;; + arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) + echo arm-acorn-riscix${UNAME_RELEASE} + exit ;; + arm*:riscos:*:*|arm*:RISCOS:*:*) + echo arm-unknown-riscos + exit ;; + SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) + echo hppa1.1-hitachi-hiuxmpp + exit ;; + Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) + # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. + if test "`(/bin/universe) 2>/dev/null`" = att ; then + echo pyramid-pyramid-sysv3 + else + echo pyramid-pyramid-bsd + fi + exit ;; + NILE*:*:*:dcosx) + echo pyramid-pyramid-svr4 + exit ;; + DRS?6000:unix:4.0:6*) + echo sparc-icl-nx6 + exit ;; + DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) + case `/usr/bin/uname -p` in + sparc) echo sparc-icl-nx7; exit ;; + esac ;; + s390x:SunOS:*:*) + echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4H:SunOS:5.*:*) + echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) + echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) + echo i386-pc-auroraux${UNAME_RELEASE} + exit ;; + i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) + eval $set_cc_for_build + SUN_ARCH="i386" + # If there is a compiler, see if it is configured for 64-bit objects. + # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. + # This test works for both compilers. + if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then + if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + SUN_ARCH="x86_64" + fi + fi + echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:6*:*) + # According to config.sub, this is the proper way to canonicalize + # SunOS6. Hard to guess exactly what SunOS6 will be like, but + # it's likely to be more like Solaris than SunOS4. + echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:*:*) + case "`/usr/bin/arch -k`" in + Series*|S4*) + UNAME_RELEASE=`uname -v` + ;; + esac + # Japanese Language versions have a version number like `4.1.3-JL'. + echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` + exit ;; + sun3*:SunOS:*:*) + echo m68k-sun-sunos${UNAME_RELEASE} + exit ;; + sun*:*:4.2BSD:*) + UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` + test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 + case "`/bin/arch`" in + sun3) + echo m68k-sun-sunos${UNAME_RELEASE} + ;; + sun4) + echo sparc-sun-sunos${UNAME_RELEASE} + ;; + esac + exit ;; + aushp:SunOS:*:*) + echo sparc-auspex-sunos${UNAME_RELEASE} + exit ;; + # The situation for MiNT is a little confusing. The machine name + # can be virtually everything (everything which is not + # "atarist" or "atariste" at least should have a processor + # > m68000). The system name ranges from "MiNT" over "FreeMiNT" + # to the lowercase version "mint" (or "freemint"). Finally + # the system name "TOS" denotes a system which is actually not + # MiNT. But MiNT is downward compatible to TOS, so this should + # be no problem. + atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) + echo m68k-milan-mint${UNAME_RELEASE} + exit ;; + hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) + echo m68k-hades-mint${UNAME_RELEASE} + exit ;; + *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) + echo m68k-unknown-mint${UNAME_RELEASE} + exit ;; + m68k:machten:*:*) + echo m68k-apple-machten${UNAME_RELEASE} + exit ;; + powerpc:machten:*:*) + echo powerpc-apple-machten${UNAME_RELEASE} + exit ;; + RISC*:Mach:*:*) + echo mips-dec-mach_bsd4.3 + exit ;; + RISC*:ULTRIX:*:*) + echo mips-dec-ultrix${UNAME_RELEASE} + exit ;; + VAX*:ULTRIX*:*:*) + echo vax-dec-ultrix${UNAME_RELEASE} + exit ;; + 2020:CLIX:*:* | 2430:CLIX:*:*) + echo clipper-intergraph-clix${UNAME_RELEASE} + exit ;; + mips:*:*:UMIPS | mips:*:*:RISCos) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c +#ifdef __cplusplus +#include /* for printf() prototype */ + int main (int argc, char *argv[]) { +#else + int main (argc, argv) int argc; char *argv[]; { +#endif + #if defined (host_mips) && defined (MIPSEB) + #if defined (SYSTYPE_SYSV) + printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_SVR4) + printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) + printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); + #endif + #endif + exit (-1); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && + dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && + SYSTEM_NAME=`$dummy $dummyarg` && + { echo "$SYSTEM_NAME"; exit; } + echo mips-mips-riscos${UNAME_RELEASE} + exit ;; + Motorola:PowerMAX_OS:*:*) + echo powerpc-motorola-powermax + exit ;; + Motorola:*:4.3:PL8-*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:Power_UNIX:*:*) + echo powerpc-harris-powerunix + exit ;; + m88k:CX/UX:7*:*) + echo m88k-harris-cxux7 + exit ;; + m88k:*:4*:R4*) + echo m88k-motorola-sysv4 + exit ;; + m88k:*:3*:R3*) + echo m88k-motorola-sysv3 + exit ;; + AViiON:dgux:*:*) + # DG/UX returns AViiON for all architectures + UNAME_PROCESSOR=`/usr/bin/uname -p` + if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] + then + if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ + [ ${TARGET_BINARY_INTERFACE}x = x ] + then + echo m88k-dg-dgux${UNAME_RELEASE} + else + echo m88k-dg-dguxbcs${UNAME_RELEASE} + fi + else + echo i586-dg-dgux${UNAME_RELEASE} + fi + exit ;; + M88*:DolphinOS:*:*) # DolphinOS (SVR3) + echo m88k-dolphin-sysv3 + exit ;; + M88*:*:R3*:*) + # Delta 88k system running SVR3 + echo m88k-motorola-sysv3 + exit ;; + XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) + echo m88k-tektronix-sysv3 + exit ;; + Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) + echo m68k-tektronix-bsd + exit ;; + *:IRIX*:*:*) + echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` + exit ;; + ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. + echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id + exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' + i*86:AIX:*:*) + echo i386-ibm-aix + exit ;; + ia64:AIX:*:*) + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} + exit ;; + *:AIX:2:3) + if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + + main() + { + if (!__power_pc()) + exit(1); + puts("powerpc-ibm-aix3.2.5"); + exit(0); + } +EOF + if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` + then + echo "$SYSTEM_NAME" + else + echo rs6000-ibm-aix3.2.5 + fi + elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then + echo rs6000-ibm-aix3.2.4 + else + echo rs6000-ibm-aix3.2 + fi + exit ;; + *:AIX:*:[4567]) + IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` + if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then + IBM_ARCH=rs6000 + else + IBM_ARCH=powerpc + fi + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${IBM_ARCH}-ibm-aix${IBM_REV} + exit ;; + *:AIX:*:*) + echo rs6000-ibm-aix + exit ;; + ibmrt:4.4BSD:*|romp-ibm:BSD:*) + echo romp-ibm-bsd4.4 + exit ;; + ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and + echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to + exit ;; # report: romp-ibm BSD 4.3 + *:BOSX:*:*) + echo rs6000-bull-bosx + exit ;; + DPX/2?00:B.O.S.:*:*) + echo m68k-bull-sysv3 + exit ;; + 9000/[34]??:4.3bsd:1.*:*) + echo m68k-hp-bsd + exit ;; + hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) + echo m68k-hp-bsd4.4 + exit ;; + 9000/[34678]??:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + case "${UNAME_MACHINE}" in + 9000/31? ) HP_ARCH=m68000 ;; + 9000/[34]?? ) HP_ARCH=m68k ;; + 9000/[678][0-9][0-9]) + if [ -x /usr/bin/getconf ]; then + sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` + sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` + case "${sc_cpu_version}" in + 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 + 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 + 532) # CPU_PA_RISC2_0 + case "${sc_kernel_bits}" in + 32) HP_ARCH="hppa2.0n" ;; + 64) HP_ARCH="hppa2.0w" ;; + '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 + esac ;; + esac + fi + if [ "${HP_ARCH}" = "" ]; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + + #define _HPUX_SOURCE + #include + #include + + int main () + { + #if defined(_SC_KERNEL_BITS) + long bits = sysconf(_SC_KERNEL_BITS); + #endif + long cpu = sysconf (_SC_CPU_VERSION); + + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1"); break; + case CPU_PA_RISC2_0: + #if defined(_SC_KERNEL_BITS) + switch (bits) + { + case 64: puts ("hppa2.0w"); break; + case 32: puts ("hppa2.0n"); break; + default: puts ("hppa2.0"); break; + } break; + #else /* !defined(_SC_KERNEL_BITS) */ + puts ("hppa2.0"); break; + #endif + default: puts ("hppa1.0"); break; + } + exit (0); + } +EOF + (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` + test -z "$HP_ARCH" && HP_ARCH=hppa + fi ;; + esac + if [ ${HP_ARCH} = "hppa2.0w" ] + then + eval $set_cc_for_build + + # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating + # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler + # generating 64-bit code. GNU and HP use different nomenclature: + # + # $ CC_FOR_BUILD=cc ./config.guess + # => hppa2.0w-hp-hpux11.23 + # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess + # => hppa64-hp-hpux11.23 + + if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | + grep -q __LP64__ + then + HP_ARCH="hppa2.0w" + else + HP_ARCH="hppa64" + fi + fi + echo ${HP_ARCH}-hp-hpux${HPUX_REV} + exit ;; + ia64:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + echo ia64-hp-hpux${HPUX_REV} + exit ;; + 3050*:HI-UX:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + int + main () + { + long cpu = sysconf (_SC_CPU_VERSION); + /* The order matters, because CPU_IS_HP_MC68K erroneously returns + true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct + results, however. */ + if (CPU_IS_PA_RISC (cpu)) + { + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; + case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; + default: puts ("hppa-hitachi-hiuxwe2"); break; + } + } + else if (CPU_IS_HP_MC68K (cpu)) + puts ("m68k-hitachi-hiuxwe2"); + else puts ("unknown-hitachi-hiuxwe2"); + exit (0); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + echo unknown-hitachi-hiuxwe2 + exit ;; + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) + echo hppa1.1-hp-bsd + exit ;; + 9000/8??:4.3bsd:*:*) + echo hppa1.0-hp-bsd + exit ;; + *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) + echo hppa1.0-hp-mpeix + exit ;; + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) + echo hppa1.1-hp-osf + exit ;; + hp8??:OSF1:*:*) + echo hppa1.0-hp-osf + exit ;; + i*86:OSF1:*:*) + if [ -x /usr/sbin/sysversion ] ; then + echo ${UNAME_MACHINE}-unknown-osf1mk + else + echo ${UNAME_MACHINE}-unknown-osf1 + fi + exit ;; + parisc*:Lites*:*:*) + echo hppa1.1-hp-lites + exit ;; + C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) + echo c1-convex-bsd + exit ;; + C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) + echo c34-convex-bsd + exit ;; + C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) + echo c38-convex-bsd + exit ;; + C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) + echo c4-convex-bsd + exit ;; + CRAY*Y-MP:*:*:*) + echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*[A-Z]90:*:*:*) + echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ + | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ + -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ + -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*TS:*:*:*) + echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*T3E:*:*:*) + echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*SV1:*:*:*) + echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + *:UNICOS/mp:*:*) + echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) + FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` + echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + 5000:UNIX_System_V:4.*:*) + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` + echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) + echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} + exit ;; + sparc*:BSD/OS:*:*) + echo sparc-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:BSD/OS:*:*) + echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:FreeBSD:*:*) + UNAME_PROCESSOR=`/usr/bin/uname -p` + case ${UNAME_PROCESSOR} in + amd64) + echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + *) + echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + esac + exit ;; + i*:CYGWIN*:*) + echo ${UNAME_MACHINE}-pc-cygwin + exit ;; + *:MINGW64*:*) + echo ${UNAME_MACHINE}-pc-mingw64 + exit ;; + *:MINGW*:*) + echo ${UNAME_MACHINE}-pc-mingw32 + exit ;; + *:MSYS*:*) + echo ${UNAME_MACHINE}-pc-msys + exit ;; + i*:windows32*:*) + # uname -m includes "-pc" on this system. + echo ${UNAME_MACHINE}-mingw32 + exit ;; + i*:PW*:*) + echo ${UNAME_MACHINE}-pc-pw32 + exit ;; + *:Interix*:*) + case ${UNAME_MACHINE} in + x86) + echo i586-pc-interix${UNAME_RELEASE} + exit ;; + authenticamd | genuineintel | EM64T) + echo x86_64-unknown-interix${UNAME_RELEASE} + exit ;; + IA64) + echo ia64-unknown-interix${UNAME_RELEASE} + exit ;; + esac ;; + [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) + echo i${UNAME_MACHINE}-pc-mks + exit ;; + 8664:Windows_NT:*) + echo x86_64-pc-mks + exit ;; + i*:Windows_NT*:* | Pentium*:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we + # UNAME_MACHINE based on the output of uname instead of i386? + echo i586-pc-interix + exit ;; + i*:UWIN*:*) + echo ${UNAME_MACHINE}-pc-uwin + exit ;; + amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) + echo x86_64-unknown-cygwin + exit ;; + p*:CYGWIN*:*) + echo powerpcle-unknown-cygwin + exit ;; + prep*:SunOS:5.*:*) + echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + *:GNU:*:*) + # the GNU system + echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` + exit ;; + *:GNU/*:*:*) + # other systems with GNU libc and userland + echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC} + exit ;; + i*86:Minix:*:*) + echo ${UNAME_MACHINE}-pc-minix + exit ;; + aarch64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + aarch64_be:Linux:*:*) + UNAME_MACHINE=aarch64_be + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + alpha:Linux:*:*) + case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in + EV5) UNAME_MACHINE=alphaev5 ;; + EV56) UNAME_MACHINE=alphaev56 ;; + PCA56) UNAME_MACHINE=alphapca56 ;; + PCA57) UNAME_MACHINE=alphapca56 ;; + EV6) UNAME_MACHINE=alphaev6 ;; + EV67) UNAME_MACHINE=alphaev67 ;; + EV68*) UNAME_MACHINE=alphaev68 ;; + esac + objdump --private-headers /bin/sh | grep -q ld.so.1 + if test "$?" = 0 ; then LIBC="gnulibc1" ; fi + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + arc:Linux:*:* | arceb:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + arm*:Linux:*:*) + eval $set_cc_for_build + if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_EABI__ + then + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + else + if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_PCS_VFP + then + echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi + else + echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf + fi + fi + exit ;; + avr32*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + cris:Linux:*:*) + echo ${UNAME_MACHINE}-axis-linux-${LIBC} + exit ;; + crisv32:Linux:*:*) + echo ${UNAME_MACHINE}-axis-linux-${LIBC} + exit ;; + frv:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + hexagon:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + i*86:Linux:*:*) + echo ${UNAME_MACHINE}-pc-linux-${LIBC} + exit ;; + ia64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + m32r*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + m68*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + mips:Linux:*:* | mips64:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU + #undef ${UNAME_MACHINE} + #undef ${UNAME_MACHINE}el + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=${UNAME_MACHINE}el + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=${UNAME_MACHINE} + #else + CPU= + #endif + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` + test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; } + ;; + openrisc*:Linux:*:*) + echo or1k-unknown-linux-${LIBC} + exit ;; + or32:Linux:*:* | or1k*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + padre:Linux:*:*) + echo sparc-unknown-linux-${LIBC} + exit ;; + parisc64:Linux:*:* | hppa64:Linux:*:*) + echo hppa64-unknown-linux-${LIBC} + exit ;; + parisc:Linux:*:* | hppa:Linux:*:*) + # Look for CPU level + case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in + PA7*) echo hppa1.1-unknown-linux-${LIBC} ;; + PA8*) echo hppa2.0-unknown-linux-${LIBC} ;; + *) echo hppa-unknown-linux-${LIBC} ;; + esac + exit ;; + ppc64:Linux:*:*) + echo powerpc64-unknown-linux-${LIBC} + exit ;; + ppc:Linux:*:*) + echo powerpc-unknown-linux-${LIBC} + exit ;; + ppc64le:Linux:*:*) + echo powerpc64le-unknown-linux-${LIBC} + exit ;; + ppcle:Linux:*:*) + echo powerpcle-unknown-linux-${LIBC} + exit ;; + s390:Linux:*:* | s390x:Linux:*:*) + echo ${UNAME_MACHINE}-ibm-linux-${LIBC} + exit ;; + sh64*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + sh*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + sparc:Linux:*:* | sparc64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + tile*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + vax:Linux:*:*) + echo ${UNAME_MACHINE}-dec-linux-${LIBC} + exit ;; + x86_64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + xtensa*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + i*86:DYNIX/ptx:4*:*) + # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. + # earlier versions are messed up and put the nodename in both + # sysname and nodename. + echo i386-sequent-sysv4 + exit ;; + i*86:UNIX_SV:4.2MP:2.*) + # Unixware is an offshoot of SVR4, but it has its own version + # number series starting with 2... + # I am not positive that other SVR4 systems won't match this, + # I just have to hope. -- rms. + # Use sysv4.2uw... so that sysv4* matches it. + echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} + exit ;; + i*86:OS/2:*:*) + # If we were able to find `uname', then EMX Unix compatibility + # is probably installed. + echo ${UNAME_MACHINE}-pc-os2-emx + exit ;; + i*86:XTS-300:*:STOP) + echo ${UNAME_MACHINE}-unknown-stop + exit ;; + i*86:atheos:*:*) + echo ${UNAME_MACHINE}-unknown-atheos + exit ;; + i*86:syllable:*:*) + echo ${UNAME_MACHINE}-pc-syllable + exit ;; + i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) + echo i386-unknown-lynxos${UNAME_RELEASE} + exit ;; + i*86:*DOS:*:*) + echo ${UNAME_MACHINE}-pc-msdosdjgpp + exit ;; + i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) + UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` + if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then + echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} + else + echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} + fi + exit ;; + i*86:*:5:[678]*) + # UnixWare 7.x, OpenUNIX and OpenServer 6. + case `/bin/uname -X | grep "^Machine"` in + *486*) UNAME_MACHINE=i486 ;; + *Pentium) UNAME_MACHINE=i586 ;; + *Pent*|*Celeron) UNAME_MACHINE=i686 ;; + esac + echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} + exit ;; + i*86:*:3.2:*) + if test -f /usr/options/cb.name; then + UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then + UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` + (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 + (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ + && UNAME_MACHINE=i586 + (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ + && UNAME_MACHINE=i686 + (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ + && UNAME_MACHINE=i686 + echo ${UNAME_MACHINE}-pc-sco$UNAME_REL + else + echo ${UNAME_MACHINE}-pc-sysv32 + fi + exit ;; + pc:*:*:*) + # Left here for compatibility: + # uname -m prints for DJGPP always 'pc', but it prints nothing about + # the processor, so we play safe by assuming i586. + # Note: whatever this is, it MUST be the same as what config.sub + # prints for the "djgpp" host, or else GDB configury will decide that + # this is a cross-build. + echo i586-pc-msdosdjgpp + exit ;; + Intel:Mach:3*:*) + echo i386-pc-mach3 + exit ;; + paragon:*:*:*) + echo i860-intel-osf1 + exit ;; + i860:*:4.*:*) # i860-SVR4 + if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then + echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 + else # Add other i860-SVR4 vendors below as they are discovered. + echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 + fi + exit ;; + mini*:CTIX:SYS*5:*) + # "miniframe" + echo m68010-convergent-sysv + exit ;; + mc68k:UNIX:SYSTEM5:3.51m) + echo m68k-convergent-sysv + exit ;; + M680?0:D-NIX:5.3:*) + echo m68k-diab-dnix + exit ;; + M68*:*:R3V[5678]*:*) + test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; + 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) + OS_REL='' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4; exit; } ;; + NCR*:*:4.2:* | MPRAS*:*:4.2:*) + OS_REL='.3' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) + echo m68k-unknown-lynxos${UNAME_RELEASE} + exit ;; + mc68030:UNIX_System_V:4.*:*) + echo m68k-atari-sysv4 + exit ;; + TSUNAMI:LynxOS:2.*:*) + echo sparc-unknown-lynxos${UNAME_RELEASE} + exit ;; + rs6000:LynxOS:2.*:*) + echo rs6000-unknown-lynxos${UNAME_RELEASE} + exit ;; + PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) + echo powerpc-unknown-lynxos${UNAME_RELEASE} + exit ;; + SM[BE]S:UNIX_SV:*:*) + echo mips-dde-sysv${UNAME_RELEASE} + exit ;; + RM*:ReliantUNIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + RM*:SINIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + *:SINIX-*:*:*) + if uname -p 2>/dev/null >/dev/null ; then + UNAME_MACHINE=`(uname -p) 2>/dev/null` + echo ${UNAME_MACHINE}-sni-sysv4 + else + echo ns32k-sni-sysv + fi + exit ;; + PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort + # says + echo i586-unisys-sysv4 + exit ;; + *:UNIX_System_V:4*:FTX*) + # From Gerald Hewes . + # How about differentiating between stratus architectures? -djm + echo hppa1.1-stratus-sysv4 + exit ;; + *:*:*:FTX*) + # From seanf@swdc.stratus.com. + echo i860-stratus-sysv4 + exit ;; + i*86:VOS:*:*) + # From Paul.Green@stratus.com. + echo ${UNAME_MACHINE}-stratus-vos + exit ;; + *:VOS:*:*) + # From Paul.Green@stratus.com. + echo hppa1.1-stratus-vos + exit ;; + mc68*:A/UX:*:*) + echo m68k-apple-aux${UNAME_RELEASE} + exit ;; + news*:NEWS-OS:6*:*) + echo mips-sony-newsos6 + exit ;; + R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) + if [ -d /usr/nec ]; then + echo mips-nec-sysv${UNAME_RELEASE} + else + echo mips-unknown-sysv${UNAME_RELEASE} + fi + exit ;; + BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. + echo powerpc-be-beos + exit ;; + BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. + echo powerpc-apple-beos + exit ;; + BePC:BeOS:*:*) # BeOS running on Intel PC compatible. + echo i586-pc-beos + exit ;; + BePC:Haiku:*:*) # Haiku running on Intel PC compatible. + echo i586-pc-haiku + exit ;; + x86_64:Haiku:*:*) + echo x86_64-unknown-haiku + exit ;; + SX-4:SUPER-UX:*:*) + echo sx4-nec-superux${UNAME_RELEASE} + exit ;; + SX-5:SUPER-UX:*:*) + echo sx5-nec-superux${UNAME_RELEASE} + exit ;; + SX-6:SUPER-UX:*:*) + echo sx6-nec-superux${UNAME_RELEASE} + exit ;; + SX-7:SUPER-UX:*:*) + echo sx7-nec-superux${UNAME_RELEASE} + exit ;; + SX-8:SUPER-UX:*:*) + echo sx8-nec-superux${UNAME_RELEASE} + exit ;; + SX-8R:SUPER-UX:*:*) + echo sx8r-nec-superux${UNAME_RELEASE} + exit ;; + Power*:Rhapsody:*:*) + echo powerpc-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Rhapsody:*:*) + echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Darwin:*:*) + UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown + eval $set_cc_for_build + if test "$UNAME_PROCESSOR" = unknown ; then + UNAME_PROCESSOR=powerpc + fi + if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then + if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then + if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + case $UNAME_PROCESSOR in + i386) UNAME_PROCESSOR=x86_64 ;; + powerpc) UNAME_PROCESSOR=powerpc64 ;; + esac + fi + fi + elif test "$UNAME_PROCESSOR" = i386 ; then + # Avoid executing cc on OS X 10.9, as it ships with a stub + # that puts up a graphical alert prompting to install + # developer tools. Any system running Mac OS X 10.7 or + # later (Darwin 11 and later) is required to have a 64-bit + # processor. This is not true of the ARM version of Darwin + # that Apple uses in portable devices. + UNAME_PROCESSOR=x86_64 + fi + echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} + exit ;; + *:procnto*:*:* | *:QNX:[0123456789]*:*) + UNAME_PROCESSOR=`uname -p` + if test "$UNAME_PROCESSOR" = "x86"; then + UNAME_PROCESSOR=i386 + UNAME_MACHINE=pc + fi + echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} + exit ;; + *:QNX:*:4*) + echo i386-pc-qnx + exit ;; + NEO-?:NONSTOP_KERNEL:*:*) + echo neo-tandem-nsk${UNAME_RELEASE} + exit ;; + NSE-*:NONSTOP_KERNEL:*:*) + echo nse-tandem-nsk${UNAME_RELEASE} + exit ;; + NSR-?:NONSTOP_KERNEL:*:*) + echo nsr-tandem-nsk${UNAME_RELEASE} + exit ;; + *:NonStop-UX:*:*) + echo mips-compaq-nonstopux + exit ;; + BS2000:POSIX*:*:*) + echo bs2000-siemens-sysv + exit ;; + DS/*:UNIX_System_V:*:*) + echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} + exit ;; + *:Plan9:*:*) + # "uname -m" is not consistent, so use $cputype instead. 386 + # is converted to i386 for consistency with other x86 + # operating systems. + if test "$cputype" = "386"; then + UNAME_MACHINE=i386 + else + UNAME_MACHINE="$cputype" + fi + echo ${UNAME_MACHINE}-unknown-plan9 + exit ;; + *:TOPS-10:*:*) + echo pdp10-unknown-tops10 + exit ;; + *:TENEX:*:*) + echo pdp10-unknown-tenex + exit ;; + KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) + echo pdp10-dec-tops20 + exit ;; + XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) + echo pdp10-xkl-tops20 + exit ;; + *:TOPS-20:*:*) + echo pdp10-unknown-tops20 + exit ;; + *:ITS:*:*) + echo pdp10-unknown-its + exit ;; + SEI:*:*:SEIUX) + echo mips-sei-seiux${UNAME_RELEASE} + exit ;; + *:DragonFly:*:*) + echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` + exit ;; + *:*VMS:*:*) + UNAME_MACHINE=`(uname -p) 2>/dev/null` + case "${UNAME_MACHINE}" in + A*) echo alpha-dec-vms ; exit ;; + I*) echo ia64-dec-vms ; exit ;; + V*) echo vax-dec-vms ; exit ;; + esac ;; + *:XENIX:*:SysV) + echo i386-pc-xenix + exit ;; + i*86:skyos:*:*) + echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' + exit ;; + i*86:rdos:*:*) + echo ${UNAME_MACHINE}-pc-rdos + exit ;; + i*86:AROS:*:*) + echo ${UNAME_MACHINE}-pc-aros + exit ;; + x86_64:VMkernel:*:*) + echo ${UNAME_MACHINE}-unknown-esx + exit ;; +esac + +cat >&2 < in order to provide the needed +information to handle your system. + +config.guess timestamp = $timestamp + +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null` + +hostinfo = `(hostinfo) 2>/dev/null` +/bin/universe = `(/bin/universe) 2>/dev/null` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` +/bin/arch = `(/bin/arch) 2>/dev/null` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` + +UNAME_MACHINE = ${UNAME_MACHINE} +UNAME_RELEASE = ${UNAME_RELEASE} +UNAME_SYSTEM = ${UNAME_SYSTEM} +UNAME_VERSION = ${UNAME_VERSION} +EOF + +exit 1 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/config.h b/config.h new file mode 100644 index 0000000..eded46f --- /dev/null +++ b/config.h @@ -0,0 +1,477 @@ +/* config.h. Generated from config.h.in by configure. */ +/* config.h.in. Generated from configure.ac by autoheader. */ + +/* Define if building universal (internal helper macro) */ +/* #undef AC_APPLE_UNIVERSAL_BUILD */ + +/* maximum keyfile size (in KiB) */ +#define DEFAULT_KEYFILE_SIZE_MAXKB 8192 + +/* cipher for loop-AES mode */ +#define DEFAULT_LOOPAES_CIPHER "aes" + +/* key length in bits for loop-AES mode */ +#define DEFAULT_LOOPAES_KEYBITS 256 + +/* cipher for LUKS1 */ +#define DEFAULT_LUKS1_CIPHER "aes" + +/* hash function for LUKS1 header */ +#define DEFAULT_LUKS1_HASH "sha256" + +/* PBKDF2 iteration time for LUKS1 (in ms) */ +#define DEFAULT_LUKS1_ITER_TIME 2000 + +/* key length in bits for LUKS1 */ +#define DEFAULT_LUKS1_KEYBITS 256 + +/* cipher mode for LUKS1 */ +#define DEFAULT_LUKS1_MODE "xts-plain64" + +/* Argon2 PBKDF iteration time for LUKS2 (in ms) */ +#define DEFAULT_LUKS2_ITER_TIME 2000 + +/* fallback cipher for LUKS2 keyslot (if data encryption is incompatible) */ +#define DEFAULT_LUKS2_KEYSLOT_CIPHER "aes-xts-plain64" + +/* fallback key size for LUKS2 keyslot (if data encryption is incompatible) */ +#define DEFAULT_LUKS2_KEYSLOT_KEYBITS 512 + +/* default luks2 locking directory permissions */ +#define DEFAULT_LUKS2_LOCK_DIR_PERMS 0700 + +/* path to directory for LUKSv2 locks */ +#define DEFAULT_LUKS2_LOCK_PATH "/run/cryptsetup" + +/* Argon2 PBKDF memory cost for LUKS2 (in kB) */ +#define DEFAULT_LUKS2_MEMORY_KB 1048576 + +/* Argon2 PBKDF max parallel cost for LUKS2 (if CPUs available) */ +#define DEFAULT_LUKS2_PARALLEL_THREADS 4 + +/* Default PBKDF algorithm (pbkdf2 or argon2i/argon2id) for LUKS2 */ +#define DEFAULT_LUKS2_PBKDF "argon2i" + +/* default LUKS format version */ +#define DEFAULT_LUKS_FORMAT CRYPT_LUKS2 + +/* maximum keyfile size (in characters) */ +#define DEFAULT_PASSPHRASE_SIZE_MAX 512 + +/* cipher for plain mode */ +#define DEFAULT_PLAIN_CIPHER "aes" + +/* password hashing function for plain mode */ +#define DEFAULT_PLAIN_HASH "ripemd160" + +/* key length in bits for plain mode */ +#define DEFAULT_PLAIN_KEYBITS 256 + +/* cipher mode for plain mode */ +#define DEFAULT_PLAIN_MODE "cbc-essiv:sha256" + +/* default RNG type for key generator */ +#define DEFAULT_RNG "/dev/urandom" + +/* override default path to directory with systemd temporary files */ +#define DEFAULT_TMPFILESDIR "" + +/* data block size for verity mode */ +#define DEFAULT_VERITY_DATA_BLOCK 4096 + +/* parity bytes for verity FEC */ +#define DEFAULT_VERITY_FEC_ROOTS 2 + +/* hash function for verity mode */ +#define DEFAULT_VERITY_HASH "sha256" + +/* hash block size for verity mode */ +#define DEFAULT_VERITY_HASH_BLOCK 4096 + +/* salt size for verity mode */ +#define DEFAULT_VERITY_SALT_SIZE 32 + +/* Enable using of kernel userspace crypto */ +#define ENABLE_AF_ALG 1 + +/* Enable FIPS mode restrictions */ +/* #undef ENABLE_FIPS */ + +/* XTS mode - double default LUKS keysize if needed */ +#define ENABLE_LUKS_ADJUST_XTS_KEYSIZE 1 + +/* Define to 1 if translation of program messages to the user's native + language is requested. */ +#define ENABLE_NLS 1 + +/* Enable password quality checking using passwdqc library */ +/* #undef ENABLE_PASSWDQC */ + +/* Enable password quality checking using pwquality library */ +/* #undef ENABLE_PWQUALITY */ + +/* Requested gcrypt version */ +/* #undef GCRYPT_REQ_VERSION */ + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_ARGON2_H */ + +/* Define to 1 to use blkid for detection of disk signatures. */ +/* #undef HAVE_BLKID */ + +/* Define to 1 if you have the header file. */ +#define HAVE_BLKID_BLKID_H 1 + +/* Define to 1 to use blkid_probe_step_back. */ +#define HAVE_BLKID_STEP_BACK 1 + +/* Define to 1 to use blkid_do_wipe. */ +#define HAVE_BLKID_WIPE 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_BYTESWAP_H 1 + +/* Define to 1 if you have the Mac OS X function CFLocaleCopyCurrent in the + CoreFoundation framework. */ +/* #undef HAVE_CFLOCALECOPYCURRENT */ + +/* Define to 1 if you have the Mac OS X function CFPreferencesCopyAppValue in + the CoreFoundation framework. */ +/* #undef HAVE_CFPREFERENCESCOPYAPPVALUE */ + +/* Define to 1 if you have the `clock_gettime' function. */ +#define HAVE_CLOCK_GETTIME 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_CTYPE_H 1 + +/* Define if the GNU dcgettext() function is already present or preinstalled. + */ +#define HAVE_DCGETTEXT 1 + +/* Define to 1 if you have the declaration of `blkid_do_probe', and to 0 if + you don't. */ +#define HAVE_DECL_BLKID_DO_PROBE 1 + +/* Define to 1 if you have the declaration of `blkid_do_safeprobe', and to 0 + if you don't. */ +#define HAVE_DECL_BLKID_DO_SAFEPROBE 1 + +/* Define to 1 if you have the declaration of + `blkid_probe_filter_superblocks_type', and to 0 if you don't. */ +#define HAVE_DECL_BLKID_PROBE_FILTER_SUPERBLOCKS_TYPE 1 + +/* Define to 1 if you have the declaration of `blkid_probe_lookup_value ', and + to 0 if you don't. */ +#define HAVE_DECL_BLKID_PROBE_LOOKUP_VALUE__________ 1 + +/* Define to 1 if you have the declaration of `blkid_probe_set_device', and to + 0 if you don't. */ +#define HAVE_DECL_BLKID_PROBE_SET_DEVICE 1 + +/* Define to 1 if you have the declaration of `blkid_reset_probe', and to 0 if + you don't. */ +#define HAVE_DECL_BLKID_RESET_PROBE 1 + +/* Define to 1 if you have the declaration of `DM_DEVICE_GET_TARGET_VERSION', + and to 0 if you don't. */ +#define HAVE_DECL_DM_DEVICE_GET_TARGET_VERSION 0 + +/* Define to 1 if you have the declaration of `dm_device_has_holders', and to + 0 if you don't. */ +#define HAVE_DECL_DM_DEVICE_HAS_HOLDERS 1 + +/* Define to 1 if you have the declaration of `dm_device_has_mounted_fs', and + to 0 if you don't. */ +#define HAVE_DECL_DM_DEVICE_HAS_MOUNTED_FS 1 + +/* Define to 1 if you have the declaration of `dm_task_deferred_remove', and + to 0 if you don't. */ +#define HAVE_DECL_DM_TASK_DEFERRED_REMOVE 1 + +/* Define to 1 if you have the declaration of `dm_task_retry_remove', and to 0 + if you don't. */ +#define HAVE_DECL_DM_TASK_RETRY_REMOVE 1 + +/* Define to 1 if you have the declaration of `dm_task_secure_data', and to 0 + if you don't. */ +#define HAVE_DECL_DM_TASK_SECURE_DATA 1 + +/* Define to 1 if you have the declaration of + `DM_UDEV_DISABLE_DISK_RULES_FLAG', and to 0 if you don't. */ +#define HAVE_DECL_DM_UDEV_DISABLE_DISK_RULES_FLAG 1 + +/* Define to 1 if you have the declaration of `GCRY_CIPHER_MODE_XTS', and to 0 + if you don't. */ +/* #undef HAVE_DECL_GCRY_CIPHER_MODE_XTS */ + +/* Define to 1 if you have the declaration of `json_object_deep_copy', and to + 0 if you don't. */ +#define HAVE_DECL_JSON_OBJECT_DEEP_COPY 1 + +/* Define to 1 if you have the declaration of `json_object_object_add_ex', and + to 0 if you don't. */ +#define HAVE_DECL_JSON_OBJECT_OBJECT_ADD_EX 1 + +/* Define to 1 if you have the declaration of `NSS_GetVersion', and to 0 if + you don't. */ +/* #undef HAVE_DECL_NSS_GETVERSION */ + +/* Define to 1 if you have the declaration of `strerror_r', and to 0 if you + don't. */ +#define HAVE_DECL_STRERROR_R 1 + +/* Define to 1 if you have the header file, and it defines `DIR'. + */ +#define HAVE_DIRENT_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_DLFCN_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_ENDIAN_H 1 + +/* Define to 1 if you have the `explicit_bzero' function. */ +#define HAVE_EXPLICIT_BZERO 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_FCNTL_H 1 + +/* Define to 1 if fseeko (and presumably ftello) exists and is declared. */ +#define HAVE_FSEEKO 1 + +/* Define if the GNU gettext() function is already present or preinstalled. */ +#define HAVE_GETTEXT 1 + +/* Define if you have the iconv() function and it works. */ +/* #undef HAVE_ICONV */ + +/* Define to 1 if you have the header file. */ +#define HAVE_INTTYPES_H 1 + +/* Define to 1 if the system has the type `key_serial_t'. */ +/* #undef HAVE_KEY_SERIAL_T */ + +/* Define to 1 if you have the `devmapper' library (-ldevmapper). */ +#define HAVE_LIBDEVMAPPER 1 + +/* Define to 1 if you have the `gcrypt' library (-lgcrypt). */ +/* #undef HAVE_LIBGCRYPT */ + +/* Define to 1 if you have the `nettle' library (-lnettle). */ +/* #undef HAVE_LIBNETTLE */ + +/* Define to 1 if you have the `popt' library (-lpopt). */ +#define HAVE_LIBPOPT 1 + +/* Define to 1 if you have the `selinux' library (-lselinux). */ +/* #undef HAVE_LIBSELINUX */ + +/* Define to 1 if you have the `sepol' library (-lsepol). */ +/* #undef HAVE_LIBSEPOL */ + +/* Define to 1 if you have the `uuid' library (-luuid). */ +#define HAVE_LIBUUID 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_LINUX_IF_ALG_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_LINUX_KEYCTL_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_LOCALE_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_MALLOC_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_MEMORY_H 1 + +/* Define to 1 if you have the header file, and it defines `DIR'. */ +/* #undef HAVE_NDIR_H */ + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_NETTLE_SHA_H */ + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_NETTLE_VERSION_H */ + +/* Define to 1 if you have the `posix_fallocate' function. */ +#define HAVE_POSIX_FALLOCATE 1 + +/* Define to 1 if you have the `posix_memalign' function. */ +#define HAVE_POSIX_MEMALIGN 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STDINT_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STDLIB_H 1 + +/* Define to 1 if you have the `strerror_r' function. */ +#define HAVE_STRERROR_R 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STRINGS_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STRING_H 1 + +/* Define to 1 if you have the header file, and it defines `DIR'. + */ +/* #undef HAVE_SYS_DIR_H */ + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_IOCTL_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_MMAN_H 1 + +/* Define to 1 if you have the header file, and it defines `DIR'. + */ +/* #undef HAVE_SYS_NDIR_H */ + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_STATVFS_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_STAT_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_SYSMACROS_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_TYPES_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_UNISTD_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_UUID_UUID_H 1 + +/* Enable kernel keyring service support */ +#define KERNEL_KEYRING 1 + +/* Define to the sub-directory where libtool stores uninstalled libraries. */ +#define LT_OBJDIR ".libs/" + +/* Name of package */ +#define PACKAGE "cryptsetup" + +/* Define to the address where bug reports for this package should be sent. */ +#define PACKAGE_BUGREPORT "" + +/* Define to the full name of this package. */ +#define PACKAGE_NAME "cryptsetup" + +/* Define to the full name and version of this package. */ +#define PACKAGE_STRING "cryptsetup 2.2.2" + +/* Define to the one symbol short name of this package. */ +#define PACKAGE_TARNAME "cryptsetup" + +/* Define to the home page for this package. */ +#define PACKAGE_URL "" + +/* Define to the version of this package. */ +#define PACKAGE_VERSION "2.2.2" + +/* passwdqc library config file */ +#define PASSWDQC_CONFIG_FILE "" + +/* Define to 1 if you have the ANSI C header files. */ +#define STDC_HEADERS 1 + +/* Define to 1 if strerror_r returns char *. */ +#define STRERROR_R_CHAR_P 1 + +/* Use internal Argon2 */ +#define USE_INTERNAL_ARGON2 1 + +/* Use internal PBKDF2 */ +#define USE_INTERNAL_PBKDF2 1 + +/* Enable extensions on AIX 3, Interix. */ +#ifndef _ALL_SOURCE +# define _ALL_SOURCE 1 +#endif +/* Enable GNU extensions on systems that have them. */ +#ifndef _GNU_SOURCE +# define _GNU_SOURCE 1 +#endif +/* Enable threading extensions on Solaris. */ +#ifndef _POSIX_PTHREAD_SEMANTICS +# define _POSIX_PTHREAD_SEMANTICS 1 +#endif +/* Enable extensions on HP NonStop. */ +#ifndef _TANDEM_SOURCE +# define _TANDEM_SOURCE 1 +#endif +/* Enable general extensions on Solaris. */ +#ifndef __EXTENSIONS__ +# define __EXTENSIONS__ 1 +#endif + + +/* Try to use udev synchronisation? */ +#define USE_UDEV 1 + +/* Version number of package */ +#define VERSION "2.2.2" + +/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most + significant byte first (like Motorola and SPARC, unlike Intel). */ +#if defined AC_APPLE_UNIVERSAL_BUILD +# if defined __BIG_ENDIAN__ +# define WORDS_BIGENDIAN 1 +# endif +#else +# ifndef WORDS_BIGENDIAN +/* # undef WORDS_BIGENDIAN */ +# endif +#endif + +/* Enable large inode numbers on Mac OS X 10.5. */ +#ifndef _DARWIN_USE_64_BIT_INODE +# define _DARWIN_USE_64_BIT_INODE 1 +#endif + +/* Number of bits in a file offset, on hosts where this is settable. */ +#define _FILE_OFFSET_BITS 64 + +/* Define to 1 to make fseeko visible on some hosts (e.g. glibc 2.2). */ +/* #undef _LARGEFILE_SOURCE */ + +/* Define for large files, on AIX-style hosts. */ +/* #undef _LARGE_FILES */ + +/* Define to 1 if on MINIX. */ +/* #undef _MINIX */ + +/* Define to 2 if the system does not provide POSIX.1 features except with + this defined. */ +/* #undef _POSIX_1_SOURCE */ + +/* Define to 1 if you need to in order for `stat' and other things to work. */ +/* #undef _POSIX_SOURCE */ + +/* Define to empty if `const' does not conform to ANSI C. */ +/* #undef const */ + +/* Define to `long int' if does not define. */ +/* #undef off_t */ + +/* Define to the equivalent of the C99 'restrict' keyword, or to + nothing if this is not supported. Do not define if restrict is + supported directly. */ +#define restrict __restrict +/* Work around a bug in Sun C++: it does not support _Restrict or + __restrict__, even though the corresponding Sun C compiler ends up with + "#define restrict _Restrict" or "#define restrict __restrict__" in the + previous line. Perhaps some future version of Sun C++ will work with + restrict; if so, hopefully it defines __RESTRICT like Sun C does. */ +#if defined __SUNPRO_CC && !defined __RESTRICT +# define _Restrict +# define __restrict__ +#endif diff --git a/config.h.in b/config.h.in new file mode 100644 index 0000000..bb0a3f6 --- /dev/null +++ b/config.h.in @@ -0,0 +1,476 @@ +/* config.h.in. Generated from configure.ac by autoheader. */ + +/* Define if building universal (internal helper macro) */ +#undef AC_APPLE_UNIVERSAL_BUILD + +/* maximum keyfile size (in KiB) */ +#undef DEFAULT_KEYFILE_SIZE_MAXKB + +/* cipher for loop-AES mode */ +#undef DEFAULT_LOOPAES_CIPHER + +/* key length in bits for loop-AES mode */ +#undef DEFAULT_LOOPAES_KEYBITS + +/* cipher for LUKS1 */ +#undef DEFAULT_LUKS1_CIPHER + +/* hash function for LUKS1 header */ +#undef DEFAULT_LUKS1_HASH + +/* PBKDF2 iteration time for LUKS1 (in ms) */ +#undef DEFAULT_LUKS1_ITER_TIME + +/* key length in bits for LUKS1 */ +#undef DEFAULT_LUKS1_KEYBITS + +/* cipher mode for LUKS1 */ +#undef DEFAULT_LUKS1_MODE + +/* Argon2 PBKDF iteration time for LUKS2 (in ms) */ +#undef DEFAULT_LUKS2_ITER_TIME + +/* fallback cipher for LUKS2 keyslot (if data encryption is incompatible) */ +#undef DEFAULT_LUKS2_KEYSLOT_CIPHER + +/* fallback key size for LUKS2 keyslot (if data encryption is incompatible) */ +#undef DEFAULT_LUKS2_KEYSLOT_KEYBITS + +/* default luks2 locking directory permissions */ +#undef DEFAULT_LUKS2_LOCK_DIR_PERMS + +/* path to directory for LUKSv2 locks */ +#undef DEFAULT_LUKS2_LOCK_PATH + +/* Argon2 PBKDF memory cost for LUKS2 (in kB) */ +#undef DEFAULT_LUKS2_MEMORY_KB + +/* Argon2 PBKDF max parallel cost for LUKS2 (if CPUs available) */ +#undef DEFAULT_LUKS2_PARALLEL_THREADS + +/* Default PBKDF algorithm (pbkdf2 or argon2i/argon2id) for LUKS2 */ +#undef DEFAULT_LUKS2_PBKDF + +/* default LUKS format version */ +#undef DEFAULT_LUKS_FORMAT + +/* maximum keyfile size (in characters) */ +#undef DEFAULT_PASSPHRASE_SIZE_MAX + +/* cipher for plain mode */ +#undef DEFAULT_PLAIN_CIPHER + +/* password hashing function for plain mode */ +#undef DEFAULT_PLAIN_HASH + +/* key length in bits for plain mode */ +#undef DEFAULT_PLAIN_KEYBITS + +/* cipher mode for plain mode */ +#undef DEFAULT_PLAIN_MODE + +/* default RNG type for key generator */ +#undef DEFAULT_RNG + +/* override default path to directory with systemd temporary files */ +#undef DEFAULT_TMPFILESDIR + +/* data block size for verity mode */ +#undef DEFAULT_VERITY_DATA_BLOCK + +/* parity bytes for verity FEC */ +#undef DEFAULT_VERITY_FEC_ROOTS + +/* hash function for verity mode */ +#undef DEFAULT_VERITY_HASH + +/* hash block size for verity mode */ +#undef DEFAULT_VERITY_HASH_BLOCK + +/* salt size for verity mode */ +#undef DEFAULT_VERITY_SALT_SIZE + +/* Enable using of kernel userspace crypto */ +#undef ENABLE_AF_ALG + +/* Enable FIPS mode restrictions */ +#undef ENABLE_FIPS + +/* XTS mode - double default LUKS keysize if needed */ +#undef ENABLE_LUKS_ADJUST_XTS_KEYSIZE + +/* Define to 1 if translation of program messages to the user's native + language is requested. */ +#undef ENABLE_NLS + +/* Enable password quality checking using passwdqc library */ +#undef ENABLE_PASSWDQC + +/* Enable password quality checking using pwquality library */ +#undef ENABLE_PWQUALITY + +/* Requested gcrypt version */ +#undef GCRYPT_REQ_VERSION + +/* Define to 1 if you have the header file. */ +#undef HAVE_ARGON2_H + +/* Define to 1 to use blkid for detection of disk signatures. */ +#undef HAVE_BLKID + +/* Define to 1 if you have the header file. */ +#undef HAVE_BLKID_BLKID_H + +/* Define to 1 to use blkid_probe_step_back. */ +#undef HAVE_BLKID_STEP_BACK + +/* Define to 1 to use blkid_do_wipe. */ +#undef HAVE_BLKID_WIPE + +/* Define to 1 if you have the header file. */ +#undef HAVE_BYTESWAP_H + +/* Define to 1 if you have the Mac OS X function CFLocaleCopyCurrent in the + CoreFoundation framework. */ +#undef HAVE_CFLOCALECOPYCURRENT + +/* Define to 1 if you have the Mac OS X function CFPreferencesCopyAppValue in + the CoreFoundation framework. */ +#undef HAVE_CFPREFERENCESCOPYAPPVALUE + +/* Define to 1 if you have the `clock_gettime' function. */ +#undef HAVE_CLOCK_GETTIME + +/* Define to 1 if you have the header file. */ +#undef HAVE_CTYPE_H + +/* Define if the GNU dcgettext() function is already present or preinstalled. + */ +#undef HAVE_DCGETTEXT + +/* Define to 1 if you have the declaration of `blkid_do_probe', and to 0 if + you don't. */ +#undef HAVE_DECL_BLKID_DO_PROBE + +/* Define to 1 if you have the declaration of `blkid_do_safeprobe', and to 0 + if you don't. */ +#undef HAVE_DECL_BLKID_DO_SAFEPROBE + +/* Define to 1 if you have the declaration of + `blkid_probe_filter_superblocks_type', and to 0 if you don't. */ +#undef HAVE_DECL_BLKID_PROBE_FILTER_SUPERBLOCKS_TYPE + +/* Define to 1 if you have the declaration of `blkid_probe_lookup_value ', and + to 0 if you don't. */ +#undef HAVE_DECL_BLKID_PROBE_LOOKUP_VALUE__________ + +/* Define to 1 if you have the declaration of `blkid_probe_set_device', and to + 0 if you don't. */ +#undef HAVE_DECL_BLKID_PROBE_SET_DEVICE + +/* Define to 1 if you have the declaration of `blkid_reset_probe', and to 0 if + you don't. */ +#undef HAVE_DECL_BLKID_RESET_PROBE + +/* Define to 1 if you have the declaration of `DM_DEVICE_GET_TARGET_VERSION', + and to 0 if you don't. */ +#undef HAVE_DECL_DM_DEVICE_GET_TARGET_VERSION + +/* Define to 1 if you have the declaration of `dm_device_has_holders', and to + 0 if you don't. */ +#undef HAVE_DECL_DM_DEVICE_HAS_HOLDERS + +/* Define to 1 if you have the declaration of `dm_device_has_mounted_fs', and + to 0 if you don't. */ +#undef HAVE_DECL_DM_DEVICE_HAS_MOUNTED_FS + +/* Define to 1 if you have the declaration of `dm_task_deferred_remove', and + to 0 if you don't. */ +#undef HAVE_DECL_DM_TASK_DEFERRED_REMOVE + +/* Define to 1 if you have the declaration of `dm_task_retry_remove', and to 0 + if you don't. */ +#undef HAVE_DECL_DM_TASK_RETRY_REMOVE + +/* Define to 1 if you have the declaration of `dm_task_secure_data', and to 0 + if you don't. */ +#undef HAVE_DECL_DM_TASK_SECURE_DATA + +/* Define to 1 if you have the declaration of + `DM_UDEV_DISABLE_DISK_RULES_FLAG', and to 0 if you don't. */ +#undef HAVE_DECL_DM_UDEV_DISABLE_DISK_RULES_FLAG + +/* Define to 1 if you have the declaration of `GCRY_CIPHER_MODE_XTS', and to 0 + if you don't. */ +#undef HAVE_DECL_GCRY_CIPHER_MODE_XTS + +/* Define to 1 if you have the declaration of `json_object_deep_copy', and to + 0 if you don't. */ +#undef HAVE_DECL_JSON_OBJECT_DEEP_COPY + +/* Define to 1 if you have the declaration of `json_object_object_add_ex', and + to 0 if you don't. */ +#undef HAVE_DECL_JSON_OBJECT_OBJECT_ADD_EX + +/* Define to 1 if you have the declaration of `NSS_GetVersion', and to 0 if + you don't. */ +#undef HAVE_DECL_NSS_GETVERSION + +/* Define to 1 if you have the declaration of `strerror_r', and to 0 if you + don't. */ +#undef HAVE_DECL_STRERROR_R + +/* Define to 1 if you have the header file, and it defines `DIR'. + */ +#undef HAVE_DIRENT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_DLFCN_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_ENDIAN_H + +/* Define to 1 if you have the `explicit_bzero' function. */ +#undef HAVE_EXPLICIT_BZERO + +/* Define to 1 if you have the header file. */ +#undef HAVE_FCNTL_H + +/* Define to 1 if fseeko (and presumably ftello) exists and is declared. */ +#undef HAVE_FSEEKO + +/* Define if the GNU gettext() function is already present or preinstalled. */ +#undef HAVE_GETTEXT + +/* Define if you have the iconv() function and it works. */ +#undef HAVE_ICONV + +/* Define to 1 if you have the header file. */ +#undef HAVE_INTTYPES_H + +/* Define to 1 if the system has the type `key_serial_t'. */ +#undef HAVE_KEY_SERIAL_T + +/* Define to 1 if you have the `devmapper' library (-ldevmapper). */ +#undef HAVE_LIBDEVMAPPER + +/* Define to 1 if you have the `gcrypt' library (-lgcrypt). */ +#undef HAVE_LIBGCRYPT + +/* Define to 1 if you have the `nettle' library (-lnettle). */ +#undef HAVE_LIBNETTLE + +/* Define to 1 if you have the `popt' library (-lpopt). */ +#undef HAVE_LIBPOPT + +/* Define to 1 if you have the `selinux' library (-lselinux). */ +#undef HAVE_LIBSELINUX + +/* Define to 1 if you have the `sepol' library (-lsepol). */ +#undef HAVE_LIBSEPOL + +/* Define to 1 if you have the `uuid' library (-luuid). */ +#undef HAVE_LIBUUID + +/* Define to 1 if you have the header file. */ +#undef HAVE_LINUX_IF_ALG_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_LINUX_KEYCTL_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_LOCALE_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_MALLOC_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_MEMORY_H + +/* Define to 1 if you have the header file, and it defines `DIR'. */ +#undef HAVE_NDIR_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_NETTLE_SHA_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_NETTLE_VERSION_H + +/* Define to 1 if you have the `posix_fallocate' function. */ +#undef HAVE_POSIX_FALLOCATE + +/* Define to 1 if you have the `posix_memalign' function. */ +#undef HAVE_POSIX_MEMALIGN + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDINT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDLIB_H + +/* Define to 1 if you have the `strerror_r' function. */ +#undef HAVE_STRERROR_R + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRINGS_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRING_H + +/* Define to 1 if you have the header file, and it defines `DIR'. + */ +#undef HAVE_SYS_DIR_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_IOCTL_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_MMAN_H + +/* Define to 1 if you have the header file, and it defines `DIR'. + */ +#undef HAVE_SYS_NDIR_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_STATVFS_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_STAT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_SYSMACROS_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_TYPES_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_UNISTD_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_UUID_UUID_H + +/* Enable kernel keyring service support */ +#undef KERNEL_KEYRING + +/* Define to the sub-directory where libtool stores uninstalled libraries. */ +#undef LT_OBJDIR + +/* Name of package */ +#undef PACKAGE + +/* Define to the address where bug reports for this package should be sent. */ +#undef PACKAGE_BUGREPORT + +/* Define to the full name of this package. */ +#undef PACKAGE_NAME + +/* Define to the full name and version of this package. */ +#undef PACKAGE_STRING + +/* Define to the one symbol short name of this package. */ +#undef PACKAGE_TARNAME + +/* Define to the home page for this package. */ +#undef PACKAGE_URL + +/* Define to the version of this package. */ +#undef PACKAGE_VERSION + +/* passwdqc library config file */ +#undef PASSWDQC_CONFIG_FILE + +/* Define to 1 if you have the ANSI C header files. */ +#undef STDC_HEADERS + +/* Define to 1 if strerror_r returns char *. */ +#undef STRERROR_R_CHAR_P + +/* Use internal Argon2 */ +#undef USE_INTERNAL_ARGON2 + +/* Use internal PBKDF2 */ +#undef USE_INTERNAL_PBKDF2 + +/* Enable extensions on AIX 3, Interix. */ +#ifndef _ALL_SOURCE +# undef _ALL_SOURCE +#endif +/* Enable GNU extensions on systems that have them. */ +#ifndef _GNU_SOURCE +# undef _GNU_SOURCE +#endif +/* Enable threading extensions on Solaris. */ +#ifndef _POSIX_PTHREAD_SEMANTICS +# undef _POSIX_PTHREAD_SEMANTICS +#endif +/* Enable extensions on HP NonStop. */ +#ifndef _TANDEM_SOURCE +# undef _TANDEM_SOURCE +#endif +/* Enable general extensions on Solaris. */ +#ifndef __EXTENSIONS__ +# undef __EXTENSIONS__ +#endif + + +/* Try to use udev synchronisation? */ +#undef USE_UDEV + +/* Version number of package */ +#undef VERSION + +/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most + significant byte first (like Motorola and SPARC, unlike Intel). */ +#if defined AC_APPLE_UNIVERSAL_BUILD +# if defined __BIG_ENDIAN__ +# define WORDS_BIGENDIAN 1 +# endif +#else +# ifndef WORDS_BIGENDIAN +# undef WORDS_BIGENDIAN +# endif +#endif + +/* Enable large inode numbers on Mac OS X 10.5. */ +#ifndef _DARWIN_USE_64_BIT_INODE +# define _DARWIN_USE_64_BIT_INODE 1 +#endif + +/* Number of bits in a file offset, on hosts where this is settable. */ +#undef _FILE_OFFSET_BITS + +/* Define to 1 to make fseeko visible on some hosts (e.g. glibc 2.2). */ +#undef _LARGEFILE_SOURCE + +/* Define for large files, on AIX-style hosts. */ +#undef _LARGE_FILES + +/* Define to 1 if on MINIX. */ +#undef _MINIX + +/* Define to 2 if the system does not provide POSIX.1 features except with + this defined. */ +#undef _POSIX_1_SOURCE + +/* Define to 1 if you need to in order for `stat' and other things to work. */ +#undef _POSIX_SOURCE + +/* Define to empty if `const' does not conform to ANSI C. */ +#undef const + +/* Define to `long int' if does not define. */ +#undef off_t + +/* Define to the equivalent of the C99 'restrict' keyword, or to + nothing if this is not supported. Do not define if restrict is + supported directly. */ +#undef restrict +/* Work around a bug in Sun C++: it does not support _Restrict or + __restrict__, even though the corresponding Sun C compiler ends up with + "#define restrict _Restrict" or "#define restrict __restrict__" in the + previous line. Perhaps some future version of Sun C++ will work with + restrict; if so, hopefully it defines __RESTRICT like Sun C does. */ +#if defined __SUNPRO_CC && !defined __RESTRICT +# define _Restrict +# define __restrict__ +#endif diff --git a/config.rpath b/config.rpath new file mode 100755 index 0000000..c38b914 --- /dev/null +++ b/config.rpath @@ -0,0 +1,690 @@ +#! /bin/sh +# Output a system dependent set of variables, describing how to set the +# run time search path of shared libraries in an executable. +# +# Copyright 1996-2013 Free Software Foundation, Inc. +# Taken from GNU libtool, 2001 +# Originally by Gordon Matzigkeit , 1996 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. +# +# The first argument passed to this file is the canonical host specification, +# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM +# or +# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM +# The environment variables CC, GCC, LDFLAGS, LD, with_gnu_ld +# should be set by the caller. +# +# The set of defined variables is at the end of this script. + +# Known limitations: +# - On IRIX 6.5 with CC="cc", the run time search patch must not be longer +# than 256 bytes, otherwise the compiler driver will dump core. The only +# known workaround is to choose shorter directory names for the build +# directory and/or the installation directory. + +# All known linkers require a '.a' archive for static linking (except MSVC, +# which needs '.lib'). +libext=a +shrext=.so + +host="$1" +host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` + +# Code taken from libtool.m4's _LT_CC_BASENAME. + +for cc_temp in $CC""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`echo "$cc_temp" | sed -e 's%^.*/%%'` + +# Code taken from libtool.m4's _LT_COMPILER_PIC. + +wl= +if test "$GCC" = yes; then + wl='-Wl,' +else + case "$host_os" in + aix*) + wl='-Wl,' + ;; + mingw* | cygwin* | pw32* | os2* | cegcc*) + ;; + hpux9* | hpux10* | hpux11*) + wl='-Wl,' + ;; + irix5* | irix6* | nonstopux*) + wl='-Wl,' + ;; + linux* | k*bsd*-gnu | kopensolaris*-gnu) + case $cc_basename in + ecc*) + wl='-Wl,' + ;; + icc* | ifort*) + wl='-Wl,' + ;; + lf95*) + wl='-Wl,' + ;; + nagfor*) + wl='-Wl,-Wl,,' + ;; + pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) + wl='-Wl,' + ;; + ccc*) + wl='-Wl,' + ;; + xl* | bgxl* | bgf* | mpixl*) + wl='-Wl,' + ;; + como) + wl='-lopt=' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ F* | *Sun*Fortran*) + wl= + ;; + *Sun\ C*) + wl='-Wl,' + ;; + esac + ;; + esac + ;; + newsos6) + ;; + *nto* | *qnx*) + ;; + osf3* | osf4* | osf5*) + wl='-Wl,' + ;; + rdos*) + ;; + solaris*) + case $cc_basename in + f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) + wl='-Qoption ld ' + ;; + *) + wl='-Wl,' + ;; + esac + ;; + sunos4*) + wl='-Qoption ld ' + ;; + sysv4 | sysv4.2uw2* | sysv4.3*) + wl='-Wl,' + ;; + sysv4*MP*) + ;; + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + wl='-Wl,' + ;; + unicos*) + wl='-Wl,' + ;; + uts4*) + ;; + esac +fi + +# Code taken from libtool.m4's _LT_LINKER_SHLIBS. + +hardcode_libdir_flag_spec= +hardcode_libdir_separator= +hardcode_direct=no +hardcode_minus_L=no + +case "$host_os" in + cygwin* | mingw* | pw32* | cegcc*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test "$GCC" != yes; then + with_gnu_ld=no + fi + ;; + interix*) + # we just hope/assume this is gcc and not c89 (= MSVC++) + with_gnu_ld=yes + ;; + openbsd*) + with_gnu_ld=no + ;; +esac + +ld_shlibs=yes +if test "$with_gnu_ld" = yes; then + # Set some defaults for GNU ld with shared library support. These + # are reset later if shared libraries are not supported. Putting them + # here allows them to be overridden if necessary. + # Unlike libtool, we use -rpath here, not --rpath, since the documented + # option of GNU ld is called -rpath, not --rpath. + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + case "$host_os" in + aix[3-9]*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + ld_shlibs=no + fi + ;; + amigaos*) + case "$host_cpu" in + powerpc) + ;; + m68k) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac + ;; + beos*) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + : + else + ld_shlibs=no + fi + ;; + cygwin* | mingw* | pw32* | cegcc*) + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + hardcode_libdir_flag_spec='-L$libdir' + if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then + : + else + ld_shlibs=no + fi + ;; + haiku*) + ;; + interix[3-9]*) + hardcode_direct=no + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + ;; + gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + : + else + ld_shlibs=no + fi + ;; + netbsd*) + ;; + solaris*) + if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then + ld_shlibs=no + elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + : + else + ld_shlibs=no + fi + ;; + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) + case `$LD -v 2>&1` in + *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) + ld_shlibs=no + ;; + *) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' + else + ld_shlibs=no + fi + ;; + esac + ;; + sunos4*) + hardcode_direct=yes + ;; + *) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + : + else + ld_shlibs=no + fi + ;; + esac + if test "$ld_shlibs" = no; then + hardcode_libdir_flag_spec= + fi +else + case "$host_os" in + aix3*) + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + hardcode_minus_L=yes + if test "$GCC" = yes; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + hardcode_direct=unsupported + fi + ;; + aix[4-9]*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + else + aix_use_runtimelinking=no + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) + for ld_flag in $LDFLAGS; do + if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then + aix_use_runtimelinking=yes + break + fi + done + ;; + esac + fi + hardcode_direct=yes + hardcode_libdir_separator=':' + if test "$GCC" = yes; then + case $host_os in aix4.[012]|aix4.[012].*) + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && \ + strings "$collect2name" | grep resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + hardcode_direct=unsupported + hardcode_minus_L=yes + hardcode_libdir_flag_spec='-L$libdir' + hardcode_libdir_separator= + fi + ;; + esac + fi + # Begin _LT_AC_SYS_LIBPATH_AIX. + echo 'int main () { return 0; }' > conftest.c + ${CC} ${LDFLAGS} conftest.c -o conftest + aix_libpath=`dump -H conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'` + if test -z "$aix_libpath"; then + aix_libpath=`dump -HX64 conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'` + fi + if test -z "$aix_libpath"; then + aix_libpath="/usr/lib:/lib" + fi + rm -f conftest.c conftest + # End _LT_AC_SYS_LIBPATH_AIX. + if test "$aix_use_runtimelinking" = yes; then + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + else + if test "$host_cpu" = ia64; then + hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' + else + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + fi + fi + ;; + amigaos*) + case "$host_cpu" in + powerpc) + ;; + m68k) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac + ;; + bsdi[45]*) + ;; + cygwin* | mingw* | pw32* | cegcc*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + hardcode_libdir_flag_spec=' ' + libext=lib + ;; + darwin* | rhapsody*) + hardcode_direct=no + if { case $cc_basename in ifort*) true;; *) test "$GCC" = yes;; esac; }; then + : + else + ld_shlibs=no + fi + ;; + dgux*) + hardcode_libdir_flag_spec='-L$libdir' + ;; + freebsd2.2*) + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + ;; + freebsd2*) + hardcode_direct=yes + hardcode_minus_L=yes + ;; + freebsd* | dragonfly*) + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + ;; + hpux9*) + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + ;; + hpux10*) + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + fi + ;; + hpux11*) + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + case $host_cpu in + hppa*64*|ia64*) + hardcode_direct=no + ;; + *) + hardcode_direct=yes + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + ;; + esac + fi + ;; + irix5* | irix6* | nonstopux*) + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + ;; + netbsd*) + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + ;; + newsos6) + hardcode_direct=yes + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + ;; + *nto* | *qnx*) + ;; + openbsd*) + if test -f /usr/libexec/ld.so; then + hardcode_direct=yes + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + else + case "$host_os" in + openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) + hardcode_libdir_flag_spec='-R$libdir' + ;; + *) + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + ;; + esac + fi + else + ld_shlibs=no + fi + ;; + os2*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + osf3*) + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + ;; + osf4* | osf5*) + if test "$GCC" = yes; then + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + else + # Both cc and cxx compiler support -rpath directly + hardcode_libdir_flag_spec='-rpath $libdir' + fi + hardcode_libdir_separator=: + ;; + solaris*) + hardcode_libdir_flag_spec='-R$libdir' + ;; + sunos4*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_direct=yes + hardcode_minus_L=yes + ;; + sysv4) + case $host_vendor in + sni) + hardcode_direct=yes # is this really true??? + ;; + siemens) + hardcode_direct=no + ;; + motorola) + hardcode_direct=no #Motorola manual says yes, but my tests say they lie + ;; + esac + ;; + sysv4.3*) + ;; + sysv4*MP*) + if test -d /usr/nec; then + ld_shlibs=yes + fi + ;; + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) + ;; + sysv5* | sco3.2v5* | sco5v6*) + hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' + hardcode_libdir_separator=':' + ;; + uts4*) + hardcode_libdir_flag_spec='-L$libdir' + ;; + *) + ld_shlibs=no + ;; + esac +fi + +# Check dynamic linker characteristics +# Code taken from libtool.m4's _LT_SYS_DYNAMIC_LINKER. +# Unlike libtool.m4, here we don't care about _all_ names of the library, but +# only about the one the linker finds when passed -lNAME. This is the last +# element of library_names_spec in libtool.m4, or possibly two of them if the +# linker has special search rules. +library_names_spec= # the last element of library_names_spec in libtool.m4 +libname_spec='lib$name' +case "$host_os" in + aix3*) + library_names_spec='$libname.a' + ;; + aix[4-9]*) + library_names_spec='$libname$shrext' + ;; + amigaos*) + case "$host_cpu" in + powerpc*) + library_names_spec='$libname$shrext' ;; + m68k) + library_names_spec='$libname.a' ;; + esac + ;; + beos*) + library_names_spec='$libname$shrext' + ;; + bsdi[45]*) + library_names_spec='$libname$shrext' + ;; + cygwin* | mingw* | pw32* | cegcc*) + shrext=.dll + library_names_spec='$libname.dll.a $libname.lib' + ;; + darwin* | rhapsody*) + shrext=.dylib + library_names_spec='$libname$shrext' + ;; + dgux*) + library_names_spec='$libname$shrext' + ;; + freebsd* | dragonfly*) + case "$host_os" in + freebsd[123]*) + library_names_spec='$libname$shrext$versuffix' ;; + *) + library_names_spec='$libname$shrext' ;; + esac + ;; + gnu*) + library_names_spec='$libname$shrext' + ;; + haiku*) + library_names_spec='$libname$shrext' + ;; + hpux9* | hpux10* | hpux11*) + case $host_cpu in + ia64*) + shrext=.so + ;; + hppa*64*) + shrext=.sl + ;; + *) + shrext=.sl + ;; + esac + library_names_spec='$libname$shrext' + ;; + interix[3-9]*) + library_names_spec='$libname$shrext' + ;; + irix5* | irix6* | nonstopux*) + library_names_spec='$libname$shrext' + case "$host_os" in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= ;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 ;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 ;; + *) libsuff= shlibsuff= ;; + esac + ;; + esac + ;; + linux*oldld* | linux*aout* | linux*coff*) + ;; + linux* | k*bsd*-gnu | kopensolaris*-gnu) + library_names_spec='$libname$shrext' + ;; + knetbsd*-gnu) + library_names_spec='$libname$shrext' + ;; + netbsd*) + library_names_spec='$libname$shrext' + ;; + newsos6) + library_names_spec='$libname$shrext' + ;; + *nto* | *qnx*) + library_names_spec='$libname$shrext' + ;; + openbsd*) + library_names_spec='$libname$shrext$versuffix' + ;; + os2*) + libname_spec='$name' + shrext=.dll + library_names_spec='$libname.a' + ;; + osf3* | osf4* | osf5*) + library_names_spec='$libname$shrext' + ;; + rdos*) + ;; + solaris*) + library_names_spec='$libname$shrext' + ;; + sunos4*) + library_names_spec='$libname$shrext$versuffix' + ;; + sysv4 | sysv4.3*) + library_names_spec='$libname$shrext' + ;; + sysv4*MP*) + library_names_spec='$libname$shrext' + ;; + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + library_names_spec='$libname$shrext' + ;; + tpf*) + library_names_spec='$libname$shrext' + ;; + uts4*) + library_names_spec='$libname$shrext' + ;; +esac + +sed_quote_subst='s/\(["`$\\]\)/\\\1/g' +escaped_wl=`echo "X$wl" | sed -e 's/^X//' -e "$sed_quote_subst"` +shlibext=`echo "$shrext" | sed -e 's,^\.,,'` +escaped_libname_spec=`echo "X$libname_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` +escaped_library_names_spec=`echo "X$library_names_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` +escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` + +LC_ALL=C sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' <. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that +# program. This Exception is an additional permission under section 7 +# of the GNU General Public License, version 3 ("GPLv3"). + + +# Please send patches to . +# +# Configuration subroutine to validate and canonicalize a configuration type. +# Supply the specified configuration type as an argument. +# If it is invalid, we print an error message on stderr and exit with code 1. +# Otherwise, we print the canonical config type on stdout and succeed. + +# You can get the latest version of this script from: +# https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub + +# This file is supposed to be the same for all GNU packages +# and recognize all the CPU types, system types and aliases +# that are meaningful with *any* GNU software. +# Each package is responsible for reporting which valid configurations +# it does not support. The user should be able to distinguish +# a failure to support a valid configuration from a meaningless +# configuration. + +# The goal of this file is to map all the various variations of a given +# machine specification into a single specification in the form: +# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM +# or in some cases, the newer four-part form: +# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM +# It is wrong to echo any other type of specification. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS + +Canonicalize a configuration name. + +Options: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.sub ($timestamp) + +Copyright 1992-2018 Free Software Foundation, 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." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" + exit 1 ;; + + *local*) + # First pass through any local machine types. + echo "$1" + exit ;; + + * ) + break ;; + esac +done + +case $# in + 0) echo "$me: missing argument$help" >&2 + exit 1;; + 1) ;; + *) echo "$me: too many arguments$help" >&2 + exit 1;; +esac + +# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). +# Here we must recognize all the valid KERNEL-OS combinations. +maybe_os=`echo "$1" | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` +case $maybe_os in + nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ + linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ + knetbsd*-gnu* | netbsd*-gnu* | netbsd*-eabi* | \ + kopensolaris*-gnu* | cloudabi*-eabi* | \ + storm-chaos* | os2-emx* | rtmk-nova*) + os=-$maybe_os + basic_machine=`echo "$1" | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` + ;; + android-linux) + os=-linux-android + basic_machine=`echo "$1" | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown + ;; + *) + basic_machine=`echo "$1" | sed 's/-[^-]*$//'` + if [ "$basic_machine" != "$1" ] + then os=`echo "$1" | sed 's/.*-/-/'` + else os=; fi + ;; +esac + +### Let's recognize common machines as not being operating systems so +### that things like config.sub decstation-3100 work. We also +### recognize some manufacturers as not being operating systems, so we +### can provide default operating systems below. +case $os in + -sun*os*) + # Prevent following clause from handling this invalid input. + ;; + -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ + -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ + -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ + -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ + -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ + -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ + -apple | -axis | -knuth | -cray | -microblaze*) + os= + basic_machine=$1 + ;; + -bluegene*) + os=-cnk + ;; + -sim | -cisco | -oki | -wec | -winbond) + os= + basic_machine=$1 + ;; + -scout) + ;; + -wrs) + os=-vxworks + basic_machine=$1 + ;; + -chorusos*) + os=-chorusos + basic_machine=$1 + ;; + -chorusrdb) + os=-chorusrdb + basic_machine=$1 + ;; + -hiux*) + os=-hiuxwe2 + ;; + -sco6) + os=-sco5v6 + basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` + ;; + -sco5) + os=-sco3.2v5 + basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` + ;; + -sco4) + os=-sco3.2v4 + basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2.[4-9]*) + os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` + basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2v[4-9]*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` + ;; + -sco5v6*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` + ;; + -sco*) + os=-sco3.2v2 + basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` + ;; + -udk*) + basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` + ;; + -isc) + os=-isc2.2 + basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` + ;; + -clix*) + basic_machine=clipper-intergraph + ;; + -isc*) + basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` + ;; + -lynx*178) + os=-lynxos178 + ;; + -lynx*5) + os=-lynxos5 + ;; + -lynx*) + os=-lynxos + ;; + -ptx*) + basic_machine=`echo "$1" | sed -e 's/86-.*/86-sequent/'` + ;; + -psos*) + os=-psos + ;; + -mint | -mint[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; +esac + +# Decode aliases for certain CPU-COMPANY combinations. +case $basic_machine in + # Recognize the basic CPU types without company name. + # Some are omitted here because they have special meanings below. + 1750a | 580 \ + | a29k \ + | aarch64 | aarch64_be \ + | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ + | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ + | am33_2.0 \ + | arc | arceb \ + | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ + | avr | avr32 \ + | ba \ + | be32 | be64 \ + | bfin \ + | c4x | c8051 | clipper \ + | d10v | d30v | dlx | dsp16xx \ + | e2k | epiphany \ + | fido | fr30 | frv | ft32 \ + | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ + | hexagon \ + | i370 | i860 | i960 | ia16 | ia64 \ + | ip2k | iq2000 \ + | k1om \ + | le32 | le64 \ + | lm32 \ + | m32c | m32r | m32rle | m68000 | m68k | m88k \ + | maxq | mb | microblaze | microblazeel | mcore | mep | metag \ + | mips | mipsbe | mipseb | mipsel | mipsle \ + | mips16 \ + | mips64 | mips64el \ + | mips64octeon | mips64octeonel \ + | mips64orion | mips64orionel \ + | mips64r5900 | mips64r5900el \ + | mips64vr | mips64vrel \ + | mips64vr4100 | mips64vr4100el \ + | mips64vr4300 | mips64vr4300el \ + | mips64vr5000 | mips64vr5000el \ + | mips64vr5900 | mips64vr5900el \ + | mipsisa32 | mipsisa32el \ + | mipsisa32r2 | mipsisa32r2el \ + | mipsisa32r6 | mipsisa32r6el \ + | mipsisa64 | mipsisa64el \ + | mipsisa64r2 | mipsisa64r2el \ + | mipsisa64r6 | mipsisa64r6el \ + | mipsisa64sb1 | mipsisa64sb1el \ + | mipsisa64sr71k | mipsisa64sr71kel \ + | mipsr5900 | mipsr5900el \ + | mipstx39 | mipstx39el \ + | mn10200 | mn10300 \ + | moxie \ + | mt \ + | msp430 \ + | nds32 | nds32le | nds32be \ + | nios | nios2 | nios2eb | nios2el \ + | ns16k | ns32k \ + | open8 | or1k | or1knd | or32 \ + | pdp10 | pj | pjl \ + | powerpc | powerpc64 | powerpc64le | powerpcle \ + | pru \ + | pyramid \ + | riscv32 | riscv64 \ + | rl78 | rx \ + | score \ + | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[234]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ + | sh64 | sh64le \ + | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ + | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ + | spu \ + | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ + | ubicom32 \ + | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ + | visium \ + | wasm32 \ + | x86 | xc16x | xstormy16 | xtensa \ + | z8k | z80) + basic_machine=$basic_machine-unknown + ;; + c54x) + basic_machine=tic54x-unknown + ;; + c55x) + basic_machine=tic55x-unknown + ;; + c6x) + basic_machine=tic6x-unknown + ;; + leon|leon[3-9]) + basic_machine=sparc-$basic_machine + ;; + m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip) + basic_machine=$basic_machine-unknown + os=-none + ;; + m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65) + ;; + ms1) + basic_machine=mt-unknown + ;; + + strongarm | thumb | xscale) + basic_machine=arm-unknown + ;; + xgate) + basic_machine=$basic_machine-unknown + os=-none + ;; + xscaleeb) + basic_machine=armeb-unknown + ;; + + xscaleel) + basic_machine=armel-unknown + ;; + + # We use `pc' rather than `unknown' + # because (1) that's what they normally are, and + # (2) the word "unknown" tends to confuse beginning users. + i*86 | x86_64) + basic_machine=$basic_machine-pc + ;; + # Object if more than one company name word. + *-*-*) + echo Invalid configuration \`"$1"\': machine \`"$basic_machine"\' not recognized 1>&2 + exit 1 + ;; + # Recognize the basic CPU types with company name. + 580-* \ + | a29k-* \ + | aarch64-* | aarch64_be-* \ + | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ + | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ + | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ + | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ + | avr-* | avr32-* \ + | ba-* \ + | be32-* | be64-* \ + | bfin-* | bs2000-* \ + | c[123]* | c30-* | [cjt]90-* | c4x-* \ + | c8051-* | clipper-* | craynv-* | cydra-* \ + | d10v-* | d30v-* | dlx-* \ + | e2k-* | elxsi-* \ + | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ + | h8300-* | h8500-* \ + | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ + | hexagon-* \ + | i*86-* | i860-* | i960-* | ia16-* | ia64-* \ + | ip2k-* | iq2000-* \ + | k1om-* \ + | le32-* | le64-* \ + | lm32-* \ + | m32c-* | m32r-* | m32rle-* \ + | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ + | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ + | microblaze-* | microblazeel-* \ + | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ + | mips16-* \ + | mips64-* | mips64el-* \ + | mips64octeon-* | mips64octeonel-* \ + | mips64orion-* | mips64orionel-* \ + | mips64r5900-* | mips64r5900el-* \ + | mips64vr-* | mips64vrel-* \ + | mips64vr4100-* | mips64vr4100el-* \ + | mips64vr4300-* | mips64vr4300el-* \ + | mips64vr5000-* | mips64vr5000el-* \ + | mips64vr5900-* | mips64vr5900el-* \ + | mipsisa32-* | mipsisa32el-* \ + | mipsisa32r2-* | mipsisa32r2el-* \ + | mipsisa32r6-* | mipsisa32r6el-* \ + | mipsisa64-* | mipsisa64el-* \ + | mipsisa64r2-* | mipsisa64r2el-* \ + | mipsisa64r6-* | mipsisa64r6el-* \ + | mipsisa64sb1-* | mipsisa64sb1el-* \ + | mipsisa64sr71k-* | mipsisa64sr71kel-* \ + | mipsr5900-* | mipsr5900el-* \ + | mipstx39-* | mipstx39el-* \ + | mmix-* \ + | mt-* \ + | msp430-* \ + | nds32-* | nds32le-* | nds32be-* \ + | nios-* | nios2-* | nios2eb-* | nios2el-* \ + | none-* | np1-* | ns16k-* | ns32k-* \ + | open8-* \ + | or1k*-* \ + | orion-* \ + | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ + | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ + | pru-* \ + | pyramid-* \ + | riscv32-* | riscv64-* \ + | rl78-* | romp-* | rs6000-* | rx-* \ + | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ + | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ + | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ + | sparclite-* \ + | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx*-* \ + | tahoe-* \ + | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ + | tile*-* \ + | tron-* \ + | ubicom32-* \ + | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ + | vax-* \ + | visium-* \ + | wasm32-* \ + | we32k-* \ + | x86-* | x86_64-* | xc16x-* | xps100-* \ + | xstormy16-* | xtensa*-* \ + | ymp-* \ + | z8k-* | z80-*) + ;; + # Recognize the basic CPU types without company name, with glob match. + xtensa*) + basic_machine=$basic_machine-unknown + ;; + # Recognize the various machine names and aliases which stand + # for a CPU type and a company and sometimes even an OS. + 386bsd) + basic_machine=i386-pc + os=-bsd + ;; + 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) + basic_machine=m68000-att + ;; + 3b*) + basic_machine=we32k-att + ;; + a29khif) + basic_machine=a29k-amd + os=-udi + ;; + abacus) + basic_machine=abacus-unknown + ;; + adobe68k) + basic_machine=m68010-adobe + os=-scout + ;; + alliant | fx80) + basic_machine=fx80-alliant + ;; + altos | altos3068) + basic_machine=m68k-altos + ;; + am29k) + basic_machine=a29k-none + os=-bsd + ;; + amd64) + basic_machine=x86_64-pc + ;; + amd64-*) + basic_machine=x86_64-`echo "$basic_machine" | sed 's/^[^-]*-//'` + ;; + amdahl) + basic_machine=580-amdahl + os=-sysv + ;; + amiga | amiga-*) + basic_machine=m68k-unknown + ;; + amigaos | amigados) + basic_machine=m68k-unknown + os=-amigaos + ;; + amigaunix | amix) + basic_machine=m68k-unknown + os=-sysv4 + ;; + apollo68) + basic_machine=m68k-apollo + os=-sysv + ;; + apollo68bsd) + basic_machine=m68k-apollo + os=-bsd + ;; + aros) + basic_machine=i386-pc + os=-aros + ;; + asmjs) + basic_machine=asmjs-unknown + ;; + aux) + basic_machine=m68k-apple + os=-aux + ;; + balance) + basic_machine=ns32k-sequent + os=-dynix + ;; + blackfin) + basic_machine=bfin-unknown + os=-linux + ;; + blackfin-*) + basic_machine=bfin-`echo "$basic_machine" | sed 's/^[^-]*-//'` + os=-linux + ;; + bluegene*) + basic_machine=powerpc-ibm + os=-cnk + ;; + c54x-*) + basic_machine=tic54x-`echo "$basic_machine" | sed 's/^[^-]*-//'` + ;; + c55x-*) + basic_machine=tic55x-`echo "$basic_machine" | sed 's/^[^-]*-//'` + ;; + c6x-*) + basic_machine=tic6x-`echo "$basic_machine" | sed 's/^[^-]*-//'` + ;; + c90) + basic_machine=c90-cray + os=-unicos + ;; + cegcc) + basic_machine=arm-unknown + os=-cegcc + ;; + convex-c1) + basic_machine=c1-convex + os=-bsd + ;; + convex-c2) + basic_machine=c2-convex + os=-bsd + ;; + convex-c32) + basic_machine=c32-convex + os=-bsd + ;; + convex-c34) + basic_machine=c34-convex + os=-bsd + ;; + convex-c38) + basic_machine=c38-convex + os=-bsd + ;; + cray | j90) + basic_machine=j90-cray + os=-unicos + ;; + craynv) + basic_machine=craynv-cray + os=-unicosmp + ;; + cr16 | cr16-*) + basic_machine=cr16-unknown + os=-elf + ;; + crds | unos) + basic_machine=m68k-crds + ;; + crisv32 | crisv32-* | etraxfs*) + basic_machine=crisv32-axis + ;; + cris | cris-* | etrax*) + basic_machine=cris-axis + ;; + crx) + basic_machine=crx-unknown + os=-elf + ;; + da30 | da30-*) + basic_machine=m68k-da30 + ;; + decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) + basic_machine=mips-dec + ;; + decsystem10* | dec10*) + basic_machine=pdp10-dec + os=-tops10 + ;; + decsystem20* | dec20*) + basic_machine=pdp10-dec + os=-tops20 + ;; + delta | 3300 | motorola-3300 | motorola-delta \ + | 3300-motorola | delta-motorola) + basic_machine=m68k-motorola + ;; + delta88) + basic_machine=m88k-motorola + os=-sysv3 + ;; + dicos) + basic_machine=i686-pc + os=-dicos + ;; + djgpp) + basic_machine=i586-pc + os=-msdosdjgpp + ;; + dpx20 | dpx20-*) + basic_machine=rs6000-bull + os=-bosx + ;; + dpx2*) + basic_machine=m68k-bull + os=-sysv3 + ;; + e500v[12]) + basic_machine=powerpc-unknown + os=$os"spe" + ;; + e500v[12]-*) + basic_machine=powerpc-`echo "$basic_machine" | sed 's/^[^-]*-//'` + os=$os"spe" + ;; + ebmon29k) + basic_machine=a29k-amd + os=-ebmon + ;; + elxsi) + basic_machine=elxsi-elxsi + os=-bsd + ;; + encore | umax | mmax) + basic_machine=ns32k-encore + ;; + es1800 | OSE68k | ose68k | ose | OSE) + basic_machine=m68k-ericsson + os=-ose + ;; + fx2800) + basic_machine=i860-alliant + ;; + genix) + basic_machine=ns32k-ns + ;; + gmicro) + basic_machine=tron-gmicro + os=-sysv + ;; + go32) + basic_machine=i386-pc + os=-go32 + ;; + h3050r* | hiux*) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + h8300hms) + basic_machine=h8300-hitachi + os=-hms + ;; + h8300xray) + basic_machine=h8300-hitachi + os=-xray + ;; + h8500hms) + basic_machine=h8500-hitachi + os=-hms + ;; + harris) + basic_machine=m88k-harris + os=-sysv3 + ;; + hp300-*) + basic_machine=m68k-hp + ;; + hp300bsd) + basic_machine=m68k-hp + os=-bsd + ;; + hp300hpux) + basic_machine=m68k-hp + os=-hpux + ;; + hp3k9[0-9][0-9] | hp9[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k2[0-9][0-9] | hp9k31[0-9]) + basic_machine=m68000-hp + ;; + hp9k3[2-9][0-9]) + basic_machine=m68k-hp + ;; + hp9k6[0-9][0-9] | hp6[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k7[0-79][0-9] | hp7[0-79][0-9]) + basic_machine=hppa1.1-hp + ;; + hp9k78[0-9] | hp78[0-9]) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][13679] | hp8[0-9][13679]) + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][0-9] | hp8[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hppaosf) + basic_machine=hppa1.1-hp + os=-osf + ;; + hppro) + basic_machine=hppa1.1-hp + os=-proelf + ;; + i370-ibm* | ibm*) + basic_machine=i370-ibm + ;; + i*86v32) + basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'` + os=-sysv32 + ;; + i*86v4*) + basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'` + os=-sysv4 + ;; + i*86v) + basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'` + os=-sysv + ;; + i*86sol2) + basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'` + os=-solaris2 + ;; + i386mach) + basic_machine=i386-mach + os=-mach + ;; + vsta) + basic_machine=i386-unknown + os=-vsta + ;; + iris | iris4d) + basic_machine=mips-sgi + case $os in + -irix*) + ;; + *) + os=-irix4 + ;; + esac + ;; + isi68 | isi) + basic_machine=m68k-isi + os=-sysv + ;; + leon-*|leon[3-9]-*) + basic_machine=sparc-`echo "$basic_machine" | sed 's/-.*//'` + ;; + m68knommu) + basic_machine=m68k-unknown + os=-linux + ;; + m68knommu-*) + basic_machine=m68k-`echo "$basic_machine" | sed 's/^[^-]*-//'` + os=-linux + ;; + magnum | m3230) + basic_machine=mips-mips + os=-sysv + ;; + merlin) + basic_machine=ns32k-utek + os=-sysv + ;; + microblaze*) + basic_machine=microblaze-xilinx + ;; + mingw64) + basic_machine=x86_64-pc + os=-mingw64 + ;; + mingw32) + basic_machine=i686-pc + os=-mingw32 + ;; + mingw32ce) + basic_machine=arm-unknown + os=-mingw32ce + ;; + miniframe) + basic_machine=m68000-convergent + ;; + *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; + mips3*-*) + basic_machine=`echo "$basic_machine" | sed -e 's/mips3/mips64/'` + ;; + mips3*) + basic_machine=`echo "$basic_machine" | sed -e 's/mips3/mips64/'`-unknown + ;; + monitor) + basic_machine=m68k-rom68k + os=-coff + ;; + morphos) + basic_machine=powerpc-unknown + os=-morphos + ;; + moxiebox) + basic_machine=moxie-unknown + os=-moxiebox + ;; + msdos) + basic_machine=i386-pc + os=-msdos + ;; + ms1-*) + basic_machine=`echo "$basic_machine" | sed -e 's/ms1-/mt-/'` + ;; + msys) + basic_machine=i686-pc + os=-msys + ;; + mvs) + basic_machine=i370-ibm + os=-mvs + ;; + nacl) + basic_machine=le32-unknown + os=-nacl + ;; + ncr3000) + basic_machine=i486-ncr + os=-sysv4 + ;; + netbsd386) + basic_machine=i386-unknown + os=-netbsd + ;; + netwinder) + basic_machine=armv4l-rebel + os=-linux + ;; + news | news700 | news800 | news900) + basic_machine=m68k-sony + os=-newsos + ;; + news1000) + basic_machine=m68030-sony + os=-newsos + ;; + news-3600 | risc-news) + basic_machine=mips-sony + os=-newsos + ;; + necv70) + basic_machine=v70-nec + os=-sysv + ;; + next | m*-next) + basic_machine=m68k-next + case $os in + -nextstep* ) + ;; + -ns2*) + os=-nextstep2 + ;; + *) + os=-nextstep3 + ;; + esac + ;; + nh3000) + basic_machine=m68k-harris + os=-cxux + ;; + nh[45]000) + basic_machine=m88k-harris + os=-cxux + ;; + nindy960) + basic_machine=i960-intel + os=-nindy + ;; + mon960) + basic_machine=i960-intel + os=-mon960 + ;; + nonstopux) + basic_machine=mips-compaq + os=-nonstopux + ;; + np1) + basic_machine=np1-gould + ;; + neo-tandem) + basic_machine=neo-tandem + ;; + nse-tandem) + basic_machine=nse-tandem + ;; + nsr-tandem) + basic_machine=nsr-tandem + ;; + nsv-tandem) + basic_machine=nsv-tandem + ;; + nsx-tandem) + basic_machine=nsx-tandem + ;; + op50n-* | op60c-*) + basic_machine=hppa1.1-oki + os=-proelf + ;; + openrisc | openrisc-*) + basic_machine=or32-unknown + ;; + os400) + basic_machine=powerpc-ibm + os=-os400 + ;; + OSE68000 | ose68000) + basic_machine=m68000-ericsson + os=-ose + ;; + os68k) + basic_machine=m68k-none + os=-os68k + ;; + pa-hitachi) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + paragon) + basic_machine=i860-intel + os=-osf + ;; + parisc) + basic_machine=hppa-unknown + os=-linux + ;; + parisc-*) + basic_machine=hppa-`echo "$basic_machine" | sed 's/^[^-]*-//'` + os=-linux + ;; + pbd) + basic_machine=sparc-tti + ;; + pbb) + basic_machine=m68k-tti + ;; + pc532 | pc532-*) + basic_machine=ns32k-pc532 + ;; + pc98) + basic_machine=i386-pc + ;; + pc98-*) + basic_machine=i386-`echo "$basic_machine" | sed 's/^[^-]*-//'` + ;; + pentium | p5 | k5 | k6 | nexgen | viac3) + basic_machine=i586-pc + ;; + pentiumpro | p6 | 6x86 | athlon | athlon_*) + basic_machine=i686-pc + ;; + pentiumii | pentium2 | pentiumiii | pentium3) + basic_machine=i686-pc + ;; + pentium4) + basic_machine=i786-pc + ;; + pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) + basic_machine=i586-`echo "$basic_machine" | sed 's/^[^-]*-//'` + ;; + pentiumpro-* | p6-* | 6x86-* | athlon-*) + basic_machine=i686-`echo "$basic_machine" | sed 's/^[^-]*-//'` + ;; + pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) + basic_machine=i686-`echo "$basic_machine" | sed 's/^[^-]*-//'` + ;; + pentium4-*) + basic_machine=i786-`echo "$basic_machine" | sed 's/^[^-]*-//'` + ;; + pn) + basic_machine=pn-gould + ;; + power) basic_machine=power-ibm + ;; + ppc | ppcbe) basic_machine=powerpc-unknown + ;; + ppc-* | ppcbe-*) + basic_machine=powerpc-`echo "$basic_machine" | sed 's/^[^-]*-//'` + ;; + ppcle | powerpclittle) + basic_machine=powerpcle-unknown + ;; + ppcle-* | powerpclittle-*) + basic_machine=powerpcle-`echo "$basic_machine" | sed 's/^[^-]*-//'` + ;; + ppc64) basic_machine=powerpc64-unknown + ;; + ppc64-*) basic_machine=powerpc64-`echo "$basic_machine" | sed 's/^[^-]*-//'` + ;; + ppc64le | powerpc64little) + basic_machine=powerpc64le-unknown + ;; + ppc64le-* | powerpc64little-*) + basic_machine=powerpc64le-`echo "$basic_machine" | sed 's/^[^-]*-//'` + ;; + ps2) + basic_machine=i386-ibm + ;; + pw32) + basic_machine=i586-unknown + os=-pw32 + ;; + rdos | rdos64) + basic_machine=x86_64-pc + os=-rdos + ;; + rdos32) + basic_machine=i386-pc + os=-rdos + ;; + rom68k) + basic_machine=m68k-rom68k + os=-coff + ;; + rm[46]00) + basic_machine=mips-siemens + ;; + rtpc | rtpc-*) + basic_machine=romp-ibm + ;; + s390 | s390-*) + basic_machine=s390-ibm + ;; + s390x | s390x-*) + basic_machine=s390x-ibm + ;; + sa29200) + basic_machine=a29k-amd + os=-udi + ;; + sb1) + basic_machine=mipsisa64sb1-unknown + ;; + sb1el) + basic_machine=mipsisa64sb1el-unknown + ;; + sde) + basic_machine=mipsisa32-sde + os=-elf + ;; + sei) + basic_machine=mips-sei + os=-seiux + ;; + sequent) + basic_machine=i386-sequent + ;; + sh5el) + basic_machine=sh5le-unknown + ;; + simso-wrs) + basic_machine=sparclite-wrs + os=-vxworks + ;; + sps7) + basic_machine=m68k-bull + os=-sysv2 + ;; + spur) + basic_machine=spur-unknown + ;; + st2000) + basic_machine=m68k-tandem + ;; + stratus) + basic_machine=i860-stratus + os=-sysv4 + ;; + strongarm-* | thumb-*) + basic_machine=arm-`echo "$basic_machine" | sed 's/^[^-]*-//'` + ;; + sun2) + basic_machine=m68000-sun + ;; + sun2os3) + basic_machine=m68000-sun + os=-sunos3 + ;; + sun2os4) + basic_machine=m68000-sun + os=-sunos4 + ;; + sun3os3) + basic_machine=m68k-sun + os=-sunos3 + ;; + sun3os4) + basic_machine=m68k-sun + os=-sunos4 + ;; + sun4os3) + basic_machine=sparc-sun + os=-sunos3 + ;; + sun4os4) + basic_machine=sparc-sun + os=-sunos4 + ;; + sun4sol2) + basic_machine=sparc-sun + os=-solaris2 + ;; + sun3 | sun3-*) + basic_machine=m68k-sun + ;; + sun4) + basic_machine=sparc-sun + ;; + sun386 | sun386i | roadrunner) + basic_machine=i386-sun + ;; + sv1) + basic_machine=sv1-cray + os=-unicos + ;; + symmetry) + basic_machine=i386-sequent + os=-dynix + ;; + t3e) + basic_machine=alphaev5-cray + os=-unicos + ;; + t90) + basic_machine=t90-cray + os=-unicos + ;; + tile*) + basic_machine=$basic_machine-unknown + os=-linux-gnu + ;; + tx39) + basic_machine=mipstx39-unknown + ;; + tx39el) + basic_machine=mipstx39el-unknown + ;; + toad1) + basic_machine=pdp10-xkl + os=-tops20 + ;; + tower | tower-32) + basic_machine=m68k-ncr + ;; + tpf) + basic_machine=s390x-ibm + os=-tpf + ;; + udi29k) + basic_machine=a29k-amd + os=-udi + ;; + ultra3) + basic_machine=a29k-nyu + os=-sym1 + ;; + v810 | necv810) + basic_machine=v810-nec + os=-none + ;; + vaxv) + basic_machine=vax-dec + os=-sysv + ;; + vms) + basic_machine=vax-dec + os=-vms + ;; + vpp*|vx|vx-*) + basic_machine=f301-fujitsu + ;; + vxworks960) + basic_machine=i960-wrs + os=-vxworks + ;; + vxworks68) + basic_machine=m68k-wrs + os=-vxworks + ;; + vxworks29k) + basic_machine=a29k-wrs + os=-vxworks + ;; + w65*) + basic_machine=w65-wdc + os=-none + ;; + w89k-*) + basic_machine=hppa1.1-winbond + os=-proelf + ;; + x64) + basic_machine=x86_64-pc + ;; + xbox) + basic_machine=i686-pc + os=-mingw32 + ;; + xps | xps100) + basic_machine=xps100-honeywell + ;; + xscale-* | xscalee[bl]-*) + basic_machine=`echo "$basic_machine" | sed 's/^xscale/arm/'` + ;; + ymp) + basic_machine=ymp-cray + os=-unicos + ;; + none) + basic_machine=none-none + os=-none + ;; + +# Here we handle the default manufacturer of certain CPU types. It is in +# some cases the only manufacturer, in others, it is the most popular. + w89k) + basic_machine=hppa1.1-winbond + ;; + op50n) + basic_machine=hppa1.1-oki + ;; + op60c) + basic_machine=hppa1.1-oki + ;; + romp) + basic_machine=romp-ibm + ;; + mmix) + basic_machine=mmix-knuth + ;; + rs6000) + basic_machine=rs6000-ibm + ;; + vax) + basic_machine=vax-dec + ;; + pdp11) + basic_machine=pdp11-dec + ;; + we32k) + basic_machine=we32k-att + ;; + sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) + basic_machine=sh-unknown + ;; + cydra) + basic_machine=cydra-cydrome + ;; + orion) + basic_machine=orion-highlevel + ;; + orion105) + basic_machine=clipper-highlevel + ;; + mac | mpw | mac-mpw) + basic_machine=m68k-apple + ;; + pmac | pmac-mpw) + basic_machine=powerpc-apple + ;; + *-unknown) + # Make sure to match an already-canonicalized machine name. + ;; + *) + echo Invalid configuration \`"$1"\': machine \`"$basic_machine"\' not recognized 1>&2 + exit 1 + ;; +esac + +# Here we canonicalize certain aliases for manufacturers. +case $basic_machine in + *-digital*) + basic_machine=`echo "$basic_machine" | sed 's/digital.*/dec/'` + ;; + *-commodore*) + basic_machine=`echo "$basic_machine" | sed 's/commodore.*/cbm/'` + ;; + *) + ;; +esac + +# Decode manufacturer-specific aliases for certain operating systems. + +if [ x"$os" != x"" ] +then +case $os in + # First match some system type aliases that might get confused + # with valid system types. + # -solaris* is a basic system type, with this one exception. + -auroraux) + os=-auroraux + ;; + -solaris1 | -solaris1.*) + os=`echo $os | sed -e 's|solaris1|sunos4|'` + ;; + -solaris) + os=-solaris2 + ;; + -unixware*) + os=-sysv4.2uw + ;; + -gnu/linux*) + os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` + ;; + # es1800 is here to avoid being matched by es* (a different OS) + -es1800*) + os=-ose + ;; + # Now accept the basic system types. + # The portable systems comes first. + # Each alternative MUST end in a * to match a version number. + # -sysv* is not here because it comes later, after sysvr4. + -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ + | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ + | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ + | -sym* | -kopensolaris* | -plan9* \ + | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ + | -aos* | -aros* | -cloudabi* | -sortix* \ + | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ + | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ + | -hiux* | -knetbsd* | -mirbsd* | -netbsd* \ + | -bitrig* | -openbsd* | -solidbsd* | -libertybsd* \ + | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ + | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ + | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ + | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ + | -chorusos* | -chorusrdb* | -cegcc* | -glidix* \ + | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ + | -midipix* | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ + | -linux-newlib* | -linux-musl* | -linux-uclibc* \ + | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \ + | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* \ + | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ + | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ + | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ + | -morphos* | -superux* | -rtmk* | -windiss* \ + | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ + | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* \ + | -onefs* | -tirtos* | -phoenix* | -fuchsia* | -redox* | -bme* \ + | -midnightbsd*) + # Remember, each alternative MUST END IN *, to match a version number. + ;; + -qnx*) + case $basic_machine in + x86-* | i*86-*) + ;; + *) + os=-nto$os + ;; + esac + ;; + -nto-qnx*) + ;; + -nto*) + os=`echo $os | sed -e 's|nto|nto-qnx|'` + ;; + -sim | -xray | -os68k* | -v88r* \ + | -windows* | -osx | -abug | -netware* | -os9* \ + | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) + ;; + -mac*) + os=`echo "$os" | sed -e 's|mac|macos|'` + ;; + -linux-dietlibc) + os=-linux-dietlibc + ;; + -linux*) + os=`echo $os | sed -e 's|linux|linux-gnu|'` + ;; + -sunos5*) + os=`echo "$os" | sed -e 's|sunos5|solaris2|'` + ;; + -sunos6*) + os=`echo "$os" | sed -e 's|sunos6|solaris3|'` + ;; + -opened*) + os=-openedition + ;; + -os400*) + os=-os400 + ;; + -wince*) + os=-wince + ;; + -utek*) + os=-bsd + ;; + -dynix*) + os=-bsd + ;; + -acis*) + os=-aos + ;; + -atheos*) + os=-atheos + ;; + -syllable*) + os=-syllable + ;; + -386bsd) + os=-bsd + ;; + -ctix* | -uts*) + os=-sysv + ;; + -nova*) + os=-rtmk-nova + ;; + -ns2) + os=-nextstep2 + ;; + -nsk*) + os=-nsk + ;; + # Preserve the version number of sinix5. + -sinix5.*) + os=`echo $os | sed -e 's|sinix|sysv|'` + ;; + -sinix*) + os=-sysv4 + ;; + -tpf*) + os=-tpf + ;; + -triton*) + os=-sysv3 + ;; + -oss*) + os=-sysv3 + ;; + -svr4*) + os=-sysv4 + ;; + -svr3) + os=-sysv3 + ;; + -sysvr4) + os=-sysv4 + ;; + # This must come after -sysvr4. + -sysv*) + ;; + -ose*) + os=-ose + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + os=-mint + ;; + -zvmoe) + os=-zvmoe + ;; + -dicos*) + os=-dicos + ;; + -pikeos*) + # Until real need of OS specific support for + # particular features comes up, bare metal + # configurations are quite functional. + case $basic_machine in + arm*) + os=-eabi + ;; + *) + os=-elf + ;; + esac + ;; + -nacl*) + ;; + -ios) + ;; + -none) + ;; + *) + # Get rid of the `-' at the beginning of $os. + os=`echo $os | sed 's/[^-]*-//'` + echo Invalid configuration \`"$1"\': system \`"$os"\' not recognized 1>&2 + exit 1 + ;; +esac +else + +# Here we handle the default operating systems that come with various machines. +# The value should be what the vendor currently ships out the door with their +# machine or put another way, the most popular os provided with the machine. + +# Note that if you're going to try to match "-MANUFACTURER" here (say, +# "-sun"), then you have to tell the case statement up towards the top +# that MANUFACTURER isn't an operating system. Otherwise, code above +# will signal an error saying that MANUFACTURER isn't an operating +# system, and we'll never get to this point. + +case $basic_machine in + score-*) + os=-elf + ;; + spu-*) + os=-elf + ;; + *-acorn) + os=-riscix1.2 + ;; + arm*-rebel) + os=-linux + ;; + arm*-semi) + os=-aout + ;; + c4x-* | tic4x-*) + os=-coff + ;; + c8051-*) + os=-elf + ;; + hexagon-*) + os=-elf + ;; + tic54x-*) + os=-coff + ;; + tic55x-*) + os=-coff + ;; + tic6x-*) + os=-coff + ;; + # This must come before the *-dec entry. + pdp10-*) + os=-tops20 + ;; + pdp11-*) + os=-none + ;; + *-dec | vax-*) + os=-ultrix4.2 + ;; + m68*-apollo) + os=-domain + ;; + i386-sun) + os=-sunos4.0.2 + ;; + m68000-sun) + os=-sunos3 + ;; + m68*-cisco) + os=-aout + ;; + mep-*) + os=-elf + ;; + mips*-cisco) + os=-elf + ;; + mips*-*) + os=-elf + ;; + or32-*) + os=-coff + ;; + *-tti) # must be before sparc entry or we get the wrong os. + os=-sysv3 + ;; + sparc-* | *-sun) + os=-sunos4.1.1 + ;; + pru-*) + os=-elf + ;; + *-be) + os=-beos + ;; + *-ibm) + os=-aix + ;; + *-knuth) + os=-mmixware + ;; + *-wec) + os=-proelf + ;; + *-winbond) + os=-proelf + ;; + *-oki) + os=-proelf + ;; + *-hp) + os=-hpux + ;; + *-hitachi) + os=-hiux + ;; + i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) + os=-sysv + ;; + *-cbm) + os=-amigaos + ;; + *-dg) + os=-dgux + ;; + *-dolphin) + os=-sysv3 + ;; + m68k-ccur) + os=-rtu + ;; + m88k-omron*) + os=-luna + ;; + *-next) + os=-nextstep + ;; + *-sequent) + os=-ptx + ;; + *-crds) + os=-unos + ;; + *-ns) + os=-genix + ;; + i370-*) + os=-mvs + ;; + *-gould) + os=-sysv + ;; + *-highlevel) + os=-bsd + ;; + *-encore) + os=-bsd + ;; + *-sgi) + os=-irix + ;; + *-siemens) + os=-sysv4 + ;; + *-masscomp) + os=-rtu + ;; + f30[01]-fujitsu | f700-fujitsu) + os=-uxpv + ;; + *-rom68k) + os=-coff + ;; + *-*bug) + os=-coff + ;; + *-apple) + os=-macos + ;; + *-atari*) + os=-mint + ;; + *) + os=-none + ;; +esac +fi + +# Here we handle the case where we know the os, and the CPU type, but not the +# manufacturer. We pick the logical manufacturer. +vendor=unknown +case $basic_machine in + *-unknown) + case $os in + -riscix*) + vendor=acorn + ;; + -sunos*) + vendor=sun + ;; + -cnk*|-aix*) + vendor=ibm + ;; + -beos*) + vendor=be + ;; + -hpux*) + vendor=hp + ;; + -mpeix*) + vendor=hp + ;; + -hiux*) + vendor=hitachi + ;; + -unos*) + vendor=crds + ;; + -dgux*) + vendor=dg + ;; + -luna*) + vendor=omron + ;; + -genix*) + vendor=ns + ;; + -mvs* | -opened*) + vendor=ibm + ;; + -os400*) + vendor=ibm + ;; + -ptx*) + vendor=sequent + ;; + -tpf*) + vendor=ibm + ;; + -vxsim* | -vxworks* | -windiss*) + vendor=wrs + ;; + -aux*) + vendor=apple + ;; + -hms*) + vendor=hitachi + ;; + -mpw* | -macos*) + vendor=apple + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + vendor=atari + ;; + -vos*) + vendor=stratus + ;; + esac + basic_machine=`echo "$basic_machine" | sed "s/unknown/$vendor/"` + ;; +esac + +echo "$basic_machine$os" +exit + +# Local variables: +# eval: (add-hook 'write-file-functions 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/configure b/configure new file mode 100755 index 0000000..3361803 --- /dev/null +++ b/configure @@ -0,0 +1,22549 @@ +#! /bin/sh +# Guess values for system-dependent variables and create Makefiles. +# Generated by GNU Autoconf 2.69 for cryptsetup 2.2.2. +# +# +# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. +# +# +# This configure script is free software; the Free Software Foundation +# gives unlimited permission to copy, distribute and modify it. +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +# Use a proper internal environment variable to ensure we don't fall + # into an infinite loop, continuously re-executing ourselves. + if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then + _as_can_reexec=no; export _as_can_reexec; + # We cannot yet assume a decent shell, so we have to provide a +# neutralization value for shells without unset; and this also +# works around shells that cannot unset nonexistent variables. +# Preserve -v and -x to the replacement shell. +BASH_ENV=/dev/null +ENV=/dev/null +(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV +case $- in # (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; +esac +exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} +# Admittedly, this is quite paranoid, since all the known shells bail +# out after a failed `exec'. +$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 +as_fn_exit 255 + fi + # We don't want this to propagate to other subprocesses. + { _as_can_reexec=; unset _as_can_reexec;} +if test "x$CONFIG_SHELL" = x; then + as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi +" + as_required="as_fn_return () { (exit \$1); } +as_fn_success () { as_fn_return 0; } +as_fn_failure () { as_fn_return 1; } +as_fn_ret_success () { return 0; } +as_fn_ret_failure () { return 1; } + +exitcode=0 +as_fn_success || { exitcode=1; echo as_fn_success failed.; } +as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } +as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } +as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } +if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : + +else + exitcode=1; echo positional parameters were not saved. +fi +test x\$exitcode = x0 || exit 1 +test -x / || exit 1" + as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO + as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO + eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && + test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 +test \$(( 1 + 1 )) = 2 || exit 1 + + test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || ( + ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' + ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO + ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO + PATH=/empty FPATH=/empty; export PATH FPATH + test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\ + || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1" + if (eval "$as_required") 2>/dev/null; then : + as_have_required=yes +else + as_have_required=no +fi + if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : + +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_found=false +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + as_found=: + case $as_dir in #( + /*) + for as_base in sh bash ksh sh5; do + # Try only shells that exist, to save several forks. + as_shell=$as_dir/$as_base + if { test -f "$as_shell" || test -f "$as_shell.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : + CONFIG_SHELL=$as_shell as_have_required=yes + if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : + break 2 +fi +fi + done;; + esac + as_found=false +done +$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : + CONFIG_SHELL=$SHELL as_have_required=yes +fi; } +IFS=$as_save_IFS + + + if test "x$CONFIG_SHELL" != x; then : + export CONFIG_SHELL + # We cannot yet assume a decent shell, so we have to provide a +# neutralization value for shells without unset; and this also +# works around shells that cannot unset nonexistent variables. +# Preserve -v and -x to the replacement shell. +BASH_ENV=/dev/null +ENV=/dev/null +(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV +case $- in # (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; +esac +exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} +# Admittedly, this is quite paranoid, since all the known shells bail +# out after a failed `exec'. +$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 +exit 255 +fi + + if test x$as_have_required = xno; then : + $as_echo "$0: This script requires a shell more modern than all" + $as_echo "$0: the shells that I found on your system." + if test x${ZSH_VERSION+set} = xset ; then + $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" + $as_echo "$0: be upgraded to zsh 4.3.4 or later." + else + $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, +$0: including any error possibly output before this +$0: message. Then install a modern shell, or manually run +$0: the script under such a shell if you do have one." + fi + exit 1 +fi +fi +fi +SHELL=${CONFIG_SHELL-/bin/sh} +export SHELL +# Unset more variables known to interfere with behavior of common tools. +CLICOLOR_FORCE= GREP_OPTIONS= +unset CLICOLOR_FORCE GREP_OPTIONS + +## --------------------- ## +## M4sh Shell Functions. ## +## --------------------- ## +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p + +# as_fn_executable_p FILE +# ----------------------- +# Test if FILE is an executable regular file. +as_fn_executable_p () +{ + test -f "$1" && test -x "$1" +} # as_fn_executable_p +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + + + as_lineno_1=$LINENO as_lineno_1a=$LINENO + as_lineno_2=$LINENO as_lineno_2a=$LINENO + eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && + test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { + # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | + sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno + N + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop + s/-\n.*// + ' >$as_me.lineno && + chmod +x "$as_me.lineno" || + { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } + + # If we had to re-execute with $CONFIG_SHELL, we're ensured to have + # already done that, so ensure we don't try to do so again and fall + # in an infinite loop. This has already happened in practice. + _as_can_reexec=no; export _as_can_reexec + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensitive to this). + . "./$as_me.lineno" + # Exit status is that of the last command. + exit +} + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -pR'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -pR' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -pR' + fi +else + as_ln_s='cp -pR' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +as_test_x='test -x' +as_executable_p=as_fn_executable_p + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + +SHELL=${CONFIG_SHELL-/bin/sh} + + +test -n "$DJDIR" || exec 7<&0 &1 + +# Name of the host. +# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, +# so uname gets run too. +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` + +# +# Initializations. +# +ac_default_prefix=/usr/local +ac_clean_files= +ac_config_libobj_dir=. +LIBOBJS= +cross_compiling=no +subdirs= +MFLAGS= +MAKEFLAGS= + +# Identity of this package. +PACKAGE_NAME='cryptsetup' +PACKAGE_TARNAME='cryptsetup' +PACKAGE_VERSION='2.2.2' +PACKAGE_STRING='cryptsetup 2.2.2' +PACKAGE_BUGREPORT='' +PACKAGE_URL='' + +ac_unique_file="src/cryptsetup.c" +ac_default_prefix=/usr +# Factoring default headers for most tests. +ac_includes_default="\ +#include +#ifdef HAVE_SYS_TYPES_H +# include +#endif +#ifdef HAVE_SYS_STAT_H +# include +#endif +#ifdef STDC_HEADERS +# include +# include +#else +# ifdef HAVE_STDLIB_H +# include +# endif +#endif +#ifdef HAVE_STRING_H +# if !defined STDC_HEADERS && defined HAVE_MEMORY_H +# include +# endif +# include +#endif +#ifdef HAVE_STRINGS_H +# include +#endif +#ifdef HAVE_INTTYPES_H +# include +#endif +#ifdef HAVE_STDINT_H +# include +#endif +#ifdef HAVE_UNISTD_H +# include +#endif" + +gt_needs= +ac_subst_vars='am__EXEEXT_FALSE +am__EXEEXT_TRUE +LTLIBOBJS +LIBOBJS +DEFAULT_LUKS2_LOCK_DIR_PERMS +DEFAULT_LUKS2_LOCK_PATH +CRYPTSETUP_TMPFILE_FALSE +CRYPTSETUP_TMPFILE_TRUE +DEFAULT_TMPFILESDIR +LIBCRYPTSETUP_VERSION_INFO +LIBCRYPTSETUP_VERSION +CRYPTO_STATIC_LIBS +CRYPTO_LIBS +CRYPTO_CFLAGS +PASSWDQC_LIBS +PWQUALITY_STATIC_LIBS +systemd_tmpfilesdir +DEVMAPPER_STATIC_LIBS +DEVMAPPER_STATIC_CFLAGS +HAVE_BLKID_STEP_BACK_FALSE +HAVE_BLKID_STEP_BACK_TRUE +HAVE_BLKID_WIPE_FALSE +HAVE_BLKID_WIPE_TRUE +HAVE_BLKID_FALSE +HAVE_BLKID_TRUE +BLKID_LIBS +BLKID_CFLAGS +CRYPTO_INTERNAL_SSE_ARGON2_FALSE +CRYPTO_INTERNAL_SSE_ARGON2_TRUE +CRYPTO_INTERNAL_ARGON2_FALSE +CRYPTO_INTERNAL_ARGON2_TRUE +LIBARGON2_LIBS +LIBARGON2_CFLAGS +CRYPTO_INTERNAL_PBKDF2_FALSE +CRYPTO_INTERNAL_PBKDF2_TRUE +CRYPTO_BACKEND_NETTLE_FALSE +CRYPTO_BACKEND_NETTLE_TRUE +CRYPTO_BACKEND_KERNEL_FALSE +CRYPTO_BACKEND_KERNEL_TRUE +CRYPTO_BACKEND_NSS_FALSE +CRYPTO_BACKEND_NSS_TRUE +CRYPTO_BACKEND_OPENSSL_FALSE +CRYPTO_BACKEND_OPENSSL_TRUE +CRYPTO_BACKEND_GCRYPT_FALSE +CRYPTO_BACKEND_GCRYPT_TRUE +NSS_LIBS +NSS_CFLAGS +OPENSSL_STATIC_LIBS +OPENSSL_STATIC_CFLAGS +OPENSSL_LIBS +OPENSSL_CFLAGS +LIBGCRYPT_LIBS +LIBGCRYPT_CFLAGS +LIBGCRYPT_CONFIG +JSON_C_LIBS +JSON_C_CFLAGS +DEVMAPPER_LIBS +DEVMAPPER_CFLAGS +INTEGRITYSETUP_FALSE +INTEGRITYSETUP_TRUE +REENCRYPT_FALSE +REENCRYPT_TRUE +VERITYSETUP_FALSE +VERITYSETUP_TRUE +CRYPTSETUP_FALSE +CRYPTSETUP_TRUE +STATIC_TOOLS_FALSE +STATIC_TOOLS_TRUE +PWQUALITY_LIBS +PWQUALITY_CFLAGS +POPT_LIBS +POSUB +LTLIBINTL +LIBINTL +INTLLIBS +LTLIBICONV +LIBICONV +INTL_MACOSX_LIBS +XGETTEXT_EXTRA_OPTIONS +MSGMERGE +XGETTEXT_015 +XGETTEXT +GMSGFMT_015 +MSGFMT_015 +GMSGFMT +MSGFMT +GETTEXT_MACRO_VERSION +USE_NLS +UUID_LIBS +KERNEL_KEYRING_FALSE +KERNEL_KEYRING_TRUE +PKG_CONFIG_LIBDIR +PKG_CONFIG_PATH +PKG_CONFIG +LT_SYS_LIBRARY_PATH +OTOOL64 +OTOOL +LIPO +NMEDIT +DSYMUTIL +MANIFEST_TOOL +RANLIB +ac_ct_AR +AR +DLLTOOL +OBJDUMP +LN_S +NM +ac_ct_DUMPBIN +DUMPBIN +LD +FGREP +SED +LIBTOOL +EGREP +GREP +CPP +am__fastdepCC_FALSE +am__fastdepCC_TRUE +CCDEPMODE +am__nodep +AMDEPBACKSLASH +AMDEP_FALSE +AMDEP_TRUE +am__include +DEPDIR +OBJEXT +EXEEXT +ac_ct_CC +CPPFLAGS +LDFLAGS +CFLAGS +CC +host_os +host_vendor +host_cpu +host +build_os +build_vendor +build_cpu +build +am__untar +am__tar +AMTAR +am__leading_dot +SET_MAKE +AWK +mkdir_p +MKDIR_P +INSTALL_STRIP_PROGRAM +STRIP +install_sh +MAKEINFO +AUTOHEADER +AUTOMAKE +AUTOCONF +ACLOCAL +VERSION +PACKAGE +CYGPATH_W +am__isrc +INSTALL_DATA +INSTALL_SCRIPT +INSTALL_PROGRAM +AM_BACKSLASH +AM_DEFAULT_VERBOSITY +AM_DEFAULT_V +AM_V +target_alias +host_alias +build_alias +LIBS +ECHO_T +ECHO_N +ECHO_C +DEFS +mandir +localedir +libdir +psdir +pdfdir +dvidir +htmldir +infodir +docdir +oldincludedir +includedir +runstatedir +localstatedir +sharedstatedir +sysconfdir +datadir +datarootdir +libexecdir +sbindir +bindir +program_transform_name +prefix +exec_prefix +PACKAGE_URL +PACKAGE_BUGREPORT +PACKAGE_STRING +PACKAGE_VERSION +PACKAGE_TARNAME +PACKAGE_NAME +PATH_SEPARATOR +SHELL +am__quote' +ac_subst_files='' +ac_user_opts=' +enable_option_checking +enable_silent_rules +enable_dependency_tracking +enable_static +enable_shared +with_pic +enable_fast_install +with_aix_soname +with_gnu_ld +with_sysroot +enable_libtool_lock +enable_keyring +enable_largefile +enable_nls +enable_rpath +with_libiconv_prefix +with_libintl_prefix +enable_fips +enable_pwquality +enable_passwdqc +enable_static_cryptsetup +enable_cryptsetup +enable_veritysetup +enable_cryptsetup_reencrypt +enable_integritysetup +enable_selinux +enable_udev +with_crypto_backend +enable_kernel_crypto +enable_gcrypt_pbkdf2 +with_libgcrypt_prefix +enable_internal_argon2 +enable_libargon2 +enable_internal_sse_argon2 +enable_blkid +enable_dev_random +with_plain_hash +with_plain_cipher +with_plain_mode +with_plain_keybits +with_luks1_hash +with_luks1_cipher +with_luks1_mode +with_luks1_keybits +enable_luks_adjust_xts_keysize +with_luks2_pbkdf +with_luks1_iter_time +with_luks2_iter_time +with_luks2_memory_kb +with_luks2_parallel_threads +with_luks2_keyslot_cipher +with_luks2_keyslot_keybits +with_loopaes_cipher +with_loopaes_keybits +with_keyfile_size_maxkb +with_passphrase_size_max +with_verity_hash +with_verity_data_block +with_verity_hash_block +with_verity_salt_size +with_verity_fec_roots +with_tmpfilesdir +with_luks2_lock_path +with_luks2_lock_dir_perms +with_default_luks_format +' + ac_precious_vars='build_alias +host_alias +target_alias +CC +CFLAGS +LDFLAGS +LIBS +CPPFLAGS +CPP +LT_SYS_LIBRARY_PATH +PKG_CONFIG +PKG_CONFIG_PATH +PKG_CONFIG_LIBDIR +PWQUALITY_CFLAGS +PWQUALITY_LIBS +DEVMAPPER_CFLAGS +DEVMAPPER_LIBS +JSON_C_CFLAGS +JSON_C_LIBS +OPENSSL_CFLAGS +OPENSSL_LIBS +OPENSSL_STATIC_CFLAGS +OPENSSL_STATIC_LIBS +NSS_CFLAGS +NSS_LIBS +LIBARGON2_CFLAGS +LIBARGON2_LIBS +BLKID_CFLAGS +BLKID_LIBS +DEVMAPPER_STATIC_CFLAGS +DEVMAPPER_STATIC_LIBS +systemd_tmpfilesdir' + + +# Initialize some variables set by options. +ac_init_help= +ac_init_version=false +ac_unrecognized_opts= +ac_unrecognized_sep= +# The variables have the same names as the options, with +# dashes changed to underlines. +cache_file=/dev/null +exec_prefix=NONE +no_create= +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +verbose= +x_includes=NONE +x_libraries=NONE + +# Installation directory options. +# These are left unexpanded so users can "make install exec_prefix=/foo" +# and all the variables that are supposed to be based on exec_prefix +# by default will actually change. +# Use braces instead of parens because sh, perl, etc. also accept them. +# (The list follows the same order as the GNU Coding Standards.) +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datarootdir='${prefix}/share' +datadir='${datarootdir}' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +runstatedir='${localstatedir}/run' +includedir='${prefix}/include' +oldincludedir='/usr/include' +docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' +infodir='${datarootdir}/info' +htmldir='${docdir}' +dvidir='${docdir}' +pdfdir='${docdir}' +psdir='${docdir}' +libdir='${exec_prefix}/lib' +localedir='${datarootdir}/locale' +mandir='${datarootdir}/man' + +ac_prev= +ac_dashdash= +for ac_option +do + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval $ac_prev=\$ac_option + ac_prev= + continue + fi + + case $ac_option in + *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; + *=) ac_optarg= ;; + *) ac_optarg=yes ;; + esac + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case $ac_dashdash$ac_option in + --) + ac_dashdash=yes ;; + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; + -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) + bindir=$ac_optarg ;; + + -build | --build | --buil | --bui | --bu) + ac_prev=build_alias ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build_alias=$ac_optarg ;; + + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) + cache_file=$ac_optarg ;; + + --config-cache | -C) + cache_file=config.cache ;; + + -datadir | --datadir | --datadi | --datad) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=*) + datadir=$ac_optarg ;; + + -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ + | --dataroo | --dataro | --datar) + ac_prev=datarootdir ;; + -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ + | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) + datarootdir=$ac_optarg ;; + + -disable-* | --disable-*) + ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=no ;; + + -docdir | --docdir | --docdi | --doc | --do) + ac_prev=docdir ;; + -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) + docdir=$ac_optarg ;; + + -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) + ac_prev=dvidir ;; + -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) + dvidir=$ac_optarg ;; + + -enable-* | --enable-*) + ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=\$ac_optarg ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix=$ac_optarg ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he | -h) + ac_init_help=long ;; + -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) + ac_init_help=recursive ;; + -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) + ac_init_help=short ;; + + -host | --host | --hos | --ho) + ac_prev=host_alias ;; + -host=* | --host=* | --hos=* | --ho=*) + host_alias=$ac_optarg ;; + + -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) + ac_prev=htmldir ;; + -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ + | --ht=*) + htmldir=$ac_optarg ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir=$ac_optarg ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir=$ac_optarg ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir=$ac_optarg ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir=$ac_optarg ;; + + -localedir | --localedir | --localedi | --localed | --locale) + ac_prev=localedir ;; + -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) + localedir=$ac_optarg ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst | --locals) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) + localstatedir=$ac_optarg ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir=$ac_optarg ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c | -n) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir=$ac_optarg ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix=$ac_optarg ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix=$ac_optarg ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix=$ac_optarg ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name=$ac_optarg ;; + + -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) + ac_prev=pdfdir ;; + -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) + pdfdir=$ac_optarg ;; + + -psdir | --psdir | --psdi | --psd | --ps) + ac_prev=psdir ;; + -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) + psdir=$ac_optarg ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -runstatedir | --runstatedir | --runstatedi | --runstated \ + | --runstate | --runstat | --runsta | --runst | --runs \ + | --run | --ru | --r) + ac_prev=runstatedir ;; + -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ + | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ + | --run=* | --ru=* | --r=*) + runstatedir=$ac_optarg ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir=$ac_optarg ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir=$ac_optarg ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site=$ac_optarg ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir=$ac_optarg ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir=$ac_optarg ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target_alias ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target_alias=$ac_optarg ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers | -V) + ac_init_version=: ;; + + -with-* | --with-*) + ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=\$ac_optarg ;; + + -without-* | --without-*) + ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=no ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes=$ac_optarg ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries=$ac_optarg ;; + + -*) as_fn_error $? "unrecognized option: \`$ac_option' +Try \`$0 --help' for more information" + ;; + + *=*) + ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` + # Reject names that are not valid shell variable names. + case $ac_envvar in #( + '' | [0-9]* | *[!_$as_cr_alnum]* ) + as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; + esac + eval $ac_envvar=\$ac_optarg + export $ac_envvar ;; + + *) + # FIXME: should be removed in autoconf 3.0. + $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && + $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" + ;; + + esac +done + +if test -n "$ac_prev"; then + ac_option=--`echo $ac_prev | sed 's/_/-/g'` + as_fn_error $? "missing argument to $ac_option" +fi + +if test -n "$ac_unrecognized_opts"; then + case $enable_option_checking in + no) ;; + fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; + *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; + esac +fi + +# Check all directory arguments for consistency. +for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ + datadir sysconfdir sharedstatedir localstatedir includedir \ + oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ + libdir localedir mandir runstatedir +do + eval ac_val=\$$ac_var + # Remove trailing slashes. + case $ac_val in + */ ) + ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` + eval $ac_var=\$ac_val;; + esac + # Be sure to have absolute directory names. + case $ac_val in + [\\/$]* | ?:[\\/]* ) continue;; + NONE | '' ) case $ac_var in *prefix ) continue;; esac;; + esac + as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" +done + +# There might be people who depend on the old broken behavior: `$host' +# used to hold the argument of --host etc. +# FIXME: To remove some day. +build=$build_alias +host=$host_alias +target=$target_alias + +# FIXME: To remove some day. +if test "x$host_alias" != x; then + if test "x$build_alias" = x; then + cross_compiling=maybe + elif test "x$build_alias" != "x$host_alias"; then + cross_compiling=yes + fi +fi + +ac_tool_prefix= +test -n "$host_alias" && ac_tool_prefix=$host_alias- + +test "$silent" = yes && exec 6>/dev/null + + +ac_pwd=`pwd` && test -n "$ac_pwd" && +ac_ls_di=`ls -di .` && +ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || + as_fn_error $? "working directory cannot be determined" +test "X$ac_ls_di" = "X$ac_pwd_ls_di" || + as_fn_error $? "pwd does not report name of working directory" + + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then the parent directory. + ac_confdir=`$as_dirname -- "$as_myself" || +$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_myself" : 'X\(//\)[^/]' \| \ + X"$as_myself" : 'X\(//\)$' \| \ + X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_myself" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + srcdir=$ac_confdir + if test ! -r "$srcdir/$ac_unique_file"; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r "$srcdir/$ac_unique_file"; then + test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." + as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" +fi +ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" +ac_abs_confdir=`( + cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" + pwd)` +# When building in place, set srcdir=. +if test "$ac_abs_confdir" = "$ac_pwd"; then + srcdir=. +fi +# Remove unnecessary trailing slashes from srcdir. +# Double slashes in file names in object file debugging info +# mess up M-x gdb in Emacs. +case $srcdir in +*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; +esac +for ac_var in $ac_precious_vars; do + eval ac_env_${ac_var}_set=\${${ac_var}+set} + eval ac_env_${ac_var}_value=\$${ac_var} + eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} + eval ac_cv_env_${ac_var}_value=\$${ac_var} +done + +# +# Report the --help message. +# +if test "$ac_init_help" = "long"; then + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat <<_ACEOF +\`configure' configures cryptsetup 2.2.2 to adapt to many kinds of systems. + +Usage: $0 [OPTION]... [VAR=VALUE]... + +To assign environment variables (e.g., CC, CFLAGS...), specify them as +VAR=VALUE. See below for descriptions of some of the useful variables. + +Defaults for the options are specified in brackets. + +Configuration: + -h, --help display this help and exit + --help=short display options specific to this package + --help=recursive display the short help of all the included packages + -V, --version display version information and exit + -q, --quiet, --silent do not print \`checking ...' messages + --cache-file=FILE cache test results in FILE [disabled] + -C, --config-cache alias for \`--cache-file=config.cache' + -n, --no-create do not create output files + --srcdir=DIR find the sources in DIR [configure dir or \`..'] + +Installation directories: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + [PREFIX] + +By default, \`make install' will install all the files in +\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify +an installation prefix other than \`$ac_default_prefix' using \`--prefix', +for instance \`--prefix=\$HOME'. + +For better control, use the options below. + +Fine tuning of the installation directories: + --bindir=DIR user executables [EPREFIX/bin] + --sbindir=DIR system admin executables [EPREFIX/sbin] + --libexecdir=DIR program executables [EPREFIX/libexec] + --sysconfdir=DIR read-only single-machine data [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] + --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc [/usr/include] + --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] + --datadir=DIR read-only architecture-independent data [DATAROOTDIR] + --infodir=DIR info documentation [DATAROOTDIR/info] + --localedir=DIR locale-dependent data [DATAROOTDIR/locale] + --mandir=DIR man documentation [DATAROOTDIR/man] + --docdir=DIR documentation root [DATAROOTDIR/doc/cryptsetup] + --htmldir=DIR html documentation [DOCDIR] + --dvidir=DIR dvi documentation [DOCDIR] + --pdfdir=DIR pdf documentation [DOCDIR] + --psdir=DIR ps documentation [DOCDIR] +_ACEOF + + cat <<\_ACEOF + +Program names: + --program-prefix=PREFIX prepend PREFIX to installed program names + --program-suffix=SUFFIX append SUFFIX to installed program names + --program-transform-name=PROGRAM run sed PROGRAM on installed program names + +System types: + --build=BUILD configure for building on BUILD [guessed] + --host=HOST cross-compile to build programs to run on HOST [BUILD] +_ACEOF +fi + +if test -n "$ac_init_help"; then + case $ac_init_help in + short | recursive ) echo "Configuration of cryptsetup 2.2.2:";; + esac + cat <<\_ACEOF + +Optional Features: + --disable-option-checking ignore unrecognized --enable/--with options + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --enable-silent-rules less verbose build output (undo: "make V=1") + --disable-silent-rules verbose build output (undo: "make V=0") + --enable-dependency-tracking + do not reject slow dependency extractors + --disable-dependency-tracking + speeds up one-time build + --enable-static[=PKGS] build static libraries [default=no] + --enable-shared[=PKGS] build shared libraries [default=yes] + --enable-fast-install[=PKGS] + optimize for fast installation [default=yes] + --disable-libtool-lock avoid locking (might break parallel builds) + --disable-keyring disable kernel keyring support and builtin kernel + keyring token + --disable-largefile omit support for large files + --disable-nls do not use Native Language Support + --disable-rpath do not hardcode runtime library paths + --enable-fips enable FIPS mode restrictions + --enable-pwquality enable password quality checking using pwquality + library + --enable-passwdqc[=CONFIG_PATH] + enable password quality checking using passwdqc + library (optionally with CONFIG_PATH) + --enable-static-cryptsetup + enable build of static version of tools + --disable-cryptsetup disable cryptsetup support + --disable-veritysetup disable veritysetup support + --disable-cryptsetup-reencrypt + disable cryptsetup-reencrypt tool + --disable-integritysetup + disable integritysetup support + --disable-selinux disable selinux support [default=auto] + --disable-udev disable udev support + --disable-kernel_crypto disable kernel userspace crypto (no benchmark and + tcrypt) + --enable-gcrypt-pbkdf2 force enable internal gcrypt PBKDF2 + --disable-internal-argon2 + disable internal implementation of Argon2 PBKDF + --enable-libargon2 enable external libargon2 (PHC) library (disables + internal bundled version) + --enable-internal-sse-argon2 + enable internal SSE implementation of Argon2 PBKDF + --disable-blkid disable use of blkid for device signature detection + and wiping + --enable-dev-random use /dev/random by default for key generation + (otherwise use /dev/urandom) + --disable-luks-adjust-xts-keysize + XTS mode requires two keys, double default LUKS + keysize if needed + +Optional Packages: + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --with-pic[=PKGS] try to use only PIC/non-PIC objects [default=use + both] + --with-aix-soname=aix|svr4|both + shared library versioning (aka "SONAME") variant to + provide on AIX, [default=aix]. + --with-gnu-ld assume the C compiler uses GNU ld [default=no] + --with-sysroot[=DIR] Search for dependent libraries within DIR (or the + compiler's sysroot if not specified). + --with-gnu-ld assume the C compiler uses GNU ld [default=no] + --with-libiconv-prefix[=DIR] search for libiconv in DIR/include and DIR/lib + --without-libiconv-prefix don't search for libiconv in includedir and libdir + --with-libintl-prefix[=DIR] search for libintl in DIR/include and DIR/lib + --without-libintl-prefix don't search for libintl in includedir and libdir + --with-crypto_backend=BACKEND + crypto backend (gcrypt/openssl/nss/kernel/nettle) + [openssl] + --with-libgcrypt-prefix=PFX + prefix where LIBGCRYPT is installed (optional) + --with-plain-hash default password hashing function for plain mode + [ripemd160] + --with-plain-cipher default cipher for plain mode [aes] + --with-plain-mode default cipher mode for plain mode + [cbc-essiv:sha256] + --with-plain-keybits default key length in bits for plain mode [256] + --with-luks1-hash default hash function for LUKS1 header [sha256] + --with-luks1-cipher default cipher for LUKS1 [aes] + --with-luks1-mode default cipher mode for LUKS1 [xts-plain64] + --with-luks1-keybits default key length in bits for LUKS1 [256] + --with-luks2-pbkdf default Default PBKDF algorithm (pbkdf2 or + argon2i/argon2id) for LUKS2 [argon2i] + --with-luks1-iter-time default PBKDF2 iteration time for LUKS1 (in ms) + [2000] + --with-luks2-iter-time default Argon2 PBKDF iteration time for LUKS2 (in + ms) [2000] + --with-luks2-memory-kb default Argon2 PBKDF memory cost for LUKS2 (in kB) + [1048576] + --with-luks2-parallel-threads + default Argon2 PBKDF max parallel cost for LUKS2 (if + CPUs available) [4] + --with-luks2-keyslot-cipher + default fallback cipher for LUKS2 keyslot (if data + encryption is incompatible) [aes-xts-plain64] + --with-luks2-keyslot-keybits + default fallback key size for LUKS2 keyslot (if data + encryption is incompatible) [512] + --with-loopaes-cipher default cipher for loop-AES mode [aes] + --with-loopaes-keybits default key length in bits for loop-AES mode [256] + --with-keyfile-size-maxkb + default maximum keyfile size (in KiB) [8192] + --with-passphrase-size-max + default maximum keyfile size (in characters) [512] + --with-verity-hash default hash function for verity mode [sha256] + --with-verity-data-block + default data block size for verity mode [4096] + --with-verity-hash-block + default hash block size for verity mode [4096] + --with-verity-salt-size default salt size for verity mode [32] + --with-verity-fec-roots default parity bytes for verity FEC [2] + --with-tmpfilesdir default override default path to directory with + systemd temporary files [] + --with-luks2-lock-path default path to directory for LUKSv2 locks + [/run/cryptsetup] + --with-luks2-lock-dir-perms + default default luks2 locking directory permissions + [0700] + --with-default-luks-format=FORMAT + default LUKS format version (LUKS1/LUKS2) [LUKS2] + +Some influential environment variables: + CC C compiler command + CFLAGS C compiler flags + LDFLAGS linker flags, e.g. -L if you have libraries in a + nonstandard directory + LIBS libraries to pass to the linker, e.g. -l + CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if + you have headers in a nonstandard directory + CPP C preprocessor + LT_SYS_LIBRARY_PATH + User-defined run-time library search path. + PKG_CONFIG path to pkg-config utility + PKG_CONFIG_PATH + directories to add to pkg-config's search path + PKG_CONFIG_LIBDIR + path overriding pkg-config's built-in search path + PWQUALITY_CFLAGS + C compiler flags for PWQUALITY, overriding pkg-config + PWQUALITY_LIBS + linker flags for PWQUALITY, overriding pkg-config + DEVMAPPER_CFLAGS + C compiler flags for DEVMAPPER, overriding pkg-config + DEVMAPPER_LIBS + linker flags for DEVMAPPER, overriding pkg-config + JSON_C_CFLAGS + C compiler flags for JSON_C, overriding pkg-config + JSON_C_LIBS linker flags for JSON_C, overriding pkg-config + OPENSSL_CFLAGS + C compiler flags for OPENSSL, overriding pkg-config + OPENSSL_LIBS + linker flags for OPENSSL, overriding pkg-config + OPENSSL_STATIC_CFLAGS + C compiler flags for OPENSSL_STATIC, overriding pkg-config + OPENSSL_STATIC_LIBS + linker flags for OPENSSL_STATIC, overriding pkg-config + NSS_CFLAGS C compiler flags for NSS, overriding pkg-config + NSS_LIBS linker flags for NSS, overriding pkg-config + LIBARGON2_CFLAGS + C compiler flags for LIBARGON2, overriding pkg-config + LIBARGON2_LIBS + linker flags for LIBARGON2, overriding pkg-config + BLKID_CFLAGS + C compiler flags for BLKID, overriding pkg-config + BLKID_LIBS linker flags for BLKID, overriding pkg-config + DEVMAPPER_STATIC_CFLAGS + C compiler flags for DEVMAPPER_STATIC, overriding pkg-config + DEVMAPPER_STATIC_LIBS + linker flags for DEVMAPPER_STATIC, overriding pkg-config + systemd_tmpfilesdir + value of tmpfilesdir for systemd, overriding pkg-config + +Use these variables to override the choices made by `configure' or to help +it to find libraries and programs with nonstandard names/locations. + +Report bugs to the package provider. +_ACEOF +ac_status=$? +fi + +if test "$ac_init_help" = "recursive"; then + # If there are subdirs, report their specific --help. + for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue + test -d "$ac_dir" || + { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || + continue + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + cd "$ac_dir" || { ac_status=$?; continue; } + # Check for guested configure. + if test -f "$ac_srcdir/configure.gnu"; then + echo && + $SHELL "$ac_srcdir/configure.gnu" --help=recursive + elif test -f "$ac_srcdir/configure"; then + echo && + $SHELL "$ac_srcdir/configure" --help=recursive + else + $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + fi || ac_status=$? + cd "$ac_pwd" || { ac_status=$?; break; } + done +fi + +test -n "$ac_init_help" && exit $ac_status +if $ac_init_version; then + cat <<\_ACEOF +cryptsetup configure 2.2.2 +generated by GNU Autoconf 2.69 + +Copyright (C) 2012 Free Software Foundation, Inc. +This configure script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it. +_ACEOF + exit +fi + +## ------------------------ ## +## Autoconf initialization. ## +## ------------------------ ## + +# ac_fn_c_try_compile LINENO +# -------------------------- +# Try to compile conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_compile + +# ac_fn_c_try_cpp LINENO +# ---------------------- +# Try to preprocess conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } > conftest.i && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_cpp + +# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists, giving a warning if it cannot be compiled using +# the include files in INCLUDES and setting the cache variable VAR +# accordingly. +ac_fn_c_check_header_mongrel () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if eval \${$3+:} false; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 +$as_echo_n "checking $2 usability... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_header_compiler=yes +else + ac_header_compiler=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 +$as_echo_n "checking $2 presence... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <$2> +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + ac_header_preproc=yes +else + ac_header_preproc=no +fi +rm -f conftest.err conftest.i conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( + yes:no: ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} + ;; + no:yes:* ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} + ;; +esac + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=\$ac_header_compiler" +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_header_mongrel + +# ac_fn_c_try_run LINENO +# ---------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes +# that executables *can* be run. +ac_fn_c_try_run () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + ac_retval=0 +else + $as_echo "$as_me: program exited with status $ac_status" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=$ac_status +fi + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_run + +# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists and can be compiled using the include files in +# INCLUDES, setting the cache variable VAR accordingly. +ac_fn_c_check_header_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_header_compile + +# ac_fn_c_try_link LINENO +# ----------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_link () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext conftest$ac_exeext + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + test -x conftest$ac_exeext + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information + # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would + # interfere with the next link command; also delete a directory that is + # left behind by Apple's compiler. We do this before executing the actions. + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_link + +# ac_fn_c_check_func LINENO FUNC VAR +# ---------------------------------- +# Tests whether FUNC exists, setting the cache variable VAR accordingly +ac_fn_c_check_func () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Define $2 to an innocuous variant, in case declares $2. + For example, HP-UX 11i declares gettimeofday. */ +#define $2 innocuous_$2 + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $2 (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $2 + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $2 (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$2 || defined __stub___$2 +choke me +#endif + +int +main () +{ +return $2 (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_func + +# ac_fn_c_check_decl LINENO SYMBOL VAR INCLUDES +# --------------------------------------------- +# Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR +# accordingly. +ac_fn_c_check_decl () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + as_decl_name=`echo $2|sed 's/ *(.*//'` + as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'` + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5 +$as_echo_n "checking whether $as_decl_name is declared... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +#ifndef $as_decl_name +#ifdef __cplusplus + (void) $as_decl_use; +#else + (void) $as_decl_name; +#endif +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_decl + +# ac_fn_c_check_type LINENO TYPE VAR INCLUDES +# ------------------------------------------- +# Tests whether TYPE exists after having included INCLUDES, setting cache +# variable VAR accordingly. +ac_fn_c_check_type () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=no" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +if (sizeof ($2)) + return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +if (sizeof (($2))) + return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + eval "$3=yes" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_type +cat >config.log <<_ACEOF +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by cryptsetup $as_me 2.2.2, which was +generated by GNU Autoconf 2.69. Invocation command line was + + $ $0 $@ + +_ACEOF +exec 5>>config.log +{ +cat <<_ASUNAME +## --------- ## +## Platform. ## +## --------- ## + +hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` + +/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` +/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` +/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` +/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` + +_ASUNAME + +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + $as_echo "PATH: $as_dir" + done +IFS=$as_save_IFS + +} >&5 + +cat >&5 <<_ACEOF + + +## ----------- ## +## Core tests. ## +## ----------- ## + +_ACEOF + + +# Keep a trace of the command line. +# Strip out --no-create and --no-recursion so they do not pile up. +# Strip out --silent because we don't want to record it for future runs. +# Also quote any args containing shell meta-characters. +# Make two passes to allow for proper duplicate-argument suppression. +ac_configure_args= +ac_configure_args0= +ac_configure_args1= +ac_must_keep_next=false +for ac_pass in 1 2 +do + for ac_arg + do + case $ac_arg in + -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + continue ;; + *\'*) + ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in + 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; + 2) + as_fn_append ac_configure_args1 " '$ac_arg'" + if test $ac_must_keep_next = true; then + ac_must_keep_next=false # Got value, back to normal. + else + case $ac_arg in + *=* | --config-cache | -C | -disable-* | --disable-* \ + | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ + | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ + | -with-* | --with-* | -without-* | --without-* | --x) + case "$ac_configure_args0 " in + "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; + esac + ;; + -* ) ac_must_keep_next=true ;; + esac + fi + as_fn_append ac_configure_args " '$ac_arg'" + ;; + esac + done +done +{ ac_configure_args0=; unset ac_configure_args0;} +{ ac_configure_args1=; unset ac_configure_args1;} + +# When interrupted or exit'd, cleanup temporary files, and complete +# config.log. We remove comments because anyway the quotes in there +# would cause problems or look ugly. +# WARNING: Use '\'' to represent an apostrophe within the trap. +# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. +trap 'exit_status=$? + # Save into config.log some information that might help in debugging. + { + echo + + $as_echo "## ---------------- ## +## Cache variables. ## +## ---------------- ##" + echo + # The following way of writing the cache mishandles newlines in values, +( + for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + (set) 2>&1 | + case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + sed -n \ + "s/'\''/'\''\\\\'\'''\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" + ;; #( + *) + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) + echo + + $as_echo "## ----------------- ## +## Output variables. ## +## ----------------- ##" + echo + for ac_var in $ac_subst_vars + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + + if test -n "$ac_subst_files"; then + $as_echo "## ------------------- ## +## File substitutions. ## +## ------------------- ##" + echo + for ac_var in $ac_subst_files + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + fi + + if test -s confdefs.h; then + $as_echo "## ----------- ## +## confdefs.h. ## +## ----------- ##" + echo + cat confdefs.h + echo + fi + test "$ac_signal" != 0 && + $as_echo "$as_me: caught signal $ac_signal" + $as_echo "$as_me: exit $exit_status" + } >&5 + rm -f core *.core core.conftest.* && + rm -f -r conftest* confdefs* conf$$* $ac_clean_files && + exit $exit_status +' 0 +for ac_signal in 1 2 13 15; do + trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal +done +ac_signal=0 + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -f -r conftest* confdefs.h + +$as_echo "/* confdefs.h */" > confdefs.h + +# Predefined preprocessor variables. + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_NAME "$PACKAGE_NAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_TARNAME "$PACKAGE_TARNAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_VERSION "$PACKAGE_VERSION" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_STRING "$PACKAGE_STRING" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_URL "$PACKAGE_URL" +_ACEOF + + +# Let the site file select an alternate cache file if it wants to. +# Prefer an explicitly selected file to automatically selected ones. +ac_site_file1=NONE +ac_site_file2=NONE +if test -n "$CONFIG_SITE"; then + # We do not want a PATH search for config.site. + case $CONFIG_SITE in #(( + -*) ac_site_file1=./$CONFIG_SITE;; + */*) ac_site_file1=$CONFIG_SITE;; + *) ac_site_file1=./$CONFIG_SITE;; + esac +elif test "x$prefix" != xNONE; then + ac_site_file1=$prefix/share/config.site + ac_site_file2=$prefix/etc/config.site +else + ac_site_file1=$ac_default_prefix/share/config.site + ac_site_file2=$ac_default_prefix/etc/config.site +fi +for ac_site_file in "$ac_site_file1" "$ac_site_file2" +do + test "x$ac_site_file" = xNONE && continue + if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 +$as_echo "$as_me: loading site script $ac_site_file" >&6;} + sed 's/^/| /' "$ac_site_file" >&5 + . "$ac_site_file" \ + || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "failed to load site script $ac_site_file +See \`config.log' for more details" "$LINENO" 5; } + fi +done + +if test -r "$cache_file"; then + # Some versions of bash will fail to source /dev/null (special files + # actually), so we avoid doing that. DJGPP emulates it as a regular file. + if test /dev/null != "$cache_file" && test -f "$cache_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 +$as_echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in + [\\/]* | ?:[\\/]* ) . "$cache_file";; + *) . "./$cache_file";; + esac + fi +else + { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 +$as_echo "$as_me: creating cache $cache_file" >&6;} + >$cache_file +fi + +gt_needs="$gt_needs need-ngettext" +# Check that the precious variables saved in the cache have kept the same +# value. +ac_cache_corrupted=false +for ac_var in $ac_precious_vars; do + eval ac_old_set=\$ac_cv_env_${ac_var}_set + eval ac_new_set=\$ac_env_${ac_var}_set + eval ac_old_val=\$ac_cv_env_${ac_var}_value + eval ac_new_val=\$ac_env_${ac_var}_value + case $ac_old_set,$ac_new_set in + set,) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,);; + *) + if test "x$ac_old_val" != "x$ac_new_val"; then + # differences in whitespace do not lead to failure. + ac_old_val_w=`echo x $ac_old_val` + ac_new_val_w=`echo x $ac_new_val` + if test "$ac_old_val_w" != "$ac_new_val_w"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 +$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + ac_cache_corrupted=: + else + { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + eval $ac_var=\$ac_old_val + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 +$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 +$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *) ac_arg=$ac_var=$ac_new_val ;; + esac + case " $ac_configure_args " in + *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. + *) as_fn_append ac_configure_args " '$ac_arg'" ;; + esac + fi +done +if $ac_cache_corrupted; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 +$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} + as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 +fi +## -------------------- ## +## Main body of script. ## +## -------------------- ## + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + +LIBCRYPTSETUP_VERSION=$(echo $PACKAGE_VERSION | cut -f1 -d-) +LIBCRYPTSETUP_VERSION_INFO=17:0:5 + +# Check whether --enable-silent-rules was given. +if test "${enable_silent_rules+set}" = set; then : + enableval=$enable_silent_rules; +fi + +case $enable_silent_rules in # ((( + yes) AM_DEFAULT_VERBOSITY=0;; + no) AM_DEFAULT_VERBOSITY=1;; + *) AM_DEFAULT_VERBOSITY=0;; +esac +am_make=${MAKE-make} +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 +$as_echo_n "checking whether $am_make supports nested variables... " >&6; } +if ${am_cv_make_support_nested_variables+:} false; then : + $as_echo_n "(cached) " >&6 +else + if $as_echo 'TRUE=$(BAR$(V)) +BAR0=false +BAR1=true +V=1 +am__doit: + @$(TRUE) +.PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then + am_cv_make_support_nested_variables=yes +else + am_cv_make_support_nested_variables=no +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 +$as_echo "$am_cv_make_support_nested_variables" >&6; } +if test $am_cv_make_support_nested_variables = yes; then + AM_V='$(V)' + AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' +else + AM_V=$AM_DEFAULT_VERBOSITY + AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY +fi +AM_BACKSLASH='\' + + + + +ac_config_headers="$ac_config_headers config.h:config.h.in" + + +# We do not want to run test in parallel. Really. +# http://lists.gnu.org/archive/html/automake/2013-01/msg00060.html + +# For old automake use this +#AM_INIT_AUTOMAKE(dist-xz subdir-objects) +am__api_version='1.16' + +ac_aux_dir= +for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do + if test -f "$ac_dir/install-sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f "$ac_dir/install.sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + elif test -f "$ac_dir/shtool"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break + fi +done +if test -z "$ac_aux_dir"; then + as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 +fi + +# These three variables are undocumented and unsupported, +# and are intended to be withdrawn in a future Autoconf release. +# They can cause serious problems if a builder's source tree is in a directory +# whose full name contains unusual characters. +ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. +ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. +ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. + + +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AmigaOS /C/install, which installs bootblocks on floppy discs +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# OS/2's system install, which has a completely different semantic +# ./install, which can be erroneously created by make from ./install.sh. +# Reject install programs that cannot install multiple files. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 +$as_echo_n "checking for a BSD-compatible install... " >&6; } +if test -z "$INSTALL"; then +if ${ac_cv_path_install+:} false; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in #(( + ./ | .// | /[cC]/* | \ + /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ + ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ + /usr/ucb/* ) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + elif test $ac_prog = install && + grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # program-specific install script used by HP pwplus--don't use. + : + else + rm -rf conftest.one conftest.two conftest.dir + echo one > conftest.one + echo two > conftest.two + mkdir conftest.dir + if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && + test -s conftest.one && test -s conftest.two && + test -s conftest.dir/conftest.one && + test -s conftest.dir/conftest.two + then + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi + fi + fi + done + done + ;; +esac + + done +IFS=$as_save_IFS + +rm -rf conftest.one conftest.two conftest.dir + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else + # As a last resort, use the slow shell script. Don't cache a + # value for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + INSTALL=$ac_install_sh + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 +$as_echo "$INSTALL" >&6; } + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 +$as_echo_n "checking whether build environment is sane... " >&6; } +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[\\\"\#\$\&\'\`$am_lf]*) + as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; +esac +case $srcdir in + *[\\\"\#\$\&\'\`$am_lf\ \ ]*) + as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; +esac + +# Do 'set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + am_has_slept=no + for am_try in 1 2; do + echo "timestamp, slept: $am_has_slept" > conftest.file + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$*" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + if test "$*" != "X $srcdir/configure conftest.file" \ + && test "$*" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + as_fn_error $? "ls -t appears to fail. Make sure there is not a broken + alias in your environment" "$LINENO" 5 + fi + if test "$2" = conftest.file || test $am_try -eq 2; then + break + fi + # Just in case. + sleep 1 + am_has_slept=yes + done + test "$2" = conftest.file + ) +then + # Ok. + : +else + as_fn_error $? "newly created file is older than distributed files! +Check your system clock" "$LINENO" 5 +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +# If we didn't sleep, we still need to ensure time stamps of config.status and +# generated files are strictly newer. +am_sleep_pid= +if grep 'slept: no' conftest.file >/dev/null 2>&1; then + ( sleep 1 ) & + am_sleep_pid=$! +fi + +rm -f conftest.file + +test "$program_prefix" != NONE && + program_transform_name="s&^&$program_prefix&;$program_transform_name" +# Use a double $ so make ignores it. +test "$program_suffix" != NONE && + program_transform_name="s&\$&$program_suffix&;$program_transform_name" +# Double any \ or $. +# By default was `s,x,x', remove it if useless. +ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' +program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` + +# Expand $ac_aux_dir to an absolute path. +am_aux_dir=`cd "$ac_aux_dir" && pwd` + +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi +# Use eval to expand $SHELL +if eval "$MISSING --is-lightweight"; then + am_missing_run="$MISSING " +else + am_missing_run= + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 +$as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;} +fi + +if test x"${install_sh+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi + +# Installed binaries are usually stripped using 'strip' when the user +# run "make install-strip". However 'strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the 'STRIP' environment variable to overrule this program. +if test "$cross_compiling" != no; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_STRIP="strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 +$as_echo_n "checking for a thread-safe mkdir -p... " >&6; } +if test -z "$MKDIR_P"; then + if ${ac_cv_path_mkdir+:} false; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in mkdir gmkdir; do + for ac_exec_ext in '' $ac_executable_extensions; do + as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue + case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( + 'mkdir (GNU coreutils) '* | \ + 'mkdir (coreutils) '* | \ + 'mkdir (fileutils) '4.1*) + ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext + break 3;; + esac + done + done + done +IFS=$as_save_IFS + +fi + + test -d ./--version && rmdir ./--version + if test "${ac_cv_path_mkdir+set}" = set; then + MKDIR_P="$ac_cv_path_mkdir -p" + else + # As a last resort, use the slow shell script. Don't cache a + # value for MKDIR_P within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + MKDIR_P="$ac_install_sh -d" + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 +$as_echo "$MKDIR_P" >&6; } + +for ac_prog in gawk mawk nawk awk +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AWK+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AWK"; then + ac_cv_prog_AWK="$AWK" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AWK="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AWK=$ac_cv_prog_AWK +if test -n "$AWK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +$as_echo "$AWK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AWK" && break +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } +set x ${MAKE-make} +ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` +if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat >conftest.make <<\_ACEOF +SHELL = /bin/sh +all: + @echo '@@@%%%=$(MAKE)=@@@%%%' +_ACEOF +# GNU make sometimes prints "make[1]: Entering ...", which would confuse us. +case `${MAKE-make} -f conftest.make 2>/dev/null` in + *@@@%%%=?*=@@@%%%*) + eval ac_cv_prog_make_${ac_make}_set=yes;; + *) + eval ac_cv_prog_make_${ac_make}_set=no;; +esac +rm -f conftest.make +fi +if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + SET_MAKE= +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + SET_MAKE="MAKE=${MAKE-make}" +fi + +rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null + +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + am__isrc=' -I$(srcdir)' + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi + + +# Define the identity of the package. + PACKAGE='cryptsetup' + VERSION='2.2.2' + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE "$PACKAGE" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define VERSION "$VERSION" +_ACEOF + +# Some tools Automake needs. + +ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} + + +AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} + + +AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} + + +AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} + + +MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} + +# For better backward compatibility. To be removed once Automake 1.9.x +# dies out for good. For more background, see: +# +# +mkdir_p='$(MKDIR_P)' + +# We need awk for the "check" target (and possibly the TAP driver). The +# system "awk" is bad on some platforms. +# Always define AMTAR for backward compatibility. Yes, it's still used +# in the wild :-( We should find a proper way to deprecate it ... +AMTAR='$${TAR-tar}' + + +# We'll loop over all known methods to create a tar archive until one works. +_am_tools='gnutar pax cpio none' + +am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' + + + + + + +# POSIX will say in a future version that running "rm -f" with no argument +# is OK; and we want to be able to make that assumption in our Makefile +# recipes. So use an aggressive probe to check that the usage we want is +# actually supported "in the wild" to an acceptable degree. +# See automake bug#10828. +# To make any issue more visible, cause the running configure to be aborted +# by default if the 'rm' program in use doesn't match our expectations; the +# user can still override this though. +if rm -f && rm -fr && rm -rf; then : OK; else + cat >&2 <<'END' +Oops! + +Your 'rm' program seems unable to run without file operands specified +on the command line, even when the '-f' option is present. This is contrary +to the behaviour of most rm programs out there, and not conforming with +the upcoming POSIX standard: + +Please tell bug-automake@gnu.org about your system, including the value +of your $PATH and any error possibly output before this message. This +can help us improve future automake versions. + +END + if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then + echo 'Configuration will proceed anyway, since you have set the' >&2 + echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 + echo >&2 + else + cat >&2 <<'END' +Aborting the configuration process, to ensure you take notice of the issue. + +You can download and install GNU coreutils to get an 'rm' implementation +that behaves properly: . + +If you want to complete the configuration process using your problematic +'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM +to "yes", and re-run configure. + +END + as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5 + fi +fi + + +if test "x$prefix" = "xNONE"; then + sysconfdir=/etc +fi + + +# Make sure we can run config.sub. +$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || + as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 +$as_echo_n "checking build system type... " >&6; } +if ${ac_cv_build+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_build_alias=$build_alias +test "x$ac_build_alias" = x && + ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` +test "x$ac_build_alias" = x && + as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 +ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 +$as_echo "$ac_cv_build" >&6; } +case $ac_cv_build in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; +esac +build=$ac_cv_build +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_build +shift +build_cpu=$1 +build_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +build_os=$* +IFS=$ac_save_IFS +case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 +$as_echo_n "checking host system type... " >&6; } +if ${ac_cv_host+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "x$host_alias" = x; then + ac_cv_host=$ac_cv_build +else + ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 +$as_echo "$ac_cv_host" >&6; } +case $ac_cv_host in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; +esac +host=$ac_cv_host +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_host +shift +host_cpu=$1 +host_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +host_os=$* +IFS=$ac_save_IFS +case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac + + +DEPDIR="${am__leading_dot}deps" + +ac_config_commands="$ac_config_commands depfiles" + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} supports the include directive" >&5 +$as_echo_n "checking whether ${MAKE-make} supports the include directive... " >&6; } +cat > confinc.mk << 'END' +am__doit: + @echo this is the am__doit target >confinc.out +.PHONY: am__doit +END +am__include="#" +am__quote= +# BSD make does it like this. +echo '.include "confinc.mk" # ignored' > confmf.BSD +# Other make implementations (GNU, Solaris 10, AIX) do it like this. +echo 'include confinc.mk # ignored' > confmf.GNU +_am_result=no +for s in GNU BSD; do + { echo "$as_me:$LINENO: ${MAKE-make} -f confmf.$s && cat confinc.out" >&5 + (${MAKE-make} -f confmf.$s && cat confinc.out) >&5 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + case $?:`cat confinc.out 2>/dev/null` in #( + '0:this is the am__doit target') : + case $s in #( + BSD) : + am__include='.include' am__quote='"' ;; #( + *) : + am__include='include' am__quote='' ;; +esac ;; #( + *) : + ;; +esac + if test "$am__include" != "#"; then + _am_result="yes ($s style)" + break + fi +done +rm -f confinc.* confmf.* +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: ${_am_result}" >&5 +$as_echo "${_am_result}" >&6; } + +# Check whether --enable-dependency-tracking was given. +if test "${enable_dependency_tracking+set}" = set; then : + enableval=$enable_dependency_tracking; +fi + +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' + am__nodep='_no' +fi + if test "x$enable_dependency_tracking" != xno; then + AMDEP_TRUE= + AMDEP_FALSE='#' +else + AMDEP_TRUE='#' + AMDEP_FALSE= +fi + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + fi +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl.exe + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl.exe +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CC" && break +done + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +fi + +fi + + +test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "no acceptable C compiler found in \$PATH +See \`config.log' for more details" "$LINENO" 5; } + +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" +# Try to create an executable without -o first, disregard a.out. +# It will help us diagnose broken compilers, and finding out an intuition +# of exeext. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 +$as_echo_n "checking whether the C compiler works... " >&6; } +ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` + +# The possible output files: +ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" + +ac_rmfiles= +for ac_file in $ac_files +do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + * ) ac_rmfiles="$ac_rmfiles $ac_file";; + esac +done +rm -f $ac_rmfiles + +if { { ac_try="$ac_link_default" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link_default") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. +# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' +# in a Makefile. We should not override ac_cv_exeext if it was cached, +# so that the user can short-circuit this test for compilers unknown to +# Autoconf. +for ac_file in $ac_files '' +do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) + ;; + [ab].out ) + # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) + if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; + then :; else + ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + fi + # We set ac_cv_exeext here because the later test for it is not + # safe: cross compilers may not add the suffix if given an `-o' + # argument, so we may need to know it at that point already. + # Even if this section looks crufty: it has the advantage of + # actually working. + break;; + * ) + break;; + esac +done +test "$ac_cv_exeext" = no && ac_cv_exeext= + +else + ac_file='' +fi +if test -z "$ac_file"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "C compiler cannot create executables +See \`config.log' for more details" "$LINENO" 5; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 +$as_echo_n "checking for C compiler default output file name... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 +$as_echo "$ac_file" >&6; } +ac_exeext=$ac_cv_exeext + +rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 +$as_echo_n "checking for suffix of executables... " >&6; } +if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # If both `conftest.exe' and `conftest' are `present' (well, observable) +# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will +# work properly (i.e., refer to `conftest.exe'), while it won't with +# `rm'. +for ac_file in conftest.exe conftest conftest.*; do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + break;; + * ) break;; + esac +done +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f conftest conftest$ac_cv_exeext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 +$as_echo "$ac_cv_exeext" >&6; } + +rm -f conftest.$ac_ext +EXEEXT=$ac_cv_exeext +ac_exeext=$EXEEXT +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +FILE *f = fopen ("conftest.out", "w"); + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} +_ACEOF +ac_clean_files="$ac_clean_files conftest.out" +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 +$as_echo_n "checking whether we are cross compiling... " >&6; } +if test "$cross_compiling" != yes; then + { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if { ac_try='./conftest$ac_cv_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details" "$LINENO" 5; } + fi + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 +$as_echo "$cross_compiling" >&6; } + +rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 +$as_echo_n "checking for suffix of object files... " >&6; } +if ${ac_cv_objext+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.o conftest.obj +if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + for ac_file in conftest.o conftest.obj conftest.*; do + test -f "$ac_file" || continue; + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; + esac +done +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of object files: cannot compile +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f conftest.$ac_cv_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 +$as_echo "$ac_cv_objext" >&6; } +OBJEXT=$ac_cv_objext +ac_objext=$OBJEXT +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if ${ac_cv_c_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if ${ac_cv_prog_cc_g+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +else + CFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$ac_cv_prog_cc_g" >&6; } +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if ${ac_cv_prog_cc_c89+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +struct stat; +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c89=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c89" != xno; then : + +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 +$as_echo_n "checking whether $CC understands -c and -o together... " >&6; } +if ${am_cv_prog_cc_c_o+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF + # Make sure it works both with $CC and with simple cc. + # Following AC_PROG_CC_C_O, we do the test twice because some + # compilers refuse to overwrite an existing .o file with -o, + # though they will create one. + am_cv_prog_cc_c_o=yes + for am_i in 1 2; do + if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 + ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } \ + && test -f conftest2.$ac_objext; then + : OK + else + am_cv_prog_cc_c_o=no + break + fi + done + rm -f core conftest* + unset am_i +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 +$as_echo "$am_cv_prog_cc_c_o" >&6; } +if test "$am_cv_prog_cc_c_o" != yes; then + # Losing compiler, so override with the script. + # FIXME: It is wrong to rewrite CC. + # But if we don't then we get into trouble of one sort or another. + # A longer-term fix would be to have automake use am__CC in this case, + # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" + CC="$am_aux_dir/compile $CC" +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +depcc="$CC" am_compiler_list= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if ${am_cv_CC_dependencies_compiler_type+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named 'D' -- because '-MD' means "put the output + # in D". + rm -rf conftest.dir + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CC_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with + # Solaris 10 /bin/sh. + echo '/* dummy */' > sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with '-c' and '-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle '-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs. + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # After this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested. + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvc7 | msvc7msys | msvisualcpp | msvcmsys) + # This compiler won't grok '-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CC_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CC_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } +CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then + am__fastdepCC_TRUE= + am__fastdepCC_FALSE='#' +else + am__fastdepCC_TRUE='#' + am__fastdepCC_FALSE= +fi + + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +$as_echo_n "checking how to run the C preprocessor... " >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if ${ac_cv_prog_CPP+:} false; then : + $as_echo_n "(cached) " >&6 +else + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi + + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +$as_echo "$CPP" >&6; } +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details" "$LINENO" 5; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 +$as_echo_n "checking for grep that handles long lines and -e... " >&6; } +if ${ac_cv_path_GREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$GREP"; then + ac_path_GREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in grep ggrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_GREP" || continue +# Check for GNU ac_path_GREP and select it if it is found. + # Check for GNU $ac_path_GREP +case `"$ac_path_GREP" --version 2>&1` in +*GNU*) + ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'GREP' >> "conftest.nl" + "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_GREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_GREP="$ac_path_GREP" + ac_path_GREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_GREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_GREP"; then + as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_GREP=$GREP +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 +$as_echo "$ac_cv_path_GREP" >&6; } + GREP="$ac_cv_path_GREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 +$as_echo_n "checking for egrep... " >&6; } +if ${ac_cv_path_EGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 + then ac_cv_path_EGREP="$GREP -E" + else + if test -z "$EGREP"; then + ac_path_EGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in egrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_EGREP" || continue +# Check for GNU ac_path_EGREP and select it if it is found. + # Check for GNU $ac_path_EGREP +case `"$ac_path_EGREP" --version 2>&1` in +*GNU*) + ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'EGREP' >> "conftest.nl" + "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_EGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_EGREP="$ac_path_EGREP" + ac_path_EGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_EGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_EGREP"; then + as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_EGREP=$EGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 +$as_echo "$ac_cv_path_EGREP" >&6; } + EGREP="$ac_cv_path_EGREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if ${ac_cv_header_stdc+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_stdc=yes +else + ac_cv_header_stdc=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + +else + ac_cv_header_stdc=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then + +$as_echo "#define STDC_HEADERS 1" >>confdefs.h + +fi + +# On IRIX 5.3, sys/types and inttypes.h are conflicting. +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ + inttypes.h stdint.h unistd.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default +" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + + + ac_fn_c_check_header_mongrel "$LINENO" "minix/config.h" "ac_cv_header_minix_config_h" "$ac_includes_default" +if test "x$ac_cv_header_minix_config_h" = xyes; then : + MINIX=yes +else + MINIX= +fi + + + if test "$MINIX" = yes; then + +$as_echo "#define _POSIX_SOURCE 1" >>confdefs.h + + +$as_echo "#define _POSIX_1_SOURCE 2" >>confdefs.h + + +$as_echo "#define _MINIX 1" >>confdefs.h + + fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5 +$as_echo_n "checking whether it is safe to define __EXTENSIONS__... " >&6; } +if ${ac_cv_safe_to_define___extensions__+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +# define __EXTENSIONS__ 1 + $ac_includes_default +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_safe_to_define___extensions__=yes +else + ac_cv_safe_to_define___extensions__=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5 +$as_echo "$ac_cv_safe_to_define___extensions__" >&6; } + test $ac_cv_safe_to_define___extensions__ = yes && + $as_echo "#define __EXTENSIONS__ 1" >>confdefs.h + + $as_echo "#define _ALL_SOURCE 1" >>confdefs.h + + $as_echo "#define _GNU_SOURCE 1" >>confdefs.h + + $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h + + $as_echo "#define _TANDEM_SOURCE 1" >>confdefs.h + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + fi +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl.exe + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl.exe +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CC" && break +done + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +fi + +fi + + +test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "no acceptable C compiler found in \$PATH +See \`config.log' for more details" "$LINENO" 5; } + +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if ${ac_cv_c_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if ${ac_cv_prog_cc_g+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +else + CFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$ac_cv_prog_cc_g" >&6; } +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if ${ac_cv_prog_cc_c89+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +struct stat; +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c89=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c89" != xno; then : + +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 +$as_echo_n "checking whether $CC understands -c and -o together... " >&6; } +if ${am_cv_prog_cc_c_o+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF + # Make sure it works both with $CC and with simple cc. + # Following AC_PROG_CC_C_O, we do the test twice because some + # compilers refuse to overwrite an existing .o file with -o, + # though they will create one. + am_cv_prog_cc_c_o=yes + for am_i in 1 2; do + if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 + ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } \ + && test -f conftest2.$ac_objext; then + : OK + else + am_cv_prog_cc_c_o=no + break + fi + done + rm -f core conftest* + unset am_i +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 +$as_echo "$am_cv_prog_cc_c_o" >&6; } +if test "$am_cv_prog_cc_c_o" != yes; then + # Losing compiler, so override with the script. + # FIXME: It is wrong to rewrite CC. + # But if we don't then we get into trouble of one sort or another. + # A longer-term fix would be to have automake use am__CC in this case, + # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" + CC="$am_aux_dir/compile $CC" +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +depcc="$CC" am_compiler_list= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if ${am_cv_CC_dependencies_compiler_type+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named 'D' -- because '-MD' means "put the output + # in D". + rm -rf conftest.dir + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CC_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with + # Solaris 10 /bin/sh. + echo '/* dummy */' > sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with '-c' and '-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle '-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs. + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # After this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested. + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvc7 | msvc7msys | msvisualcpp | msvcmsys) + # This compiler won't grok '-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CC_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CC_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } +CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then + am__fastdepCC_TRUE= + am__fastdepCC_FALSE='#' +else + am__fastdepCC_TRUE='#' + am__fastdepCC_FALSE= +fi + + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +$as_echo_n "checking how to run the C preprocessor... " >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if ${ac_cv_prog_CPP+:} false; then : + $as_echo_n "(cached) " >&6 +else + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi + + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +$as_echo "$CPP" >&6; } +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details" "$LINENO" 5; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } +set x ${MAKE-make} +ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` +if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat >conftest.make <<\_ACEOF +SHELL = /bin/sh +all: + @echo '@@@%%%=$(MAKE)=@@@%%%' +_ACEOF +# GNU make sometimes prints "make[1]: Entering ...", which would confuse us. +case `${MAKE-make} -f conftest.make 2>/dev/null` in + *@@@%%%=?*=@@@%%%*) + eval ac_cv_prog_make_${ac_make}_set=yes;; + *) + eval ac_cv_prog_make_${ac_make}_set=no;; +esac +rm -f conftest.make +fi +if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + SET_MAKE= +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + SET_MAKE="MAKE=${MAKE-make}" +fi + +# Check whether --enable-static was given. +if test "${enable_static+set}" = set; then : + enableval=$enable_static; p=${PACKAGE-default} + case $enableval in + yes) enable_static=yes ;; + no) enable_static=no ;; + *) + enable_static=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, + for pkg in $enableval; do + IFS=$lt_save_ifs + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS=$lt_save_ifs + ;; + esac +else + enable_static=no +fi + + + + + + + + + +case `pwd` in + *\ * | *\ *) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 +$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; +esac + + + +macro_version='2.4.6' +macro_revision='2.4.6' + + + + + + + + + + + + + +ltmain=$ac_aux_dir/ltmain.sh + +# Backslashify metacharacters that are still active within +# double-quoted strings. +sed_quote_subst='s/\(["`$\\]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\(["`\\]\)/\\\1/g' + +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' + +# Sed substitution to delay expansion of an escaped single quote. +delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' + +# Sed substitution to avoid accidental globbing in evaled expressions +no_glob_subst='s/\*/\\\*/g' + +ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 +$as_echo_n "checking how to print strings... " >&6; } +# Test print first, because it will be a builtin if present. +if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ + test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='print -r --' +elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='printf %s\n' +else + # Use this function as a fallback that always works. + func_fallback_echo () + { + eval 'cat <<_LTECHO_EOF +$1 +_LTECHO_EOF' + } + ECHO='func_fallback_echo' +fi + +# func_echo_all arg... +# Invoke $ECHO with all args, space-separated. +func_echo_all () +{ + $ECHO "" +} + +case $ECHO in + printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5 +$as_echo "printf" >&6; } ;; + print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 +$as_echo "print -r" >&6; } ;; + *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5 +$as_echo "cat" >&6; } ;; +esac + + + + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 +$as_echo_n "checking for a sed that does not truncate output... " >&6; } +if ${ac_cv_path_SED+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ + for ac_i in 1 2 3 4 5 6 7; do + ac_script="$ac_script$as_nl$ac_script" + done + echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed + { ac_script=; unset ac_script;} + if test -z "$SED"; then + ac_path_SED_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_SED" || continue +# Check for GNU ac_path_SED and select it if it is found. + # Check for GNU $ac_path_SED +case `"$ac_path_SED" --version 2>&1` in +*GNU*) + ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo '' >> "conftest.nl" + "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_SED_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_SED="$ac_path_SED" + ac_path_SED_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_SED_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_SED"; then + as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 + fi +else + ac_cv_path_SED=$SED +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 +$as_echo "$ac_cv_path_SED" >&6; } + SED="$ac_cv_path_SED" + rm -f conftest.sed + +test -z "$SED" && SED=sed +Xsed="$SED -e 1s/^X//" + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 +$as_echo_n "checking for fgrep... " >&6; } +if ${ac_cv_path_FGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 + then ac_cv_path_FGREP="$GREP -F" + else + if test -z "$FGREP"; then + ac_path_FGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in fgrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_FGREP" || continue +# Check for GNU ac_path_FGREP and select it if it is found. + # Check for GNU $ac_path_FGREP +case `"$ac_path_FGREP" --version 2>&1` in +*GNU*) + ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'FGREP' >> "conftest.nl" + "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_FGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_FGREP="$ac_path_FGREP" + ac_path_FGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_FGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_FGREP"; then + as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_FGREP=$FGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 +$as_echo "$ac_cv_path_FGREP" >&6; } + FGREP="$ac_cv_path_FGREP" + + +test -z "$GREP" && GREP=grep + + + + + + + + + + + + + + + + + + + +# Check whether --with-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then : + withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes +else + with_gnu_ld=no +fi + +ac_prog=ld +if test yes = "$GCC"; then + # Check if gcc -print-prog-name=ld gives a path. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 +$as_echo_n "checking for ld used by $CC... " >&6; } + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return, which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [\\/]* | ?:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD=$ac_prog + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test yes = "$with_gnu_ld"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 +$as_echo_n "checking for GNU ld... " >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 +$as_echo_n "checking for non-GNU ld... " >&6; } +fi +if ${lt_cv_path_LD+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$LD"; then + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS=$lt_save_ifs + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD=$ac_dir/$ac_prog + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &5 +$as_echo "$LD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi +test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 +$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } +if ${lt_cv_prog_gnu_ld+:} false; then : + $as_echo_n "(cached) " >&6 +else + # I'd rather use --version here, but apparently some GNU lds only accept -v. +case `$LD -v 2>&1 &5 +$as_echo "$lt_cv_prog_gnu_ld" >&6; } +with_gnu_ld=$lt_cv_prog_gnu_ld + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 +$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } +if ${lt_cv_path_NM+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM=$NM +else + lt_nm_to_check=${ac_tool_prefix}nm + if test -n "$ac_tool_prefix" && test "$build" = "$host"; then + lt_nm_to_check="$lt_nm_to_check nm" + fi + for lt_tmp_nm in $lt_nm_to_check; do + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do + IFS=$lt_save_ifs + test -z "$ac_dir" && ac_dir=. + tmp_nm=$ac_dir/$lt_tmp_nm + if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext"; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the 'sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + # Tru64's nm complains that /dev/null is an invalid object file + # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty + case $build_os in + mingw*) lt_bad_file=conftest.nm/nofile ;; + *) lt_bad_file=/dev/null ;; + esac + case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in + *$lt_bad_file* | *'Invalid file or object type'*) + lt_cv_path_NM="$tmp_nm -B" + break 2 + ;; + *) + case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break 2 + ;; + *) + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + ;; + esac + ;; + esac + fi + done + IFS=$lt_save_ifs + done + : ${lt_cv_path_NM=no} +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 +$as_echo "$lt_cv_path_NM" >&6; } +if test no != "$lt_cv_path_NM"; then + NM=$lt_cv_path_NM +else + # Didn't find any BSD compatible name lister, look for dumpbin. + if test -n "$DUMPBIN"; then : + # Let the user override the test. + else + if test -n "$ac_tool_prefix"; then + for ac_prog in dumpbin "link -dump" + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_DUMPBIN+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DUMPBIN"; then + ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DUMPBIN=$ac_cv_prog_DUMPBIN +if test -n "$DUMPBIN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 +$as_echo "$DUMPBIN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$DUMPBIN" && break + done +fi +if test -z "$DUMPBIN"; then + ac_ct_DUMPBIN=$DUMPBIN + for ac_prog in dumpbin "link -dump" +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DUMPBIN"; then + ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN +if test -n "$ac_ct_DUMPBIN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 +$as_echo "$ac_ct_DUMPBIN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_DUMPBIN" && break +done + + if test "x$ac_ct_DUMPBIN" = x; then + DUMPBIN=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DUMPBIN=$ac_ct_DUMPBIN + fi +fi + + case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in + *COFF*) + DUMPBIN="$DUMPBIN -symbols -headers" + ;; + *) + DUMPBIN=: + ;; + esac + fi + + if test : != "$DUMPBIN"; then + NM=$DUMPBIN + fi +fi +test -z "$NM" && NM=nm + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 +$as_echo_n "checking the name lister ($NM) interface... " >&6; } +if ${lt_cv_nm_interface+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_nm_interface="BSD nm" + echo "int some_variable = 0;" > conftest.$ac_ext + (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) + (eval "$ac_compile" 2>conftest.err) + cat conftest.err >&5 + (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5) + (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) + cat conftest.err >&5 + (eval echo "\"\$as_me:$LINENO: output\"" >&5) + cat conftest.out >&5 + if $GREP 'External.*some_variable' conftest.out > /dev/null; then + lt_cv_nm_interface="MS dumpbin" + fi + rm -f conftest* +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 +$as_echo "$lt_cv_nm_interface" >&6; } + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 +$as_echo_n "checking whether ln -s works... " >&6; } +LN_S=$as_ln_s +if test "$LN_S" = "ln -s"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 +$as_echo "no, using $LN_S" >&6; } +fi + +# find the maximum length of command line arguments +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 +$as_echo_n "checking the maximum length of command line arguments... " >&6; } +if ${lt_cv_sys_max_cmd_len+:} false; then : + $as_echo_n "(cached) " >&6 +else + i=0 + teststring=ABCD + + case $build_os in + msdosdjgpp*) + # On DJGPP, this test can blow up pretty badly due to problems in libc + # (any single argument exceeding 2000 bytes causes a buffer overrun + # during glob expansion). Even if it were fixed, the result of this + # check would be larger than it should be. + lt_cv_sys_max_cmd_len=12288; # 12K is about right + ;; + + gnu*) + # Under GNU Hurd, this test is not required because there is + # no limit to the length of command line arguments. + # Libtool will interpret -1 as no limit whatsoever + lt_cv_sys_max_cmd_len=-1; + ;; + + cygwin* | mingw* | cegcc*) + # On Win9x/ME, this test blows up -- it succeeds, but takes + # about 5 minutes as the teststring grows exponentially. + # Worse, since 9x/ME are not pre-emptively multitasking, + # you end up with a "frozen" computer, even though with patience + # the test eventually succeeds (with a max line length of 256k). + # Instead, let's just punt: use the minimum linelength reported by + # all of the supported platforms: 8192 (on NT/2K/XP). + lt_cv_sys_max_cmd_len=8192; + ;; + + mint*) + # On MiNT this can take a long time and run out of memory. + lt_cv_sys_max_cmd_len=8192; + ;; + + amigaos*) + # On AmigaOS with pdksh, this test takes hours, literally. + # So we just punt and use a minimum line length of 8192. + lt_cv_sys_max_cmd_len=8192; + ;; + + bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*) + # This has been around since 386BSD, at least. Likely further. + if test -x /sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` + elif test -x /usr/sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` + else + lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs + fi + # And add a safety zone + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + ;; + + interix*) + # We know the value 262144 and hardcode it with a safety zone (like BSD) + lt_cv_sys_max_cmd_len=196608 + ;; + + os2*) + # The test takes a long time on OS/2. + lt_cv_sys_max_cmd_len=8192 + ;; + + osf*) + # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure + # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not + # nice to cause kernel panics so lets avoid the loop below. + # First set a reasonable default. + lt_cv_sys_max_cmd_len=16384 + # + if test -x /sbin/sysconfig; then + case `/sbin/sysconfig -q proc exec_disable_arg_limit` in + *1*) lt_cv_sys_max_cmd_len=-1 ;; + esac + fi + ;; + sco3.2v5*) + lt_cv_sys_max_cmd_len=102400 + ;; + sysv5* | sco5v6* | sysv4.2uw2*) + kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` + if test -n "$kargmax"; then + lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` + else + lt_cv_sys_max_cmd_len=32768 + fi + ;; + *) + lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` + if test -n "$lt_cv_sys_max_cmd_len" && \ + test undefined != "$lt_cv_sys_max_cmd_len"; then + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + else + # Make teststring a little bigger before we do anything with it. + # a 1K string should be a reasonable start. + for i in 1 2 3 4 5 6 7 8; do + teststring=$teststring$teststring + done + SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} + # If test is not a shell built-in, we'll probably end up computing a + # maximum length that is only half of the actual maximum length, but + # we can't tell. + while { test X`env echo "$teststring$teststring" 2>/dev/null` \ + = "X$teststring$teststring"; } >/dev/null 2>&1 && + test 17 != "$i" # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + # Only check the string length outside the loop. + lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` + teststring= + # Add a significant safety factor because C++ compilers can tack on + # massive amounts of additional arguments before passing them to the + # linker. It appears as though 1/2 is a usable value. + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + fi + ;; + esac + +fi + +if test -n "$lt_cv_sys_max_cmd_len"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 +$as_echo "$lt_cv_sys_max_cmd_len" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 +$as_echo "none" >&6; } +fi +max_cmd_len=$lt_cv_sys_max_cmd_len + + + + + + +: ${CP="cp -f"} +: ${MV="mv -f"} +: ${RM="rm -f"} + +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + lt_unset=unset +else + lt_unset=false +fi + + + + + +# test EBCDIC or ASCII +case `echo X|tr X '\101'` in + A) # ASCII based system + # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr + lt_SP2NL='tr \040 \012' + lt_NL2SP='tr \015\012 \040\040' + ;; + *) # EBCDIC based system + lt_SP2NL='tr \100 \n' + lt_NL2SP='tr \r\n \100\100' + ;; +esac + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 +$as_echo_n "checking how to convert $build file names to $host format... " >&6; } +if ${lt_cv_to_host_file_cmd+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 + ;; + esac + ;; + *-*-cygwin* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin + ;; + esac + ;; + * ) # unhandled hosts (and "normal" native builds) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; +esac + +fi + +to_host_file_cmd=$lt_cv_to_host_file_cmd +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 +$as_echo "$lt_cv_to_host_file_cmd" >&6; } + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 +$as_echo_n "checking how to convert $build file names to toolchain format... " >&6; } +if ${lt_cv_to_tool_file_cmd+:} false; then : + $as_echo_n "(cached) " >&6 +else + #assume ordinary cross tools, or native build. +lt_cv_to_tool_file_cmd=func_convert_file_noop +case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 + ;; + esac + ;; +esac + +fi + +to_tool_file_cmd=$lt_cv_to_tool_file_cmd +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 +$as_echo "$lt_cv_to_tool_file_cmd" >&6; } + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 +$as_echo_n "checking for $LD option to reload object files... " >&6; } +if ${lt_cv_ld_reload_flag+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_reload_flag='-r' +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 +$as_echo "$lt_cv_ld_reload_flag" >&6; } +reload_flag=$lt_cv_ld_reload_flag +case $reload_flag in +"" | " "*) ;; +*) reload_flag=" $reload_flag" ;; +esac +reload_cmds='$LD$reload_flag -o $output$reload_objs' +case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + if test yes != "$GCC"; then + reload_cmds=false + fi + ;; + darwin*) + if test yes = "$GCC"; then + reload_cmds='$LTCC $LTCFLAGS -nostdlib $wl-r -o $output$reload_objs' + else + reload_cmds='$LD$reload_flag -o $output$reload_objs' + fi + ;; +esac + + + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. +set dummy ${ac_tool_prefix}objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OBJDUMP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OBJDUMP"; then + ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OBJDUMP=$ac_cv_prog_OBJDUMP +if test -n "$OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 +$as_echo "$OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OBJDUMP"; then + ac_ct_OBJDUMP=$OBJDUMP + # Extract the first word of "objdump", so it can be a program name with args. +set dummy objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OBJDUMP"; then + ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_OBJDUMP="objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP +if test -n "$ac_ct_OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 +$as_echo "$ac_ct_OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OBJDUMP" = x; then + OBJDUMP="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OBJDUMP=$ac_ct_OBJDUMP + fi +else + OBJDUMP="$ac_cv_prog_OBJDUMP" +fi + +test -z "$OBJDUMP" && OBJDUMP=objdump + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 +$as_echo_n "checking how to recognize dependent libraries... " >&6; } +if ${lt_cv_deplibs_check_method+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_file_magic_cmd='$MAGIC_CMD' +lt_cv_file_magic_test_file= +lt_cv_deplibs_check_method='unknown' +# Need to set the preceding variable on all platforms that support +# interlibrary dependencies. +# 'none' -- dependencies not supported. +# 'unknown' -- same as none, but documents that we really don't know. +# 'pass_all' -- all dependencies passed with no checks. +# 'test_compile' -- check by making test program. +# 'file_magic [[regex]]' -- check by looking for files in library path +# that responds to the $file_magic_cmd with a given extended regex. +# If you have 'file' or equivalent on your system and you're not sure +# whether 'pass_all' will *always* work, you probably want this one. + +case $host_os in +aix[4-9]*) + lt_cv_deplibs_check_method=pass_all + ;; + +beos*) + lt_cv_deplibs_check_method=pass_all + ;; + +bsdi[45]*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' + lt_cv_file_magic_cmd='/usr/bin/file -L' + lt_cv_file_magic_test_file=/shlib/libc.so + ;; + +cygwin*) + # func_win32_libid is a shell function defined in ltmain.sh + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + ;; + +mingw* | pw32*) + # Base MSYS/MinGW do not provide the 'file' command needed by + # func_win32_libid shell function, so use a weaker test based on 'objdump', + # unless we find 'file', for example because we are cross-compiling. + if ( file / ) >/dev/null 2>&1; then + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + else + # Keep this pattern in sync with the one in func_win32_libid. + lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' + lt_cv_file_magic_cmd='$OBJDUMP -f' + fi + ;; + +cegcc*) + # use the weaker test based on 'objdump'. See mingw*. + lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + ;; + +darwin* | rhapsody*) + lt_cv_deplibs_check_method=pass_all + ;; + +freebsd* | dragonfly*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + case $host_cpu in + i*86 ) + # Not sure whether the presence of OpenBSD here was a mistake. + # Let's accept both of them until this is cleared up. + lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + ;; + esac + else + lt_cv_deplibs_check_method=pass_all + fi + ;; + +haiku*) + lt_cv_deplibs_check_method=pass_all + ;; + +hpux10.20* | hpux11*) + lt_cv_file_magic_cmd=/usr/bin/file + case $host_cpu in + ia64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' + lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so + ;; + hppa*64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]' + lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl + ;; + *) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library' + lt_cv_file_magic_test_file=/usr/lib/libc.sl + ;; + esac + ;; + +interix[3-9]*) + # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' + ;; + +irix5* | irix6* | nonstopux*) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + lt_cv_deplibs_check_method=pass_all + ;; + +# This must be glibc/ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + lt_cv_deplibs_check_method=pass_all + ;; + +netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' + fi + ;; + +newos6*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libnls.so + ;; + +*nto* | *qnx*) + lt_cv_deplibs_check_method=pass_all + ;; + +openbsd* | bitrig*) + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + fi + ;; + +osf3* | osf4* | osf5*) + lt_cv_deplibs_check_method=pass_all + ;; + +rdos*) + lt_cv_deplibs_check_method=pass_all + ;; + +solaris*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv4 | sysv4.3*) + case $host_vendor in + motorola) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` + ;; + ncr) + lt_cv_deplibs_check_method=pass_all + ;; + sequent) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' + ;; + sni) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" + lt_cv_file_magic_test_file=/lib/libc.so + ;; + siemens) + lt_cv_deplibs_check_method=pass_all + ;; + pc) + lt_cv_deplibs_check_method=pass_all + ;; + esac + ;; + +tpf*) + lt_cv_deplibs_check_method=pass_all + ;; +os2*) + lt_cv_deplibs_check_method=pass_all + ;; +esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 +$as_echo "$lt_cv_deplibs_check_method" >&6; } + +file_magic_glob= +want_nocaseglob=no +if test "$build" = "$host"; then + case $host_os in + mingw* | pw32*) + if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then + want_nocaseglob=yes + else + file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"` + fi + ;; + esac +fi + +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method +test -z "$deplibs_check_method" && deplibs_check_method=unknown + + + + + + + + + + + + + + + + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. +set dummy ${ac_tool_prefix}dlltool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_DLLTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DLLTOOL"; then + ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DLLTOOL=$ac_cv_prog_DLLTOOL +if test -n "$DLLTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 +$as_echo "$DLLTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_DLLTOOL"; then + ac_ct_DLLTOOL=$DLLTOOL + # Extract the first word of "dlltool", so it can be a program name with args. +set dummy dlltool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DLLTOOL"; then + ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_DLLTOOL="dlltool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL +if test -n "$ac_ct_DLLTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 +$as_echo "$ac_ct_DLLTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_DLLTOOL" = x; then + DLLTOOL="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DLLTOOL=$ac_ct_DLLTOOL + fi +else + DLLTOOL="$ac_cv_prog_DLLTOOL" +fi + +test -z "$DLLTOOL" && DLLTOOL=dlltool + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 +$as_echo_n "checking how to associate runtime and link libraries... " >&6; } +if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_sharedlib_from_linklib_cmd='unknown' + +case $host_os in +cygwin* | mingw* | pw32* | cegcc*) + # two different shell functions defined in ltmain.sh; + # decide which one to use based on capabilities of $DLLTOOL + case `$DLLTOOL --help 2>&1` in + *--identify-strict*) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib + ;; + *) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback + ;; + esac + ;; +*) + # fallback: assume linklib IS sharedlib + lt_cv_sharedlib_from_linklib_cmd=$ECHO + ;; +esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 +$as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; } +sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd +test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO + + + + + + + +if test -n "$ac_tool_prefix"; then + for ac_prog in ar + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AR" && break + done +fi +if test -z "$AR"; then + ac_ct_AR=$AR + for ac_prog in ar +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_AR" && break +done + + if test "x$ac_ct_AR" = x; then + AR="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +fi + +: ${AR=ar} +: ${AR_FLAGS=cru} + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 +$as_echo_n "checking for archiver @FILE support... " >&6; } +if ${lt_cv_ar_at_file+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ar_at_file=no + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + echo conftest.$ac_objext > conftest.lst + lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 + (eval $lt_ar_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if test 0 -eq "$ac_status"; then + # Ensure the archiver fails upon bogus file names. + rm -f conftest.$ac_objext libconftest.a + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 + (eval $lt_ar_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if test 0 -ne "$ac_status"; then + lt_cv_ar_at_file=@ + fi + fi + rm -f conftest.* libconftest.a + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 +$as_echo "$lt_cv_ar_at_file" >&6; } + +if test no = "$lt_cv_ar_at_file"; then + archiver_list_spec= +else + archiver_list_spec=$lt_cv_ar_at_file +fi + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_STRIP="strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +test -z "$STRIP" && STRIP=: + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. +set dummy ${ac_tool_prefix}ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_RANLIB+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$RANLIB"; then + ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +RANLIB=$ac_cv_prog_RANLIB +if test -n "$RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 +$as_echo "$RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_RANLIB"; then + ac_ct_RANLIB=$RANLIB + # Extract the first word of "ranlib", so it can be a program name with args. +set dummy ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_RANLIB"; then + ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_RANLIB="ranlib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB +if test -n "$ac_ct_RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 +$as_echo "$ac_ct_RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_RANLIB" = x; then + RANLIB=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + RANLIB=$ac_ct_RANLIB + fi +else + RANLIB="$ac_cv_prog_RANLIB" +fi + +test -z "$RANLIB" && RANLIB=: + + + + + + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= + +if test -n "$RANLIB"; then + case $host_os in + bitrig* | openbsd*) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" + ;; + *) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" + ;; + esac + old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" +fi + +case $host_os in + darwin*) + lock_old_archive_extraction=yes ;; + *) + lock_old_archive_extraction=no ;; +esac + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + +# Check for command to grab the raw symbol name followed by C symbol from nm. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 +$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } +if ${lt_cv_sys_global_symbol_pipe+:} false; then : + $as_echo_n "(cached) " >&6 +else + +# These are sane defaults that work on at least a few old systems. +# [They come from Ultrix. What could be older than Ultrix?!! ;)] + +# Character class describing NM global symbol codes. +symcode='[BCDEGRST]' + +# Regexp to match symbols that can be accessed directly from C. +sympat='\([_A-Za-z][_A-Za-z0-9]*\)' + +# Define system-specific variables. +case $host_os in +aix*) + symcode='[BCDT]' + ;; +cygwin* | mingw* | pw32* | cegcc*) + symcode='[ABCDGISTW]' + ;; +hpux*) + if test ia64 = "$host_cpu"; then + symcode='[ABCDEGRST]' + fi + ;; +irix* | nonstopux*) + symcode='[BCDEGRST]' + ;; +osf*) + symcode='[BCDEGQRST]' + ;; +solaris*) + symcode='[BDRT]' + ;; +sco3.2v5*) + symcode='[DT]' + ;; +sysv4.2uw2*) + symcode='[DT]' + ;; +sysv5* | sco5v6* | unixware* | OpenUNIX*) + symcode='[ABDT]' + ;; +sysv4) + symcode='[DFNSTU]' + ;; +esac + +# If we're using GNU nm, then use its standard symbol codes. +case `$NM -V 2>&1` in +*GNU* | *'with BFD'*) + symcode='[ABCDGIRSTW]' ;; +esac + +if test "$lt_cv_nm_interface" = "MS dumpbin"; then + # Gets list of data symbols to import. + lt_cv_sys_global_symbol_to_import="sed -n -e 's/^I .* \(.*\)$/\1/p'" + # Adjust the below global symbol transforms to fixup imported variables. + lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'" + lt_c_name_hook=" -e 's/^I .* \(.*\)$/ {\"\1\", (void *) 0},/p'" + lt_c_name_lib_hook="\ + -e 's/^I .* \(lib.*\)$/ {\"\1\", (void *) 0},/p'\ + -e 's/^I .* \(.*\)$/ {\"lib\1\", (void *) 0},/p'" +else + # Disable hooks by default. + lt_cv_sys_global_symbol_to_import= + lt_cdecl_hook= + lt_c_name_hook= + lt_c_name_lib_hook= +fi + +# Transform an extracted symbol line into a proper C declaration. +# Some systems (esp. on ia64) link data and code symbols differently, +# so use this general approach. +lt_cv_sys_global_symbol_to_cdecl="sed -n"\ +$lt_cdecl_hook\ +" -e 's/^T .* \(.*\)$/extern int \1();/p'"\ +" -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'" + +# Transform an extracted symbol line into symbol name and symbol address +lt_cv_sys_global_symbol_to_c_name_address="sed -n"\ +$lt_c_name_hook\ +" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ +" -e 's/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/p'" + +# Transform an extracted symbol line into symbol name with lib prefix and +# symbol address. +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n"\ +$lt_c_name_lib_hook\ +" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ +" -e 's/^$symcode$symcode* .* \(lib.*\)$/ {\"\1\", (void *) \&\1},/p'"\ +" -e 's/^$symcode$symcode* .* \(.*\)$/ {\"lib\1\", (void *) \&\1},/p'" + +# Handle CRLF in mingw tool chain +opt_cr= +case $build_os in +mingw*) + opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp + ;; +esac + +# Try without a prefix underscore, then with it. +for ac_symprfx in "" "_"; do + + # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. + symxfrm="\\1 $ac_symprfx\\2 \\2" + + # Write the raw and C identifiers. + if test "$lt_cv_nm_interface" = "MS dumpbin"; then + # Fake it for dumpbin and say T for any non-static function, + # D for any global variable and I for any imported variable. + # Also find C++ and __fastcall symbols from MSVC++, + # which start with @ or ?. + lt_cv_sys_global_symbol_pipe="$AWK '"\ +" {last_section=section; section=\$ 3};"\ +" /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ +" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ +" /^ *Symbol name *: /{split(\$ 0,sn,\":\"); si=substr(sn[2],2)};"\ +" /^ *Type *: code/{print \"T\",si,substr(si,length(prfx))};"\ +" /^ *Type *: data/{print \"I\",si,substr(si,length(prfx))};"\ +" \$ 0!~/External *\|/{next};"\ +" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ +" {if(hide[section]) next};"\ +" {f=\"D\"}; \$ 0~/\(\).*\|/{f=\"T\"};"\ +" {split(\$ 0,a,/\||\r/); split(a[2],s)};"\ +" s[1]~/^[@?]/{print f,s[1],s[1]; next};"\ +" s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\ +" ' prfx=^$ac_symprfx" + else + lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" + fi + lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" + + # Check to see that the pipe works correctly. + pipe_works=no + + rm -f conftest* + cat > conftest.$ac_ext <<_LT_EOF +#ifdef __cplusplus +extern "C" { +#endif +char nm_test_var; +void nm_test_func(void); +void nm_test_func(void){} +#ifdef __cplusplus +} +#endif +int main(){nm_test_var='a';nm_test_func();return(0);} +_LT_EOF + + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + # Now try to grab the symbols. + nlist=conftest.nm + $ECHO "$as_me:$LINENO: $NM conftest.$ac_objext | $lt_cv_sys_global_symbol_pipe > $nlist" >&5 + if eval "$NM" conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist 2>&5 && test -s "$nlist"; then + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + else + rm -f "$nlist"T + fi + + # Make sure that we snagged all the symbols we need. + if $GREP ' nm_test_var$' "$nlist" >/dev/null; then + if $GREP ' nm_test_func$' "$nlist" >/dev/null; then + cat <<_LT_EOF > conftest.$ac_ext +/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ +#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE +/* DATA imports from DLLs on WIN32 can't be const, because runtime + relocations are performed -- see ld's documentation on pseudo-relocs. */ +# define LT_DLSYM_CONST +#elif defined __osf__ +/* This system does not cope well with relocations in const data. */ +# define LT_DLSYM_CONST +#else +# define LT_DLSYM_CONST const +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +_LT_EOF + # Now generate the symbol file. + eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' + + cat <<_LT_EOF >> conftest.$ac_ext + +/* The mapping between symbol names and symbols. */ +LT_DLSYM_CONST struct { + const char *name; + void *address; +} +lt__PROGRAM__LTX_preloaded_symbols[] = +{ + { "@PROGRAM@", (void *) 0 }, +_LT_EOF + $SED "s/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext + cat <<\_LT_EOF >> conftest.$ac_ext + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt__PROGRAM__LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif +_LT_EOF + # Now try linking the two files. + mv conftest.$ac_objext conftstm.$ac_objext + lt_globsym_save_LIBS=$LIBS + lt_globsym_save_CFLAGS=$CFLAGS + LIBS=conftstm.$ac_objext + CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest$ac_exeext; then + pipe_works=yes + fi + LIBS=$lt_globsym_save_LIBS + CFLAGS=$lt_globsym_save_CFLAGS + else + echo "cannot find nm_test_func in $nlist" >&5 + fi + else + echo "cannot find nm_test_var in $nlist" >&5 + fi + else + echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 + fi + else + echo "$progname: failed program was:" >&5 + cat conftest.$ac_ext >&5 + fi + rm -rf conftest* conftst* + + # Do not use the global_symbol_pipe unless it works. + if test yes = "$pipe_works"; then + break + else + lt_cv_sys_global_symbol_pipe= + fi +done + +fi + +if test -z "$lt_cv_sys_global_symbol_pipe"; then + lt_cv_sys_global_symbol_to_cdecl= +fi +if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 +$as_echo "failed" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 +$as_echo "ok" >&6; } +fi + +# Response file support. +if test "$lt_cv_nm_interface" = "MS dumpbin"; then + nm_file_list_spec='@' +elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then + nm_file_list_spec='@' +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 +$as_echo_n "checking for sysroot... " >&6; } + +# Check whether --with-sysroot was given. +if test "${with_sysroot+set}" = set; then : + withval=$with_sysroot; +else + with_sysroot=no +fi + + +lt_sysroot= +case $with_sysroot in #( + yes) + if test yes = "$GCC"; then + lt_sysroot=`$CC --print-sysroot 2>/dev/null` + fi + ;; #( + /*) + lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` + ;; #( + no|'') + ;; #( + *) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_sysroot" >&5 +$as_echo "$with_sysroot" >&6; } + as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5 + ;; +esac + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 +$as_echo "${lt_sysroot:-no}" >&6; } + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a working dd" >&5 +$as_echo_n "checking for a working dd... " >&6; } +if ${ac_cv_path_lt_DD+:} false; then : + $as_echo_n "(cached) " >&6 +else + printf 0123456789abcdef0123456789abcdef >conftest.i +cat conftest.i conftest.i >conftest2.i +: ${lt_DD:=$DD} +if test -z "$lt_DD"; then + ac_path_lt_DD_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in dd; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_lt_DD="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_lt_DD" || continue +if "$ac_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then + cmp -s conftest.i conftest.out \ + && ac_cv_path_lt_DD="$ac_path_lt_DD" ac_path_lt_DD_found=: +fi + $ac_path_lt_DD_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_lt_DD"; then + : + fi +else + ac_cv_path_lt_DD=$lt_DD +fi + +rm -f conftest.i conftest2.i conftest.out +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_lt_DD" >&5 +$as_echo "$ac_cv_path_lt_DD" >&6; } + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to truncate binary pipes" >&5 +$as_echo_n "checking how to truncate binary pipes... " >&6; } +if ${lt_cv_truncate_bin+:} false; then : + $as_echo_n "(cached) " >&6 +else + printf 0123456789abcdef0123456789abcdef >conftest.i +cat conftest.i conftest.i >conftest2.i +lt_cv_truncate_bin= +if "$ac_cv_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then + cmp -s conftest.i conftest.out \ + && lt_cv_truncate_bin="$ac_cv_path_lt_DD bs=4096 count=1" +fi +rm -f conftest.i conftest2.i conftest.out +test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q" +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_truncate_bin" >&5 +$as_echo "$lt_cv_truncate_bin" >&6; } + + + + + + + +# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. +func_cc_basename () +{ + for cc_temp in $*""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac + done + func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` +} + +# Check whether --enable-libtool-lock was given. +if test "${enable_libtool_lock+set}" = set; then : + enableval=$enable_libtool_lock; +fi + +test no = "$enable_libtool_lock" || enable_libtool_lock=yes + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case $host in +ia64-*-hpux*) + # Find out what ABI is being produced by ac_compile, and set mode + # options accordingly. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.$ac_objext` in + *ELF-32*) + HPUX_IA64_MODE=32 + ;; + *ELF-64*) + HPUX_IA64_MODE=64 + ;; + esac + fi + rm -rf conftest* + ;; +*-*-irix6*) + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. + echo '#line '$LINENO' "configure"' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + if test yes = "$lt_cv_prog_gnu_ld"; then + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -melf32bsmip" + ;; + *N32*) + LD="${LD-ld} -melf32bmipn32" + ;; + *64-bit*) + LD="${LD-ld} -melf64bmip" + ;; + esac + else + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + fi + rm -rf conftest* + ;; + +mips64*-*linux*) + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. + echo '#line '$LINENO' "configure"' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + emul=elf + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + emul="${emul}32" + ;; + *64-bit*) + emul="${emul}64" + ;; + esac + case `/usr/bin/file conftest.$ac_objext` in + *MSB*) + emul="${emul}btsmip" + ;; + *LSB*) + emul="${emul}ltsmip" + ;; + esac + case `/usr/bin/file conftest.$ac_objext` in + *N32*) + emul="${emul}n32" + ;; + esac + LD="${LD-ld} -m $emul" + fi + rm -rf conftest* + ;; + +x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \ +s390*-*linux*|s390*-*tpf*|sparc*-*linux*) + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. Note that the listed cases only cover the + # situations where additional linker options are needed (such as when + # doing 32-bit compilation for a host where ld defaults to 64-bit, or + # vice versa); the common cases where no linker options are needed do + # not appear in the list. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.o` in + *32-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_i386_fbsd" + ;; + x86_64-*linux*) + case `/usr/bin/file conftest.o` in + *x86-64*) + LD="${LD-ld} -m elf32_x86_64" + ;; + *) + LD="${LD-ld} -m elf_i386" + ;; + esac + ;; + powerpc64le-*linux*) + LD="${LD-ld} -m elf32lppclinux" + ;; + powerpc64-*linux*) + LD="${LD-ld} -m elf32ppclinux" + ;; + s390x-*linux*) + LD="${LD-ld} -m elf_s390" + ;; + sparc64-*linux*) + LD="${LD-ld} -m elf32_sparc" + ;; + esac + ;; + *64-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_x86_64_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_x86_64" + ;; + powerpcle-*linux*) + LD="${LD-ld} -m elf64lppc" + ;; + powerpc-*linux*) + LD="${LD-ld} -m elf64ppc" + ;; + s390*-*linux*|s390*-*tpf*) + LD="${LD-ld} -m elf64_s390" + ;; + sparc*-*linux*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS=$CFLAGS + CFLAGS="$CFLAGS -belf" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 +$as_echo_n "checking whether the C compiler needs -belf... " >&6; } +if ${lt_cv_cc_needs_belf+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + lt_cv_cc_needs_belf=yes +else + lt_cv_cc_needs_belf=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 +$as_echo "$lt_cv_cc_needs_belf" >&6; } + if test yes != "$lt_cv_cc_needs_belf"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS=$SAVE_CFLAGS + fi + ;; +*-*solaris*) + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.o` in + *64-bit*) + case $lt_cv_prog_gnu_ld in + yes*) + case $host in + i?86-*-solaris*|x86_64-*-solaris*) + LD="${LD-ld} -m elf_x86_64" + ;; + sparc*-*-solaris*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + # GNU ld 2.21 introduced _sol2 emulations. Use them if available. + if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then + LD=${LD-ld}_sol2 + fi + ;; + *) + if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then + LD="${LD-ld} -64" + fi + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; +esac + +need_locks=$enable_libtool_lock + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args. +set dummy ${ac_tool_prefix}mt; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_MANIFEST_TOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$MANIFEST_TOOL"; then + ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL +if test -n "$MANIFEST_TOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 +$as_echo "$MANIFEST_TOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_MANIFEST_TOOL"; then + ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL + # Extract the first word of "mt", so it can be a program name with args. +set dummy mt; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_MANIFEST_TOOL"; then + ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_MANIFEST_TOOL="mt" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL +if test -n "$ac_ct_MANIFEST_TOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 +$as_echo "$ac_ct_MANIFEST_TOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_MANIFEST_TOOL" = x; then + MANIFEST_TOOL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL + fi +else + MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL" +fi + +test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 +$as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } +if ${lt_cv_path_mainfest_tool+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_path_mainfest_tool=no + echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5 + $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out + cat conftest.err >&5 + if $GREP 'Manifest Tool' conftest.out > /dev/null; then + lt_cv_path_mainfest_tool=yes + fi + rm -f conftest* +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 +$as_echo "$lt_cv_path_mainfest_tool" >&6; } +if test yes != "$lt_cv_path_mainfest_tool"; then + MANIFEST_TOOL=: +fi + + + + + + + case $host_os in + rhapsody* | darwin*) + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. +set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_DSYMUTIL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DSYMUTIL"; then + ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DSYMUTIL=$ac_cv_prog_DSYMUTIL +if test -n "$DSYMUTIL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 +$as_echo "$DSYMUTIL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_DSYMUTIL"; then + ac_ct_DSYMUTIL=$DSYMUTIL + # Extract the first word of "dsymutil", so it can be a program name with args. +set dummy dsymutil; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DSYMUTIL"; then + ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL +if test -n "$ac_ct_DSYMUTIL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 +$as_echo "$ac_ct_DSYMUTIL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_DSYMUTIL" = x; then + DSYMUTIL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DSYMUTIL=$ac_ct_DSYMUTIL + fi +else + DSYMUTIL="$ac_cv_prog_DSYMUTIL" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. +set dummy ${ac_tool_prefix}nmedit; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_NMEDIT+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$NMEDIT"; then + ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +NMEDIT=$ac_cv_prog_NMEDIT +if test -n "$NMEDIT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 +$as_echo "$NMEDIT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_NMEDIT"; then + ac_ct_NMEDIT=$NMEDIT + # Extract the first word of "nmedit", so it can be a program name with args. +set dummy nmedit; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_NMEDIT"; then + ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_NMEDIT="nmedit" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT +if test -n "$ac_ct_NMEDIT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 +$as_echo "$ac_ct_NMEDIT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_NMEDIT" = x; then + NMEDIT=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + NMEDIT=$ac_ct_NMEDIT + fi +else + NMEDIT="$ac_cv_prog_NMEDIT" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. +set dummy ${ac_tool_prefix}lipo; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_LIPO+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$LIPO"; then + ac_cv_prog_LIPO="$LIPO" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_LIPO="${ac_tool_prefix}lipo" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +LIPO=$ac_cv_prog_LIPO +if test -n "$LIPO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 +$as_echo "$LIPO" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_LIPO"; then + ac_ct_LIPO=$LIPO + # Extract the first word of "lipo", so it can be a program name with args. +set dummy lipo; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_LIPO+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_LIPO"; then + ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_LIPO="lipo" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO +if test -n "$ac_ct_LIPO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 +$as_echo "$ac_ct_LIPO" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_LIPO" = x; then + LIPO=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + LIPO=$ac_ct_LIPO + fi +else + LIPO="$ac_cv_prog_LIPO" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. +set dummy ${ac_tool_prefix}otool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OTOOL"; then + ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_OTOOL="${ac_tool_prefix}otool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OTOOL=$ac_cv_prog_OTOOL +if test -n "$OTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 +$as_echo "$OTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OTOOL"; then + ac_ct_OTOOL=$OTOOL + # Extract the first word of "otool", so it can be a program name with args. +set dummy otool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OTOOL"; then + ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_OTOOL="otool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL +if test -n "$ac_ct_OTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 +$as_echo "$ac_ct_OTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OTOOL" = x; then + OTOOL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OTOOL=$ac_ct_OTOOL + fi +else + OTOOL="$ac_cv_prog_OTOOL" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. +set dummy ${ac_tool_prefix}otool64; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OTOOL64+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OTOOL64"; then + ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OTOOL64=$ac_cv_prog_OTOOL64 +if test -n "$OTOOL64"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 +$as_echo "$OTOOL64" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OTOOL64"; then + ac_ct_OTOOL64=$OTOOL64 + # Extract the first word of "otool64", so it can be a program name with args. +set dummy otool64; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OTOOL64"; then + ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_OTOOL64="otool64" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 +if test -n "$ac_ct_OTOOL64"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 +$as_echo "$ac_ct_OTOOL64" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OTOOL64" = x; then + OTOOL64=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OTOOL64=$ac_ct_OTOOL64 + fi +else + OTOOL64="$ac_cv_prog_OTOOL64" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 +$as_echo_n "checking for -single_module linker flag... " >&6; } +if ${lt_cv_apple_cc_single_mod+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_apple_cc_single_mod=no + if test -z "$LT_MULTI_MODULE"; then + # By default we will add the -single_module flag. You can override + # by either setting the environment variable LT_MULTI_MODULE + # non-empty at configure time, or by adding -multi_module to the + # link flags. + rm -rf libconftest.dylib* + echo "int foo(void){return 1;}" > conftest.c + echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ +-dynamiclib -Wl,-single_module conftest.c" >&5 + $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ + -dynamiclib -Wl,-single_module conftest.c 2>conftest.err + _lt_result=$? + # If there is a non-empty error log, and "single_module" + # appears in it, assume the flag caused a linker warning + if test -s conftest.err && $GREP single_module conftest.err; then + cat conftest.err >&5 + # Otherwise, if the output was created with a 0 exit code from + # the compiler, it worked. + elif test -f libconftest.dylib && test 0 = "$_lt_result"; then + lt_cv_apple_cc_single_mod=yes + else + cat conftest.err >&5 + fi + rm -rf libconftest.dylib* + rm -f conftest.* + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 +$as_echo "$lt_cv_apple_cc_single_mod" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 +$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } +if ${lt_cv_ld_exported_symbols_list+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_exported_symbols_list=no + save_LDFLAGS=$LDFLAGS + echo "_main" > conftest.sym + LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + lt_cv_ld_exported_symbols_list=yes +else + lt_cv_ld_exported_symbols_list=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 +$as_echo "$lt_cv_ld_exported_symbols_list" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 +$as_echo_n "checking for -force_load linker flag... " >&6; } +if ${lt_cv_ld_force_load+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_force_load=no + cat > conftest.c << _LT_EOF +int forced_loaded() { return 2;} +_LT_EOF + echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5 + $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5 + echo "$AR cru libconftest.a conftest.o" >&5 + $AR cru libconftest.a conftest.o 2>&5 + echo "$RANLIB libconftest.a" >&5 + $RANLIB libconftest.a 2>&5 + cat > conftest.c << _LT_EOF +int main() { return 0;} +_LT_EOF + echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5 + $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err + _lt_result=$? + if test -s conftest.err && $GREP force_load conftest.err; then + cat conftest.err >&5 + elif test -f conftest && test 0 = "$_lt_result" && $GREP forced_load conftest >/dev/null 2>&1; then + lt_cv_ld_force_load=yes + else + cat conftest.err >&5 + fi + rm -f conftest.err libconftest.a conftest conftest.c + rm -rf conftest.dSYM + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 +$as_echo "$lt_cv_ld_force_load" >&6; } + case $host_os in + rhapsody* | darwin1.[012]) + _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;; + darwin1.*) + _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; + darwin*) # darwin 5.x on + # if running on 10.5 or later, the deployment target defaults + # to the OS version, if on x86, and 10.4, the deployment + # target defaults to 10.4. Don't you love it? + case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in + 10.0,*86*-darwin8*|10.0,*-darwin[91]*) + _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; + 10.[012][,.]*) + _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; + 10.*) + _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; + esac + ;; + esac + if test yes = "$lt_cv_apple_cc_single_mod"; then + _lt_dar_single_mod='$single_module' + fi + if test yes = "$lt_cv_ld_exported_symbols_list"; then + _lt_dar_export_syms=' $wl-exported_symbols_list,$output_objdir/$libname-symbols.expsym' + else + _lt_dar_export_syms='~$NMEDIT -s $output_objdir/$libname-symbols.expsym $lib' + fi + if test : != "$DSYMUTIL" && test no = "$lt_cv_ld_force_load"; then + _lt_dsymutil='~$DSYMUTIL $lib || :' + else + _lt_dsymutil= + fi + ;; + esac + +# func_munge_path_list VARIABLE PATH +# ----------------------------------- +# VARIABLE is name of variable containing _space_ separated list of +# directories to be munged by the contents of PATH, which is string +# having a format: +# "DIR[:DIR]:" +# string "DIR[ DIR]" will be prepended to VARIABLE +# ":DIR[:DIR]" +# string "DIR[ DIR]" will be appended to VARIABLE +# "DIRP[:DIRP]::[DIRA:]DIRA" +# string "DIRP[ DIRP]" will be prepended to VARIABLE and string +# "DIRA[ DIRA]" will be appended to VARIABLE +# "DIR[:DIR]" +# VARIABLE will be replaced by "DIR[ DIR]" +func_munge_path_list () +{ + case x$2 in + x) + ;; + *:) + eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\" + ;; + x:*) + eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\" + ;; + *::*) + eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" + eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\" + ;; + *) + eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\" + ;; + esac +} + +for ac_header in dlfcn.h +do : + ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default +" +if test "x$ac_cv_header_dlfcn_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_DLFCN_H 1 +_ACEOF + +fi + +done + + + + + +# Set options + + + + enable_dlopen=no + + + enable_win32_dll=no + + + # Check whether --enable-shared was given. +if test "${enable_shared+set}" = set; then : + enableval=$enable_shared; p=${PACKAGE-default} + case $enableval in + yes) enable_shared=yes ;; + no) enable_shared=no ;; + *) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, + for pkg in $enableval; do + IFS=$lt_save_ifs + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS=$lt_save_ifs + ;; + esac +else + enable_shared=yes +fi + + + + + + + + + + + +# Check whether --with-pic was given. +if test "${with_pic+set}" = set; then : + withval=$with_pic; lt_p=${PACKAGE-default} + case $withval in + yes|no) pic_mode=$withval ;; + *) + pic_mode=default + # Look at the argument we got. We use all the common list separators. + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, + for lt_pkg in $withval; do + IFS=$lt_save_ifs + if test "X$lt_pkg" = "X$lt_p"; then + pic_mode=yes + fi + done + IFS=$lt_save_ifs + ;; + esac +else + pic_mode=default +fi + + + + + + + + + # Check whether --enable-fast-install was given. +if test "${enable_fast_install+set}" = set; then : + enableval=$enable_fast_install; p=${PACKAGE-default} + case $enableval in + yes) enable_fast_install=yes ;; + no) enable_fast_install=no ;; + *) + enable_fast_install=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, + for pkg in $enableval; do + IFS=$lt_save_ifs + if test "X$pkg" = "X$p"; then + enable_fast_install=yes + fi + done + IFS=$lt_save_ifs + ;; + esac +else + enable_fast_install=yes +fi + + + + + + + + + shared_archive_member_spec= +case $host,$enable_shared in +power*-*-aix[5-9]*,yes) + { $as_echo "$as_me:${as_lineno-$LINENO}: checking which variant of shared library versioning to provide" >&5 +$as_echo_n "checking which variant of shared library versioning to provide... " >&6; } + +# Check whether --with-aix-soname was given. +if test "${with_aix_soname+set}" = set; then : + withval=$with_aix_soname; case $withval in + aix|svr4|both) + ;; + *) + as_fn_error $? "Unknown argument to --with-aix-soname" "$LINENO" 5 + ;; + esac + lt_cv_with_aix_soname=$with_aix_soname +else + if ${lt_cv_with_aix_soname+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_with_aix_soname=aix +fi + + with_aix_soname=$lt_cv_with_aix_soname +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_aix_soname" >&5 +$as_echo "$with_aix_soname" >&6; } + if test aix != "$with_aix_soname"; then + # For the AIX way of multilib, we name the shared archive member + # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o', + # and 'shr.imp' or 'shr_64.imp', respectively, for the Import File. + # Even when GNU compilers ignore OBJECT_MODE but need '-maix64' flag, + # the AIX toolchain works better with OBJECT_MODE set (default 32). + if test 64 = "${OBJECT_MODE-32}"; then + shared_archive_member_spec=shr_64 + else + shared_archive_member_spec=shr + fi + fi + ;; +*) + with_aix_soname=aix + ;; +esac + + + + + + + + + + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS=$ltmain + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +test -z "$LN_S" && LN_S="ln -s" + + + + + + + + + + + + + + +if test -n "${ZSH_VERSION+set}"; then + setopt NO_GLOB_SUBST +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 +$as_echo_n "checking for objdir... " >&6; } +if ${lt_cv_objdir+:} false; then : + $as_echo_n "(cached) " >&6 +else + rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + lt_cv_objdir=.libs +else + # MS-DOS does not allow filenames that begin with a dot. + lt_cv_objdir=_libs +fi +rmdir .libs 2>/dev/null +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 +$as_echo "$lt_cv_objdir" >&6; } +objdir=$lt_cv_objdir + + + + + +cat >>confdefs.h <<_ACEOF +#define LT_OBJDIR "$lt_cv_objdir/" +_ACEOF + + + + +case $host_os in +aix3*) + # AIX sometimes has problems with the GCC collect2 program. For some + # reason, if we set the COLLECT_NAMES environment variable, the problems + # vanish in a puff of smoke. + if test set != "${COLLECT_NAMES+set}"; then + COLLECT_NAMES= + export COLLECT_NAMES + fi + ;; +esac + +# Global variables: +ofile=libtool +can_build_shared=yes + +# All known linkers require a '.a' archive for static linking (except MSVC, +# which needs '.lib'). +libext=a + +with_gnu_ld=$lt_cv_prog_gnu_ld + +old_CC=$CC +old_CFLAGS=$CFLAGS + +# Set sane defaults for various variables +test -z "$CC" && CC=cc +test -z "$LTCC" && LTCC=$CC +test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS +test -z "$LD" && LD=ld +test -z "$ac_objext" && ac_objext=o + +func_cc_basename $compiler +cc_basename=$func_cc_basename_result + + +# Only perform the check for file, if the check method requires it +test -z "$MAGIC_CMD" && MAGIC_CMD=file +case $deplibs_check_method in +file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 +$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } +if ${lt_cv_path_MAGIC_CMD+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $MAGIC_CMD in +[\\/*] | ?:[\\/]*) + lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD=$MAGIC_CMD + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS=$lt_save_ifs + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/${ac_tool_prefix}file"; then + lt_cv_path_MAGIC_CMD=$ac_dir/"${ac_tool_prefix}file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD=$lt_cv_path_MAGIC_CMD + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS=$lt_save_ifs + MAGIC_CMD=$lt_save_MAGIC_CMD + ;; +esac +fi + +MAGIC_CMD=$lt_cv_path_MAGIC_CMD +if test -n "$MAGIC_CMD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +$as_echo "$MAGIC_CMD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + + +if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 +$as_echo_n "checking for file... " >&6; } +if ${lt_cv_path_MAGIC_CMD+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $MAGIC_CMD in +[\\/*] | ?:[\\/]*) + lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD=$MAGIC_CMD + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS=$lt_save_ifs + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/file"; then + lt_cv_path_MAGIC_CMD=$ac_dir/"file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD=$lt_cv_path_MAGIC_CMD + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS=$lt_save_ifs + MAGIC_CMD=$lt_save_MAGIC_CMD + ;; +esac +fi + +MAGIC_CMD=$lt_cv_path_MAGIC_CMD +if test -n "$MAGIC_CMD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +$as_echo "$MAGIC_CMD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + else + MAGIC_CMD=: + fi +fi + + fi + ;; +esac + +# Use C for the default configuration in the libtool script + +lt_save_CC=$CC +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +# Source file extension for C test sources. +ac_ext=c + +# Object file extension for compiled C test sources. +objext=o +objext=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(){return(0);}' + + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + +# Save the default compiler, since it gets overwritten when the other +# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. +compiler_DEFAULT=$CC + +# save warnings/boilerplate of simple test code +ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* + +ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* + + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +if test -n "$compiler"; then + +lt_prog_compiler_no_builtin_flag= + +if test yes = "$GCC"; then + case $cc_basename in + nvcc*) + lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;; + *) + lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;; + esac + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 +$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } +if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_rtti_exceptions=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="-fno-rtti -fno-exceptions" ## exclude from sc_useless_quotes_in_assignment + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_rtti_exceptions=yes + fi + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 +$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } + +if test yes = "$lt_cv_prog_compiler_rtti_exceptions"; then + lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" +else + : +fi + +fi + + + + + + + lt_prog_compiler_wl= +lt_prog_compiler_pic= +lt_prog_compiler_static= + + + if test yes = "$GCC"; then + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_static='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test ia64 = "$host_cpu"; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + fi + lt_prog_compiler_pic='-fPIC' + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + lt_prog_compiler_pic='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the '-m68020' flag to GCC prevents building anything better, + # like '-m68040'. + lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + lt_prog_compiler_pic='-DDLL_EXPORT' + case $host_os in + os2*) + lt_prog_compiler_static='$wl-static' + ;; + esac + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic='-fno-common' + ;; + + haiku*) + # PIC is the default for Haiku. + # The "-static" flag exists, but is broken. + lt_prog_compiler_static= + ;; + + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac + ;; + + interix[3-9]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + lt_prog_compiler_can_build_shared=no + enable_shared=no + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic='-fPIC -shared' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic=-Kconform_pic + fi + ;; + + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac + + case $cc_basename in + nvcc*) # Cuda Compiler Driver 2.2 + lt_prog_compiler_wl='-Xlinker ' + if test -n "$lt_prog_compiler_pic"; then + lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic" + fi + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + lt_prog_compiler_wl='-Wl,' + if test ia64 = "$host_cpu"; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + else + lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' + fi + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic='-fno-common' + case $cc_basename in + nagfor*) + # NAG Fortran compiler + lt_prog_compiler_wl='-Wl,-Wl,,' + lt_prog_compiler_pic='-PIC' + lt_prog_compiler_static='-Bstatic' + ;; + esac + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic='-DDLL_EXPORT' + case $host_os in + os2*) + lt_prog_compiler_static='$wl-static' + ;; + esac + ;; + + hpux9* | hpux10* | hpux11*) + lt_prog_compiler_wl='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + lt_prog_compiler_static='$wl-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + lt_prog_compiler_wl='-Wl,' + # PIC (with -KPIC) is the default. + lt_prog_compiler_static='-non_shared' + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + case $cc_basename in + # old Intel for x86_64, which still supported -KPIC. + ecc*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-static' + ;; + # flang / f18. f95 an alias for gfortran or flang on Debian + flang* | f18* | f95*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fPIC' + lt_prog_compiler_static='-static' + ;; + # icc used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + icc* | ifort*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fPIC' + lt_prog_compiler_static='-static' + ;; + # Lahey Fortran 8.1. + lf95*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='--shared' + lt_prog_compiler_static='--static' + ;; + nagfor*) + # NAG Fortran compiler + lt_prog_compiler_wl='-Wl,-Wl,,' + lt_prog_compiler_pic='-PIC' + lt_prog_compiler_static='-Bstatic' + ;; + tcc*) + # Fabrice Bellard et al's Tiny C Compiler + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fPIC' + lt_prog_compiler_static='-static' + ;; + pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group compilers (*not* the Pentium gcc compiler, + # which looks to be a dead project) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fpic' + lt_prog_compiler_static='-Bstatic' + ;; + ccc*) + lt_prog_compiler_wl='-Wl,' + # All Alpha code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + xl* | bgxl* | bgf* | mpixl*) + # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-qpic' + lt_prog_compiler_static='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*) + # Sun Fortran 8.3 passes all unrecognized flags to the linker + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='' + ;; + *Sun\ F* | *Sun*Fortran*) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='-Qoption ld ' + ;; + *Sun\ C*) + # Sun C 5.9 + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='-Wl,' + ;; + *Intel*\ [CF]*Compiler*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fPIC' + lt_prog_compiler_static='-static' + ;; + *Portland\ Group*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fpic' + lt_prog_compiler_static='-Bstatic' + ;; + esac + ;; + esac + ;; + + newsos6) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic='-fPIC -shared' + ;; + + osf3* | osf4* | osf5*) + lt_prog_compiler_wl='-Wl,' + # All OSF/1 code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + + rdos*) + lt_prog_compiler_static='-non_shared' + ;; + + solaris*) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + case $cc_basename in + f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) + lt_prog_compiler_wl='-Qoption ld ';; + *) + lt_prog_compiler_wl='-Wl,';; + esac + ;; + + sunos4*) + lt_prog_compiler_wl='-Qoption ld ' + lt_prog_compiler_pic='-PIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic='-Kconform_pic' + lt_prog_compiler_static='-Bstatic' + fi + ;; + + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + unicos*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_can_build_shared=no + ;; + + uts4*) + lt_prog_compiler_pic='-pic' + lt_prog_compiler_static='-Bstatic' + ;; + + *) + lt_prog_compiler_can_build_shared=no + ;; + esac + fi + +case $host_os in + # For platforms that do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic= + ;; + *) + lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" + ;; +esac + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 +$as_echo_n "checking for $compiler option to produce PIC... " >&6; } +if ${lt_cv_prog_compiler_pic+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_pic=$lt_prog_compiler_pic +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 +$as_echo "$lt_cv_prog_compiler_pic" >&6; } +lt_prog_compiler_pic=$lt_cv_prog_compiler_pic + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 +$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } +if ${lt_cv_prog_compiler_pic_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_pic_works=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic -DPIC" ## exclude from sc_useless_quotes_in_assignment + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_pic_works=yes + fi + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 +$as_echo "$lt_cv_prog_compiler_pic_works" >&6; } + +if test yes = "$lt_cv_prog_compiler_pic_works"; then + case $lt_prog_compiler_pic in + "" | " "*) ;; + *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; + esac +else + lt_prog_compiler_pic= + lt_prog_compiler_can_build_shared=no +fi + +fi + + + + + + + + + + + +# +# Check to make sure the static flag actually works. +# +wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 +$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } +if ${lt_cv_prog_compiler_static_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_static_works=no + save_LDFLAGS=$LDFLAGS + LDFLAGS="$LDFLAGS $lt_tmp_static_flag" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_static_works=yes + fi + else + lt_cv_prog_compiler_static_works=yes + fi + fi + $RM -r conftest* + LDFLAGS=$save_LDFLAGS + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 +$as_echo "$lt_cv_prog_compiler_static_works" >&6; } + +if test yes = "$lt_cv_prog_compiler_static_works"; then + : +else + lt_prog_compiler_static= +fi + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if ${lt_cv_prog_compiler_c_o+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +$as_echo "$lt_cv_prog_compiler_c_o" >&6; } + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if ${lt_cv_prog_compiler_c_o+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +$as_echo "$lt_cv_prog_compiler_c_o" >&6; } + + + + +hard_links=nottested +if test no = "$lt_cv_prog_compiler_c_o" && test no != "$need_locks"; then + # do not overwrite the value of need_locks provided by the user + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 +$as_echo_n "checking if we can lock with hard links... " >&6; } + hard_links=yes + $RM conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 +$as_echo "$hard_links" >&6; } + if test no = "$hard_links"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5 +$as_echo "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;} + need_locks=warn + fi +else + need_locks=no +fi + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + + runpath_var= + allow_undefined_flag= + always_export_symbols=no + archive_cmds= + archive_expsym_cmds= + compiler_needs_object=no + enable_shared_with_static_runtimes=no + export_dynamic_flag_spec= + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + hardcode_automatic=no + hardcode_direct=no + hardcode_direct_absolute=no + hardcode_libdir_flag_spec= + hardcode_libdir_separator= + hardcode_minus_L=no + hardcode_shlibpath_var=unsupported + inherit_rpath=no + link_all_deplibs=unknown + module_cmds= + module_expsym_cmds= + old_archive_from_new_cmds= + old_archive_from_expsyms_cmds= + thread_safe_flag_spec= + whole_archive_flag_spec= + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + include_expsyms= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ' (' and ')$', so one must not match beginning or + # end of line. Example: 'a|bc|.*d.*' will exclude the symbols 'a' and 'bc', + # as well as any symbol that contains 'd'. + exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + # Exclude shared library initialization/finalization symbols. + extract_expsyms_cmds= + + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test yes != "$GCC"; then + with_gnu_ld=no + fi + ;; + interix*) + # we just hope/assume this is gcc and not c89 (= MSVC++) + with_gnu_ld=yes + ;; + openbsd* | bitrig*) + with_gnu_ld=no + ;; + linux* | k*bsd*-gnu | gnu*) + link_all_deplibs=no + ;; + esac + + ld_shlibs=yes + + # On some targets, GNU ld is compatible enough with the native linker + # that we're better off using the native interface for both. + lt_use_gnu_ld_interface=no + if test yes = "$with_gnu_ld"; then + case $host_os in + aix*) + # The AIX port of GNU ld has always aspired to compatibility + # with the native linker. However, as the warning in the GNU ld + # block says, versions before 2.19.5* couldn't really create working + # shared libraries, regardless of the interface used. + case `$LD -v 2>&1` in + *\ \(GNU\ Binutils\)\ 2.19.5*) ;; + *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;; + *\ \(GNU\ Binutils\)\ [3-9]*) ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + fi + + if test yes = "$lt_use_gnu_ld_interface"; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='$wl' + + # Set some defaults for GNU ld with shared library support. These + # are reset later if shared libraries are not supported. Putting them + # here allows them to be overridden if necessary. + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' + export_dynamic_flag_spec='$wl--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' + else + whole_archive_flag_spec= + fi + supports_anon_versioning=no + case `$LD -v | $SED -e 's/(^)\+)\s\+//' 2>&1` in + *GNU\ gold*) supports_anon_versioning=yes ;; + *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + + # See if GNU ld supports shared libraries. + case $host_os in + aix[3-9]*) + # On AIX/PPC, the GNU linker is very broken + if test ia64 != "$host_cpu"; then + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: the GNU linker, at least up to release 2.19, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to install binutils +*** 2.20 or above, or modify your PATH so that a non-GNU linker is found. +*** You will then need to restart the configuration process. + +_LT_EOF + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds='' + ;; + m68k) + archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + else + ld_shlibs=no + fi + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec='-L$libdir' + export_dynamic_flag_spec='$wl--export-all-symbols' + allow_undefined_flag=unsupported + always_export_symbols=no + enable_shared_with_static_runtimes=yes + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' + exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file, use it as + # is; otherwise, prepend EXPORTS... + archive_expsym_cmds='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + ld_shlibs=no + fi + ;; + + haiku*) + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + link_all_deplibs=yes + ;; + + os2*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + allow_undefined_flag=unsupported + shrext_cmds=.dll + archive_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + archive_expsym_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + prefix_cmds="$SED"~ + if test EXPORTS = "`$SED 1q $export_symbols`"; then + prefix_cmds="$prefix_cmds -e 1d"; + fi~ + prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ + cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' + enable_shared_with_static_runtimes=yes + ;; + + interix[3-9]*) + hardcode_direct=no + hardcode_shlibpath_var=no + hardcode_libdir_flag_spec='$wl-rpath,$libdir' + export_dynamic_flag_spec='$wl-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + archive_expsym_cmds='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + + gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) + tmp_diet=no + if test linux-dietlibc = "$host_os"; then + case $cc_basename in + diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) + esac + fi + if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ + && test no = "$tmp_diet" + then + tmp_addflag=' $pic_flag' + tmp_sharedflag='-shared' + case $cc_basename,$host_cpu in + pgcc*) # Portland Group C compiler + whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + tmp_addflag=' $pic_flag' + ;; + pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group f77 and f90 compilers + whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + tmp_addflag=' $pic_flag -Mnomain' ;; + ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 + tmp_addflag=' -i_dynamic' ;; + efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 + tmp_addflag=' -i_dynamic -nofor_main' ;; + ifc* | ifort*) # Intel Fortran compiler + tmp_addflag=' -nofor_main' ;; + lf95*) # Lahey Fortran 8.1 + whole_archive_flag_spec= + tmp_sharedflag='--shared' ;; + nagfor*) # NAGFOR 5.3 + tmp_sharedflag='-Wl,-shared' ;; + xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) + tmp_sharedflag='-qmkshrobj' + tmp_addflag= ;; + nvcc*) # Cuda Compiler Driver 2.2 + whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + compiler_needs_object=yes + ;; + esac + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) # Sun C 5.9 + whole_archive_flag_spec='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + compiler_needs_object=yes + tmp_sharedflag='-G' ;; + *Sun\ F*) # Sun Fortran 8.3 + tmp_sharedflag='-G' ;; + esac + archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + + if test yes = "$supports_anon_versioning"; then + archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' + fi + + case $cc_basename in + tcc*) + export_dynamic_flag_spec='-rdynamic' + ;; + xlf* | bgf* | bgxlf* | mpixlf*) + # IBM XL Fortran 10.1 on PPC cannot create shared libs itself + whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' + archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' + if test yes = "$supports_anon_versioning"; then + archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' + fi + ;; + esac + else + ld_shlibs=no + fi + ;; + + netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris*) + if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) + case `$LD -v 2>&1` in + *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 cannot +*** reliably create shared libraries on SCO systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.16.91.0.3 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + ;; + *) + # For security reasons, it is highly recommended that you always + # use absolute paths for naming shared libraries, and exclude the + # DT_RUNPATH tag from executables and libraries. But doing so + # requires that you compile everything twice, which is a pain. + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + ;; + + sunos4*) + archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + *) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + + if test no = "$ld_shlibs"; then + runpath_var= + hardcode_libdir_flag_spec= + export_dynamic_flag_spec= + whole_archive_flag_spec= + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + allow_undefined_flag=unsupported + always_export_symbols=yes + archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + hardcode_minus_L=yes + if test yes = "$GCC" && test -z "$lt_prog_compiler_static"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + hardcode_direct=unsupported + fi + ;; + + aix[4-9]*) + if test ia64 = "$host_cpu"; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag= + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to GNU nm, but means don't demangle to AIX nm. + # Without the "-l" option, or with the "-B" option, AIX nm treats + # weak defined symbols like other global defined symbols, whereas + # GNU nm marks them as "W". + # While the 'weak' keyword is ignored in the Export File, we need + # it in the Import File for the 'aix-soname' feature, so we have + # to replace the "-B" option with "-P" for AIX nm. + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds='`func_echo_all $NM | $SED -e '\''s/B\([^B]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && (substr(\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # have runtime linking enabled, and use it for executables. + # For shared libraries, we enable/disable runtime linking + # depending on the kind of the shared library created - + # when "with_aix_soname,aix_use_runtimelinking" is: + # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables + # "aix,yes" lib.so shared, rtl:yes, for executables + # lib.a static archive + # "both,no" lib.so.V(shr.o) shared, rtl:yes + # lib.a(lib.so.V) shared, rtl:no, for executables + # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables + # lib.a(lib.so.V) shared, rtl:no + # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables + # lib.a static archive + case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) + for ld_flag in $LDFLAGS; do + if (test x-brtl = "x$ld_flag" || test x-Wl,-brtl = "x$ld_flag"); then + aix_use_runtimelinking=yes + break + fi + done + if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then + # With aix-soname=svr4, we create the lib.so.V shared archives only, + # so we don't have lib.a shared libs to link our executables. + # We have to force runtime linking in this case. + aix_use_runtimelinking=yes + LDFLAGS="$LDFLAGS -Wl,-brtl" + fi + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + archive_cmds='' + hardcode_direct=yes + hardcode_direct_absolute=yes + hardcode_libdir_separator=':' + link_all_deplibs=yes + file_list_spec='$wl-f,' + case $with_aix_soname,$aix_use_runtimelinking in + aix,*) ;; # traditional, no import file + svr4,* | *,yes) # use import file + # The Import File defines what to hardcode. + hardcode_direct=no + hardcode_direct_absolute=no + ;; + esac + + if test yes = "$GCC"; then + case $host_os in aix4.[012]|aix4.[012].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`$CC -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + hardcode_direct=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + hardcode_minus_L=yes + hardcode_libdir_flag_spec='-L$libdir' + hardcode_libdir_separator= + fi + ;; + esac + shared_flag='-shared' + if test yes = "$aix_use_runtimelinking"; then + shared_flag="$shared_flag "'$wl-G' + fi + # Need to ensure runtime linking is disabled for the traditional + # shared library, or the linker may eventually find shared libraries + # /with/ Import File - we do not want to mix them. + shared_flag_aix='-shared' + shared_flag_svr4='-shared $wl-G' + else + # not using gcc + if test ia64 = "$host_cpu"; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test yes = "$aix_use_runtimelinking"; then + shared_flag='$wl-G' + else + shared_flag='$wl-bM:SRE' + fi + shared_flag_aix='$wl-bM:SRE' + shared_flag_svr4='$wl-G' + fi + fi + + export_dynamic_flag_spec='$wl-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + always_export_symbols=yes + if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + allow_undefined_flag='-berok' + # Determine the default libpath from the value encoded in an + # empty executable. + if test set = "${lt_cv_aix_libpath+set}"; then + aix_libpath=$lt_cv_aix_libpath +else + if ${lt_cv_aix_libpath_+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + + lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }' + lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_=/usr/lib:/lib + fi + +fi + + aix_libpath=$lt_cv_aix_libpath_ +fi + + hardcode_libdir_flag_spec='$wl-blibpath:$libdir:'"$aix_libpath" + archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag + else + if test ia64 = "$host_cpu"; then + hardcode_libdir_flag_spec='$wl-R $libdir:/usr/lib:/lib' + allow_undefined_flag="-z nodefs" + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + if test set = "${lt_cv_aix_libpath+set}"; then + aix_libpath=$lt_cv_aix_libpath +else + if ${lt_cv_aix_libpath_+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + + lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }' + lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_=/usr/lib:/lib + fi + +fi + + aix_libpath=$lt_cv_aix_libpath_ +fi + + hardcode_libdir_flag_spec='$wl-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + no_undefined_flag=' $wl-bernotok' + allow_undefined_flag=' $wl-berok' + if test yes = "$with_gnu_ld"; then + # We only use this code for GNU lds that support --whole-archive. + whole_archive_flag_spec='$wl--whole-archive$convenience $wl--no-whole-archive' + else + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec='$convenience' + fi + archive_cmds_need_lc=yes + archive_expsym_cmds='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' + # -brtl affects multiple linker settings, -berok does not and is overridden later + compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([, ]\\)%-berok\\1%g"`' + if test svr4 != "$with_aix_soname"; then + # This is similar to how AIX traditionally builds its shared libraries. + archive_expsym_cmds="$archive_expsym_cmds"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' + fi + if test aix != "$with_aix_soname"; then + archive_expsym_cmds="$archive_expsym_cmds"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' + else + # used by -dlpreopen to get the symbols + archive_expsym_cmds="$archive_expsym_cmds"'~$MV $output_objdir/$realname.d/$soname $output_objdir' + fi + archive_expsym_cmds="$archive_expsym_cmds"'~$RM -r $output_objdir/$realname.d' + fi + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds='' + ;; + m68k) + archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac + ;; + + bsdi[45]*) + export_dynamic_flag_spec=-rdynamic + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + case $cc_basename in + cl*) + # Native MSVC + hardcode_libdir_flag_spec=' ' + allow_undefined_flag=unsupported + always_export_symbols=yes + file_list_spec='@' + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=.dll + # FIXME: Setting linknames here is a bad hack. + archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' + archive_expsym_cmds='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then + cp "$export_symbols" "$output_objdir/$soname.def"; + echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; + else + $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; + fi~ + $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ + linknames=' + # The linker will not automatically build a static lib if we build a DLL. + # _LT_TAGVAR(old_archive_from_new_cmds, )='true' + enable_shared_with_static_runtimes=yes + exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' + # Don't use ranlib + old_postinstall_cmds='chmod 644 $oldlib' + postlink_cmds='lt_outputfile="@OUTPUT@"~ + lt_tool_outputfile="@TOOL_OUTPUT@"~ + case $lt_outputfile in + *.exe|*.EXE) ;; + *) + lt_outputfile=$lt_outputfile.exe + lt_tool_outputfile=$lt_tool_outputfile.exe + ;; + esac~ + if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then + $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; + $RM "$lt_outputfile.manifest"; + fi' + ;; + *) + # Assume MSVC wrapper + hardcode_libdir_flag_spec=' ' + allow_undefined_flag=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=.dll + # FIXME: Setting linknames here is a bad hack. + archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + old_archive_from_new_cmds='true' + # FIXME: Should let the user specify the lib program. + old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' + enable_shared_with_static_runtimes=yes + ;; + esac + ;; + + darwin* | rhapsody*) + + + archive_cmds_need_lc=no + hardcode_direct=no + hardcode_automatic=yes + hardcode_shlibpath_var=unsupported + if test yes = "$lt_cv_ld_force_load"; then + whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' + + else + whole_archive_flag_spec='' + fi + link_all_deplibs=yes + allow_undefined_flag=$_lt_dar_allow_undefined + case $cc_basename in + ifort*|nagfor*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test yes = "$_lt_dar_can_shared"; then + output_verbose_link_cmd=func_echo_all + archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil" + module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil" + archive_expsym_cmds="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil" + module_expsym_cmds="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil" + + else + ld_shlibs=no + fi + + ;; + + dgux*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2.*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | dragonfly*) + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + hpux9*) + if test yes = "$GCC"; then + archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' + else + archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' + fi + hardcode_libdir_flag_spec='$wl+b $wl$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + export_dynamic_flag_spec='$wl-E' + ;; + + hpux10*) + if test yes,no = "$GCC,$with_gnu_ld"; then + archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + fi + if test no = "$with_gnu_ld"; then + hardcode_libdir_flag_spec='$wl+b $wl$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + hardcode_direct_absolute=yes + export_dynamic_flag_spec='$wl-E' + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + fi + ;; + + hpux11*) + if test yes,no = "$GCC,$with_gnu_ld"; then + case $host_cpu in + hppa*64*) + archive_cmds='$CC -shared $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case $host_cpu in + hppa*64*) + archive_cmds='$CC -b $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + + # Older versions of the 11.00 compiler do not understand -b yet + # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 +$as_echo_n "checking if $CC understands -b... " >&6; } +if ${lt_cv_prog_compiler__b+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler__b=no + save_LDFLAGS=$LDFLAGS + LDFLAGS="$LDFLAGS -b" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler__b=yes + fi + else + lt_cv_prog_compiler__b=yes + fi + fi + $RM -r conftest* + LDFLAGS=$save_LDFLAGS + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 +$as_echo "$lt_cv_prog_compiler__b" >&6; } + +if test yes = "$lt_cv_prog_compiler__b"; then + archive_cmds='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' +else + archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' +fi + + ;; + esac + fi + if test no = "$with_gnu_ld"; then + hardcode_libdir_flag_spec='$wl+b $wl$libdir' + hardcode_libdir_separator=: + + case $host_cpu in + hppa*64*|ia64*) + hardcode_direct=no + hardcode_shlibpath_var=no + ;; + *) + hardcode_direct=yes + hardcode_direct_absolute=yes + export_dynamic_flag_spec='$wl-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test yes = "$GCC"; then + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + # Try to use the -exported_symbol ld option, if it does not + # work, assume that -exports_file does not work either and + # implicitly export all symbols. + # This should be the same for all languages, so no per-tag cache variable. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 +$as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; } +if ${lt_cv_irix_exported_symbol+:} false; then : + $as_echo_n "(cached) " >&6 +else + save_LDFLAGS=$LDFLAGS + LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int foo (void) { return 0; } +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + lt_cv_irix_exported_symbol=yes +else + lt_cv_irix_exported_symbol=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 +$as_echo "$lt_cv_irix_exported_symbol" >&6; } + if test yes = "$lt_cv_irix_exported_symbol"; then + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib' + fi + link_all_deplibs=no + else + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib' + fi + archive_cmds_need_lc='no' + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' + hardcode_libdir_separator=: + inherit_rpath=yes + link_all_deplibs=yes + ;; + + linux*) + case $cc_basename in + tcc*) + # Fabrice Bellard et al's Tiny C Compiler + ld_shlibs=yes + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + newsos6) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' + hardcode_libdir_separator=: + hardcode_shlibpath_var=no + ;; + + *nto* | *qnx*) + ;; + + openbsd* | bitrig*) + if test -f /usr/libexec/ld.so; then + hardcode_direct=yes + hardcode_shlibpath_var=no + hardcode_direct_absolute=yes + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags $wl-retain-symbols-file,$export_symbols' + hardcode_libdir_flag_spec='$wl-rpath,$libdir' + export_dynamic_flag_spec='$wl-E' + else + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='$wl-rpath,$libdir' + fi + else + ld_shlibs=no + fi + ;; + + os2*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + allow_undefined_flag=unsupported + shrext_cmds=.dll + archive_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + archive_expsym_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + prefix_cmds="$SED"~ + if test EXPORTS = "`$SED 1q $export_symbols`"; then + prefix_cmds="$prefix_cmds -e 1d"; + fi~ + prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ + cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' + enable_shared_with_static_runtimes=yes + ;; + + osf3*) + if test yes = "$GCC"; then + allow_undefined_flag=' $wl-expect_unresolved $wl\*' + archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + fi + archive_cmds_need_lc='no' + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' + hardcode_libdir_separator=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test yes = "$GCC"; then + allow_undefined_flag=' $wl-expect_unresolved $wl\*' + archive_cmds='$CC -shared$allow_undefined_flag $pic_flag $libobjs $deplibs $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ + $CC -shared$allow_undefined_flag $wl-input $wl$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~$RM $lib.exp' + + # Both c and cxx compiler support -rpath directly + hardcode_libdir_flag_spec='-rpath $libdir' + fi + archive_cmds_need_lc='no' + hardcode_libdir_separator=: + ;; + + solaris*) + no_undefined_flag=' -z defs' + if test yes = "$GCC"; then + wlarc='$wl' + archive_cmds='$CC -shared $pic_flag $wl-z ${wl}text $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared $pic_flag $wl-z ${wl}text $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + else + case `$CC -V 2>&1` in + *"Compilers 5.0"*) + wlarc='' + archive_cmds='$LD -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $linker_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $LD -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' + ;; + *) + wlarc='$wl' + archive_cmds='$CC -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + ;; + esac + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_shlibpath_var=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands '-z linker_flag'. GCC discards it without '$wl', + # but is careful enough not to reorder. + # Supported since Solaris 2.6 (maybe 2.5.1?) + if test yes = "$GCC"; then + whole_archive_flag_spec='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' + else + whole_archive_flag_spec='-z allextract$convenience -z defaultextract' + fi + ;; + esac + link_all_deplibs=yes + ;; + + sunos4*) + if test sequent = "$host_vendor"; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + archive_cmds='$CC -G $wl-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + hardcode_libdir_flag_spec='-L$libdir' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + sysv4) + case $host_vendor in + sni) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' + reload_cmds='$CC -r -o $output$reload_objs' + hardcode_direct=no + ;; + motorola) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + hardcode_shlibpath_var=no + ;; + + sysv4.3*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + export_dynamic_flag_spec='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ld_shlibs=yes + fi + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) + no_undefined_flag='$wl-z,text' + archive_cmds_need_lc=no + hardcode_shlibpath_var=no + runpath_var='LD_RUN_PATH' + + if test yes = "$GCC"; then + archive_cmds='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We CANNOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + no_undefined_flag='$wl-z,text' + allow_undefined_flag='$wl-z,nodefs' + archive_cmds_need_lc=no + hardcode_shlibpath_var=no + hardcode_libdir_flag_spec='$wl-R,$libdir' + hardcode_libdir_separator=':' + link_all_deplibs=yes + export_dynamic_flag_spec='$wl-Bexport' + runpath_var='LD_RUN_PATH' + + if test yes = "$GCC"; then + archive_cmds='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + uts4*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + *) + ld_shlibs=no + ;; + esac + + if test sni = "$host_vendor"; then + case $host in + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + export_dynamic_flag_spec='$wl-Blargedynsym' + ;; + esac + fi + fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 +$as_echo "$ld_shlibs" >&6; } +test no = "$ld_shlibs" && can_build_shared=no + +with_gnu_ld=$with_gnu_ld + + + + + + + + + + + + + + + +# +# Do we need to explicitly link libc? +# +case "x$archive_cmds_need_lc" in +x|xyes) + # Assume -lc should be added + archive_cmds_need_lc=yes + + if test yes,yes = "$GCC,$enable_shared"; then + case $archive_cmds in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 +$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } +if ${lt_cv_archive_cmds_need_lc+:} false; then : + $as_echo_n "(cached) " >&6 +else + $RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl + pic_flag=$lt_prog_compiler_pic + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag + allow_undefined_flag= + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 + (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + then + lt_cv_archive_cmds_need_lc=no + else + lt_cv_archive_cmds_need_lc=yes + fi + allow_undefined_flag=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 +$as_echo "$lt_cv_archive_cmds_need_lc" >&6; } + archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc + ;; + esac + fi + ;; +esac + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 +$as_echo_n "checking dynamic linker characteristics... " >&6; } + +if test yes = "$GCC"; then + case $host_os in + darwin*) lt_awk_arg='/^libraries:/,/LR/' ;; + *) lt_awk_arg='/^libraries:/' ;; + esac + case $host_os in + mingw* | cegcc*) lt_sed_strip_eq='s|=\([A-Za-z]:\)|\1|g' ;; + *) lt_sed_strip_eq='s|=/|/|g' ;; + esac + lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` + case $lt_search_path_spec in + *\;*) + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` + ;; + *) + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` + ;; + esac + # Ok, now we have the path, separated by spaces, we can step through it + # and add multilib dir if necessary... + lt_tmp_lt_search_path_spec= + lt_multi_os_dir=/`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` + # ...but if some path component already ends with the multilib dir we assume + # that all is fine and trust -print-search-dirs as is (GCC 4.2? or newer). + case "$lt_multi_os_dir; $lt_search_path_spec " in + "/; "* | "/.; "* | "/./; "* | *"$lt_multi_os_dir "* | *"$lt_multi_os_dir/ "*) + lt_multi_os_dir= + ;; + esac + for lt_sys_path in $lt_search_path_spec; do + if test -d "$lt_sys_path$lt_multi_os_dir"; then + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path$lt_multi_os_dir" + elif test -n "$lt_multi_os_dir"; then + test -d "$lt_sys_path" && \ + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" + fi + done + lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' +BEGIN {RS = " "; FS = "/|\n";} { + lt_foo = ""; + lt_count = 0; + for (lt_i = NF; lt_i > 0; lt_i--) { + if ($lt_i != "" && $lt_i != ".") { + if ($lt_i == "..") { + lt_count++; + } else { + if (lt_count == 0) { + lt_foo = "/" $lt_i lt_foo; + } else { + lt_count--; + } + } + } + } + if (lt_foo != "") { lt_freq[lt_foo]++; } + if (lt_freq[lt_foo] == 1) { print lt_foo; } +}'` + # AWK program above erroneously prepends '/' to C:/dos/paths + # for these hosts. + case $host_os in + mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ + $SED 's|/\([A-Za-z]:\)|\1|g'` ;; + esac + sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=.so +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + + + +case $host_os in +aix3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='$libname$release$shared_ext$major' + ;; + +aix[4-9]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test ia64 = "$host_cpu"; then + # AIX 5 supports IA64 + library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line '#! .'. This would cause the generated library to + # depend on '.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[01] | aix4.[01].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # Using Import Files as archive members, it is possible to support + # filename-based versioning of shared library archives on AIX. While + # this would work for both with and without runtime linking, it will + # prevent static linking of such archives. So we do filename-based + # shared library versioning with .so extension only, which is used + # when both runtime linking and shared linking is enabled. + # Unfortunately, runtime linking may impact performance, so we do + # not want this to be the default eventually. Also, we use the + # versioned .so libs for executables only if there is the -brtl + # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only. + # To allow for filename-based versioning support, we need to create + # libNAME.so.V as an archive file, containing: + # *) an Import File, referring to the versioned filename of the + # archive as well as the shared archive member, telling the + # bitwidth (32 or 64) of that shared object, and providing the + # list of exported symbols of that shared object, eventually + # decorated with the 'weak' keyword + # *) the shared object with the F_LOADONLY flag set, to really avoid + # it being seen by the linker. + # At run time we better use the real file rather than another symlink, + # but for link time we create the symlink libNAME.so -> libNAME.so.V + + case $with_aix_soname,$aix_use_runtimelinking in + # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + aix,yes) # traditional libtool + dynamic_linker='AIX unversionable lib.so' + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + ;; + aix,no) # traditional AIX only + dynamic_linker='AIX lib.a(lib.so.V)' + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='$libname$release.a $libname.a' + soname_spec='$libname$release$shared_ext$major' + ;; + svr4,*) # full svr4 only + dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o)" + library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' + # We do not specify a path in Import Files, so LIBPATH fires. + shlibpath_overrides_runpath=yes + ;; + *,yes) # both, prefer svr4 + dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o), lib.a(lib.so.V)" + library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' + # unpreferred sharedlib libNAME.a needs extra handling + postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"' + postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"' + # We do not specify a path in Import Files, so LIBPATH fires. + shlibpath_overrides_runpath=yes + ;; + *,no) # both, prefer aix + dynamic_linker="AIX lib.a(lib.so.V), lib.so.V($shared_archive_member_spec.o)" + library_names_spec='$libname$release.a $libname.a' + soname_spec='$libname$release$shared_ext$major' + # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling + postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)' + postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"' + ;; + esac + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + ;; + m68k) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + esac + ;; + +beos*) + library_names_spec='$libname$shared_ext' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[45]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32* | cegcc*) + version_type=windows + shrext_cmds=.dll + need_version=no + need_lib_prefix=no + + case $GCC,$cc_basename in + yes,*) + # gcc + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' + + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api" + ;; + mingw* | cegcc*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' + ;; + esac + dynamic_linker='Win32 ld.exe' + ;; + + *,cl*) + # Native MSVC + libname_spec='$name' + soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' + library_names_spec='$libname.dll.lib' + + case $build_os in + mingw*) + sys_lib_search_path_spec= + lt_save_ifs=$IFS + IFS=';' + for lt_path in $LIB + do + IFS=$lt_save_ifs + # Let DOS variable expansion print the short 8.3 style file name. + lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` + sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" + done + IFS=$lt_save_ifs + # Convert to MSYS style. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` + ;; + cygwin*) + # Convert to unix form, then to dos form, then back to unix form + # but this time dos style (no spaces!) so that the unix form looks + # like /cygdrive/c/PROGRA~1:/cygdr... + sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` + sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` + sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + ;; + *) + sys_lib_search_path_spec=$LIB + if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then + # It is most probably a Windows format PATH. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + # FIXME: find the short name or the path components, as spaces are + # common. (e.g. "Program Files" -> "PROGRA~1") + ;; + esac + + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + dynamic_linker='Win32 link.exe' + ;; + + *) + # Assume MSVC wrapper + library_names_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext $libname.lib' + dynamic_linker='Win32 ld.exe' + ;; + esac + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$major$shared_ext $libname$shared_ext' + soname_spec='$libname$release$major$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' + + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[23].*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2.*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[01]* | freebsdelf3.[01]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ + freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +haiku*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + dynamic_linker="$host_os runtime_loader" + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LIBRARY_PATH + shlibpath_overrides_runpath=no + sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + if test 32 = "$HPUX_IA64_MODE"; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + sys_lib_dlsearch_path_spec=/usr/lib/hpux32 + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + sys_lib_dlsearch_path_spec=/usr/lib/hpux64 + fi + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555, ... + postinstall_cmds='chmod 555 $lib' + # or fails outright, so override atomically: + install_override_mode=555 + ;; + +interix[3-9]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test yes = "$lt_cv_prog_gnu_ld"; then + version_type=linux # correct to gnu/linux during the next big refactor + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='$libname$release$shared_ext$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff" + sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +linux*android*) + version_type=none # Android doesn't support versioned libraries. + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext' + soname_spec='$libname$release$shared_ext' + finish_cmds= + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + dynamic_linker='Android linker' + # Don't embed -rpath directories since the linker doesn't support them. + hardcode_libdir_flag_spec='-L$libdir' + ;; + +# This must be glibc/ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + + # Some binutils ld are patched to set DT_RUNPATH + if ${lt_cv_shlibpath_overrides_runpath+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_shlibpath_overrides_runpath=no + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ + LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : + lt_cv_shlibpath_overrides_runpath=yes +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir + +fi + + shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Ideally, we could use ldconfig to report *all* directores which are + # searched for libraries, however this is still not possible. Aside from not + # being certain /sbin/ldconfig is available, command + # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64, + # even though it is searched at run-time. Try to do the best guess by + # appending ld.so.conf contents (and includes) to the search path. + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsdelf*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='NetBSD ld.elf_so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +*nto* | *qnx*) + version_type=qnx + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='ldqnx.so' + ;; + +openbsd* | bitrig*) + version_type=sunos + sys_lib_dlsearch_path_spec=/usr/lib + need_lib_prefix=no + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then + need_version=no + else + need_version=yes + fi + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +os2*) + libname_spec='$name' + version_type=windows + shrext_cmds=.dll + need_version=no + need_lib_prefix=no + # OS/2 can only load a DLL with a base name of 8 characters or less. + soname_spec='`test -n "$os2dllname" && libname="$os2dllname"; + v=$($ECHO $release$versuffix | tr -d .-); + n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _); + $ECHO $n$v`$shared_ext' + library_names_spec='${libname}_dll.$libext' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=BEGINLIBPATH + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='$libname$release$shared_ext$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + +rdos*) + dynamic_linker=no + ;; + +solaris*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test yes = "$with_gnu_ld"; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec; then + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext' + soname_spec='$libname$shared_ext.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=sco + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test yes = "$with_gnu_ld"; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +uts4*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 +$as_echo "$dynamic_linker" >&6; } +test no = "$dynamic_linker" && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test yes = "$GCC"; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then + sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec +fi + +if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then + sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec +fi + +# remember unaugmented sys_lib_dlsearch_path content for libtool script decls... +configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec + +# ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code +func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH" + +# to be used as default LT_SYS_LIBRARY_PATH value in generated libtool +configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 +$as_echo_n "checking how to hardcode library paths into programs... " >&6; } +hardcode_action= +if test -n "$hardcode_libdir_flag_spec" || + test -n "$runpath_var" || + test yes = "$hardcode_automatic"; then + + # We can hardcode non-existent directories. + if test no != "$hardcode_direct" && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, )" && + test no != "$hardcode_minus_L"; then + # Linking always hardcodes the temporary library directory. + hardcode_action=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action=unsupported +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 +$as_echo "$hardcode_action" >&6; } + +if test relink = "$hardcode_action" || + test yes = "$inherit_rpath"; then + # Fast installation is not supported + enable_fast_install=no +elif test yes = "$shlibpath_overrides_runpath" || + test no = "$enable_shared"; then + # Fast installation is not necessary + enable_fast_install=needless +fi + + + + + + + if test yes != "$enable_dlopen"; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen=load_add_on + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32* | cegcc*) + lt_cv_dlopen=LoadLibrary + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen=dlopen + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if ${ac_cv_lib_dl_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dl_dlopen=yes +else + ac_cv_lib_dl_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = xyes; then : + lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl +else + + lt_cv_dlopen=dyld + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + +fi + + ;; + + tpf*) + # Don't try to run any link tests for TPF. We know it's impossible + # because TPF is a cross-compiler, and we know how we open DSOs. + lt_cv_dlopen=dlopen + lt_cv_dlopen_libs= + lt_cv_dlopen_self=no + ;; + + *) + ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" +if test "x$ac_cv_func_shl_load" = xyes; then : + lt_cv_dlopen=shl_load +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 +$as_echo_n "checking for shl_load in -ldld... " >&6; } +if ${ac_cv_lib_dld_shl_load+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char shl_load (); +int +main () +{ +return shl_load (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dld_shl_load=yes +else + ac_cv_lib_dld_shl_load=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 +$as_echo "$ac_cv_lib_dld_shl_load" >&6; } +if test "x$ac_cv_lib_dld_shl_load" = xyes; then : + lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld +else + ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" +if test "x$ac_cv_func_dlopen" = xyes; then : + lt_cv_dlopen=dlopen +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if ${ac_cv_lib_dl_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dl_dlopen=yes +else + ac_cv_lib_dl_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = xyes; then : + lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 +$as_echo_n "checking for dlopen in -lsvld... " >&6; } +if ${ac_cv_lib_svld_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsvld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_svld_dlopen=yes +else + ac_cv_lib_svld_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 +$as_echo "$ac_cv_lib_svld_dlopen" >&6; } +if test "x$ac_cv_lib_svld_dlopen" = xyes; then : + lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 +$as_echo_n "checking for dld_link in -ldld... " >&6; } +if ${ac_cv_lib_dld_dld_link+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dld_link (); +int +main () +{ +return dld_link (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dld_dld_link=yes +else + ac_cv_lib_dld_dld_link=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 +$as_echo "$ac_cv_lib_dld_dld_link" >&6; } +if test "x$ac_cv_lib_dld_dld_link" = xyes; then : + lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld +fi + + +fi + + +fi + + +fi + + +fi + + +fi + + ;; + esac + + if test no = "$lt_cv_dlopen"; then + enable_dlopen=no + else + enable_dlopen=yes + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS=$CPPFLAGS + test yes = "$ac_cv_header_dlfcn_h" && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS=$LDFLAGS + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS=$LIBS + LIBS="$lt_cv_dlopen_libs $LIBS" + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 +$as_echo_n "checking whether a program can dlopen itself... " >&6; } +if ${lt_cv_dlopen_self+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test yes = "$cross_compiling"; then : + lt_cv_dlopen_self=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +#line $LINENO "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +/* When -fvisibility=hidden is used, assume the code has been annotated + correspondingly for the symbols needed. */ +#if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) +int fnord () __attribute__((visibility("default"))); +#endif + +int fnord () { return 42; } +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else + { + if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + else puts (dlerror ()); + } + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +} +_LT_EOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then + (./conftest; exit; ) >&5 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self=no + fi +fi +rm -fr conftest* + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 +$as_echo "$lt_cv_dlopen_self" >&6; } + + if test yes = "$lt_cv_dlopen_self"; then + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 +$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } +if ${lt_cv_dlopen_self_static+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test yes = "$cross_compiling"; then : + lt_cv_dlopen_self_static=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +#line $LINENO "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +/* When -fvisibility=hidden is used, assume the code has been annotated + correspondingly for the symbols needed. */ +#if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) +int fnord () __attribute__((visibility("default"))); +#endif + +int fnord () { return 42; } +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else + { + if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + else puts (dlerror ()); + } + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +} +_LT_EOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then + (./conftest; exit; ) >&5 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self_static=no + fi +fi +rm -fr conftest* + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 +$as_echo "$lt_cv_dlopen_self_static" >&6; } + fi + + CPPFLAGS=$save_CPPFLAGS + LDFLAGS=$save_LDFLAGS + LIBS=$save_LIBS + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi + + + + + + + + + + + + + + + + + +striplib= +old_striplib= +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 +$as_echo_n "checking whether stripping libraries is possible... " >&6; } +if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP"; then + striplib="$STRIP -x" + old_striplib="$STRIP -S" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + fi + ;; + *) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + ;; + esac +fi + + + + + + + + + + + + + # Report what library types will actually be built + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 +$as_echo_n "checking if libtool supports shared libraries... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 +$as_echo "$can_build_shared" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 +$as_echo_n "checking whether to build shared libraries... " >&6; } + test no = "$can_build_shared" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test yes = "$enable_shared" && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + + aix[4-9]*) + if test ia64 != "$host_cpu"; then + case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in + yes,aix,yes) ;; # shared object as lib.so file only + yes,svr4,*) ;; # shared object as lib.so archive member only + yes,*) enable_static=no ;; # shared object in lib.a archive as well + esac + fi + ;; + esac + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 +$as_echo "$enable_shared" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 +$as_echo_n "checking whether to build static libraries... " >&6; } + # Make sure either enable_shared or enable_static is yes. + test yes = "$enable_shared" || enable_static=yes + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 +$as_echo "$enable_static" >&6; } + + + + +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +CC=$lt_save_CC + + + + + + + + + + + + + + + + ac_config_commands="$ac_config_commands libtool" + + + + +# Only expand once: + + + + + + + + + +if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. +set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_PKG_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $PKG_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +PKG_CONFIG=$ac_cv_path_PKG_CONFIG +if test -n "$PKG_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 +$as_echo "$PKG_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_path_PKG_CONFIG"; then + ac_pt_PKG_CONFIG=$PKG_CONFIG + # Extract the first word of "pkg-config", so it can be a program name with args. +set dummy pkg-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $ac_pt_PKG_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG +if test -n "$ac_pt_PKG_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 +$as_echo "$ac_pt_PKG_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_pt_PKG_CONFIG" = x; then + PKG_CONFIG="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + PKG_CONFIG=$ac_pt_PKG_CONFIG + fi +else + PKG_CONFIG="$ac_cv_path_PKG_CONFIG" +fi + +fi +if test -n "$PKG_CONFIG"; then + _pkg_min_version=0.9.0 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 +$as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; } + if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + PKG_CONFIG="" + fi +fi + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C/C++ restrict keyword" >&5 +$as_echo_n "checking for C/C++ restrict keyword... " >&6; } +if ${ac_cv_c_restrict+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_c_restrict=no + # The order here caters to the fact that C++ does not require restrict. + for ac_kw in __restrict __restrict__ _Restrict restrict; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +typedef int * int_ptr; + int foo (int_ptr $ac_kw ip) { + return ip[0]; + } +int +main () +{ +int s[1]; + int * $ac_kw t = s; + t[0] = 0; + return foo(t) + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_c_restrict=$ac_kw +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + test "$ac_cv_c_restrict" != no && break + done + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_restrict" >&5 +$as_echo "$ac_cv_c_restrict" >&6; } + + case $ac_cv_c_restrict in + restrict) ;; + no) $as_echo "#define restrict /**/" >>confdefs.h + ;; + *) cat >>confdefs.h <<_ACEOF +#define restrict $ac_cv_c_restrict +_ACEOF + ;; + esac + + +ac_header_dirent=no +for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do + as_ac_Header=`$as_echo "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh` +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_hdr that defines DIR" >&5 +$as_echo_n "checking for $ac_hdr that defines DIR... " >&6; } +if eval \${$as_ac_Header+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include <$ac_hdr> + +int +main () +{ +if ((DIR *) 0) +return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$as_ac_Header=yes" +else + eval "$as_ac_Header=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$as_ac_Header + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_hdr" | $as_tr_cpp` 1 +_ACEOF + +ac_header_dirent=$ac_hdr; break +fi + +done +# Two versions of opendir et al. are in -ldir and -lx on SCO Xenix. +if test $ac_header_dirent = dirent.h; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5 +$as_echo_n "checking for library containing opendir... " >&6; } +if ${ac_cv_search_opendir+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char opendir (); +int +main () +{ +return opendir (); + ; + return 0; +} +_ACEOF +for ac_lib in '' dir; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_opendir=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${ac_cv_search_opendir+:} false; then : + break +fi +done +if ${ac_cv_search_opendir+:} false; then : + +else + ac_cv_search_opendir=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5 +$as_echo "$ac_cv_search_opendir" >&6; } +ac_res=$ac_cv_search_opendir +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + +fi + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5 +$as_echo_n "checking for library containing opendir... " >&6; } +if ${ac_cv_search_opendir+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char opendir (); +int +main () +{ +return opendir (); + ; + return 0; +} +_ACEOF +for ac_lib in '' x; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_opendir=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${ac_cv_search_opendir+:} false; then : + break +fi +done +if ${ac_cv_search_opendir+:} false; then : + +else + ac_cv_search_opendir=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5 +$as_echo "$ac_cv_search_opendir" >&6; } +ac_res=$ac_cv_search_opendir +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + +fi + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if ${ac_cv_header_stdc+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_stdc=yes +else + ac_cv_header_stdc=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + +else + ac_cv_header_stdc=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then + +$as_echo "#define STDC_HEADERS 1" >>confdefs.h + +fi + +for ac_header in fcntl.h malloc.h inttypes.h sys/ioctl.h sys/mman.h \ + sys/sysmacros.h sys/statvfs.h ctype.h unistd.h locale.h byteswap.h endian.h stdint.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + +for ac_header in uuid/uuid.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "uuid/uuid.h" "ac_cv_header_uuid_uuid_h" "$ac_includes_default" +if test "x$ac_cv_header_uuid_uuid_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_UUID_UUID_H 1 +_ACEOF + +else + as_fn_error $? "You need the uuid library." "$LINENO" 5 +fi + +done + +ac_fn_c_check_header_mongrel "$LINENO" "libdevmapper.h" "ac_cv_header_libdevmapper_h" "$ac_includes_default" +if test "x$ac_cv_header_libdevmapper_h" = xyes; then : + +else + as_fn_error $? "You need the device-mapper library." "$LINENO" 5 +fi + + + +# Check whether --enable-keyring was given. +if test "${enable_keyring+set}" = set; then : + enableval=$enable_keyring; +else + enable_keyring=yes +fi + +if test "x$enable_keyring" = "xyes"; then + for ac_header in linux/keyctl.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "linux/keyctl.h" "ac_cv_header_linux_keyctl_h" "$ac_includes_default" +if test "x$ac_cv_header_linux_keyctl_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LINUX_KEYCTL_H 1 +_ACEOF + +else + as_fn_error $? "You need Linux kernel headers with kernel keyring service compiled." "$LINENO" 5 +fi + +done + + + ac_fn_c_check_decl "$LINENO" "__NR_add_key" "ac_cv_have_decl___NR_add_key" "#include +" +if test "x$ac_cv_have_decl___NR_add_key" = xyes; then : + +else + as_fn_error $? "The kernel is missing add_key syscall." "$LINENO" 5 +fi + + ac_fn_c_check_decl "$LINENO" "__NR_keyctl" "ac_cv_have_decl___NR_keyctl" "#include +" +if test "x$ac_cv_have_decl___NR_keyctl" = xyes; then : + +else + as_fn_error $? "The kernel is missing keyctl syscall." "$LINENO" 5 +fi + + ac_fn_c_check_decl "$LINENO" "__NR_request_key" "ac_cv_have_decl___NR_request_key" "#include +" +if test "x$ac_cv_have_decl___NR_request_key" = xyes; then : + +else + as_fn_error $? "The kernel is missing request_key syscall." "$LINENO" 5 +fi + + + ac_fn_c_check_type "$LINENO" "key_serial_t" "ac_cv_type_key_serial_t" " + $ac_includes_default + #ifdef HAVE_LINUX_KEYCTL_H + # include + #endif + +" +if test "x$ac_cv_type_key_serial_t" = xyes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_KEY_SERIAL_T 1 +_ACEOF + + +fi + + + +$as_echo "#define KERNEL_KEYRING 1" >>confdefs.h + +fi + if test "x$enable_keyring" = "xyes"; then + KERNEL_KEYRING_TRUE= + KERNEL_KEYRING_FALSE='#' +else + KERNEL_KEYRING_TRUE='#' + KERNEL_KEYRING_FALSE= +fi + + +saved_LIBS=$LIBS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for uuid_clear in -luuid" >&5 +$as_echo_n "checking for uuid_clear in -luuid... " >&6; } +if ${ac_cv_lib_uuid_uuid_clear+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-luuid $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char uuid_clear (); +int +main () +{ +return uuid_clear (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_uuid_uuid_clear=yes +else + ac_cv_lib_uuid_uuid_clear=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_uuid_uuid_clear" >&5 +$as_echo "$ac_cv_lib_uuid_uuid_clear" >&6; } +if test "x$ac_cv_lib_uuid_uuid_clear" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBUUID 1 +_ACEOF + + LIBS="-luuid $LIBS" + +else + as_fn_error $? "You need the uuid library." "$LINENO" 5 +fi + +UUID_LIBS=$LIBS + +LIBS=$saved_LIBS + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing clock_gettime" >&5 +$as_echo_n "checking for library containing clock_gettime... " >&6; } +if ${ac_cv_search_clock_gettime+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char clock_gettime (); +int +main () +{ +return clock_gettime (); + ; + return 0; +} +_ACEOF +for ac_lib in '' rt posix4; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_clock_gettime=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${ac_cv_search_clock_gettime+:} false; then : + break +fi +done +if ${ac_cv_search_clock_gettime+:} false; then : + +else + ac_cv_search_clock_gettime=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_clock_gettime" >&5 +$as_echo "$ac_cv_search_clock_gettime" >&6; } +ac_res=$ac_cv_search_clock_gettime +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + +fi + +for ac_func in posix_memalign clock_gettime posix_fallocate explicit_bzero +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +if eval test \"x\$"$as_ac_var"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + + +if test "x$enable_largefile" = "xno"; then + as_fn_error $? "Building with --disable-largefile is not supported, it can cause data corruption." "$LINENO" 5 +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5 +$as_echo_n "checking for an ANSI C-conforming const... " >&6; } +if ${ac_cv_c_const+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + +#ifndef __cplusplus + /* Ultrix mips cc rejects this sort of thing. */ + typedef int charset[2]; + const charset cs = { 0, 0 }; + /* SunOS 4.1.1 cc rejects this. */ + char const *const *pcpcc; + char **ppc; + /* NEC SVR4.0.2 mips cc rejects this. */ + struct point {int x, y;}; + static struct point const zero = {0,0}; + /* AIX XL C 1.02.0.0 rejects this. + It does not let you subtract one const X* pointer from another in + an arm of an if-expression whose if-part is not a constant + expression */ + const char *g = "string"; + pcpcc = &g + (g ? g-g : 0); + /* HPUX 7.0 cc rejects these. */ + ++pcpcc; + ppc = (char**) pcpcc; + pcpcc = (char const *const *) ppc; + { /* SCO 3.2v4 cc rejects this sort of thing. */ + char tx; + char *t = &tx; + char const *s = 0 ? (char *) 0 : (char const *) 0; + + *t++ = 0; + if (s) return 0; + } + { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ + int x[] = {25, 17}; + const int *foo = &x[0]; + ++foo; + } + { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ + typedef const int *iptr; + iptr p = 0; + ++p; + } + { /* AIX XL C 1.02.0.0 rejects this sort of thing, saying + "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ + struct s { int j; const int *ap[3]; } bx; + struct s *b = &bx; b->j = 5; + } + { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ + const int foo = 10; + if (!foo) return 0; + } + return !cs[0] && !zero.x; +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_c_const=yes +else + ac_cv_c_const=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5 +$as_echo "$ac_cv_c_const" >&6; } +if test $ac_cv_c_const = no; then + +$as_echo "#define const /**/" >>confdefs.h + +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5 +$as_echo_n "checking whether byte ordering is bigendian... " >&6; } +if ${ac_cv_c_bigendian+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_c_bigendian=unknown + # See if we're dealing with a universal compiler. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifndef __APPLE_CC__ + not a universal capable compiler + #endif + typedef int dummy; + +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + + # Check for potential -arch flags. It is not universal unless + # there are at least two -arch flags with different values. + ac_arch= + ac_prev= + for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do + if test -n "$ac_prev"; then + case $ac_word in + i?86 | x86_64 | ppc | ppc64) + if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then + ac_arch=$ac_word + else + ac_cv_c_bigendian=universal + break + fi + ;; + esac + ac_prev= + elif test "x$ac_word" = "x-arch"; then + ac_prev=arch + fi + done +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + if test $ac_cv_c_bigendian = unknown; then + # See if sys/param.h defines the BYTE_ORDER macro. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + #include + +int +main () +{ +#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \ + && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \ + && LITTLE_ENDIAN) + bogus endian macros + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + # It does; now see whether it defined to BIG_ENDIAN or not. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + #include + +int +main () +{ +#if BYTE_ORDER != BIG_ENDIAN + not big endian + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_c_bigendian=yes +else + ac_cv_c_bigendian=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + if test $ac_cv_c_bigendian = unknown; then + # See if defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris). + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +int +main () +{ +#if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN) + bogus endian macros + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + # It does; now see whether it defined to _BIG_ENDIAN or not. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +int +main () +{ +#ifndef _BIG_ENDIAN + not big endian + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_c_bigendian=yes +else + ac_cv_c_bigendian=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + if test $ac_cv_c_bigendian = unknown; then + # Compile a test program. + if test "$cross_compiling" = yes; then : + # Try to guess by grepping values from an object file. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +short int ascii_mm[] = + { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; + short int ascii_ii[] = + { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; + int use_ascii (int i) { + return ascii_mm[i] + ascii_ii[i]; + } + short int ebcdic_ii[] = + { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; + short int ebcdic_mm[] = + { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; + int use_ebcdic (int i) { + return ebcdic_mm[i] + ebcdic_ii[i]; + } + extern int foo; + +int +main () +{ +return use_ascii (foo) == use_ebcdic (foo); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then + ac_cv_c_bigendian=yes + fi + if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then + if test "$ac_cv_c_bigendian" = unknown; then + ac_cv_c_bigendian=no + else + # finding both strings is unlikely to happen, but who knows? + ac_cv_c_bigendian=unknown + fi + fi +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ + + /* Are we little or big endian? From Harbison&Steele. */ + union + { + long int l; + char c[sizeof (long int)]; + } u; + u.l = 1; + return u.c[sizeof (long int) - 1] == 1; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_c_bigendian=no +else + ac_cv_c_bigendian=yes +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5 +$as_echo "$ac_cv_c_bigendian" >&6; } + case $ac_cv_c_bigendian in #( + yes) + $as_echo "#define WORDS_BIGENDIAN 1" >>confdefs.h +;; #( + no) + ;; #( + universal) + +$as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h + + ;; #( + *) + as_fn_error $? "unknown endianness + presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;; + esac + +ac_fn_c_check_type "$LINENO" "off_t" "ac_cv_type_off_t" "$ac_includes_default" +if test "x$ac_cv_type_off_t" = xyes; then : + +else + +cat >>confdefs.h <<_ACEOF +#define off_t long int +_ACEOF + +fi + +# Check whether --enable-largefile was given. +if test "${enable_largefile+set}" = set; then : + enableval=$enable_largefile; +fi + +if test "$enable_largefile" != no; then + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for special C compiler options needed for large files" >&5 +$as_echo_n "checking for special C compiler options needed for large files... " >&6; } +if ${ac_cv_sys_largefile_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_sys_largefile_CC=no + if test "$GCC" != yes; then + ac_save_CC=$CC + while :; do + # IRIX 6.2 and later do not support large files by default, + # so use the C compiler's -n32 option if that helps. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF + if ac_fn_c_try_compile "$LINENO"; then : + break +fi +rm -f core conftest.err conftest.$ac_objext + CC="$CC -n32" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_sys_largefile_CC=' -n32'; break +fi +rm -f core conftest.err conftest.$ac_objext + break + done + CC=$ac_save_CC + rm -f conftest.$ac_ext + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_CC" >&5 +$as_echo "$ac_cv_sys_largefile_CC" >&6; } + if test "$ac_cv_sys_largefile_CC" != no; then + CC=$CC$ac_cv_sys_largefile_CC + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _FILE_OFFSET_BITS value needed for large files" >&5 +$as_echo_n "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; } +if ${ac_cv_sys_file_offset_bits+:} false; then : + $as_echo_n "(cached) " >&6 +else + while :; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_sys_file_offset_bits=no; break +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#define _FILE_OFFSET_BITS 64 +#include + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_sys_file_offset_bits=64; break +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_cv_sys_file_offset_bits=unknown + break +done +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_file_offset_bits" >&5 +$as_echo "$ac_cv_sys_file_offset_bits" >&6; } +case $ac_cv_sys_file_offset_bits in #( + no | unknown) ;; + *) +cat >>confdefs.h <<_ACEOF +#define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits +_ACEOF +;; +esac +rm -rf conftest* + if test $ac_cv_sys_file_offset_bits = unknown; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGE_FILES value needed for large files" >&5 +$as_echo_n "checking for _LARGE_FILES value needed for large files... " >&6; } +if ${ac_cv_sys_large_files+:} false; then : + $as_echo_n "(cached) " >&6 +else + while :; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_sys_large_files=no; break +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#define _LARGE_FILES 1 +#include + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_sys_large_files=1; break +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_cv_sys_large_files=unknown + break +done +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_large_files" >&5 +$as_echo "$ac_cv_sys_large_files" >&6; } +case $ac_cv_sys_large_files in #( + no | unknown) ;; + *) +cat >>confdefs.h <<_ACEOF +#define _LARGE_FILES $ac_cv_sys_large_files +_ACEOF +;; +esac +rm -rf conftest* + fi + + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGEFILE_SOURCE value needed for large files" >&5 +$as_echo_n "checking for _LARGEFILE_SOURCE value needed for large files... " >&6; } +if ${ac_cv_sys_largefile_source+:} false; then : + $as_echo_n "(cached) " >&6 +else + while :; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include /* for off_t */ + #include +int +main () +{ +int (*fp) (FILE *, off_t, int) = fseeko; + return fseeko (stdin, 0, 0) && fp (stdin, 0, 0); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_sys_largefile_source=no; break +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#define _LARGEFILE_SOURCE 1 +#include /* for off_t */ + #include +int +main () +{ +int (*fp) (FILE *, off_t, int) = fseeko; + return fseeko (stdin, 0, 0) && fp (stdin, 0, 0); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_sys_largefile_source=1; break +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + ac_cv_sys_largefile_source=unknown + break +done +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_source" >&5 +$as_echo "$ac_cv_sys_largefile_source" >&6; } +case $ac_cv_sys_largefile_source in #( + no | unknown) ;; + *) +cat >>confdefs.h <<_ACEOF +#define _LARGEFILE_SOURCE $ac_cv_sys_largefile_source +_ACEOF +;; +esac +rm -rf conftest* + +# We used to try defining _XOPEN_SOURCE=500 too, to work around a bug +# in glibc 2.1.3, but that breaks too many other things. +# If you want fseeko and ftello with glibc, upgrade to a fixed glibc. +if test $ac_cv_sys_largefile_source != unknown; then + +$as_echo "#define HAVE_FSEEKO 1" >>confdefs.h + +fi + +if test $ac_cv_c_compiler_gnu = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC needs -traditional" >&5 +$as_echo_n "checking whether $CC needs -traditional... " >&6; } +if ${ac_cv_prog_gcc_traditional+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_pattern="Autoconf.*'x'" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +Autoconf TIOCGETP +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "$ac_pattern" >/dev/null 2>&1; then : + ac_cv_prog_gcc_traditional=yes +else + ac_cv_prog_gcc_traditional=no +fi +rm -f conftest* + + + if test $ac_cv_prog_gcc_traditional = no; then + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +Autoconf TCGETA +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "$ac_pattern" >/dev/null 2>&1; then : + ac_cv_prog_gcc_traditional=yes +fi +rm -f conftest* + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_gcc_traditional" >&5 +$as_echo "$ac_cv_prog_gcc_traditional" >&6; } + if test $ac_cv_prog_gcc_traditional = yes; then + CC="$CC -traditional" + fi +fi + +ac_fn_c_check_decl "$LINENO" "strerror_r" "ac_cv_have_decl_strerror_r" "$ac_includes_default" +if test "x$ac_cv_have_decl_strerror_r" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_STRERROR_R $ac_have_decl +_ACEOF + +for ac_func in strerror_r +do : + ac_fn_c_check_func "$LINENO" "strerror_r" "ac_cv_func_strerror_r" +if test "x$ac_cv_func_strerror_r" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_STRERROR_R 1 +_ACEOF + +fi +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether strerror_r returns char *" >&5 +$as_echo_n "checking whether strerror_r returns char *... " >&6; } +if ${ac_cv_func_strerror_r_char_p+:} false; then : + $as_echo_n "(cached) " >&6 +else + + ac_cv_func_strerror_r_char_p=no + if test $ac_cv_have_decl_strerror_r = yes; then + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ + + char buf[100]; + char x = *strerror_r (0, buf, sizeof buf); + char *p = strerror_r (0, buf, sizeof buf); + return !p || x; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_func_strerror_r_char_p=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + else + # strerror_r is not declared. Choose between + # systems that have relatively inaccessible declarations for the + # function. BeOS and DEC UNIX 4.0 fall in this category, but the + # former has a strerror_r that returns char*, while the latter + # has a strerror_r that returns `int'. + # This test should segfault on the DEC system. + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default + extern char *strerror_r (); +int +main () +{ +char buf[100]; + char x = *strerror_r (0, buf, sizeof buf); + return ! isalpha (x); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_func_strerror_r_char_p=yes +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_strerror_r_char_p" >&5 +$as_echo "$ac_cv_func_strerror_r_char_p" >&6; } +if test $ac_cv_func_strerror_r_char_p = yes; then + +$as_echo "#define STRERROR_R_CHAR_P 1" >>confdefs.h + +fi + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NLS is requested" >&5 +$as_echo_n "checking whether NLS is requested... " >&6; } + # Check whether --enable-nls was given. +if test "${enable_nls+set}" = set; then : + enableval=$enable_nls; USE_NLS=$enableval +else + USE_NLS=yes +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5 +$as_echo "$USE_NLS" >&6; } + + + + + GETTEXT_MACRO_VERSION=0.18 + + + + +# Prepare PATH_SEPARATOR. +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which + # contains only /bin. Note that ksh looks also at the FPATH variable, + # so we have to set that as well for the test. + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ + && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ + || PATH_SEPARATOR=';' + } +fi + +# Find out how to test for executable files. Don't use a zero-byte file, +# as systems may use methods other than mode bits to determine executability. +cat >conf$$.file <<_ASEOF +#! /bin/sh +exit 0 +_ASEOF +chmod +x conf$$.file +if test -x conf$$.file >/dev/null 2>&1; then + ac_executable_p="test -x" +else + ac_executable_p="test -f" +fi +rm -f conf$$.file + +# Extract the first word of "msgfmt", so it can be a program name with args. +set dummy msgfmt; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_MSGFMT+:} false; then : + $as_echo_n "(cached) " >&6 +else + case "$MSGFMT" in + [\\/]* | ?:[\\/]*) + ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path. + ;; + *) + ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$ac_save_IFS" + test -z "$ac_dir" && ac_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then + echo "$as_me: trying $ac_dir/$ac_word..." >&5 + if $ac_dir/$ac_word --statistics /dev/null >&5 2>&1 && + (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then + ac_cv_path_MSGFMT="$ac_dir/$ac_word$ac_exec_ext" + break 2 + fi + fi + done + done + IFS="$ac_save_IFS" + test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT=":" + ;; +esac +fi +MSGFMT="$ac_cv_path_MSGFMT" +if test "$MSGFMT" != ":"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGFMT" >&5 +$as_echo "$MSGFMT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + # Extract the first word of "gmsgfmt", so it can be a program name with args. +set dummy gmsgfmt; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_GMSGFMT+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $GMSGFMT in + [\\/]* | ?:[\\/]*) + ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT" + ;; +esac +fi +GMSGFMT=$ac_cv_path_GMSGFMT +if test -n "$GMSGFMT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GMSGFMT" >&5 +$as_echo "$GMSGFMT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + case `$MSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in + '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) MSGFMT_015=: ;; + *) MSGFMT_015=$MSGFMT ;; + esac + + case `$GMSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in + '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) GMSGFMT_015=: ;; + *) GMSGFMT_015=$GMSGFMT ;; + esac + + + +# Prepare PATH_SEPARATOR. +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which + # contains only /bin. Note that ksh looks also at the FPATH variable, + # so we have to set that as well for the test. + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ + && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ + || PATH_SEPARATOR=';' + } +fi + +# Find out how to test for executable files. Don't use a zero-byte file, +# as systems may use methods other than mode bits to determine executability. +cat >conf$$.file <<_ASEOF +#! /bin/sh +exit 0 +_ASEOF +chmod +x conf$$.file +if test -x conf$$.file >/dev/null 2>&1; then + ac_executable_p="test -x" +else + ac_executable_p="test -f" +fi +rm -f conf$$.file + +# Extract the first word of "xgettext", so it can be a program name with args. +set dummy xgettext; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_XGETTEXT+:} false; then : + $as_echo_n "(cached) " >&6 +else + case "$XGETTEXT" in + [\\/]* | ?:[\\/]*) + ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path. + ;; + *) + ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$ac_save_IFS" + test -z "$ac_dir" && ac_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then + echo "$as_me: trying $ac_dir/$ac_word..." >&5 + if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >&5 2>&1 && + (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then + ac_cv_path_XGETTEXT="$ac_dir/$ac_word$ac_exec_ext" + break 2 + fi + fi + done + done + IFS="$ac_save_IFS" + test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":" + ;; +esac +fi +XGETTEXT="$ac_cv_path_XGETTEXT" +if test "$XGETTEXT" != ":"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XGETTEXT" >&5 +$as_echo "$XGETTEXT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + rm -f messages.po + + case `$XGETTEXT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in + '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) XGETTEXT_015=: ;; + *) XGETTEXT_015=$XGETTEXT ;; + esac + + + +# Prepare PATH_SEPARATOR. +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which + # contains only /bin. Note that ksh looks also at the FPATH variable, + # so we have to set that as well for the test. + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ + && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ + || PATH_SEPARATOR=';' + } +fi + +# Find out how to test for executable files. Don't use a zero-byte file, +# as systems may use methods other than mode bits to determine executability. +cat >conf$$.file <<_ASEOF +#! /bin/sh +exit 0 +_ASEOF +chmod +x conf$$.file +if test -x conf$$.file >/dev/null 2>&1; then + ac_executable_p="test -x" +else + ac_executable_p="test -f" +fi +rm -f conf$$.file + +# Extract the first word of "msgmerge", so it can be a program name with args. +set dummy msgmerge; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_MSGMERGE+:} false; then : + $as_echo_n "(cached) " >&6 +else + case "$MSGMERGE" in + [\\/]* | ?:[\\/]*) + ac_cv_path_MSGMERGE="$MSGMERGE" # Let the user override the test with a path. + ;; + *) + ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$ac_save_IFS" + test -z "$ac_dir" && ac_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then + echo "$as_me: trying $ac_dir/$ac_word..." >&5 + if $ac_dir/$ac_word --update -q /dev/null /dev/null >&5 2>&1; then + ac_cv_path_MSGMERGE="$ac_dir/$ac_word$ac_exec_ext" + break 2 + fi + fi + done + done + IFS="$ac_save_IFS" + test -z "$ac_cv_path_MSGMERGE" && ac_cv_path_MSGMERGE=":" + ;; +esac +fi +MSGMERGE="$ac_cv_path_MSGMERGE" +if test "$MSGMERGE" != ":"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGMERGE" >&5 +$as_echo "$MSGMERGE" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$localedir" || localedir='${datadir}/locale' + + + test -n "${XGETTEXT_EXTRA_OPTIONS+set}" || XGETTEXT_EXTRA_OPTIONS= + + + ac_config_commands="$ac_config_commands po-directories" + + + + if test "X$prefix" = "XNONE"; then + acl_final_prefix="$ac_default_prefix" + else + acl_final_prefix="$prefix" + fi + if test "X$exec_prefix" = "XNONE"; then + acl_final_exec_prefix='${prefix}' + else + acl_final_exec_prefix="$exec_prefix" + fi + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + eval acl_final_exec_prefix=\"$acl_final_exec_prefix\" + prefix="$acl_save_prefix" + + + +# Check whether --with-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then : + withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes +else + with_gnu_ld=no +fi + +# Prepare PATH_SEPARATOR. +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which + # contains only /bin. Note that ksh looks also at the FPATH variable, + # so we have to set that as well for the test. + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ + && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ + || PATH_SEPARATOR=';' + } +fi + +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 +$as_echo_n "checking for ld used by $CC... " >&6; } + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [\\/]* | ?:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`echo "$ac_prog"| sed 's%\\\\%/%g'` + while echo "$ac_prog" | grep "$re_direlt" > /dev/null 2>&1; do + ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 +$as_echo_n "checking for GNU ld... " >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 +$as_echo_n "checking for non-GNU ld... " >&6; } +fi +if ${acl_cv_path_LD+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$LD"; then + acl_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$acl_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + acl_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$acl_cv_path_LD" -v 2>&1 &5 +$as_echo "$LD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi +test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 +$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } +if ${acl_cv_prog_gnu_ld+:} false; then : + $as_echo_n "(cached) " >&6 +else + # I'd rather use --version here, but apparently some GNU lds only accept -v. +case `$LD -v 2>&1 &5 +$as_echo "$acl_cv_prog_gnu_ld" >&6; } +with_gnu_ld=$acl_cv_prog_gnu_ld + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shared library run path origin" >&5 +$as_echo_n "checking for shared library run path origin... " >&6; } +if ${acl_cv_rpath+:} false; then : + $as_echo_n "(cached) " >&6 +else + + CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ + ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh + . ./conftest.sh + rm -f ./conftest.sh + acl_cv_rpath=done + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $acl_cv_rpath" >&5 +$as_echo "$acl_cv_rpath" >&6; } + wl="$acl_cv_wl" + acl_libext="$acl_cv_libext" + acl_shlibext="$acl_cv_shlibext" + acl_libname_spec="$acl_cv_libname_spec" + acl_library_names_spec="$acl_cv_library_names_spec" + acl_hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" + acl_hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" + acl_hardcode_direct="$acl_cv_hardcode_direct" + acl_hardcode_minus_L="$acl_cv_hardcode_minus_L" + # Check whether --enable-rpath was given. +if test "${enable_rpath+set}" = set; then : + enableval=$enable_rpath; : +else + enable_rpath=yes +fi + + + + + acl_libdirstem=lib + acl_libdirstem2= + case "$host_os" in + solaris*) + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 64-bit host" >&5 +$as_echo_n "checking for 64-bit host... " >&6; } +if ${gl_cv_solaris_64bit+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifdef _LP64 +sixtyfour bits +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "sixtyfour bits" >/dev/null 2>&1; then : + gl_cv_solaris_64bit=yes +else + gl_cv_solaris_64bit=no +fi +rm -f conftest* + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_solaris_64bit" >&5 +$as_echo "$gl_cv_solaris_64bit" >&6; } + if test $gl_cv_solaris_64bit = yes; then + acl_libdirstem=lib/64 + case "$host_cpu" in + sparc*) acl_libdirstem2=lib/sparcv9 ;; + i*86 | x86_64) acl_libdirstem2=lib/amd64 ;; + esac + fi + ;; + *) + searchpath=`(LC_ALL=C $CC -print-search-dirs) 2>/dev/null | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'` + if test -n "$searchpath"; then + acl_save_IFS="${IFS= }"; IFS=":" + for searchdir in $searchpath; do + if test -d "$searchdir"; then + case "$searchdir" in + */lib64/ | */lib64 ) acl_libdirstem=lib64 ;; + */../ | */.. ) + # Better ignore directories of this form. They are misleading. + ;; + *) searchdir=`cd "$searchdir" && pwd` + case "$searchdir" in + */lib64 ) acl_libdirstem=lib64 ;; + esac ;; + esac + fi + done + IFS="$acl_save_IFS" + fi + ;; + esac + test -n "$acl_libdirstem2" || acl_libdirstem2="$acl_libdirstem" + + + + + + + + + + + + + use_additional=yes + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + +# Check whether --with-libiconv-prefix was given. +if test "${with_libiconv_prefix+set}" = set; then : + withval=$with_libiconv_prefix; + if test "X$withval" = "Xno"; then + use_additional=no + else + if test "X$withval" = "X"; then + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + else + additional_includedir="$withval/include" + additional_libdir="$withval/$acl_libdirstem" + if test "$acl_libdirstem2" != "$acl_libdirstem" \ + && ! test -d "$withval/$acl_libdirstem"; then + additional_libdir="$withval/$acl_libdirstem2" + fi + fi + fi + +fi + + LIBICONV= + LTLIBICONV= + INCICONV= + LIBICONV_PREFIX= + HAVE_LIBICONV= + rpathdirs= + ltrpathdirs= + names_already_handled= + names_next_round='iconv ' + while test -n "$names_next_round"; do + names_this_round="$names_next_round" + names_next_round= + for name in $names_this_round; do + already_handled= + for n in $names_already_handled; do + if test "$n" = "$name"; then + already_handled=yes + break + fi + done + if test -z "$already_handled"; then + names_already_handled="$names_already_handled $name" + uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./+-|ABCDEFGHIJKLMNOPQRSTUVWXYZ____|'` + eval value=\"\$HAVE_LIB$uppername\" + if test -n "$value"; then + if test "$value" = yes; then + eval value=\"\$LIB$uppername\" + test -z "$value" || LIBICONV="${LIBICONV}${LIBICONV:+ }$value" + eval value=\"\$LTLIB$uppername\" + test -z "$value" || LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$value" + else + : + fi + else + found_dir= + found_la= + found_so= + found_a= + eval libname=\"$acl_libname_spec\" # typically: libname=lib$name + if test -n "$acl_shlibext"; then + shrext=".$acl_shlibext" # typically: shrext=.so + else + shrext= + fi + if test $use_additional = yes; then + dir="$additional_libdir" + if test -n "$acl_shlibext"; then + if test -f "$dir/$libname$shrext"; then + found_dir="$dir" + found_so="$dir/$libname$shrext" + else + if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then + ver=`(cd "$dir" && \ + for f in "$libname$shrext".*; do echo "$f"; done \ + | sed -e "s,^$libname$shrext\\\\.,," \ + | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ + | sed 1q ) 2>/dev/null` + if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then + found_dir="$dir" + found_so="$dir/$libname$shrext.$ver" + fi + else + eval library_names=\"$acl_library_names_spec\" + for f in $library_names; do + if test -f "$dir/$f"; then + found_dir="$dir" + found_so="$dir/$f" + break + fi + done + fi + fi + fi + if test "X$found_dir" = "X"; then + if test -f "$dir/$libname.$acl_libext"; then + found_dir="$dir" + found_a="$dir/$libname.$acl_libext" + fi + fi + if test "X$found_dir" != "X"; then + if test -f "$dir/$libname.la"; then + found_la="$dir/$libname.la" + fi + fi + fi + if test "X$found_dir" = "X"; then + for x in $LDFLAGS $LTLIBICONV; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + case "$x" in + -L*) + dir=`echo "X$x" | sed -e 's/^X-L//'` + if test -n "$acl_shlibext"; then + if test -f "$dir/$libname$shrext"; then + found_dir="$dir" + found_so="$dir/$libname$shrext" + else + if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then + ver=`(cd "$dir" && \ + for f in "$libname$shrext".*; do echo "$f"; done \ + | sed -e "s,^$libname$shrext\\\\.,," \ + | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ + | sed 1q ) 2>/dev/null` + if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then + found_dir="$dir" + found_so="$dir/$libname$shrext.$ver" + fi + else + eval library_names=\"$acl_library_names_spec\" + for f in $library_names; do + if test -f "$dir/$f"; then + found_dir="$dir" + found_so="$dir/$f" + break + fi + done + fi + fi + fi + if test "X$found_dir" = "X"; then + if test -f "$dir/$libname.$acl_libext"; then + found_dir="$dir" + found_a="$dir/$libname.$acl_libext" + fi + fi + if test "X$found_dir" != "X"; then + if test -f "$dir/$libname.la"; then + found_la="$dir/$libname.la" + fi + fi + ;; + esac + if test "X$found_dir" != "X"; then + break + fi + done + fi + if test "X$found_dir" != "X"; then + LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$found_dir -l$name" + if test "X$found_so" != "X"; then + if test "$enable_rpath" = no \ + || test "X$found_dir" = "X/usr/$acl_libdirstem" \ + || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then + LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" + else + haveit= + for x in $ltrpathdirs; do + if test "X$x" = "X$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + ltrpathdirs="$ltrpathdirs $found_dir" + fi + if test "$acl_hardcode_direct" = yes; then + LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" + else + if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then + LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" + haveit= + for x in $rpathdirs; do + if test "X$x" = "X$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + rpathdirs="$rpathdirs $found_dir" + fi + else + haveit= + for x in $LDFLAGS $LIBICONV; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-L$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir" + fi + if test "$acl_hardcode_minus_L" != no; then + LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" + else + LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name" + fi + fi + fi + fi + else + if test "X$found_a" != "X"; then + LIBICONV="${LIBICONV}${LIBICONV:+ }$found_a" + else + LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir -l$name" + fi + fi + additional_includedir= + case "$found_dir" in + */$acl_libdirstem | */$acl_libdirstem/) + basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` + if test "$name" = 'iconv'; then + LIBICONV_PREFIX="$basedir" + fi + additional_includedir="$basedir/include" + ;; + */$acl_libdirstem2 | */$acl_libdirstem2/) + basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'` + if test "$name" = 'iconv'; then + LIBICONV_PREFIX="$basedir" + fi + additional_includedir="$basedir/include" + ;; + esac + if test "X$additional_includedir" != "X"; then + if test "X$additional_includedir" != "X/usr/include"; then + haveit= + if test "X$additional_includedir" = "X/usr/local/include"; then + if test -n "$GCC"; then + case $host_os in + linux* | gnu* | k*bsd*-gnu) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + for x in $CPPFLAGS $INCICONV; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-I$additional_includedir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_includedir"; then + INCICONV="${INCICONV}${INCICONV:+ }-I$additional_includedir" + fi + fi + fi + fi + fi + if test -n "$found_la"; then + save_libdir="$libdir" + case "$found_la" in + */* | *\\*) . "$found_la" ;; + *) . "./$found_la" ;; + esac + libdir="$save_libdir" + for dep in $dependency_libs; do + case "$dep" in + -L*) + additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` + if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \ + && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then + haveit= + if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \ + || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then + if test -n "$GCC"; then + case $host_os in + linux* | gnu* | k*bsd*-gnu) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + haveit= + for x in $LDFLAGS $LIBICONV; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + LIBICONV="${LIBICONV}${LIBICONV:+ }-L$additional_libdir" + fi + fi + haveit= + for x in $LDFLAGS $LTLIBICONV; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$additional_libdir" + fi + fi + fi + fi + ;; + -R*) + dir=`echo "X$dep" | sed -e 's/^X-R//'` + if test "$enable_rpath" != no; then + haveit= + for x in $rpathdirs; do + if test "X$x" = "X$dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + rpathdirs="$rpathdirs $dir" + fi + haveit= + for x in $ltrpathdirs; do + if test "X$x" = "X$dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + ltrpathdirs="$ltrpathdirs $dir" + fi + fi + ;; + -l*) + names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` + ;; + *.la) + names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` + ;; + *) + LIBICONV="${LIBICONV}${LIBICONV:+ }$dep" + LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$dep" + ;; + esac + done + fi + else + LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name" + LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-l$name" + fi + fi + fi + done + done + if test "X$rpathdirs" != "X"; then + if test -n "$acl_hardcode_libdir_separator"; then + alldirs= + for found_dir in $rpathdirs; do + alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" + done + acl_save_libdir="$libdir" + libdir="$alldirs" + eval flag=\"$acl_hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + LIBICONV="${LIBICONV}${LIBICONV:+ }$flag" + else + for found_dir in $rpathdirs; do + acl_save_libdir="$libdir" + libdir="$found_dir" + eval flag=\"$acl_hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + LIBICONV="${LIBICONV}${LIBICONV:+ }$flag" + done + fi + fi + if test "X$ltrpathdirs" != "X"; then + for found_dir in $ltrpathdirs; do + LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-R$found_dir" + done + fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CFPreferencesCopyAppValue" >&5 +$as_echo_n "checking for CFPreferencesCopyAppValue... " >&6; } +if ${gt_cv_func_CFPreferencesCopyAppValue+:} false; then : + $as_echo_n "(cached) " >&6 +else + gt_save_LIBS="$LIBS" + LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +CFPreferencesCopyAppValue(NULL, NULL) + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + gt_cv_func_CFPreferencesCopyAppValue=yes +else + gt_cv_func_CFPreferencesCopyAppValue=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LIBS="$gt_save_LIBS" +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFPreferencesCopyAppValue" >&5 +$as_echo "$gt_cv_func_CFPreferencesCopyAppValue" >&6; } + if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then + +$as_echo "#define HAVE_CFPREFERENCESCOPYAPPVALUE 1" >>confdefs.h + + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CFLocaleCopyCurrent" >&5 +$as_echo_n "checking for CFLocaleCopyCurrent... " >&6; } +if ${gt_cv_func_CFLocaleCopyCurrent+:} false; then : + $as_echo_n "(cached) " >&6 +else + gt_save_LIBS="$LIBS" + LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +CFLocaleCopyCurrent(); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + gt_cv_func_CFLocaleCopyCurrent=yes +else + gt_cv_func_CFLocaleCopyCurrent=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LIBS="$gt_save_LIBS" +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFLocaleCopyCurrent" >&5 +$as_echo "$gt_cv_func_CFLocaleCopyCurrent" >&6; } + if test $gt_cv_func_CFLocaleCopyCurrent = yes; then + +$as_echo "#define HAVE_CFLOCALECOPYCURRENT 1" >>confdefs.h + + fi + INTL_MACOSX_LIBS= + if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes; then + INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation" + fi + + + + + + + LIBINTL= + LTLIBINTL= + POSUB= + + case " $gt_needs " in + *" need-formatstring-macros "*) gt_api_version=3 ;; + *" need-ngettext "*) gt_api_version=2 ;; + *) gt_api_version=1 ;; + esac + gt_func_gnugettext_libc="gt_cv_func_gnugettext${gt_api_version}_libc" + gt_func_gnugettext_libintl="gt_cv_func_gnugettext${gt_api_version}_libintl" + + if test "$USE_NLS" = "yes"; then + gt_use_preinstalled_gnugettext=no + + + if test $gt_api_version -ge 3; then + gt_revision_test_code=' +#ifndef __GNU_GETTEXT_SUPPORTED_REVISION +#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1) +#endif +typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1]; +' + else + gt_revision_test_code= + fi + if test $gt_api_version -ge 2; then + gt_expression_test_code=' + * ngettext ("", "", 0)' + else + gt_expression_test_code= + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU gettext in libc" >&5 +$as_echo_n "checking for GNU gettext in libc... " >&6; } +if eval \${$gt_func_gnugettext_libc+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +$gt_revision_test_code +extern int _nl_msg_cat_cntr; +extern int *_nl_domain_bindings; + +int +main () +{ + +bindtextdomain ("", ""); +return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_domain_bindings + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$gt_func_gnugettext_libc=yes" +else + eval "$gt_func_gnugettext_libc=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +eval ac_res=\$$gt_func_gnugettext_libc + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + + if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then + + + + + + am_save_CPPFLAGS="$CPPFLAGS" + + for element in $INCICONV; do + haveit= + for x in $CPPFLAGS; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X$element"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" + fi + done + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for iconv" >&5 +$as_echo_n "checking for iconv... " >&6; } +if ${am_cv_func_iconv+:} false; then : + $as_echo_n "(cached) " >&6 +else + + am_cv_func_iconv="no, consider installing GNU libiconv" + am_cv_lib_iconv=no + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +#include + +int +main () +{ +iconv_t cd = iconv_open("",""); + iconv(cd,NULL,NULL,NULL,NULL); + iconv_close(cd); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + am_cv_func_iconv=yes +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if test "$am_cv_func_iconv" != yes; then + am_save_LIBS="$LIBS" + LIBS="$LIBS $LIBICONV" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +#include + +int +main () +{ +iconv_t cd = iconv_open("",""); + iconv(cd,NULL,NULL,NULL,NULL); + iconv_close(cd); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + am_cv_lib_iconv=yes + am_cv_func_iconv=yes +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LIBS="$am_save_LIBS" + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv" >&5 +$as_echo "$am_cv_func_iconv" >&6; } + if test "$am_cv_func_iconv" = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working iconv" >&5 +$as_echo_n "checking for working iconv... " >&6; } +if ${am_cv_func_iconv_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + + am_save_LIBS="$LIBS" + if test $am_cv_lib_iconv = yes; then + LIBS="$LIBS $LIBICONV" + fi + if test "$cross_compiling" = yes; then : + + case "$host_os" in + aix* | hpux*) am_cv_func_iconv_works="guessing no" ;; + *) am_cv_func_iconv_works="guessing yes" ;; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +#include +int main () +{ + int result = 0; + /* Test against AIX 5.1 bug: Failures are not distinguishable from successful + returns. */ + { + iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8"); + if (cd_utf8_to_88591 != (iconv_t)(-1)) + { + static const char input[] = "\342\202\254"; /* EURO SIGN */ + char buf[10]; + const char *inptr = input; + size_t inbytesleft = strlen (input); + char *outptr = buf; + size_t outbytesleft = sizeof (buf); + size_t res = iconv (cd_utf8_to_88591, + (char **) &inptr, &inbytesleft, + &outptr, &outbytesleft); + if (res == 0) + result |= 1; + iconv_close (cd_utf8_to_88591); + } + } + /* Test against Solaris 10 bug: Failures are not distinguishable from + successful returns. */ + { + iconv_t cd_ascii_to_88591 = iconv_open ("ISO8859-1", "646"); + if (cd_ascii_to_88591 != (iconv_t)(-1)) + { + static const char input[] = "\263"; + char buf[10]; + const char *inptr = input; + size_t inbytesleft = strlen (input); + char *outptr = buf; + size_t outbytesleft = sizeof (buf); + size_t res = iconv (cd_ascii_to_88591, + (char **) &inptr, &inbytesleft, + &outptr, &outbytesleft); + if (res == 0) + result |= 2; + iconv_close (cd_ascii_to_88591); + } + } + /* Test against AIX 6.1..7.1 bug: Buffer overrun. */ + { + iconv_t cd_88591_to_utf8 = iconv_open ("UTF-8", "ISO-8859-1"); + if (cd_88591_to_utf8 != (iconv_t)(-1)) + { + static const char input[] = "\304"; + static char buf[2] = { (char)0xDE, (char)0xAD }; + const char *inptr = input; + size_t inbytesleft = 1; + char *outptr = buf; + size_t outbytesleft = 1; + size_t res = iconv (cd_88591_to_utf8, + (char **) &inptr, &inbytesleft, + &outptr, &outbytesleft); + if (res != (size_t)(-1) || outptr - buf > 1 || buf[1] != (char)0xAD) + result |= 4; + iconv_close (cd_88591_to_utf8); + } + } +#if 0 /* This bug could be worked around by the caller. */ + /* Test against HP-UX 11.11 bug: Positive return value instead of 0. */ + { + iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591"); + if (cd_88591_to_utf8 != (iconv_t)(-1)) + { + static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; + char buf[50]; + const char *inptr = input; + size_t inbytesleft = strlen (input); + char *outptr = buf; + size_t outbytesleft = sizeof (buf); + size_t res = iconv (cd_88591_to_utf8, + (char **) &inptr, &inbytesleft, + &outptr, &outbytesleft); + if ((int)res > 0) + result |= 8; + iconv_close (cd_88591_to_utf8); + } + } +#endif + /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is + provided. */ + if (/* Try standardized names. */ + iconv_open ("UTF-8", "EUC-JP") == (iconv_t)(-1) + /* Try IRIX, OSF/1 names. */ + && iconv_open ("UTF-8", "eucJP") == (iconv_t)(-1) + /* Try AIX names. */ + && iconv_open ("UTF-8", "IBM-eucJP") == (iconv_t)(-1) + /* Try HP-UX names. */ + && iconv_open ("utf8", "eucJP") == (iconv_t)(-1)) + result |= 16; + return result; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + am_cv_func_iconv_works=yes +else + am_cv_func_iconv_works=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + LIBS="$am_save_LIBS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv_works" >&5 +$as_echo "$am_cv_func_iconv_works" >&6; } + case "$am_cv_func_iconv_works" in + *no) am_func_iconv=no am_cv_lib_iconv=no ;; + *) am_func_iconv=yes ;; + esac + else + am_func_iconv=no am_cv_lib_iconv=no + fi + if test "$am_func_iconv" = yes; then + +$as_echo "#define HAVE_ICONV 1" >>confdefs.h + + fi + if test "$am_cv_lib_iconv" = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libiconv" >&5 +$as_echo_n "checking how to link with libiconv... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBICONV" >&5 +$as_echo "$LIBICONV" >&6; } + else + CPPFLAGS="$am_save_CPPFLAGS" + LIBICONV= + LTLIBICONV= + fi + + + + + + + + + + + + use_additional=yes + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + +# Check whether --with-libintl-prefix was given. +if test "${with_libintl_prefix+set}" = set; then : + withval=$with_libintl_prefix; + if test "X$withval" = "Xno"; then + use_additional=no + else + if test "X$withval" = "X"; then + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + else + additional_includedir="$withval/include" + additional_libdir="$withval/$acl_libdirstem" + if test "$acl_libdirstem2" != "$acl_libdirstem" \ + && ! test -d "$withval/$acl_libdirstem"; then + additional_libdir="$withval/$acl_libdirstem2" + fi + fi + fi + +fi + + LIBINTL= + LTLIBINTL= + INCINTL= + LIBINTL_PREFIX= + HAVE_LIBINTL= + rpathdirs= + ltrpathdirs= + names_already_handled= + names_next_round='intl ' + while test -n "$names_next_round"; do + names_this_round="$names_next_round" + names_next_round= + for name in $names_this_round; do + already_handled= + for n in $names_already_handled; do + if test "$n" = "$name"; then + already_handled=yes + break + fi + done + if test -z "$already_handled"; then + names_already_handled="$names_already_handled $name" + uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./+-|ABCDEFGHIJKLMNOPQRSTUVWXYZ____|'` + eval value=\"\$HAVE_LIB$uppername\" + if test -n "$value"; then + if test "$value" = yes; then + eval value=\"\$LIB$uppername\" + test -z "$value" || LIBINTL="${LIBINTL}${LIBINTL:+ }$value" + eval value=\"\$LTLIB$uppername\" + test -z "$value" || LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }$value" + else + : + fi + else + found_dir= + found_la= + found_so= + found_a= + eval libname=\"$acl_libname_spec\" # typically: libname=lib$name + if test -n "$acl_shlibext"; then + shrext=".$acl_shlibext" # typically: shrext=.so + else + shrext= + fi + if test $use_additional = yes; then + dir="$additional_libdir" + if test -n "$acl_shlibext"; then + if test -f "$dir/$libname$shrext"; then + found_dir="$dir" + found_so="$dir/$libname$shrext" + else + if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then + ver=`(cd "$dir" && \ + for f in "$libname$shrext".*; do echo "$f"; done \ + | sed -e "s,^$libname$shrext\\\\.,," \ + | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ + | sed 1q ) 2>/dev/null` + if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then + found_dir="$dir" + found_so="$dir/$libname$shrext.$ver" + fi + else + eval library_names=\"$acl_library_names_spec\" + for f in $library_names; do + if test -f "$dir/$f"; then + found_dir="$dir" + found_so="$dir/$f" + break + fi + done + fi + fi + fi + if test "X$found_dir" = "X"; then + if test -f "$dir/$libname.$acl_libext"; then + found_dir="$dir" + found_a="$dir/$libname.$acl_libext" + fi + fi + if test "X$found_dir" != "X"; then + if test -f "$dir/$libname.la"; then + found_la="$dir/$libname.la" + fi + fi + fi + if test "X$found_dir" = "X"; then + for x in $LDFLAGS $LTLIBINTL; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + case "$x" in + -L*) + dir=`echo "X$x" | sed -e 's/^X-L//'` + if test -n "$acl_shlibext"; then + if test -f "$dir/$libname$shrext"; then + found_dir="$dir" + found_so="$dir/$libname$shrext" + else + if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then + ver=`(cd "$dir" && \ + for f in "$libname$shrext".*; do echo "$f"; done \ + | sed -e "s,^$libname$shrext\\\\.,," \ + | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ + | sed 1q ) 2>/dev/null` + if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then + found_dir="$dir" + found_so="$dir/$libname$shrext.$ver" + fi + else + eval library_names=\"$acl_library_names_spec\" + for f in $library_names; do + if test -f "$dir/$f"; then + found_dir="$dir" + found_so="$dir/$f" + break + fi + done + fi + fi + fi + if test "X$found_dir" = "X"; then + if test -f "$dir/$libname.$acl_libext"; then + found_dir="$dir" + found_a="$dir/$libname.$acl_libext" + fi + fi + if test "X$found_dir" != "X"; then + if test -f "$dir/$libname.la"; then + found_la="$dir/$libname.la" + fi + fi + ;; + esac + if test "X$found_dir" != "X"; then + break + fi + done + fi + if test "X$found_dir" != "X"; then + LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-L$found_dir -l$name" + if test "X$found_so" != "X"; then + if test "$enable_rpath" = no \ + || test "X$found_dir" = "X/usr/$acl_libdirstem" \ + || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then + LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" + else + haveit= + for x in $ltrpathdirs; do + if test "X$x" = "X$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + ltrpathdirs="$ltrpathdirs $found_dir" + fi + if test "$acl_hardcode_direct" = yes; then + LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" + else + if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then + LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" + haveit= + for x in $rpathdirs; do + if test "X$x" = "X$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + rpathdirs="$rpathdirs $found_dir" + fi + else + haveit= + for x in $LDFLAGS $LIBINTL; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-L$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + LIBINTL="${LIBINTL}${LIBINTL:+ }-L$found_dir" + fi + if test "$acl_hardcode_minus_L" != no; then + LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" + else + LIBINTL="${LIBINTL}${LIBINTL:+ }-l$name" + fi + fi + fi + fi + else + if test "X$found_a" != "X"; then + LIBINTL="${LIBINTL}${LIBINTL:+ }$found_a" + else + LIBINTL="${LIBINTL}${LIBINTL:+ }-L$found_dir -l$name" + fi + fi + additional_includedir= + case "$found_dir" in + */$acl_libdirstem | */$acl_libdirstem/) + basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` + if test "$name" = 'intl'; then + LIBINTL_PREFIX="$basedir" + fi + additional_includedir="$basedir/include" + ;; + */$acl_libdirstem2 | */$acl_libdirstem2/) + basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'` + if test "$name" = 'intl'; then + LIBINTL_PREFIX="$basedir" + fi + additional_includedir="$basedir/include" + ;; + esac + if test "X$additional_includedir" != "X"; then + if test "X$additional_includedir" != "X/usr/include"; then + haveit= + if test "X$additional_includedir" = "X/usr/local/include"; then + if test -n "$GCC"; then + case $host_os in + linux* | gnu* | k*bsd*-gnu) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + for x in $CPPFLAGS $INCINTL; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-I$additional_includedir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_includedir"; then + INCINTL="${INCINTL}${INCINTL:+ }-I$additional_includedir" + fi + fi + fi + fi + fi + if test -n "$found_la"; then + save_libdir="$libdir" + case "$found_la" in + */* | *\\*) . "$found_la" ;; + *) . "./$found_la" ;; + esac + libdir="$save_libdir" + for dep in $dependency_libs; do + case "$dep" in + -L*) + additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` + if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \ + && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then + haveit= + if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \ + || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then + if test -n "$GCC"; then + case $host_os in + linux* | gnu* | k*bsd*-gnu) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + haveit= + for x in $LDFLAGS $LIBINTL; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + LIBINTL="${LIBINTL}${LIBINTL:+ }-L$additional_libdir" + fi + fi + haveit= + for x in $LDFLAGS $LTLIBINTL; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-L$additional_libdir" + fi + fi + fi + fi + ;; + -R*) + dir=`echo "X$dep" | sed -e 's/^X-R//'` + if test "$enable_rpath" != no; then + haveit= + for x in $rpathdirs; do + if test "X$x" = "X$dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + rpathdirs="$rpathdirs $dir" + fi + haveit= + for x in $ltrpathdirs; do + if test "X$x" = "X$dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + ltrpathdirs="$ltrpathdirs $dir" + fi + fi + ;; + -l*) + names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` + ;; + *.la) + names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` + ;; + *) + LIBINTL="${LIBINTL}${LIBINTL:+ }$dep" + LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }$dep" + ;; + esac + done + fi + else + LIBINTL="${LIBINTL}${LIBINTL:+ }-l$name" + LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-l$name" + fi + fi + fi + done + done + if test "X$rpathdirs" != "X"; then + if test -n "$acl_hardcode_libdir_separator"; then + alldirs= + for found_dir in $rpathdirs; do + alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" + done + acl_save_libdir="$libdir" + libdir="$alldirs" + eval flag=\"$acl_hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + LIBINTL="${LIBINTL}${LIBINTL:+ }$flag" + else + for found_dir in $rpathdirs; do + acl_save_libdir="$libdir" + libdir="$found_dir" + eval flag=\"$acl_hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + LIBINTL="${LIBINTL}${LIBINTL:+ }$flag" + done + fi + fi + if test "X$ltrpathdirs" != "X"; then + for found_dir in $ltrpathdirs; do + LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-R$found_dir" + done + fi + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU gettext in libintl" >&5 +$as_echo_n "checking for GNU gettext in libintl... " >&6; } +if eval \${$gt_func_gnugettext_libintl+:} false; then : + $as_echo_n "(cached) " >&6 +else + gt_save_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $INCINTL" + gt_save_LIBS="$LIBS" + LIBS="$LIBS $LIBINTL" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +$gt_revision_test_code +extern int _nl_msg_cat_cntr; +extern +#ifdef __cplusplus +"C" +#endif +const char *_nl_expand_alias (const char *); + +int +main () +{ + +bindtextdomain ("", ""); +return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("") + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$gt_func_gnugettext_libintl=yes" +else + eval "$gt_func_gnugettext_libintl=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" != yes; } && test -n "$LIBICONV"; then + LIBS="$LIBS $LIBICONV" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +$gt_revision_test_code +extern int _nl_msg_cat_cntr; +extern +#ifdef __cplusplus +"C" +#endif +const char *_nl_expand_alias (const char *); + +int +main () +{ + +bindtextdomain ("", ""); +return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("") + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + LIBINTL="$LIBINTL $LIBICONV" + LTLIBINTL="$LTLIBINTL $LTLIBICONV" + eval "$gt_func_gnugettext_libintl=yes" + +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + fi + CPPFLAGS="$gt_save_CPPFLAGS" + LIBS="$gt_save_LIBS" +fi +eval ac_res=\$$gt_func_gnugettext_libintl + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + fi + + if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" = "yes"; } \ + || { { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; } \ + && test "$PACKAGE" != gettext-runtime \ + && test "$PACKAGE" != gettext-tools; }; then + gt_use_preinstalled_gnugettext=yes + else + LIBINTL= + LTLIBINTL= + INCINTL= + fi + + + + if test -n "$INTL_MACOSX_LIBS"; then + if test "$gt_use_preinstalled_gnugettext" = "yes" \ + || test "$nls_cv_use_gnu_gettext" = "yes"; then + LIBINTL="$LIBINTL $INTL_MACOSX_LIBS" + LTLIBINTL="$LTLIBINTL $INTL_MACOSX_LIBS" + fi + fi + + if test "$gt_use_preinstalled_gnugettext" = "yes" \ + || test "$nls_cv_use_gnu_gettext" = "yes"; then + +$as_echo "#define ENABLE_NLS 1" >>confdefs.h + + else + USE_NLS=no + fi + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use NLS" >&5 +$as_echo_n "checking whether to use NLS... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5 +$as_echo "$USE_NLS" >&6; } + if test "$USE_NLS" = "yes"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking where the gettext function comes from" >&5 +$as_echo_n "checking where the gettext function comes from... " >&6; } + if test "$gt_use_preinstalled_gnugettext" = "yes"; then + if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then + gt_source="external libintl" + else + gt_source="libc" + fi + else + gt_source="included intl directory" + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_source" >&5 +$as_echo "$gt_source" >&6; } + fi + + if test "$USE_NLS" = "yes"; then + + if test "$gt_use_preinstalled_gnugettext" = "yes"; then + if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libintl" >&5 +$as_echo_n "checking how to link with libintl... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBINTL" >&5 +$as_echo "$LIBINTL" >&6; } + + for element in $INCINTL; do + haveit= + for x in $CPPFLAGS; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X$element"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" + fi + done + + fi + + +$as_echo "#define HAVE_GETTEXT 1" >>confdefs.h + + +$as_echo "#define HAVE_DCGETTEXT 1" >>confdefs.h + + fi + + POSUB=po + fi + + + + INTLLIBS="$LIBINTL" + + + + + + + + + +saved_LIBS=$LIBS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for poptConfigFileToString in -lpopt" >&5 +$as_echo_n "checking for poptConfigFileToString in -lpopt... " >&6; } +if ${ac_cv_lib_popt_poptConfigFileToString+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lpopt $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char poptConfigFileToString (); +int +main () +{ +return poptConfigFileToString (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_popt_poptConfigFileToString=yes +else + ac_cv_lib_popt_poptConfigFileToString=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_popt_poptConfigFileToString" >&5 +$as_echo "$ac_cv_lib_popt_poptConfigFileToString" >&6; } +if test "x$ac_cv_lib_popt_poptConfigFileToString" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBPOPT 1 +_ACEOF + + LIBS="-lpopt $LIBS" + +else + as_fn_error $? "You need popt 1.7 or newer to compile." "$LINENO" 5 +fi + +POPT_LIBS=$LIBS + +LIBS=$saved_LIBS + +# Check whether --enable-fips was given. +if test "${enable_fips+set}" = set; then : + enableval=$enable_fips; +fi + +if test "x$enable_fips" = "xyes"; then + +$as_echo "#define ENABLE_FIPS 1" >>confdefs.h + + + if test "x$enable_static" = "xyes" -o "x$enable_static_cryptsetup" = "xyes" ; then + as_fn_error $? "Static build is not compatible with FIPS." "$LINENO" 5 + fi +fi + + + +# Check whether --enable-pwquality was given. +if test "${enable_pwquality+set}" = set; then : + enableval=$enable_pwquality; +fi + + +if test "x$enable_pwquality" = "xyes"; then + +$as_echo "#define ENABLE_PWQUALITY 1" >>confdefs.h + + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for PWQUALITY" >&5 +$as_echo_n "checking for PWQUALITY... " >&6; } + +if test -n "$PWQUALITY_CFLAGS"; then + pkg_cv_PWQUALITY_CFLAGS="$PWQUALITY_CFLAGS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"pwquality >= 1.0.0\""; } >&5 + ($PKG_CONFIG --exists --print-errors "pwquality >= 1.0.0") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_PWQUALITY_CFLAGS=`$PKG_CONFIG --cflags "pwquality >= 1.0.0" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi +if test -n "$PWQUALITY_LIBS"; then + pkg_cv_PWQUALITY_LIBS="$PWQUALITY_LIBS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"pwquality >= 1.0.0\""; } >&5 + ($PKG_CONFIG --exists --print-errors "pwquality >= 1.0.0") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_PWQUALITY_LIBS=`$PKG_CONFIG --libs "pwquality >= 1.0.0" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + PWQUALITY_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "pwquality >= 1.0.0" 2>&1` + else + PWQUALITY_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "pwquality >= 1.0.0" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$PWQUALITY_PKG_ERRORS" >&5 + + as_fn_error $? "You need pwquality library." "$LINENO" 5 +elif test $pkg_failed = untried; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + as_fn_error $? "You need pwquality library." "$LINENO" 5 +else + PWQUALITY_CFLAGS=$pkg_cv_PWQUALITY_CFLAGS + PWQUALITY_LIBS=$pkg_cv_PWQUALITY_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +fi + + PWQUALITY_STATIC_LIBS="$PWQUALITY_LIBS -lcrack -lz" +fi + +# Check whether --enable-passwdqc was given. +if test "${enable_passwdqc+set}" = set; then : + enableval=$enable_passwdqc; +fi + + +case "$enable_passwdqc" in + ""|yes|no) use_passwdqc_config="" ;; + /*) use_passwdqc_config="$enable_passwdqc"; enable_passwdqc=yes ;; + *) as_fn_error $? "Unrecognized --enable-passwdqc parameter." "$LINENO" 5 ;; +esac + +cat >>confdefs.h <<_ACEOF +#define PASSWDQC_CONFIG_FILE "$use_passwdqc_config" +_ACEOF + + +if test "x$enable_passwdqc" = "xyes"; then + +$as_echo "#define ENABLE_PASSWDQC 1" >>confdefs.h + + + PASSWDQC_LIBS="-lpasswdqc" +fi + +if test "x$enable_pwquality$enable_passwdqc" = "xyesyes"; then + as_fn_error $? "--enable-pwquality and --enable-passwdqc are mutually incompatible." "$LINENO" 5 +fi + + + + + + + + + + + + +saved_LIBS=$LIBS + +# Check whether --enable-static-cryptsetup was given. +if test "${enable_static_cryptsetup+set}" = set; then : + enableval=$enable_static_cryptsetup; +fi + +if test "x$enable_static_cryptsetup" = "xyes"; then + if test "x$enable_static" = "xno"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Requested static cryptsetup build, enabling static library." >&5 +$as_echo "$as_me: WARNING: Requested static cryptsetup build, enabling static library." >&2;} + enable_static=yes + fi +fi + if test "x$enable_static_cryptsetup" = "xyes"; then + STATIC_TOOLS_TRUE= + STATIC_TOOLS_FALSE='#' +else + STATIC_TOOLS_TRUE='#' + STATIC_TOOLS_FALSE= +fi + + +# Check whether --enable-cryptsetup was given. +if test "${enable_cryptsetup+set}" = set; then : + enableval=$enable_cryptsetup; +else + enable_cryptsetup=yes +fi + + if test "x$enable_cryptsetup" = "xyes"; then + CRYPTSETUP_TRUE= + CRYPTSETUP_FALSE='#' +else + CRYPTSETUP_TRUE='#' + CRYPTSETUP_FALSE= +fi + + +# Check whether --enable-veritysetup was given. +if test "${enable_veritysetup+set}" = set; then : + enableval=$enable_veritysetup; +else + enable_veritysetup=yes +fi + + if test "x$enable_veritysetup" = "xyes"; then + VERITYSETUP_TRUE= + VERITYSETUP_FALSE='#' +else + VERITYSETUP_TRUE='#' + VERITYSETUP_FALSE= +fi + + +# Check whether --enable-cryptsetup-reencrypt was given. +if test "${enable_cryptsetup_reencrypt+set}" = set; then : + enableval=$enable_cryptsetup_reencrypt; +else + enable_cryptsetup_reencrypt=yes +fi + + if test "x$enable_cryptsetup_reencrypt" = "xyes"; then + REENCRYPT_TRUE= + REENCRYPT_FALSE='#' +else + REENCRYPT_TRUE='#' + REENCRYPT_FALSE= +fi + + +# Check whether --enable-integritysetup was given. +if test "${enable_integritysetup+set}" = set; then : + enableval=$enable_integritysetup; +else + enable_integritysetup=yes +fi + + if test "x$enable_integritysetup" = "xyes"; then + INTEGRITYSETUP_TRUE= + INTEGRITYSETUP_FALSE='#' +else + INTEGRITYSETUP_TRUE='#' + INTEGRITYSETUP_FALSE= +fi + + +# Check whether --enable-selinux was given. +if test "${enable_selinux+set}" = set; then : + enableval=$enable_selinux; +else + enable_selinux=yes +fi + + +# Check whether --enable-udev was given. +if test "${enable_udev+set}" = set; then : + enableval=$enable_udev; +else + enable_udev=yes +fi + + + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for DEVMAPPER" >&5 +$as_echo_n "checking for DEVMAPPER... " >&6; } + +if test -n "$DEVMAPPER_CFLAGS"; then + pkg_cv_DEVMAPPER_CFLAGS="$DEVMAPPER_CFLAGS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"devmapper >= 1.02.03\""; } >&5 + ($PKG_CONFIG --exists --print-errors "devmapper >= 1.02.03") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_DEVMAPPER_CFLAGS=`$PKG_CONFIG --cflags "devmapper >= 1.02.03" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi +if test -n "$DEVMAPPER_LIBS"; then + pkg_cv_DEVMAPPER_LIBS="$DEVMAPPER_LIBS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"devmapper >= 1.02.03\""; } >&5 + ($PKG_CONFIG --exists --print-errors "devmapper >= 1.02.03") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_DEVMAPPER_LIBS=`$PKG_CONFIG --libs "devmapper >= 1.02.03" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + DEVMAPPER_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "devmapper >= 1.02.03" 2>&1` + else + DEVMAPPER_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "devmapper >= 1.02.03" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$DEVMAPPER_PKG_ERRORS" >&5 + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dm_task_set_name in -ldevmapper" >&5 +$as_echo_n "checking for dm_task_set_name in -ldevmapper... " >&6; } +if ${ac_cv_lib_devmapper_dm_task_set_name+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldevmapper $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dm_task_set_name (); +int +main () +{ +return dm_task_set_name (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_devmapper_dm_task_set_name=yes +else + ac_cv_lib_devmapper_dm_task_set_name=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_devmapper_dm_task_set_name" >&5 +$as_echo "$ac_cv_lib_devmapper_dm_task_set_name" >&6; } +if test "x$ac_cv_lib_devmapper_dm_task_set_name" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBDEVMAPPER 1 +_ACEOF + + LIBS="-ldevmapper $LIBS" + +else + as_fn_error $? "You need the device-mapper library." "$LINENO" 5 +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dm_task_set_message in -ldevmapper" >&5 +$as_echo_n "checking for dm_task_set_message in -ldevmapper... " >&6; } +if ${ac_cv_lib_devmapper_dm_task_set_message+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldevmapper $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dm_task_set_message (); +int +main () +{ +return dm_task_set_message (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_devmapper_dm_task_set_message=yes +else + ac_cv_lib_devmapper_dm_task_set_message=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_devmapper_dm_task_set_message" >&5 +$as_echo "$ac_cv_lib_devmapper_dm_task_set_message" >&6; } +if test "x$ac_cv_lib_devmapper_dm_task_set_message" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBDEVMAPPER 1 +_ACEOF + + LIBS="-ldevmapper $LIBS" + +else + as_fn_error $? "The device-mapper library on your system is too old." "$LINENO" 5 +fi + + DEVMAPPER_LIBS=$LIBS + +elif test $pkg_failed = untried; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dm_task_set_name in -ldevmapper" >&5 +$as_echo_n "checking for dm_task_set_name in -ldevmapper... " >&6; } +if ${ac_cv_lib_devmapper_dm_task_set_name+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldevmapper $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dm_task_set_name (); +int +main () +{ +return dm_task_set_name (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_devmapper_dm_task_set_name=yes +else + ac_cv_lib_devmapper_dm_task_set_name=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_devmapper_dm_task_set_name" >&5 +$as_echo "$ac_cv_lib_devmapper_dm_task_set_name" >&6; } +if test "x$ac_cv_lib_devmapper_dm_task_set_name" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBDEVMAPPER 1 +_ACEOF + + LIBS="-ldevmapper $LIBS" + +else + as_fn_error $? "You need the device-mapper library." "$LINENO" 5 +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dm_task_set_message in -ldevmapper" >&5 +$as_echo_n "checking for dm_task_set_message in -ldevmapper... " >&6; } +if ${ac_cv_lib_devmapper_dm_task_set_message+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldevmapper $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dm_task_set_message (); +int +main () +{ +return dm_task_set_message (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_devmapper_dm_task_set_message=yes +else + ac_cv_lib_devmapper_dm_task_set_message=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_devmapper_dm_task_set_message" >&5 +$as_echo "$ac_cv_lib_devmapper_dm_task_set_message" >&6; } +if test "x$ac_cv_lib_devmapper_dm_task_set_message" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBDEVMAPPER 1 +_ACEOF + + LIBS="-ldevmapper $LIBS" + +else + as_fn_error $? "The device-mapper library on your system is too old." "$LINENO" 5 +fi + + DEVMAPPER_LIBS=$LIBS + +else + DEVMAPPER_CFLAGS=$pkg_cv_DEVMAPPER_CFLAGS + DEVMAPPER_LIBS=$pkg_cv_DEVMAPPER_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +fi +LIBS=$saved_LIBS + +LIBS="$LIBS $DEVMAPPER_LIBS" +ac_fn_c_check_decl "$LINENO" "dm_task_secure_data" "ac_cv_have_decl_dm_task_secure_data" "#include +" +if test "x$ac_cv_have_decl_dm_task_secure_data" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_DM_TASK_SECURE_DATA $ac_have_decl +_ACEOF + +ac_fn_c_check_decl "$LINENO" "dm_task_retry_remove" "ac_cv_have_decl_dm_task_retry_remove" "#include +" +if test "x$ac_cv_have_decl_dm_task_retry_remove" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_DM_TASK_RETRY_REMOVE $ac_have_decl +_ACEOF + +ac_fn_c_check_decl "$LINENO" "dm_task_deferred_remove" "ac_cv_have_decl_dm_task_deferred_remove" "#include +" +if test "x$ac_cv_have_decl_dm_task_deferred_remove" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_DM_TASK_DEFERRED_REMOVE $ac_have_decl +_ACEOF + +ac_fn_c_check_decl "$LINENO" "dm_device_has_mounted_fs" "ac_cv_have_decl_dm_device_has_mounted_fs" "#include +" +if test "x$ac_cv_have_decl_dm_device_has_mounted_fs" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_DM_DEVICE_HAS_MOUNTED_FS $ac_have_decl +_ACEOF + +ac_fn_c_check_decl "$LINENO" "dm_device_has_holders" "ac_cv_have_decl_dm_device_has_holders" "#include +" +if test "x$ac_cv_have_decl_dm_device_has_holders" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_DM_DEVICE_HAS_HOLDERS $ac_have_decl +_ACEOF + +ac_fn_c_check_decl "$LINENO" "DM_DEVICE_GET_TARGET_VERSION" "ac_cv_have_decl_DM_DEVICE_GET_TARGET_VERSION" "#include +" +if test "x$ac_cv_have_decl_DM_DEVICE_GET_TARGET_VERSION" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_DM_DEVICE_GET_TARGET_VERSION $ac_have_decl +_ACEOF + +ac_fn_c_check_decl "$LINENO" "DM_UDEV_DISABLE_DISK_RULES_FLAG" "ac_cv_have_decl_DM_UDEV_DISABLE_DISK_RULES_FLAG" "#include +" +if test "x$ac_cv_have_decl_DM_UDEV_DISABLE_DISK_RULES_FLAG" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_DM_UDEV_DISABLE_DISK_RULES_FLAG $ac_have_decl +_ACEOF +if test $ac_have_decl = 1; then : + have_cookie=yes +else + have_cookie=no +fi + +if test "x$enable_udev" = xyes; then + if test "x$have_cookie" = xno; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: The device-mapper library on your system has no udev support, udev support disabled." >&5 +$as_echo "$as_me: WARNING: The device-mapper library on your system has no udev support, udev support disabled." >&2;} + else + +$as_echo "#define USE_UDEV 1" >>confdefs.h + + fi +fi +LIBS=$saved_LIBS + + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for JSON_C" >&5 +$as_echo_n "checking for JSON_C... " >&6; } + +if test -n "$JSON_C_CFLAGS"; then + pkg_cv_JSON_C_CFLAGS="$JSON_C_CFLAGS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"json-c\""; } >&5 + ($PKG_CONFIG --exists --print-errors "json-c") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_JSON_C_CFLAGS=`$PKG_CONFIG --cflags "json-c" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi +if test -n "$JSON_C_LIBS"; then + pkg_cv_JSON_C_LIBS="$JSON_C_LIBS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"json-c\""; } >&5 + ($PKG_CONFIG --exists --print-errors "json-c") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_JSON_C_LIBS=`$PKG_CONFIG --libs "json-c" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + JSON_C_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "json-c" 2>&1` + else + JSON_C_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "json-c" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$JSON_C_PKG_ERRORS" >&5 + + as_fn_error $? "Package requirements (json-c) were not met: + +$JSON_C_PKG_ERRORS + +Consider adjusting the PKG_CONFIG_PATH environment variable if you +installed software in a non-standard prefix. + +Alternatively, you may set the environment variables JSON_C_CFLAGS +and JSON_C_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details." "$LINENO" 5 +elif test $pkg_failed = untried; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it +is in your PATH or set the PKG_CONFIG environment variable to the full +path to pkg-config. + +Alternatively, you may set the environment variables JSON_C_CFLAGS +and JSON_C_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details. + +To get pkg-config, see . +See \`config.log' for more details" "$LINENO" 5; } +else + JSON_C_CFLAGS=$pkg_cv_JSON_C_CFLAGS + JSON_C_LIBS=$pkg_cv_JSON_C_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +fi +ac_fn_c_check_decl "$LINENO" "json_object_object_add_ex" "ac_cv_have_decl_json_object_object_add_ex" "#include +" +if test "x$ac_cv_have_decl_json_object_object_add_ex" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_JSON_OBJECT_OBJECT_ADD_EX $ac_have_decl +_ACEOF + +ac_fn_c_check_decl "$LINENO" "json_object_deep_copy" "ac_cv_have_decl_json_object_deep_copy" "#include +" +if test "x$ac_cv_have_decl_json_object_deep_copy" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_JSON_OBJECT_DEEP_COPY $ac_have_decl +_ACEOF + + + +# Check whether --with-crypto_backend was given. +if test "${with_crypto_backend+set}" = set; then : + withval=$with_crypto_backend; +else + with_crypto_backend=openssl +fi + + +# Check whether --enable-kernel_crypto was given. +if test "${enable_kernel_crypto+set}" = set; then : + enableval=$enable_kernel_crypto; +else + enable_kernel_crypto=yes +fi + + +if test "x$enable_kernel_crypto" = "xyes"; then + for ac_header in linux/if_alg.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "linux/if_alg.h" "ac_cv_header_linux_if_alg_h" "$ac_includes_default" +if test "x$ac_cv_header_linux_if_alg_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LINUX_IF_ALG_H 1 +_ACEOF + +else + as_fn_error $? "You need Linux kernel headers with userspace crypto interface. (Or use --disable-kernel_crypto.)" "$LINENO" 5 +fi + +done + + +$as_echo "#define ENABLE_AF_ALG 1" >>confdefs.h + +fi + +case $with_crypto_backend in + gcrypt) + if test "x$enable_fips" = "xyes"; then + GCRYPT_REQ_VERSION=1.4.5 + else + GCRYPT_REQ_VERSION=1.1.42 + fi + + + # Check whether --enable-gcrypt-pbkdf2 was given. +if test "${enable_gcrypt_pbkdf2+set}" = set; then : + enableval=$enable_gcrypt_pbkdf2; if test "x$enableval" = "xyes"; then + use_internal_pbkdf2=0 + else + use_internal_pbkdf2=1 + fi +else + + +# Check whether --with-libgcrypt-prefix was given. +if test "${with_libgcrypt_prefix+set}" = set; then : + withval=$with_libgcrypt_prefix; libgcrypt_config_prefix="$withval" +else + libgcrypt_config_prefix="" +fi + + if test x"${LIBGCRYPT_CONFIG}" = x ; then + if test x"${libgcrypt_config_prefix}" != x ; then + LIBGCRYPT_CONFIG="${libgcrypt_config_prefix}/bin/libgcrypt-config" + fi + fi + + use_gpgrt_config="" + if test x"${LIBGCRYPT_CONFIG}" = x -a x"$GPGRT_CONFIG" != x -a "$GPGRT_CONFIG" != "no"; then + if $GPGRT_CONFIG libgcrypt --exists; then + LIBGCRYPT_CONFIG="$GPGRT_CONFIG libgcrypt" + { $as_echo "$as_me:${as_lineno-$LINENO}: Use gpgrt-config as libgcrypt-config" >&5 +$as_echo "$as_me: Use gpgrt-config as libgcrypt-config" >&6;} + use_gpgrt_config=yes + fi + fi + if test -z "$use_gpgrt_config"; then + if test x"${LIBGCRYPT_CONFIG}" = x ; then + case "${SYSROOT}" in + /*) + if test -x "${SYSROOT}/bin/libgcrypt-config" ; then + LIBGCRYPT_CONFIG="${SYSROOT}/bin/libgcrypt-config" + fi + ;; + '') + ;; + *) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring \$SYSROOT as it is not an absolute path." >&5 +$as_echo "$as_me: WARNING: Ignoring \$SYSROOT as it is not an absolute path." >&2;} + ;; + esac + fi + # Extract the first word of "libgcrypt-config", so it can be a program name with args. +set dummy libgcrypt-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_LIBGCRYPT_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $LIBGCRYPT_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_LIBGCRYPT_CONFIG="$LIBGCRYPT_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_LIBGCRYPT_CONFIG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path_LIBGCRYPT_CONFIG" && ac_cv_path_LIBGCRYPT_CONFIG="no" + ;; +esac +fi +LIBGCRYPT_CONFIG=$ac_cv_path_LIBGCRYPT_CONFIG +if test -n "$LIBGCRYPT_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBGCRYPT_CONFIG" >&5 +$as_echo "$LIBGCRYPT_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + fi + + tmp=1.6.1 + if echo "$tmp" | grep ':' >/dev/null 2>/dev/null ; then + req_libgcrypt_api=`echo "$tmp" | sed 's/\(.*\):\(.*\)/\1/'` + min_libgcrypt_version=`echo "$tmp" | sed 's/\(.*\):\(.*\)/\2/'` + else + req_libgcrypt_api=0 + min_libgcrypt_version="$tmp" + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LIBGCRYPT - version >= $min_libgcrypt_version" >&5 +$as_echo_n "checking for LIBGCRYPT - version >= $min_libgcrypt_version... " >&6; } + ok=no + if test "$LIBGCRYPT_CONFIG" != "no" ; then + req_major=`echo $min_libgcrypt_version | \ + sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\)/\1/'` + req_minor=`echo $min_libgcrypt_version | \ + sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\)/\2/'` + req_micro=`echo $min_libgcrypt_version | \ + sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\)/\3/'` + if test -z "$use_gpgrt_config"; then + libgcrypt_config_version=`$LIBGCRYPT_CONFIG --version` + else + libgcrypt_config_version=`$LIBGCRYPT_CONFIG --modversion` + fi + major=`echo $libgcrypt_config_version | \ + sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/\1/'` + minor=`echo $libgcrypt_config_version | \ + sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/\2/'` + micro=`echo $libgcrypt_config_version | \ + sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/\3/'` + if test "$major" -gt "$req_major"; then + ok=yes + else + if test "$major" -eq "$req_major"; then + if test "$minor" -gt "$req_minor"; then + ok=yes + else + if test "$minor" -eq "$req_minor"; then + if test "$micro" -ge "$req_micro"; then + ok=yes + fi + fi + fi + fi + fi + fi + if test $ok = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes ($libgcrypt_config_version)" >&5 +$as_echo "yes ($libgcrypt_config_version)" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + fi + if test $ok = yes; then + # If we have a recent libgcrypt, we should also check that the + # API is compatible + if test "$req_libgcrypt_api" -gt 0 ; then + if test -z "$use_gpgrt_config"; then + tmp=`$LIBGCRYPT_CONFIG --api-version 2>/dev/null || echo 0` + else + tmp=`$LIBGCRYPT_CONFIG --variable=api_version 2>/dev/null || echo 0` + fi + if test "$tmp" -gt 0 ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking LIBGCRYPT API version" >&5 +$as_echo_n "checking LIBGCRYPT API version... " >&6; } + if test "$req_libgcrypt_api" -eq "$tmp" ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: okay" >&5 +$as_echo "okay" >&6; } + else + ok=no + { $as_echo "$as_me:${as_lineno-$LINENO}: result: does not match. want=$req_libgcrypt_api got=$tmp" >&5 +$as_echo "does not match. want=$req_libgcrypt_api got=$tmp" >&6; } + fi + fi + fi + fi + if test $ok = yes; then + LIBGCRYPT_CFLAGS=`$LIBGCRYPT_CONFIG --cflags` + LIBGCRYPT_LIBS=`$LIBGCRYPT_CONFIG --libs` + use_internal_pbkdf2=0 + if test -z "$use_gpgrt_config"; then + libgcrypt_config_host=`$LIBGCRYPT_CONFIG --host 2>/dev/null || echo none` + else + libgcrypt_config_host=`$LIBGCRYPT_CONFIG --variable=host 2>/dev/null || echo none` + fi + if test x"$libgcrypt_config_host" != xnone ; then + if test x"$libgcrypt_config_host" != x"$host" ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: +*** +*** The config script \"$LIBGCRYPT_CONFIG\" was +*** built for $libgcrypt_config_host and thus may not match the +*** used host $host. +*** You may want to use the configure option --with-libgcrypt-prefix +*** to specify a matching config script or use \$SYSROOT. +***" >&5 +$as_echo "$as_me: WARNING: +*** +*** The config script \"$LIBGCRYPT_CONFIG\" was +*** built for $libgcrypt_config_host and thus may not match the +*** used host $host. +*** You may want to use the configure option --with-libgcrypt-prefix +*** to specify a matching config script or use \$SYSROOT. +***" >&2;} + gpg_config_script_warn="$gpg_config_script_warn libgcrypt" + fi + fi + else + LIBGCRYPT_CFLAGS="" + LIBGCRYPT_LIBS="" + use_internal_pbkdf2=1 + fi + + + +fi + + + +# Check whether --with-libgcrypt-prefix was given. +if test "${with_libgcrypt_prefix+set}" = set; then : + withval=$with_libgcrypt_prefix; libgcrypt_config_prefix="$withval" +else + libgcrypt_config_prefix="" +fi + + if test x"${LIBGCRYPT_CONFIG}" = x ; then + if test x"${libgcrypt_config_prefix}" != x ; then + LIBGCRYPT_CONFIG="${libgcrypt_config_prefix}/bin/libgcrypt-config" + fi + fi + + use_gpgrt_config="" + if test x"${LIBGCRYPT_CONFIG}" = x -a x"$GPGRT_CONFIG" != x -a "$GPGRT_CONFIG" != "no"; then + if $GPGRT_CONFIG libgcrypt --exists; then + LIBGCRYPT_CONFIG="$GPGRT_CONFIG libgcrypt" + { $as_echo "$as_me:${as_lineno-$LINENO}: Use gpgrt-config as libgcrypt-config" >&5 +$as_echo "$as_me: Use gpgrt-config as libgcrypt-config" >&6;} + use_gpgrt_config=yes + fi + fi + if test -z "$use_gpgrt_config"; then + if test x"${LIBGCRYPT_CONFIG}" = x ; then + case "${SYSROOT}" in + /*) + if test -x "${SYSROOT}/bin/libgcrypt-config" ; then + LIBGCRYPT_CONFIG="${SYSROOT}/bin/libgcrypt-config" + fi + ;; + '') + ;; + *) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring \$SYSROOT as it is not an absolute path." >&5 +$as_echo "$as_me: WARNING: Ignoring \$SYSROOT as it is not an absolute path." >&2;} + ;; + esac + fi + # Extract the first word of "libgcrypt-config", so it can be a program name with args. +set dummy libgcrypt-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_LIBGCRYPT_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $LIBGCRYPT_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_LIBGCRYPT_CONFIG="$LIBGCRYPT_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_LIBGCRYPT_CONFIG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path_LIBGCRYPT_CONFIG" && ac_cv_path_LIBGCRYPT_CONFIG="no" + ;; +esac +fi +LIBGCRYPT_CONFIG=$ac_cv_path_LIBGCRYPT_CONFIG +if test -n "$LIBGCRYPT_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBGCRYPT_CONFIG" >&5 +$as_echo "$LIBGCRYPT_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + fi + + tmp=$GCRYPT_REQ_VERSION + if echo "$tmp" | grep ':' >/dev/null 2>/dev/null ; then + req_libgcrypt_api=`echo "$tmp" | sed 's/\(.*\):\(.*\)/\1/'` + min_libgcrypt_version=`echo "$tmp" | sed 's/\(.*\):\(.*\)/\2/'` + else + req_libgcrypt_api=0 + min_libgcrypt_version="$tmp" + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LIBGCRYPT - version >= $min_libgcrypt_version" >&5 +$as_echo_n "checking for LIBGCRYPT - version >= $min_libgcrypt_version... " >&6; } + ok=no + if test "$LIBGCRYPT_CONFIG" != "no" ; then + req_major=`echo $min_libgcrypt_version | \ + sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\)/\1/'` + req_minor=`echo $min_libgcrypt_version | \ + sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\)/\2/'` + req_micro=`echo $min_libgcrypt_version | \ + sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\)/\3/'` + if test -z "$use_gpgrt_config"; then + libgcrypt_config_version=`$LIBGCRYPT_CONFIG --version` + else + libgcrypt_config_version=`$LIBGCRYPT_CONFIG --modversion` + fi + major=`echo $libgcrypt_config_version | \ + sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/\1/'` + minor=`echo $libgcrypt_config_version | \ + sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/\2/'` + micro=`echo $libgcrypt_config_version | \ + sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/\3/'` + if test "$major" -gt "$req_major"; then + ok=yes + else + if test "$major" -eq "$req_major"; then + if test "$minor" -gt "$req_minor"; then + ok=yes + else + if test "$minor" -eq "$req_minor"; then + if test "$micro" -ge "$req_micro"; then + ok=yes + fi + fi + fi + fi + fi + fi + if test $ok = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes ($libgcrypt_config_version)" >&5 +$as_echo "yes ($libgcrypt_config_version)" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + fi + if test $ok = yes; then + # If we have a recent libgcrypt, we should also check that the + # API is compatible + if test "$req_libgcrypt_api" -gt 0 ; then + if test -z "$use_gpgrt_config"; then + tmp=`$LIBGCRYPT_CONFIG --api-version 2>/dev/null || echo 0` + else + tmp=`$LIBGCRYPT_CONFIG --variable=api_version 2>/dev/null || echo 0` + fi + if test "$tmp" -gt 0 ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking LIBGCRYPT API version" >&5 +$as_echo_n "checking LIBGCRYPT API version... " >&6; } + if test "$req_libgcrypt_api" -eq "$tmp" ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: okay" >&5 +$as_echo "okay" >&6; } + else + ok=no + { $as_echo "$as_me:${as_lineno-$LINENO}: result: does not match. want=$req_libgcrypt_api got=$tmp" >&5 +$as_echo "does not match. want=$req_libgcrypt_api got=$tmp" >&6; } + fi + fi + fi + fi + if test $ok = yes; then + LIBGCRYPT_CFLAGS=`$LIBGCRYPT_CONFIG --cflags` + LIBGCRYPT_LIBS=`$LIBGCRYPT_CONFIG --libs` + : + if test -z "$use_gpgrt_config"; then + libgcrypt_config_host=`$LIBGCRYPT_CONFIG --host 2>/dev/null || echo none` + else + libgcrypt_config_host=`$LIBGCRYPT_CONFIG --variable=host 2>/dev/null || echo none` + fi + if test x"$libgcrypt_config_host" != xnone ; then + if test x"$libgcrypt_config_host" != x"$host" ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: +*** +*** The config script \"$LIBGCRYPT_CONFIG\" was +*** built for $libgcrypt_config_host and thus may not match the +*** used host $host. +*** You may want to use the configure option --with-libgcrypt-prefix +*** to specify a matching config script or use \$SYSROOT. +***" >&5 +$as_echo "$as_me: WARNING: +*** +*** The config script \"$LIBGCRYPT_CONFIG\" was +*** built for $libgcrypt_config_host and thus may not match the +*** used host $host. +*** You may want to use the configure option --with-libgcrypt-prefix +*** to specify a matching config script or use \$SYSROOT. +***" >&2;} + gpg_config_script_warn="$gpg_config_script_warn libgcrypt" + fi + fi + else + LIBGCRYPT_CFLAGS="" + LIBGCRYPT_LIBS="" + as_fn_error $? "You need the gcrypt library." "$LINENO" 5 + fi + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if internal cryptsetup PBKDF2 is compiled-in" >&5 +$as_echo_n "checking if internal cryptsetup PBKDF2 is compiled-in... " >&6; } + if test $use_internal_pbkdf2 = 0; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + + if test "x$enable_fips" = "xyes"; then + as_fn_error $? "This option is not compatible with FIPS." "$LINENO" 5 + fi + + fi + + ac_fn_c_check_decl "$LINENO" "GCRY_CIPHER_MODE_XTS" "ac_cv_have_decl_GCRY_CIPHER_MODE_XTS" "#include +" +if test "x$ac_cv_have_decl_GCRY_CIPHER_MODE_XTS" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_GCRY_CIPHER_MODE_XTS $ac_have_decl +_ACEOF + + + if test "x$enable_static_cryptsetup" = "xyes"; then + saved_LIBS=$LIBS + LIBS="$saved_LIBS $LIBGCRYPT_LIBS -static" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gcry_check_version in -lgcrypt" >&5 +$as_echo_n "checking for gcry_check_version in -lgcrypt... " >&6; } +if ${ac_cv_lib_gcrypt_gcry_check_version+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lgcrypt -lgpg-error $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char gcry_check_version (); +int +main () +{ +return gcry_check_version (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_gcrypt_gcry_check_version=yes +else + ac_cv_lib_gcrypt_gcry_check_version=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_gcrypt_gcry_check_version" >&5 +$as_echo "$ac_cv_lib_gcrypt_gcry_check_version" >&6; } +if test "x$ac_cv_lib_gcrypt_gcry_check_version" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBGCRYPT 1 +_ACEOF + + LIBS="-lgcrypt $LIBS" + +else + as_fn_error $? "Cannot find static gcrypt library." "$LINENO" 5 +fi + + LIBGCRYPT_STATIC_LIBS="$LIBGCRYPT_LIBS -lgpg-error" + LIBS=$saved_LIBS + fi + + CRYPTO_CFLAGS=$LIBGCRYPT_CFLAGS + CRYPTO_LIBS=$LIBGCRYPT_LIBS + CRYPTO_STATIC_LIBS=$LIBGCRYPT_STATIC_LIBS + + +cat >>confdefs.h <<_ACEOF +#define GCRYPT_REQ_VERSION "$GCRYPT_REQ_VERSION" +_ACEOF + + ;; + openssl) + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for OPENSSL" >&5 +$as_echo_n "checking for OPENSSL... " >&6; } + +if test -n "$OPENSSL_CFLAGS"; then + pkg_cv_OPENSSL_CFLAGS="$OPENSSL_CFLAGS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"openssl >= 0.9.8\""; } >&5 + ($PKG_CONFIG --exists --print-errors "openssl >= 0.9.8") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_OPENSSL_CFLAGS=`$PKG_CONFIG --cflags "openssl >= 0.9.8" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi +if test -n "$OPENSSL_LIBS"; then + pkg_cv_OPENSSL_LIBS="$OPENSSL_LIBS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"openssl >= 0.9.8\""; } >&5 + ($PKG_CONFIG --exists --print-errors "openssl >= 0.9.8") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_OPENSSL_LIBS=`$PKG_CONFIG --libs "openssl >= 0.9.8" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + OPENSSL_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "openssl >= 0.9.8" 2>&1` + else + OPENSSL_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "openssl >= 0.9.8" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$OPENSSL_PKG_ERRORS" >&5 + + as_fn_error $? "You need openssl library." "$LINENO" 5 +elif test $pkg_failed = untried; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + as_fn_error $? "You need openssl library." "$LINENO" 5 +else + OPENSSL_CFLAGS=$pkg_cv_OPENSSL_CFLAGS + OPENSSL_LIBS=$pkg_cv_OPENSSL_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +fi + CRYPTO_CFLAGS=$OPENSSL_CFLAGS + CRYPTO_LIBS=$OPENSSL_LIBS + use_internal_pbkdf2=0 + + if test "x$enable_static_cryptsetup" = "xyes"; then + saved_PKG_CONFIG=$PKG_CONFIG + PKG_CONFIG="$PKG_CONFIG --static" + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for OPENSSL_STATIC" >&5 +$as_echo_n "checking for OPENSSL_STATIC... " >&6; } + +if test -n "$OPENSSL_STATIC_CFLAGS"; then + pkg_cv_OPENSSL_STATIC_CFLAGS="$OPENSSL_STATIC_CFLAGS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"openssl\""; } >&5 + ($PKG_CONFIG --exists --print-errors "openssl") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_OPENSSL_STATIC_CFLAGS=`$PKG_CONFIG --cflags "openssl" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi +if test -n "$OPENSSL_STATIC_LIBS"; then + pkg_cv_OPENSSL_STATIC_LIBS="$OPENSSL_STATIC_LIBS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"openssl\""; } >&5 + ($PKG_CONFIG --exists --print-errors "openssl") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_OPENSSL_STATIC_LIBS=`$PKG_CONFIG --libs "openssl" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + OPENSSL_STATIC_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "openssl" 2>&1` + else + OPENSSL_STATIC_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "openssl" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$OPENSSL_STATIC_PKG_ERRORS" >&5 + + as_fn_error $? "Package requirements (openssl) were not met: + +$OPENSSL_STATIC_PKG_ERRORS + +Consider adjusting the PKG_CONFIG_PATH environment variable if you +installed software in a non-standard prefix. + +Alternatively, you may set the environment variables OPENSSL_STATIC_CFLAGS +and OPENSSL_STATIC_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details." "$LINENO" 5 +elif test $pkg_failed = untried; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it +is in your PATH or set the PKG_CONFIG environment variable to the full +path to pkg-config. + +Alternatively, you may set the environment variables OPENSSL_STATIC_CFLAGS +and OPENSSL_STATIC_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details. + +To get pkg-config, see . +See \`config.log' for more details" "$LINENO" 5; } +else + OPENSSL_STATIC_CFLAGS=$pkg_cv_OPENSSL_STATIC_CFLAGS + OPENSSL_STATIC_LIBS=$pkg_cv_OPENSSL_STATIC_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +fi + CRYPTO_STATIC_LIBS=$OPENSSL_STATIC_LIBS + PKG_CONFIG=$saved_PKG_CONFIG + fi + ;; + nss) + if test "x$enable_static_cryptsetup" = "xyes"; then + as_fn_error $? "Static build of cryptsetup is not supported with NSS." "$LINENO" 5 + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: NSS backend does NOT provide backward compatibility (missing ripemd160 hash)." >&5 +$as_echo "$as_me: WARNING: NSS backend does NOT provide backward compatibility (missing ripemd160 hash)." >&2;} + + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for NSS" >&5 +$as_echo_n "checking for NSS... " >&6; } + +if test -n "$NSS_CFLAGS"; then + pkg_cv_NSS_CFLAGS="$NSS_CFLAGS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"nss\""; } >&5 + ($PKG_CONFIG --exists --print-errors "nss") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_NSS_CFLAGS=`$PKG_CONFIG --cflags "nss" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi +if test -n "$NSS_LIBS"; then + pkg_cv_NSS_LIBS="$NSS_LIBS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"nss\""; } >&5 + ($PKG_CONFIG --exists --print-errors "nss") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_NSS_LIBS=`$PKG_CONFIG --libs "nss" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + NSS_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "nss" 2>&1` + else + NSS_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "nss" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$NSS_PKG_ERRORS" >&5 + + as_fn_error $? "You need nss library." "$LINENO" 5 +elif test $pkg_failed = untried; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + as_fn_error $? "You need nss library." "$LINENO" 5 +else + NSS_CFLAGS=$pkg_cv_NSS_CFLAGS + NSS_LIBS=$pkg_cv_NSS_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +fi + + saved_CFLAGS=$CFLAGS + CFLAGS="$CFLAGS $NSS_CFLAGS" + ac_fn_c_check_decl "$LINENO" "NSS_GetVersion" "ac_cv_have_decl_NSS_GetVersion" "#include +" +if test "x$ac_cv_have_decl_NSS_GetVersion" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_NSS_GETVERSION $ac_have_decl +_ACEOF + + CFLAGS=$saved_CFLAGS + + CRYPTO_CFLAGS=$NSS_CFLAGS + CRYPTO_LIBS=$NSS_LIBS + use_internal_pbkdf2=1 + + if test "x$enable_fips" = "xyes"; then + as_fn_error $? "This option is not compatible with FIPS." "$LINENO" 5 + fi + + ;; + kernel) + for ac_header in linux/if_alg.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "linux/if_alg.h" "ac_cv_header_linux_if_alg_h" "$ac_includes_default" +if test "x$ac_cv_header_linux_if_alg_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LINUX_IF_ALG_H 1 +_ACEOF + +else + as_fn_error $? "You need Linux kernel headers with userspace crypto interface." "$LINENO" 5 +fi + +done + +# AC_CHECK_DECLS([AF_ALG],, +# [AC_MSG_ERROR([You need Linux kernel with userspace crypto interface.])], +# [#include ]) + use_internal_pbkdf2=1 + + if test "x$enable_fips" = "xyes"; then + as_fn_error $? "This option is not compatible with FIPS." "$LINENO" 5 + fi + + ;; + nettle) + for ac_header in nettle/sha.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "nettle/sha.h" "ac_cv_header_nettle_sha_h" "$ac_includes_default" +if test "x$ac_cv_header_nettle_sha_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_NETTLE_SHA_H 1 +_ACEOF + +else + as_fn_error $? "You need Nettle cryptographic library." "$LINENO" 5 +fi + +done + + for ac_header in nettle/version.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "nettle/version.h" "ac_cv_header_nettle_version_h" "$ac_includes_default" +if test "x$ac_cv_header_nettle_version_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_NETTLE_VERSION_H 1 +_ACEOF + +fi + +done + + + saved_LIBS=$LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for nettle_pbkdf2_hmac_sha256 in -lnettle" >&5 +$as_echo_n "checking for nettle_pbkdf2_hmac_sha256 in -lnettle... " >&6; } +if ${ac_cv_lib_nettle_nettle_pbkdf2_hmac_sha256+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lnettle $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char nettle_pbkdf2_hmac_sha256 (); +int +main () +{ +return nettle_pbkdf2_hmac_sha256 (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_nettle_nettle_pbkdf2_hmac_sha256=yes +else + ac_cv_lib_nettle_nettle_pbkdf2_hmac_sha256=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nettle_nettle_pbkdf2_hmac_sha256" >&5 +$as_echo "$ac_cv_lib_nettle_nettle_pbkdf2_hmac_sha256" >&6; } +if test "x$ac_cv_lib_nettle_nettle_pbkdf2_hmac_sha256" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBNETTLE 1 +_ACEOF + + LIBS="-lnettle $LIBS" + +else + as_fn_error $? "You need Nettle library version 2.6 or more recent." "$LINENO" 5 +fi + + CRYPTO_LIBS=$LIBS + LIBS=$saved_LIBS + + CRYPTO_STATIC_LIBS=$CRYPTO_LIBS + use_internal_pbkdf2=0 + + if test "x$enable_fips" = "xyes"; then + as_fn_error $? "This option is not compatible with FIPS." "$LINENO" 5 + fi + + ;; + *) as_fn_error $? "Unknown crypto backend." "$LINENO" 5 ;; +esac + if test "$with_crypto_backend" = "gcrypt"; then + CRYPTO_BACKEND_GCRYPT_TRUE= + CRYPTO_BACKEND_GCRYPT_FALSE='#' +else + CRYPTO_BACKEND_GCRYPT_TRUE='#' + CRYPTO_BACKEND_GCRYPT_FALSE= +fi + + if test "$with_crypto_backend" = "openssl"; then + CRYPTO_BACKEND_OPENSSL_TRUE= + CRYPTO_BACKEND_OPENSSL_FALSE='#' +else + CRYPTO_BACKEND_OPENSSL_TRUE='#' + CRYPTO_BACKEND_OPENSSL_FALSE= +fi + + if test "$with_crypto_backend" = "nss"; then + CRYPTO_BACKEND_NSS_TRUE= + CRYPTO_BACKEND_NSS_FALSE='#' +else + CRYPTO_BACKEND_NSS_TRUE='#' + CRYPTO_BACKEND_NSS_FALSE= +fi + + if test "$with_crypto_backend" = "kernel"; then + CRYPTO_BACKEND_KERNEL_TRUE= + CRYPTO_BACKEND_KERNEL_FALSE='#' +else + CRYPTO_BACKEND_KERNEL_TRUE='#' + CRYPTO_BACKEND_KERNEL_FALSE= +fi + + if test "$with_crypto_backend" = "nettle"; then + CRYPTO_BACKEND_NETTLE_TRUE= + CRYPTO_BACKEND_NETTLE_FALSE='#' +else + CRYPTO_BACKEND_NETTLE_TRUE='#' + CRYPTO_BACKEND_NETTLE_FALSE= +fi + + + if test $use_internal_pbkdf2 = 1; then + CRYPTO_INTERNAL_PBKDF2_TRUE= + CRYPTO_INTERNAL_PBKDF2_FALSE='#' +else + CRYPTO_INTERNAL_PBKDF2_TRUE='#' + CRYPTO_INTERNAL_PBKDF2_FALSE= +fi + + +cat >>confdefs.h <<_ACEOF +#define USE_INTERNAL_PBKDF2 $use_internal_pbkdf2 +_ACEOF + + +# Check whether --enable-internal-argon2 was given. +if test "${enable_internal_argon2+set}" = set; then : + enableval=$enable_internal_argon2; +else + enable_internal_argon2=yes +fi + + +# Check whether --enable-libargon2 was given. +if test "${enable_libargon2+set}" = set; then : + enableval=$enable_libargon2; +fi + + +if test "x$enable_libargon2" = "xyes" ; then + for ac_header in argon2.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "argon2.h" "ac_cv_header_argon2_h" "$ac_includes_default" +if test "x$ac_cv_header_argon2_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_ARGON2_H 1 +_ACEOF + +else + as_fn_error $? "You need libargon2 development library installed." "$LINENO" 5 +fi + +done + + ac_fn_c_check_decl "$LINENO" "Argon2_id" "ac_cv_have_decl_Argon2_id" "#include +" +if test "x$ac_cv_have_decl_Argon2_id" = xyes; then : + +else + as_fn_error $? "You need more recent Argon2 library with support for Argon2id." "$LINENO" 5 +fi + + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for LIBARGON2" >&5 +$as_echo_n "checking for LIBARGON2... " >&6; } + +if test -n "$LIBARGON2_CFLAGS"; then + pkg_cv_LIBARGON2_CFLAGS="$LIBARGON2_CFLAGS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libargon2\""; } >&5 + ($PKG_CONFIG --exists --print-errors "libargon2") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_LIBARGON2_CFLAGS=`$PKG_CONFIG --cflags "libargon2" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi +if test -n "$LIBARGON2_LIBS"; then + pkg_cv_LIBARGON2_LIBS="$LIBARGON2_LIBS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libargon2\""; } >&5 + ($PKG_CONFIG --exists --print-errors "libargon2") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_LIBARGON2_LIBS=`$PKG_CONFIG --libs "libargon2" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + LIBARGON2_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libargon2" 2>&1` + else + LIBARGON2_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libargon2" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$LIBARGON2_PKG_ERRORS" >&5 + + LIBARGON2_LIBS="-largon2" +elif test $pkg_failed = untried; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + LIBARGON2_LIBS="-largon2" +else + LIBARGON2_CFLAGS=$pkg_cv_LIBARGON2_CFLAGS + LIBARGON2_LIBS=$pkg_cv_LIBARGON2_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +fi + enable_internal_argon2=no +else + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Argon2 bundled (slow) reference implementation will be used, please consider to use system library with --enable-libargon2." >&5 +$as_echo "$as_me: WARNING: Argon2 bundled (slow) reference implementation will be used, please consider to use system library with --enable-libargon2." >&2;} + + # Check whether --enable-internal-sse-argon2 was given. +if test "${enable_internal_sse_argon2+set}" = set; then : + enableval=$enable_internal_sse_argon2; +fi + + + if test "x$enable_internal_sse_argon2" = "xyes"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if Argon2 SSE optimization can be used" >&5 +$as_echo_n "checking if Argon2 SSE optimization can be used... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #include + __m128i testfunc(__m128i *a, __m128i *b) { + return _mm_xor_si128(_mm_loadu_si128(a), _mm_loadu_si128(b)); + } + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + +else + enable_internal_sse_argon2=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_internal_sse_argon2" >&5 +$as_echo "$enable_internal_sse_argon2" >&6; } + fi +fi + +if test "x$enable_internal_argon2" = "xyes"; then + +$as_echo "#define USE_INTERNAL_ARGON2 1" >>confdefs.h + +fi + if test "x$enable_internal_argon2" = "xyes"; then + CRYPTO_INTERNAL_ARGON2_TRUE= + CRYPTO_INTERNAL_ARGON2_FALSE='#' +else + CRYPTO_INTERNAL_ARGON2_TRUE='#' + CRYPTO_INTERNAL_ARGON2_FALSE= +fi + + if test "x$enable_internal_sse_argon2" = "xyes"; then + CRYPTO_INTERNAL_SSE_ARGON2_TRUE= + CRYPTO_INTERNAL_SSE_ARGON2_FALSE='#' +else + CRYPTO_INTERNAL_SSE_ARGON2_TRUE='#' + CRYPTO_INTERNAL_SSE_ARGON2_FALSE= +fi + + +# Check whether --enable-blkid was given. +if test "${enable_blkid+set}" = set; then : + enableval=$enable_blkid; +else + enable_blkid=yes +fi + + +if test "x$enable_blkid" = "xyes"; then + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BLKID" >&5 +$as_echo_n "checking for BLKID... " >&6; } + +if test -n "$BLKID_CFLAGS"; then + pkg_cv_BLKID_CFLAGS="$BLKID_CFLAGS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"blkid\""; } >&5 + ($PKG_CONFIG --exists --print-errors "blkid") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_BLKID_CFLAGS=`$PKG_CONFIG --cflags "blkid" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi +if test -n "$BLKID_LIBS"; then + pkg_cv_BLKID_LIBS="$BLKID_LIBS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"blkid\""; } >&5 + ($PKG_CONFIG --exists --print-errors "blkid") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_BLKID_LIBS=`$PKG_CONFIG --libs "blkid" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + BLKID_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "blkid" 2>&1` + else + BLKID_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "blkid" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$BLKID_PKG_ERRORS" >&5 + + LIBBLKID_LIBS="-lblkid" +elif test $pkg_failed = untried; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + LIBBLKID_LIBS="-lblkid" +else + BLKID_CFLAGS=$pkg_cv_BLKID_CFLAGS + BLKID_LIBS=$pkg_cv_BLKID_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_BLKID 1" >>confdefs.h + +fi + + for ac_header in blkid/blkid.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "blkid/blkid.h" "ac_cv_header_blkid_blkid_h" "$ac_includes_default" +if test "x$ac_cv_header_blkid_blkid_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_BLKID_BLKID_H 1 +_ACEOF + +else + as_fn_error $? "You need blkid development library installed." "$LINENO" 5 +fi + +done + + ac_fn_c_check_decl "$LINENO" "blkid_do_wipe" "ac_cv_have_decl_blkid_do_wipe" "#include +" +if test "x$ac_cv_have_decl_blkid_do_wipe" = xyes; then : + +$as_echo "#define HAVE_BLKID_WIPE 1" >>confdefs.h + + enable_blkid_wipe=yes + +fi + + ac_fn_c_check_decl "$LINENO" "blkid_probe_step_back" "ac_cv_have_decl_blkid_probe_step_back" "#include +" +if test "x$ac_cv_have_decl_blkid_probe_step_back" = xyes; then : + +$as_echo "#define HAVE_BLKID_STEP_BACK 1" >>confdefs.h + + enable_blkid_step_back=yes + +fi + + ac_fn_c_check_decl "$LINENO" "blkid_reset_probe" "ac_cv_have_decl_blkid_reset_probe" "#include +" +if test "x$ac_cv_have_decl_blkid_reset_probe" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_BLKID_RESET_PROBE $ac_have_decl +_ACEOF +if test $ac_have_decl = 1; then : + +else + as_fn_error $? "Can not compile with blkid support, disable it by --disable-blkid." "$LINENO" 5 +fi +ac_fn_c_check_decl "$LINENO" "blkid_probe_set_device" "ac_cv_have_decl_blkid_probe_set_device" "#include +" +if test "x$ac_cv_have_decl_blkid_probe_set_device" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_BLKID_PROBE_SET_DEVICE $ac_have_decl +_ACEOF +if test $ac_have_decl = 1; then : + +else + as_fn_error $? "Can not compile with blkid support, disable it by --disable-blkid." "$LINENO" 5 +fi +ac_fn_c_check_decl "$LINENO" "blkid_probe_filter_superblocks_type" "ac_cv_have_decl_blkid_probe_filter_superblocks_type" "#include +" +if test "x$ac_cv_have_decl_blkid_probe_filter_superblocks_type" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_BLKID_PROBE_FILTER_SUPERBLOCKS_TYPE $ac_have_decl +_ACEOF +if test $ac_have_decl = 1; then : + +else + as_fn_error $? "Can not compile with blkid support, disable it by --disable-blkid." "$LINENO" 5 +fi +ac_fn_c_check_decl "$LINENO" "blkid_do_safeprobe" "ac_cv_have_decl_blkid_do_safeprobe" "#include +" +if test "x$ac_cv_have_decl_blkid_do_safeprobe" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_BLKID_DO_SAFEPROBE $ac_have_decl +_ACEOF +if test $ac_have_decl = 1; then : + +else + as_fn_error $? "Can not compile with blkid support, disable it by --disable-blkid." "$LINENO" 5 +fi +ac_fn_c_check_decl "$LINENO" "blkid_do_probe" "ac_cv_have_decl_blkid_do_probe" "#include +" +if test "x$ac_cv_have_decl_blkid_do_probe" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_BLKID_DO_PROBE $ac_have_decl +_ACEOF +if test $ac_have_decl = 1; then : + +else + as_fn_error $? "Can not compile with blkid support, disable it by --disable-blkid." "$LINENO" 5 +fi +ac_fn_c_check_decl "$LINENO" "blkid_probe_lookup_value + " "ac_cv_have_decl_blkid_probe_lookup_value__________" "#include +" +if test "x$ac_cv_have_decl_blkid_probe_lookup_value__________" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_BLKID_PROBE_LOOKUP_VALUE__________ $ac_have_decl +_ACEOF +if test $ac_have_decl = 1; then : + +else + as_fn_error $? "Can not compile with blkid support, disable it by --disable-blkid." "$LINENO" 5 +fi + +fi + if test "x$enable_blkid" = "xyes"; then + HAVE_BLKID_TRUE= + HAVE_BLKID_FALSE='#' +else + HAVE_BLKID_TRUE='#' + HAVE_BLKID_FALSE= +fi + + if test "x$enable_blkid_wipe" = "xyes"; then + HAVE_BLKID_WIPE_TRUE= + HAVE_BLKID_WIPE_FALSE='#' +else + HAVE_BLKID_WIPE_TRUE='#' + HAVE_BLKID_WIPE_FALSE= +fi + + if test "x$enable_blkid_step_back" = "xyes"; then + HAVE_BLKID_STEP_BACK_TRUE= + HAVE_BLKID_STEP_BACK_FALSE='#' +else + HAVE_BLKID_STEP_BACK_TRUE='#' + HAVE_BLKID_STEP_BACK_FALSE= +fi + + +if test "x$enable_static_cryptsetup" = "xyes"; then + saved_PKG_CONFIG=$PKG_CONFIG + PKG_CONFIG="$PKG_CONFIG --static" + + LIBS="$saved_LIBS -static" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for poptGetContext in -lpopt" >&5 +$as_echo_n "checking for poptGetContext in -lpopt... " >&6; } +if ${ac_cv_lib_popt_poptGetContext+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lpopt $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char poptGetContext (); +int +main () +{ +return poptGetContext (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_popt_poptGetContext=yes +else + ac_cv_lib_popt_poptGetContext=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_popt_poptGetContext" >&5 +$as_echo "$ac_cv_lib_popt_poptGetContext" >&6; } +if test "x$ac_cv_lib_popt_poptGetContext" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBPOPT 1 +_ACEOF + + LIBS="-lpopt $LIBS" + +else + as_fn_error $? "Cannot find static popt library." "$LINENO" 5 +fi + + + LIBS="$saved_LIBS -static" + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for DEVMAPPER_STATIC" >&5 +$as_echo_n "checking for DEVMAPPER_STATIC... " >&6; } + +if test -n "$DEVMAPPER_STATIC_CFLAGS"; then + pkg_cv_DEVMAPPER_STATIC_CFLAGS="$DEVMAPPER_STATIC_CFLAGS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"devmapper >= 1.02.27\""; } >&5 + ($PKG_CONFIG --exists --print-errors "devmapper >= 1.02.27") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_DEVMAPPER_STATIC_CFLAGS=`$PKG_CONFIG --cflags "devmapper >= 1.02.27" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi +if test -n "$DEVMAPPER_STATIC_LIBS"; then + pkg_cv_DEVMAPPER_STATIC_LIBS="$DEVMAPPER_STATIC_LIBS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"devmapper >= 1.02.27\""; } >&5 + ($PKG_CONFIG --exists --print-errors "devmapper >= 1.02.27") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_DEVMAPPER_STATIC_LIBS=`$PKG_CONFIG --libs "devmapper >= 1.02.27" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + DEVMAPPER_STATIC_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "devmapper >= 1.02.27" 2>&1` + else + DEVMAPPER_STATIC_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "devmapper >= 1.02.27" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$DEVMAPPER_STATIC_PKG_ERRORS" >&5 + + + DEVMAPPER_STATIC_LIBS=$DEVMAPPER_LIBS + if test "x$enable_selinux" = "xyes"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sepol_bool_set in -lsepol" >&5 +$as_echo_n "checking for sepol_bool_set in -lsepol... " >&6; } +if ${ac_cv_lib_sepol_sepol_bool_set+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsepol $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char sepol_bool_set (); +int +main () +{ +return sepol_bool_set (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_sepol_sepol_bool_set=yes +else + ac_cv_lib_sepol_sepol_bool_set=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_sepol_sepol_bool_set" >&5 +$as_echo "$ac_cv_lib_sepol_sepol_bool_set" >&6; } +if test "x$ac_cv_lib_sepol_sepol_bool_set" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBSEPOL 1 +_ACEOF + + LIBS="-lsepol $LIBS" + +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for is_selinux_enabled in -lselinux" >&5 +$as_echo_n "checking for is_selinux_enabled in -lselinux... " >&6; } +if ${ac_cv_lib_selinux_is_selinux_enabled+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lselinux $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char is_selinux_enabled (); +int +main () +{ +return is_selinux_enabled (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_selinux_is_selinux_enabled=yes +else + ac_cv_lib_selinux_is_selinux_enabled=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_selinux_is_selinux_enabled" >&5 +$as_echo "$ac_cv_lib_selinux_is_selinux_enabled" >&6; } +if test "x$ac_cv_lib_selinux_is_selinux_enabled" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBSELINUX 1 +_ACEOF + + LIBS="-lselinux $LIBS" + +fi + + DEVMAPPER_STATIC_LIBS="$DEVMAPPER_STATIC_LIBS $LIBS" + fi + +elif test $pkg_failed = untried; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + DEVMAPPER_STATIC_LIBS=$DEVMAPPER_LIBS + if test "x$enable_selinux" = "xyes"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sepol_bool_set in -lsepol" >&5 +$as_echo_n "checking for sepol_bool_set in -lsepol... " >&6; } +if ${ac_cv_lib_sepol_sepol_bool_set+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsepol $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char sepol_bool_set (); +int +main () +{ +return sepol_bool_set (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_sepol_sepol_bool_set=yes +else + ac_cv_lib_sepol_sepol_bool_set=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_sepol_sepol_bool_set" >&5 +$as_echo "$ac_cv_lib_sepol_sepol_bool_set" >&6; } +if test "x$ac_cv_lib_sepol_sepol_bool_set" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBSEPOL 1 +_ACEOF + + LIBS="-lsepol $LIBS" + +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for is_selinux_enabled in -lselinux" >&5 +$as_echo_n "checking for is_selinux_enabled in -lselinux... " >&6; } +if ${ac_cv_lib_selinux_is_selinux_enabled+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lselinux $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char is_selinux_enabled (); +int +main () +{ +return is_selinux_enabled (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_selinux_is_selinux_enabled=yes +else + ac_cv_lib_selinux_is_selinux_enabled=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_selinux_is_selinux_enabled" >&5 +$as_echo "$ac_cv_lib_selinux_is_selinux_enabled" >&6; } +if test "x$ac_cv_lib_selinux_is_selinux_enabled" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBSELINUX 1 +_ACEOF + + LIBS="-lselinux $LIBS" + +fi + + DEVMAPPER_STATIC_LIBS="$DEVMAPPER_STATIC_LIBS $LIBS" + fi + +else + DEVMAPPER_STATIC_CFLAGS=$pkg_cv_DEVMAPPER_STATIC_CFLAGS + DEVMAPPER_STATIC_LIBS=$pkg_cv_DEVMAPPER_STATIC_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +fi + LIBS="$saved_LIBS $DEVMAPPER_STATIC_LIBS" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dm_task_set_uuid in -ldevmapper" >&5 +$as_echo_n "checking for dm_task_set_uuid in -ldevmapper... " >&6; } +if ${ac_cv_lib_devmapper_dm_task_set_uuid+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldevmapper $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dm_task_set_uuid (); +int +main () +{ +return dm_task_set_uuid (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_devmapper_dm_task_set_uuid=yes +else + ac_cv_lib_devmapper_dm_task_set_uuid=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_devmapper_dm_task_set_uuid" >&5 +$as_echo "$ac_cv_lib_devmapper_dm_task_set_uuid" >&6; } +if test "x$ac_cv_lib_devmapper_dm_task_set_uuid" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBDEVMAPPER 1 +_ACEOF + + LIBS="-ldevmapper $LIBS" + +else + as_fn_error $? "Cannot link with static device-mapper library." "$LINENO" 5 +fi + + + LIBS="$saved_LIBS -static" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for uuid_generate in -luuid" >&5 +$as_echo_n "checking for uuid_generate in -luuid... " >&6; } +if ${ac_cv_lib_uuid_uuid_generate+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-luuid $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char uuid_generate (); +int +main () +{ +return uuid_generate (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_uuid_uuid_generate=yes +else + ac_cv_lib_uuid_uuid_generate=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_uuid_uuid_generate" >&5 +$as_echo "$ac_cv_lib_uuid_uuid_generate" >&6; } +if test "x$ac_cv_lib_uuid_uuid_generate" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBUUID 1 +_ACEOF + + LIBS="-luuid $LIBS" + +else + as_fn_error $? "Cannot find static uuid library." "$LINENO" 5 +fi + + + LIBS=$saved_LIBS + PKG_CONFIG=$saved_PKG_CONFIG +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for systemd tmpfiles config directory" >&5 +$as_echo_n "checking for systemd tmpfiles config directory... " >&6; } + +if test -n "$systemd_tmpfilesdir"; then + pkg_cv_systemd_tmpfilesdir="$systemd_tmpfilesdir" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"systemd\""; } >&5 + ($PKG_CONFIG --exists --print-errors "systemd") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_systemd_tmpfilesdir=`$PKG_CONFIG --variable="tmpfilesdir" "systemd" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi +systemd_tmpfilesdir=$pkg_cv_systemd_tmpfilesdir + +if test "x$systemd_tmpfilesdir" = x""; then : + systemd_tmpfilesdir=no +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $systemd_tmpfilesdir" >&5 +$as_echo "$systemd_tmpfilesdir" >&6; } + + + + + + + + + + + + + + + + + + + + +# Check whether --enable-dev-random was given. +if test "${enable_dev_random+set}" = set; then : + enableval=$enable_dev_random; +fi + +if test "x$enable_dev_random" = "xyes"; then + default_rng=/dev/random +else + default_rng=/dev/urandom +fi + +cat >>confdefs.h <<_ACEOF +#define DEFAULT_RNG "$default_rng" +_ACEOF + + + + + + + + + + + +# Check whether --with-plain-hash was given. +if test "${with_plain_hash+set}" = set; then : + withval=$with_plain_hash; +cat >>confdefs.h <<_ACEOF +#define DEFAULT_PLAIN_HASH "$withval" +_ACEOF + + +else + +cat >>confdefs.h <<_ACEOF +#define DEFAULT_PLAIN_HASH "ripemd160" +_ACEOF + + + +fi + + +# Check whether --with-plain-cipher was given. +if test "${with_plain_cipher+set}" = set; then : + withval=$with_plain_cipher; +cat >>confdefs.h <<_ACEOF +#define DEFAULT_PLAIN_CIPHER "$withval" +_ACEOF + + +else + +cat >>confdefs.h <<_ACEOF +#define DEFAULT_PLAIN_CIPHER "aes" +_ACEOF + + + +fi + + +# Check whether --with-plain-mode was given. +if test "${with_plain_mode+set}" = set; then : + withval=$with_plain_mode; +cat >>confdefs.h <<_ACEOF +#define DEFAULT_PLAIN_MODE "$withval" +_ACEOF + + +else + +cat >>confdefs.h <<_ACEOF +#define DEFAULT_PLAIN_MODE "cbc-essiv:sha256" +_ACEOF + + + +fi + + +# Check whether --with-plain-keybits was given. +if test "${with_plain_keybits+set}" = set; then : + withval=$with_plain_keybits; +cat >>confdefs.h <<_ACEOF +#define DEFAULT_PLAIN_KEYBITS $withval +_ACEOF + + +else + +cat >>confdefs.h <<_ACEOF +#define DEFAULT_PLAIN_KEYBITS 256 +_ACEOF + + + +fi + + + +# Check whether --with-luks1-hash was given. +if test "${with_luks1_hash+set}" = set; then : + withval=$with_luks1_hash; +cat >>confdefs.h <<_ACEOF +#define DEFAULT_LUKS1_HASH "$withval" +_ACEOF + + +else + +cat >>confdefs.h <<_ACEOF +#define DEFAULT_LUKS1_HASH "sha256" +_ACEOF + + + +fi + + +# Check whether --with-luks1-cipher was given. +if test "${with_luks1_cipher+set}" = set; then : + withval=$with_luks1_cipher; +cat >>confdefs.h <<_ACEOF +#define DEFAULT_LUKS1_CIPHER "$withval" +_ACEOF + + +else + +cat >>confdefs.h <<_ACEOF +#define DEFAULT_LUKS1_CIPHER "aes" +_ACEOF + + + +fi + + +# Check whether --with-luks1-mode was given. +if test "${with_luks1_mode+set}" = set; then : + withval=$with_luks1_mode; +cat >>confdefs.h <<_ACEOF +#define DEFAULT_LUKS1_MODE "$withval" +_ACEOF + + +else + +cat >>confdefs.h <<_ACEOF +#define DEFAULT_LUKS1_MODE "xts-plain64" +_ACEOF + + + +fi + + +# Check whether --with-luks1-keybits was given. +if test "${with_luks1_keybits+set}" = set; then : + withval=$with_luks1_keybits; +cat >>confdefs.h <<_ACEOF +#define DEFAULT_LUKS1_KEYBITS $withval +_ACEOF + + +else + +cat >>confdefs.h <<_ACEOF +#define DEFAULT_LUKS1_KEYBITS 256 +_ACEOF + + + +fi + + +# Check whether --enable-luks_adjust_xts_keysize was given. +if test "${enable_luks_adjust_xts_keysize+set}" = set; then : + enableval=$enable_luks_adjust_xts_keysize; +else + enable_luks_adjust_xts_keysize=yes +fi + +if test "x$enable_luks_adjust_xts_keysize" = "xyes"; then + +$as_echo "#define ENABLE_LUKS_ADJUST_XTS_KEYSIZE 1" >>confdefs.h + +fi + + +# Check whether --with-luks2-pbkdf was given. +if test "${with_luks2_pbkdf+set}" = set; then : + withval=$with_luks2_pbkdf; +cat >>confdefs.h <<_ACEOF +#define DEFAULT_LUKS2_PBKDF "$withval" +_ACEOF + + +else + +cat >>confdefs.h <<_ACEOF +#define DEFAULT_LUKS2_PBKDF "argon2i" +_ACEOF + + + +fi + + +# Check whether --with-luks1-iter-time was given. +if test "${with_luks1_iter_time+set}" = set; then : + withval=$with_luks1_iter_time; +cat >>confdefs.h <<_ACEOF +#define DEFAULT_LUKS1_ITER_TIME $withval +_ACEOF + + +else + +cat >>confdefs.h <<_ACEOF +#define DEFAULT_LUKS1_ITER_TIME 2000 +_ACEOF + + + +fi + + +# Check whether --with-luks2-iter-time was given. +if test "${with_luks2_iter_time+set}" = set; then : + withval=$with_luks2_iter_time; +cat >>confdefs.h <<_ACEOF +#define DEFAULT_LUKS2_ITER_TIME $withval +_ACEOF + + +else + +cat >>confdefs.h <<_ACEOF +#define DEFAULT_LUKS2_ITER_TIME 2000 +_ACEOF + + + +fi + + +# Check whether --with-luks2-memory-kb was given. +if test "${with_luks2_memory_kb+set}" = set; then : + withval=$with_luks2_memory_kb; +cat >>confdefs.h <<_ACEOF +#define DEFAULT_LUKS2_MEMORY_KB $withval +_ACEOF + + +else + +cat >>confdefs.h <<_ACEOF +#define DEFAULT_LUKS2_MEMORY_KB 1048576 +_ACEOF + + + +fi + + +# Check whether --with-luks2-parallel-threads was given. +if test "${with_luks2_parallel_threads+set}" = set; then : + withval=$with_luks2_parallel_threads; +cat >>confdefs.h <<_ACEOF +#define DEFAULT_LUKS2_PARALLEL_THREADS $withval +_ACEOF + + +else + +cat >>confdefs.h <<_ACEOF +#define DEFAULT_LUKS2_PARALLEL_THREADS 4 +_ACEOF + + + +fi + + + +# Check whether --with-luks2-keyslot-cipher was given. +if test "${with_luks2_keyslot_cipher+set}" = set; then : + withval=$with_luks2_keyslot_cipher; +cat >>confdefs.h <<_ACEOF +#define DEFAULT_LUKS2_KEYSLOT_CIPHER "$withval" +_ACEOF + + +else + +cat >>confdefs.h <<_ACEOF +#define DEFAULT_LUKS2_KEYSLOT_CIPHER "aes-xts-plain64" +_ACEOF + + + +fi + + +# Check whether --with-luks2-keyslot-keybits was given. +if test "${with_luks2_keyslot_keybits+set}" = set; then : + withval=$with_luks2_keyslot_keybits; +cat >>confdefs.h <<_ACEOF +#define DEFAULT_LUKS2_KEYSLOT_KEYBITS $withval +_ACEOF + + +else + +cat >>confdefs.h <<_ACEOF +#define DEFAULT_LUKS2_KEYSLOT_KEYBITS 512 +_ACEOF + + + +fi + + + +# Check whether --with-loopaes-cipher was given. +if test "${with_loopaes_cipher+set}" = set; then : + withval=$with_loopaes_cipher; +cat >>confdefs.h <<_ACEOF +#define DEFAULT_LOOPAES_CIPHER "$withval" +_ACEOF + + +else + +cat >>confdefs.h <<_ACEOF +#define DEFAULT_LOOPAES_CIPHER "aes" +_ACEOF + + + +fi + + +# Check whether --with-loopaes-keybits was given. +if test "${with_loopaes_keybits+set}" = set; then : + withval=$with_loopaes_keybits; +cat >>confdefs.h <<_ACEOF +#define DEFAULT_LOOPAES_KEYBITS $withval +_ACEOF + + +else + +cat >>confdefs.h <<_ACEOF +#define DEFAULT_LOOPAES_KEYBITS 256 +_ACEOF + + + +fi + + + +# Check whether --with-keyfile-size-maxkb was given. +if test "${with_keyfile_size_maxkb+set}" = set; then : + withval=$with_keyfile_size_maxkb; +cat >>confdefs.h <<_ACEOF +#define DEFAULT_KEYFILE_SIZE_MAXKB $withval +_ACEOF + + +else + +cat >>confdefs.h <<_ACEOF +#define DEFAULT_KEYFILE_SIZE_MAXKB 8192 +_ACEOF + + + +fi + + +# Check whether --with-passphrase-size-max was given. +if test "${with_passphrase_size_max+set}" = set; then : + withval=$with_passphrase_size_max; +cat >>confdefs.h <<_ACEOF +#define DEFAULT_PASSPHRASE_SIZE_MAX $withval +_ACEOF + + +else + +cat >>confdefs.h <<_ACEOF +#define DEFAULT_PASSPHRASE_SIZE_MAX 512 +_ACEOF + + + +fi + + + +# Check whether --with-verity-hash was given. +if test "${with_verity_hash+set}" = set; then : + withval=$with_verity_hash; +cat >>confdefs.h <<_ACEOF +#define DEFAULT_VERITY_HASH "$withval" +_ACEOF + + +else + +cat >>confdefs.h <<_ACEOF +#define DEFAULT_VERITY_HASH "sha256" +_ACEOF + + + +fi + + +# Check whether --with-verity-data-block was given. +if test "${with_verity_data_block+set}" = set; then : + withval=$with_verity_data_block; +cat >>confdefs.h <<_ACEOF +#define DEFAULT_VERITY_DATA_BLOCK $withval +_ACEOF + + +else + +cat >>confdefs.h <<_ACEOF +#define DEFAULT_VERITY_DATA_BLOCK 4096 +_ACEOF + + + +fi + + +# Check whether --with-verity-hash-block was given. +if test "${with_verity_hash_block+set}" = set; then : + withval=$with_verity_hash_block; +cat >>confdefs.h <<_ACEOF +#define DEFAULT_VERITY_HASH_BLOCK $withval +_ACEOF + + +else + +cat >>confdefs.h <<_ACEOF +#define DEFAULT_VERITY_HASH_BLOCK 4096 +_ACEOF + + + +fi + + +# Check whether --with-verity-salt-size was given. +if test "${with_verity_salt_size+set}" = set; then : + withval=$with_verity_salt_size; +cat >>confdefs.h <<_ACEOF +#define DEFAULT_VERITY_SALT_SIZE $withval +_ACEOF + + +else + +cat >>confdefs.h <<_ACEOF +#define DEFAULT_VERITY_SALT_SIZE 32 +_ACEOF + + + +fi + + +# Check whether --with-verity-fec-roots was given. +if test "${with_verity_fec_roots+set}" = set; then : + withval=$with_verity_fec_roots; +cat >>confdefs.h <<_ACEOF +#define DEFAULT_VERITY_FEC_ROOTS $withval +_ACEOF + + +else + +cat >>confdefs.h <<_ACEOF +#define DEFAULT_VERITY_FEC_ROOTS 2 +_ACEOF + + + +fi + + + +# Check whether --with-tmpfilesdir was given. +if test "${with_tmpfilesdir+set}" = set; then : + withval=$with_tmpfilesdir; +cat >>confdefs.h <<_ACEOF +#define DEFAULT_TMPFILESDIR "$withval" +_ACEOF + + +else + +cat >>confdefs.h <<_ACEOF +#define DEFAULT_TMPFILESDIR "" +_ACEOF + + + +fi + +test -z "$with_tmpfilesdir" && with_tmpfilesdir=$systemd_tmpfilesdir +test "x$with_tmpfilesdir" = "xno" || { + + case "${with_tmpfilesdir}" in + /*) ;; + *) as_fn_error $? "with-tmpfilesdir argument must be an absolute path." "$LINENO" 5;; + esac + + DEFAULT_TMPFILESDIR=$with_tmpfilesdir + +} + if test -n "$DEFAULT_TMPFILESDIR"; then + CRYPTSETUP_TMPFILE_TRUE= + CRYPTSETUP_TMPFILE_FALSE='#' +else + CRYPTSETUP_TMPFILE_TRUE='#' + CRYPTSETUP_TMPFILE_FALSE= +fi + + + +# Check whether --with-luks2-lock-path was given. +if test "${with_luks2_lock_path+set}" = set; then : + withval=$with_luks2_lock_path; +cat >>confdefs.h <<_ACEOF +#define DEFAULT_LUKS2_LOCK_PATH "$withval" +_ACEOF + + +else + +cat >>confdefs.h <<_ACEOF +#define DEFAULT_LUKS2_LOCK_PATH "/run/cryptsetup" +_ACEOF + + + +fi + +test -z "$with_luks2_lock_path" && with_luks2_lock_path=/run/cryptsetup + + case "${with_luks2_lock_path}" in + /*) ;; + *) as_fn_error $? "with-luks2-lock-path argument must be an absolute path." "$LINENO" 5;; + esac + +DEFAULT_LUKS2_LOCK_PATH=$with_luks2_lock_path + + + +# Check whether --with-luks2-lock-dir-perms was given. +if test "${with_luks2_lock_dir_perms+set}" = set; then : + withval=$with_luks2_lock_dir_perms; +cat >>confdefs.h <<_ACEOF +#define DEFAULT_LUKS2_LOCK_DIR_PERMS $withval +_ACEOF + + +else + +cat >>confdefs.h <<_ACEOF +#define DEFAULT_LUKS2_LOCK_DIR_PERMS 0700 +_ACEOF + + + +fi + +test -z "$with_luks2_lock_dir_perms" && with_luks2_lock_dir_perms=0700 +DEFAULT_LUKS2_LOCK_DIR_PERMS=$with_luks2_lock_dir_perms + + + +# Check whether --with-default_luks_format was given. +if test "${with_default_luks_format+set}" = set; then : + withval=$with_default_luks_format; +else + with_default_luks_format=LUKS2 +fi + + +case $with_default_luks_format in + LUKS1) default_luks=CRYPT_LUKS1 ;; + LUKS2) default_luks=CRYPT_LUKS2 ;; + *) as_fn_error $? "Unknown default LUKS format. Use LUKS1 or LUKS2 only." "$LINENO" 5 ;; +esac + +cat >>confdefs.h <<_ACEOF +#define DEFAULT_LUKS_FORMAT $default_luks +_ACEOF + + + +ac_config_files="$ac_config_files Makefile lib/libcryptsetup.pc po/Makefile.in scripts/cryptsetup.conf tests/Makefile" + +cat >confcache <<\_ACEOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs, see configure's option --config-cache. +# It is not useful on other systems. If it contains results you don't +# want to keep, you may remove or edit it. +# +# config.status only pays attention to the cache file if you give it +# the --recheck option to rerun configure. +# +# `ac_cv_env_foo' variables (set or unset) will be overridden when +# loading this file, other *unset* `ac_cv_foo' will be assigned the +# following values. + +_ACEOF + +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, we kill variables containing newlines. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +( + for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + + (set) 2>&1 | + case $as_nl`(ac_space=' '; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + # `set' does not quote correctly, so add quotes: double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \. + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" + ;; #( + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) | + sed ' + /^ac_cv_env_/b end + t clear + :clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + t end + s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ + :end' >>confcache +if diff "$cache_file" confcache >/dev/null 2>&1; then :; else + if test -w "$cache_file"; then + if test "x$cache_file" != "x/dev/null"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 +$as_echo "$as_me: updating cache $cache_file" >&6;} + if test ! -f "$cache_file" || test -h "$cache_file"; then + cat confcache >"$cache_file" + else + case $cache_file in #( + */* | ?:*) + mv -f confcache "$cache_file"$$ && + mv -f "$cache_file"$$ "$cache_file" ;; #( + *) + mv -f confcache "$cache_file" ;; + esac + fi + fi + else + { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 +$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} + fi +fi +rm -f confcache + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +DEFS=-DHAVE_CONFIG_H + +ac_libobjs= +ac_ltlibobjs= +U= +for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue + # 1. Remove the extension, and $U if already installed. + ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' + ac_i=`$as_echo "$ac_i" | sed "$ac_script"` + # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR + # will be set to the directory where LIBOBJS objects are built. + as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" + as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' +done +LIBOBJS=$ac_libobjs + +LTLIBOBJS=$ac_ltlibobjs + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 +$as_echo_n "checking that generated files are newer than configure... " >&6; } + if test -n "$am_sleep_pid"; then + # Hide warnings about reused PIDs. + wait $am_sleep_pid 2>/dev/null + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5 +$as_echo "done" >&6; } + if test -n "$EXEEXT"; then + am__EXEEXT_TRUE= + am__EXEEXT_FALSE='#' +else + am__EXEEXT_TRUE='#' + am__EXEEXT_FALSE= +fi + +if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then + as_fn_error $? "conditional \"AMDEP\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then + as_fn_error $? "conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then + as_fn_error $? "conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${KERNEL_KEYRING_TRUE}" && test -z "${KERNEL_KEYRING_FALSE}"; then + as_fn_error $? "conditional \"KERNEL_KEYRING\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi + +if test -z "${STATIC_TOOLS_TRUE}" && test -z "${STATIC_TOOLS_FALSE}"; then + as_fn_error $? "conditional \"STATIC_TOOLS\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${CRYPTSETUP_TRUE}" && test -z "${CRYPTSETUP_FALSE}"; then + as_fn_error $? "conditional \"CRYPTSETUP\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${VERITYSETUP_TRUE}" && test -z "${VERITYSETUP_FALSE}"; then + as_fn_error $? "conditional \"VERITYSETUP\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${REENCRYPT_TRUE}" && test -z "${REENCRYPT_FALSE}"; then + as_fn_error $? "conditional \"REENCRYPT\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${INTEGRITYSETUP_TRUE}" && test -z "${INTEGRITYSETUP_FALSE}"; then + as_fn_error $? "conditional \"INTEGRITYSETUP\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${CRYPTO_BACKEND_GCRYPT_TRUE}" && test -z "${CRYPTO_BACKEND_GCRYPT_FALSE}"; then + as_fn_error $? "conditional \"CRYPTO_BACKEND_GCRYPT\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${CRYPTO_BACKEND_OPENSSL_TRUE}" && test -z "${CRYPTO_BACKEND_OPENSSL_FALSE}"; then + as_fn_error $? "conditional \"CRYPTO_BACKEND_OPENSSL\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${CRYPTO_BACKEND_NSS_TRUE}" && test -z "${CRYPTO_BACKEND_NSS_FALSE}"; then + as_fn_error $? "conditional \"CRYPTO_BACKEND_NSS\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${CRYPTO_BACKEND_KERNEL_TRUE}" && test -z "${CRYPTO_BACKEND_KERNEL_FALSE}"; then + as_fn_error $? "conditional \"CRYPTO_BACKEND_KERNEL\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${CRYPTO_BACKEND_NETTLE_TRUE}" && test -z "${CRYPTO_BACKEND_NETTLE_FALSE}"; then + as_fn_error $? "conditional \"CRYPTO_BACKEND_NETTLE\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${CRYPTO_INTERNAL_PBKDF2_TRUE}" && test -z "${CRYPTO_INTERNAL_PBKDF2_FALSE}"; then + as_fn_error $? "conditional \"CRYPTO_INTERNAL_PBKDF2\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${CRYPTO_INTERNAL_ARGON2_TRUE}" && test -z "${CRYPTO_INTERNAL_ARGON2_FALSE}"; then + as_fn_error $? "conditional \"CRYPTO_INTERNAL_ARGON2\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${CRYPTO_INTERNAL_SSE_ARGON2_TRUE}" && test -z "${CRYPTO_INTERNAL_SSE_ARGON2_FALSE}"; then + as_fn_error $? "conditional \"CRYPTO_INTERNAL_SSE_ARGON2\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${HAVE_BLKID_TRUE}" && test -z "${HAVE_BLKID_FALSE}"; then + as_fn_error $? "conditional \"HAVE_BLKID\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${HAVE_BLKID_WIPE_TRUE}" && test -z "${HAVE_BLKID_WIPE_FALSE}"; then + as_fn_error $? "conditional \"HAVE_BLKID_WIPE\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${HAVE_BLKID_STEP_BACK_TRUE}" && test -z "${HAVE_BLKID_STEP_BACK_FALSE}"; then + as_fn_error $? "conditional \"HAVE_BLKID_STEP_BACK\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${CRYPTSETUP_TMPFILE_TRUE}" && test -z "${CRYPTSETUP_TMPFILE_FALSE}"; then + as_fn_error $? "conditional \"CRYPTSETUP_TMPFILE\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi + +: "${CONFIG_STATUS=./config.status}" +ac_write_fail=0 +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files $CONFIG_STATUS" +{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 +$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} +as_write_fail=0 +cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 +#! $SHELL +# Generated by $as_me. +# Run this file to recreate the current configuration. +# Compiler output produced by configure, useful for debugging +# configure, is in config.log if it exists. + +debug=false +ac_cs_recheck=false +ac_cs_silent=false + +SHELL=\${CONFIG_SHELL-$SHELL} +export SHELL +_ASEOF +cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -pR'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -pR' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -pR' + fi +else + as_ln_s='cp -pR' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + + +# as_fn_executable_p FILE +# ----------------------- +# Test if FILE is an executable regular file. +as_fn_executable_p () +{ + test -f "$1" && test -x "$1" +} # as_fn_executable_p +as_test_x='test -x' +as_executable_p=as_fn_executable_p + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +exec 6>&1 +## ----------------------------------- ## +## Main body of $CONFIG_STATUS script. ## +## ----------------------------------- ## +_ASEOF +test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# Save the log message, to keep $0 and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. +ac_log=" +This file was extended by cryptsetup $as_me 2.2.2, which was +generated by GNU Autoconf 2.69. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +on `(hostname || uname -n) 2>/dev/null | sed 1q` +" + +_ACEOF + +case $ac_config_files in *" +"*) set x $ac_config_files; shift; ac_config_files=$*;; +esac + +case $ac_config_headers in *" +"*) set x $ac_config_headers; shift; ac_config_headers=$*;; +esac + + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# Files that config.status was made for. +config_files="$ac_config_files" +config_headers="$ac_config_headers" +config_commands="$ac_config_commands" + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +ac_cs_usage="\ +\`$as_me' instantiates files and other configuration actions +from templates according to the current configuration. Unless the files +and actions are specified as TAGs, all are instantiated by default. + +Usage: $0 [OPTION]... [TAG]... + + -h, --help print this help, then exit + -V, --version print version number and configuration settings, then exit + --config print configuration, then exit + -q, --quiet, --silent + do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + --header=FILE[:TEMPLATE] + instantiate the configuration header FILE + +Configuration files: +$config_files + +Configuration headers: +$config_headers + +Configuration commands: +$config_commands + +Report bugs to the package provider." + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" +ac_cs_version="\\ +cryptsetup config.status 2.2.2 +configured by $0, generated by GNU Autoconf 2.69, + with options \\"\$ac_cs_config\\" + +Copyright (C) 2012 Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." + +ac_pwd='$ac_pwd' +srcdir='$srcdir' +INSTALL='$INSTALL' +MKDIR_P='$MKDIR_P' +AWK='$AWK' +test -n "\$AWK" || AWK=awk +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# The default lists apply if the user does not specify any file. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=?*) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` + ac_shift=: + ;; + --*=) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg= + ac_shift=: + ;; + *) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; + esac + + case $ac_option in + # Handling of the options. + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) + $as_echo "$ac_cs_version"; exit ;; + --config | --confi | --conf | --con | --co | --c ) + $as_echo "$ac_cs_config"; exit ;; + --debug | --debu | --deb | --de | --d | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + '') as_fn_error $? "missing file argument" ;; + esac + as_fn_append CONFIG_FILES " '$ac_optarg'" + ac_need_defaults=false;; + --header | --heade | --head | --hea ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append CONFIG_HEADERS " '$ac_optarg'" + ac_need_defaults=false;; + --he | --h) + # Conflict between --help and --header + as_fn_error $? "ambiguous option: \`$1' +Try \`$0 --help' for more information.";; + --help | --hel | -h ) + $as_echo "$ac_cs_usage"; exit ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; + + # This is an error. + -*) as_fn_error $? "unrecognized option: \`$1' +Try \`$0 --help' for more information." ;; + + *) as_fn_append ac_config_targets " $1" + ac_need_defaults=false ;; + + esac + shift +done + +ac_configure_extra_args= + +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +if \$ac_cs_recheck; then + set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + shift + \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 + CONFIG_SHELL='$SHELL' + export CONFIG_SHELL + exec "\$@" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX + $as_echo "$ac_log" +} >&5 + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# +# INIT-COMMANDS +# +AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}" + + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +sed_quote_subst='$sed_quote_subst' +double_quote_subst='$double_quote_subst' +delay_variable_subst='$delay_variable_subst' +enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`' +macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`' +macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`' +enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`' +pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`' +enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`' +shared_archive_member_spec='`$ECHO "$shared_archive_member_spec" | $SED "$delay_single_quote_subst"`' +SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`' +ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`' +PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`' +host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`' +host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`' +host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`' +build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`' +build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`' +build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`' +SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`' +Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`' +GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`' +EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`' +FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`' +LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`' +NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`' +LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`' +max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`' +ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`' +exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`' +lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`' +lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`' +lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`' +lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`' +lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`' +reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`' +reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`' +OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`' +deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`' +file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`' +file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`' +want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`' +DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`' +sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`' +AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`' +AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`' +archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`' +STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`' +RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`' +old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`' +old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`' +old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`' +lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`' +CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`' +CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`' +compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`' +GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_import='`$ECHO "$lt_cv_sys_global_symbol_to_import" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`' +lt_cv_nm_interface='`$ECHO "$lt_cv_nm_interface" | $SED "$delay_single_quote_subst"`' +nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`' +lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`' +lt_cv_truncate_bin='`$ECHO "$lt_cv_truncate_bin" | $SED "$delay_single_quote_subst"`' +objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`' +MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`' +lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`' +need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`' +MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`' +DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`' +NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`' +LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`' +OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`' +OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`' +libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`' +shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`' +extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`' +archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`' +enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`' +export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`' +whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`' +compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`' +old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`' +old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`' +archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`' +archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`' +module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`' +module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`' +with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`' +allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`' +no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`' +hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`' +hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`' +hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`' +hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`' +hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`' +hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`' +inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`' +link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`' +always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`' +export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`' +exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`' +include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`' +prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`' +postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`' +file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`' +variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`' +need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`' +need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`' +version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`' +runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`' +shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`' +shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`' +libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`' +library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`' +soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`' +install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`' +postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`' +postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`' +finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`' +finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`' +hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`' +sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`' +configure_time_dlsearch_path='`$ECHO "$configure_time_dlsearch_path" | $SED "$delay_single_quote_subst"`' +configure_time_lt_sys_library_path='`$ECHO "$configure_time_lt_sys_library_path" | $SED "$delay_single_quote_subst"`' +hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`' +enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`' +enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`' +enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`' +old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`' +striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`' + +LTCC='$LTCC' +LTCFLAGS='$LTCFLAGS' +compiler='$compiler_DEFAULT' + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +\$1 +_LTECHO_EOF' +} + +# Quote evaled strings. +for var in SHELL \ +ECHO \ +PATH_SEPARATOR \ +SED \ +GREP \ +EGREP \ +FGREP \ +LD \ +NM \ +LN_S \ +lt_SP2NL \ +lt_NL2SP \ +reload_flag \ +OBJDUMP \ +deplibs_check_method \ +file_magic_cmd \ +file_magic_glob \ +want_nocaseglob \ +DLLTOOL \ +sharedlib_from_linklib_cmd \ +AR \ +AR_FLAGS \ +archiver_list_spec \ +STRIP \ +RANLIB \ +CC \ +CFLAGS \ +compiler \ +lt_cv_sys_global_symbol_pipe \ +lt_cv_sys_global_symbol_to_cdecl \ +lt_cv_sys_global_symbol_to_import \ +lt_cv_sys_global_symbol_to_c_name_address \ +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ +lt_cv_nm_interface \ +nm_file_list_spec \ +lt_cv_truncate_bin \ +lt_prog_compiler_no_builtin_flag \ +lt_prog_compiler_pic \ +lt_prog_compiler_wl \ +lt_prog_compiler_static \ +lt_cv_prog_compiler_c_o \ +need_locks \ +MANIFEST_TOOL \ +DSYMUTIL \ +NMEDIT \ +LIPO \ +OTOOL \ +OTOOL64 \ +shrext_cmds \ +export_dynamic_flag_spec \ +whole_archive_flag_spec \ +compiler_needs_object \ +with_gnu_ld \ +allow_undefined_flag \ +no_undefined_flag \ +hardcode_libdir_flag_spec \ +hardcode_libdir_separator \ +exclude_expsyms \ +include_expsyms \ +file_list_spec \ +variables_saved_for_relink \ +libname_spec \ +library_names_spec \ +soname_spec \ +install_override_mode \ +finish_eval \ +old_striplib \ +striplib; do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[\\\\\\\`\\"\\\$]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +# Double-quote double-evaled strings. +for var in reload_cmds \ +old_postinstall_cmds \ +old_postuninstall_cmds \ +old_archive_cmds \ +extract_expsyms_cmds \ +old_archive_from_new_cmds \ +old_archive_from_expsyms_cmds \ +archive_cmds \ +archive_expsym_cmds \ +module_cmds \ +module_expsym_cmds \ +export_symbols_cmds \ +prelink_cmds \ +postlink_cmds \ +postinstall_cmds \ +postuninstall_cmds \ +finish_cmds \ +sys_lib_search_path_spec \ +configure_time_dlsearch_path \ +configure_time_lt_sys_library_path; do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[\\\\\\\`\\"\\\$]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +ac_aux_dir='$ac_aux_dir' + +# See if we are running on zsh, and set the options that allow our +# commands through without removal of \ escapes INIT. +if test -n "\${ZSH_VERSION+set}"; then + setopt NO_GLOB_SUBST +fi + + + PACKAGE='$PACKAGE' + VERSION='$VERSION' + RM='$RM' + ofile='$ofile' + + + +# Capture the value of obsolete ALL_LINGUAS because we need it to compute + # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it + # from automake < 1.5. + eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"' + # Capture the value of LINGUAS because we need it to compute CATALOGS. + LINGUAS="${LINGUAS-%UNSET%}" + + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + +# Handling of arguments. +for ac_config_target in $ac_config_targets +do + case $ac_config_target in + "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h:config.h.in" ;; + "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; + "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; + "po-directories") CONFIG_COMMANDS="$CONFIG_COMMANDS po-directories" ;; + "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; + "lib/libcryptsetup.pc") CONFIG_FILES="$CONFIG_FILES lib/libcryptsetup.pc" ;; + "po/Makefile.in") CONFIG_FILES="$CONFIG_FILES po/Makefile.in" ;; + "scripts/cryptsetup.conf") CONFIG_FILES="$CONFIG_FILES scripts/cryptsetup.conf" ;; + "tests/Makefile") CONFIG_FILES="$CONFIG_FILES tests/Makefile" ;; + + *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; + esac +done + + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files + test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers + test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands +fi + +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason against having it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Hook for its removal unless debugging. +# Note that there is a small window in which the directory will not be cleaned: +# after its creation but before its name has been assigned to `$tmp'. +$debug || +{ + tmp= ac_tmp= + trap 'exit_status=$? + : "${ac_tmp:=$tmp}" + { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status +' 0 + trap 'as_fn_exit 1' 1 2 13 15 +} +# Create a (secure) tmp directory for tmp files. + +{ + tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && + test -d "$tmp" +} || +{ + tmp=./conf$$-$RANDOM + (umask 077 && mkdir "$tmp") +} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 +ac_tmp=$tmp + +# Set up the scripts for CONFIG_FILES section. +# No need to generate them if there are no CONFIG_FILES. +# This happens for instance with `./config.status config.h'. +if test -n "$CONFIG_FILES"; then + + +ac_cr=`echo X | tr X '\015'` +# On cygwin, bash can eat \r inside `` if the user requested igncr. +# But we know of no other shell where ac_cr would be empty at this +# point, so we can use a bashism as a fallback. +if test "x$ac_cr" = x; then + eval ac_cr=\$\'\\r\' +fi +ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` +if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then + ac_cs_awk_cr='\\r' +else + ac_cs_awk_cr=$ac_cr +fi + +echo 'BEGIN {' >"$ac_tmp/subs1.awk" && +_ACEOF + + +{ + echo "cat >conf$$subs.awk <<_ACEOF" && + echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && + echo "_ACEOF" +} >conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 +ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` +ac_delim='%!_!# ' +for ac_last_try in false false false false false :; do + . ./conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + + ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` + if test $ac_delim_n = $ac_delim_num; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done +rm -f conf$$subs.sh + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && +_ACEOF +sed -n ' +h +s/^/S["/; s/!.*/"]=/ +p +g +s/^[^!]*!// +:repl +t repl +s/'"$ac_delim"'$// +t delim +:nl +h +s/\(.\{148\}\)..*/\1/ +t more1 +s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ +p +n +b repl +:more1 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t nl +:delim +h +s/\(.\{148\}\)..*/\1/ +t more2 +s/["\\]/\\&/g; s/^/"/; s/$/"/ +p +b +:more2 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t delim +' >$CONFIG_STATUS || ac_write_fail=1 +rm -f conf$$subs.awk +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +_ACAWK +cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && + for (key in S) S_is_set[key] = 1 + FS = "" + +} +{ + line = $ 0 + nfields = split(line, field, "@") + substed = 0 + len = length(field[1]) + for (i = 2; i < nfields; i++) { + key = field[i] + keylen = length(key) + if (S_is_set[key]) { + value = S[key] + line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) + len += length(value) + length(field[++i]) + substed = 1 + } else + len += 1 + keylen + } + + print line +} + +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then + sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" +else + cat +fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ + || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 +_ACEOF + +# VPATH may cause trouble with some makes, so we remove sole $(srcdir), +# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ +h +s/// +s/^/:/ +s/[ ]*$/:/ +s/:\$(srcdir):/:/g +s/:\${srcdir}:/:/g +s/:@srcdir@:/:/g +s/^:*// +s/:*$// +x +s/\(=[ ]*\).*/\1/ +G +s/\n// +s/^[^=]*=[ ]*$// +}' +fi + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +fi # test -n "$CONFIG_FILES" + +# Set up the scripts for CONFIG_HEADERS section. +# No need to generate them if there are no CONFIG_HEADERS. +# This happens for instance with `./config.status Makefile'. +if test -n "$CONFIG_HEADERS"; then +cat >"$ac_tmp/defines.awk" <<\_ACAWK || +BEGIN { +_ACEOF + +# Transform confdefs.h into an awk script `defines.awk', embedded as +# here-document in config.status, that substitutes the proper values into +# config.h.in to produce config.h. + +# Create a delimiter string that does not exist in confdefs.h, to ease +# handling of long lines. +ac_delim='%!_!# ' +for ac_last_try in false false :; do + ac_tt=`sed -n "/$ac_delim/p" confdefs.h` + if test -z "$ac_tt"; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done + +# For the awk script, D is an array of macro values keyed by name, +# likewise P contains macro parameters if any. Preserve backslash +# newline sequences. + +ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* +sed -n ' +s/.\{148\}/&'"$ac_delim"'/g +t rset +:rset +s/^[ ]*#[ ]*define[ ][ ]*/ / +t def +d +:def +s/\\$// +t bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3"/p +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p +d +:bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3\\\\\\n"\\/p +t cont +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p +t cont +d +:cont +n +s/.\{148\}/&'"$ac_delim"'/g +t clear +:clear +s/\\$// +t bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/"/p +d +:bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p +b cont +' >$CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + for (key in D) D_is_set[key] = 1 + FS = "" +} +/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { + line = \$ 0 + split(line, arg, " ") + if (arg[1] == "#") { + defundef = arg[2] + mac1 = arg[3] + } else { + defundef = substr(arg[1], 2) + mac1 = arg[2] + } + split(mac1, mac2, "(") #) + macro = mac2[1] + prefix = substr(line, 1, index(line, defundef) - 1) + if (D_is_set[macro]) { + # Preserve the white space surrounding the "#". + print prefix "define", macro P[macro] D[macro] + next + } else { + # Replace #undef with comments. This is necessary, for example, + # in the case of _POSIX_SOURCE, which is predefined and required + # on some systems where configure will not decide to define it. + if (defundef == "undef") { + print "/*", prefix defundef, macro, "*/" + next + } + } +} +{ print } +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 +fi # test -n "$CONFIG_HEADERS" + + +eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" +shift +for ac_tag +do + case $ac_tag in + :[FHLC]) ac_mode=$ac_tag; continue;; + esac + case $ac_mode$ac_tag in + :[FHL]*:*);; + :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; + :[FH]-) ac_tag=-:-;; + :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; + esac + ac_save_IFS=$IFS + IFS=: + set x $ac_tag + IFS=$ac_save_IFS + shift + ac_file=$1 + shift + + case $ac_mode in + :L) ac_source=$1;; + :[FH]) + ac_file_inputs= + for ac_f + do + case $ac_f in + -) ac_f="$ac_tmp/stdin";; + *) # Look for the file first in the build tree, then in the source tree + # (if the path is not absolute). The absolute path cannot be DOS-style, + # because $ac_f cannot contain `:'. + test -f "$ac_f" || + case $ac_f in + [\\/$]*) false;; + *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; + esac || + as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; + esac + case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + as_fn_append ac_file_inputs " '$ac_f'" + done + + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + configure_input='Generated from '` + $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + `' by configure.' + if test x"$ac_file" != x-; then + configure_input="$ac_file. $configure_input" + { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +$as_echo "$as_me: creating $ac_file" >&6;} + fi + # Neutralize special characters interpreted by sed in replacement strings. + case $configure_input in #( + *\&* | *\|* | *\\* ) + ac_sed_conf_input=`$as_echo "$configure_input" | + sed 's/[\\\\&|]/\\\\&/g'`;; #( + *) ac_sed_conf_input=$configure_input;; + esac + + case $ac_tag in + *:-:* | *:-) cat >"$ac_tmp/stdin" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; + esac + ;; + esac + + ac_dir=`$as_dirname -- "$ac_file" || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir="$ac_dir"; as_fn_mkdir_p + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + + case $ac_mode in + :F) + # + # CONFIG_FILE + # + + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; + *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; + esac + ac_MKDIR_P=$MKDIR_P + case $MKDIR_P in + [\\/$]* | ?:[\\/]* ) ;; + */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; + esac +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# If the template does not know about datarootdir, expand it. +# FIXME: This hack should be removed a few years after 2.60. +ac_datarootdir_hack=; ac_datarootdir_seen= +ac_sed_dataroot=' +/datarootdir/ { + p + q +} +/@datadir@/p +/@docdir@/p +/@infodir@/p +/@localedir@/p +/@mandir@/p' +case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in +*datarootdir*) ac_datarootdir_seen=yes;; +*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + ac_datarootdir_hack=' + s&@datadir@&$datadir&g + s&@docdir@&$docdir&g + s&@infodir@&$infodir&g + s&@localedir@&$localedir&g + s&@mandir@&$mandir&g + s&\\\${datarootdir}&$datarootdir&g' ;; +esac +_ACEOF + +# Neutralize VPATH when `$srcdir' = `.'. +# Shell code in configure.ac might set extrasub. +# FIXME: do we really want to maintain this feature? +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_sed_extra="$ac_vpsub +$extrasub +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s|@configure_input@|$ac_sed_conf_input|;t t +s&@top_builddir@&$ac_top_builddir_sub&;t t +s&@top_build_prefix@&$ac_top_build_prefix&;t t +s&@srcdir@&$ac_srcdir&;t t +s&@abs_srcdir@&$ac_abs_srcdir&;t t +s&@top_srcdir@&$ac_top_srcdir&;t t +s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t +s&@builddir@&$ac_builddir&;t t +s&@abs_builddir@&$ac_abs_builddir&;t t +s&@abs_top_builddir@&$ac_abs_top_builddir&;t t +s&@INSTALL@&$ac_INSTALL&;t t +s&@MKDIR_P@&$ac_MKDIR_P&;t t +$ac_datarootdir_hack +" +eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ + >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + +test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && + { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && + { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ + "$ac_tmp/out"`; test -z "$ac_out"; } && + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&5 +$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&2;} + + rm -f "$ac_tmp/stdin" + case $ac_file in + -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; + *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; + esac \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + ;; + :H) + # + # CONFIG_HEADER + # + if test x"$ac_file" != x-; then + { + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" + } >"$ac_tmp/config.h" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then + { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 +$as_echo "$as_me: $ac_file is unchanged" >&6;} + else + rm -f "$ac_file" + mv "$ac_tmp/config.h" "$ac_file" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + fi + else + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ + || as_fn_error $? "could not create -" "$LINENO" 5 + fi +# Compute "$ac_file"'s index in $config_headers. +_am_arg="$ac_file" +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || +$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$_am_arg" : 'X\(//\)[^/]' \| \ + X"$_am_arg" : 'X\(//\)$' \| \ + X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$_am_arg" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'`/stamp-h$_am_stamp_count + ;; + + :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 +$as_echo "$as_me: executing $ac_file commands" >&6;} + ;; + esac + + + case $ac_file$ac_mode in + "depfiles":C) test x"$AMDEP_TRUE" != x"" || { + # Older Autoconf quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + # TODO: see whether this extra hack can be removed once we start + # requiring Autoconf 2.70 or later. + case $CONFIG_FILES in #( + *\'*) : + eval set x "$CONFIG_FILES" ;; #( + *) : + set x $CONFIG_FILES ;; #( + *) : + ;; +esac + shift + # Used to flag and report bootstrapping failures. + am_rc=0 + for am_mf + do + # Strip MF so we end up with the name of the file. + am_mf=`$as_echo "$am_mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile which includes + # dependency-tracking related rules and includes. + # Grep'ing the whole file directly is not great: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \ + || continue + am_dirpart=`$as_dirname -- "$am_mf" || +$as_expr X"$am_mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$am_mf" : 'X\(//\)[^/]' \| \ + X"$am_mf" : 'X\(//\)$' \| \ + X"$am_mf" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$am_mf" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + am_filepart=`$as_basename -- "$am_mf" || +$as_expr X/"$am_mf" : '.*/\([^/][^/]*\)/*$' \| \ + X"$am_mf" : 'X\(//\)$' \| \ + X"$am_mf" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$am_mf" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + { echo "$as_me:$LINENO: cd "$am_dirpart" \ + && sed -e '/# am--include-marker/d' "$am_filepart" \ + | $MAKE -f - am--depfiles" >&5 + (cd "$am_dirpart" \ + && sed -e '/# am--include-marker/d' "$am_filepart" \ + | $MAKE -f - am--depfiles) >&5 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } || am_rc=$? + done + if test $am_rc -ne 0; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "Something went wrong bootstrapping makefile fragments + for automatic dependency tracking. Try re-running configure with the + '--disable-dependency-tracking' option to at least be able to build + the package (albeit without support for automatic dependency tracking). +See \`config.log' for more details" "$LINENO" 5; } + fi + { am_dirpart=; unset am_dirpart;} + { am_filepart=; unset am_filepart;} + { am_mf=; unset am_mf;} + { am_rc=; unset am_rc;} + rm -f conftest-deps.mk +} + ;; + "libtool":C) + + # See if we are running on zsh, and set the options that allow our + # commands through without removal of \ escapes. + if test -n "${ZSH_VERSION+set}"; then + setopt NO_GLOB_SUBST + fi + + cfgfile=${ofile}T + trap "$RM \"$cfgfile\"; exit 1" 1 2 15 + $RM "$cfgfile" + + cat <<_LT_EOF >> "$cfgfile" +#! $SHELL +# Generated automatically by $as_me ($PACKAGE) $VERSION +# NOTE: Changes made to this file will be lost: look at ltmain.sh. + +# Provide generalized library-building support services. +# Written by Gordon Matzigkeit, 1996 + +# Copyright (C) 2014 Free Software Foundation, 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. + +# GNU Libtool is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of of the License, or +# (at your option) any later version. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program or library that is built +# using GNU Libtool, you may include this file under the same +# distribution terms that you use for the rest of that program. +# +# GNU Libtool is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + + +# The names of the tagged configurations supported by this script. +available_tags='' + +# Configured defaults for sys_lib_dlsearch_path munging. +: \${LT_SYS_LIBRARY_PATH="$configure_time_lt_sys_library_path"} + +# ### BEGIN LIBTOOL CONFIG + +# Whether or not to build static libraries. +build_old_libs=$enable_static + +# Which release of libtool.m4 was used? +macro_version=$macro_version +macro_revision=$macro_revision + +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared + +# What type of objects to build. +pic_mode=$pic_mode + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# Shared archive member basename,for filename based shared library versioning on AIX. +shared_archive_member_spec=$shared_archive_member_spec + +# Shell to use when invoking shell scripts. +SHELL=$lt_SHELL + +# An echo program that protects backslashes. +ECHO=$lt_ECHO + +# The PATH separator for the build system. +PATH_SEPARATOR=$lt_PATH_SEPARATOR + +# The host system. +host_alias=$host_alias +host=$host +host_os=$host_os + +# The build system. +build_alias=$build_alias +build=$build +build_os=$build_os + +# A sed program that does not truncate output. +SED=$lt_SED + +# Sed that helps us avoid accidentally triggering echo(1) options like -n. +Xsed="\$SED -e 1s/^X//" + +# A grep program that handles long lines. +GREP=$lt_GREP + +# An ERE matcher. +EGREP=$lt_EGREP + +# A literal string matcher. +FGREP=$lt_FGREP + +# A BSD- or MS-compatible name lister. +NM=$lt_NM + +# Whether we need soft or hard links. +LN_S=$lt_LN_S + +# What is the maximum length of a command? +max_cmd_len=$max_cmd_len + +# Object file suffix (normally "o"). +objext=$ac_objext + +# Executable file suffix (normally ""). +exeext=$exeext + +# whether the shell understands "unset". +lt_unset=$lt_unset + +# turn spaces into newlines. +SP2NL=$lt_lt_SP2NL + +# turn newlines into spaces. +NL2SP=$lt_lt_NL2SP + +# convert \$build file names to \$host format. +to_host_file_cmd=$lt_cv_to_host_file_cmd + +# convert \$build files to toolchain format. +to_tool_file_cmd=$lt_cv_to_tool_file_cmd + +# An object symbol dumper. +OBJDUMP=$lt_OBJDUMP + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method=$lt_deplibs_check_method + +# Command to use when deplibs_check_method = "file_magic". +file_magic_cmd=$lt_file_magic_cmd + +# How to find potential files when deplibs_check_method = "file_magic". +file_magic_glob=$lt_file_magic_glob + +# Find potential files using nocaseglob when deplibs_check_method = "file_magic". +want_nocaseglob=$lt_want_nocaseglob + +# DLL creation program. +DLLTOOL=$lt_DLLTOOL + +# Command to associate shared and link libraries. +sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd + +# The archiver. +AR=$lt_AR + +# Flags to create an archive. +AR_FLAGS=$lt_AR_FLAGS + +# How to feed a file listing to the archiver. +archiver_list_spec=$lt_archiver_list_spec + +# A symbol stripping program. +STRIP=$lt_STRIP + +# Commands used to install an old-style archive. +RANLIB=$lt_RANLIB +old_postinstall_cmds=$lt_old_postinstall_cmds +old_postuninstall_cmds=$lt_old_postuninstall_cmds + +# Whether to use a lock for old archive extraction. +lock_old_archive_extraction=$lock_old_archive_extraction + +# A C compiler. +LTCC=$lt_CC + +# LTCC compiler flags. +LTCFLAGS=$lt_CFLAGS + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe + +# Transform the output of nm in a proper C declaration. +global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl + +# Transform the output of nm into a list of symbols to manually relocate. +global_symbol_to_import=$lt_lt_cv_sys_global_symbol_to_import + +# Transform the output of nm in a C name address pair. +global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address + +# Transform the output of nm in a C name address pair when lib prefix is needed. +global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix + +# The name lister interface. +nm_interface=$lt_lt_cv_nm_interface + +# Specify filename containing input files for \$NM. +nm_file_list_spec=$lt_nm_file_list_spec + +# The root where to search for dependent libraries,and where our libraries should be installed. +lt_sysroot=$lt_sysroot + +# Command to truncate a binary pipe. +lt_truncate_bin=$lt_lt_cv_truncate_bin + +# The name of the directory that contains temporary libtool files. +objdir=$objdir + +# Used to examine libraries when file_magic_cmd begins with "file". +MAGIC_CMD=$MAGIC_CMD + +# Must we lock files when doing compilation? +need_locks=$lt_need_locks + +# Manifest tool. +MANIFEST_TOOL=$lt_MANIFEST_TOOL + +# Tool to manipulate archived DWARF debug symbol files on Mac OS X. +DSYMUTIL=$lt_DSYMUTIL + +# Tool to change global to local symbols on Mac OS X. +NMEDIT=$lt_NMEDIT + +# Tool to manipulate fat objects and archives on Mac OS X. +LIPO=$lt_LIPO + +# ldd/readelf like tool for Mach-O binaries on Mac OS X. +OTOOL=$lt_OTOOL + +# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. +OTOOL64=$lt_OTOOL64 + +# Old archive suffix (normally "a"). +libext=$libext + +# Shared library suffix (normally ".so"). +shrext_cmds=$lt_shrext_cmds + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds=$lt_extract_expsyms_cmds + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at link time. +variables_saved_for_relink=$lt_variables_saved_for_relink + +# Do we need the "lib" prefix for modules? +need_lib_prefix=$need_lib_prefix + +# Do we need a version for libraries? +need_version=$need_version + +# Library versioning type. +version_type=$version_type + +# Shared library runtime path variable. +runpath_var=$runpath_var + +# Shared library path variable. +shlibpath_var=$shlibpath_var + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath + +# Format of library name prefix. +libname_spec=$lt_libname_spec + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME +library_names_spec=$lt_library_names_spec + +# The coded name of the library, if different from the real name. +soname_spec=$lt_soname_spec + +# Permission mode override for installation of shared libraries. +install_override_mode=$lt_install_override_mode + +# Command to use after installation of a shared archive. +postinstall_cmds=$lt_postinstall_cmds + +# Command to use after uninstallation of a shared archive. +postuninstall_cmds=$lt_postuninstall_cmds + +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$lt_finish_cmds + +# As "finish_cmds", except a single script fragment to be evaled but +# not shown. +finish_eval=$lt_finish_eval + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=$hardcode_into_libs + +# Compile-time system search path for libraries. +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec + +# Detected run-time system search path for libraries. +sys_lib_dlsearch_path_spec=$lt_configure_time_dlsearch_path + +# Explicit LT_SYS_LIBRARY_PATH set during ./configure time. +configure_time_lt_sys_library_path=$lt_configure_time_lt_sys_library_path + +# Whether dlopen is supported. +dlopen_support=$enable_dlopen + +# Whether dlopen of programs is supported. +dlopen_self=$enable_dlopen_self + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=$enable_dlopen_self_static + +# Commands to strip libraries. +old_striplib=$lt_old_striplib +striplib=$lt_striplib + + +# The linker used to build libraries. +LD=$lt_LD + +# How to create reloadable object files. +reload_flag=$lt_reload_flag +reload_cmds=$lt_reload_cmds + +# Commands used to build an old-style archive. +old_archive_cmds=$lt_old_archive_cmds + +# A language specific compiler. +CC=$lt_compiler + +# Is the compiler the GNU compiler? +with_gcc=$GCC + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc + +# Whether or not to disallow shared libs when runtime libs are static. +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec + +# Whether the compiler copes with passing no objects directly. +compiler_needs_object=$lt_compiler_needs_object + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds + +# Commands used to build a shared archive. +archive_cmds=$lt_archive_cmds +archive_expsym_cmds=$lt_archive_expsym_cmds + +# Commands used to build a loadable module if different from building +# a shared archive. +module_cmds=$lt_module_cmds +module_expsym_cmds=$lt_module_expsym_cmds + +# Whether we are building with GNU ld or not. +with_gnu_ld=$lt_with_gnu_ld + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag + +# Flag that enforces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec + +# Whether we need a single "-rpath" flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator + +# Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes +# DIR into the resulting binary. +hardcode_direct=$hardcode_direct + +# Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes +# DIR into the resulting binary and the resulting library dependency is +# "absolute",i.e impossible to change by setting \$shlibpath_var if the +# library is relocated. +hardcode_direct_absolute=$hardcode_direct_absolute + +# Set to "yes" if using the -LDIR flag during linking hardcodes DIR +# into the resulting binary. +hardcode_minus_L=$hardcode_minus_L + +# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR +# into the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var + +# Set to "yes" if building a shared library automatically hardcodes DIR +# into the library and all subsequent libraries and executables linked +# against it. +hardcode_automatic=$hardcode_automatic + +# Set to yes if linker adds runtime paths of dependent libraries +# to runtime path list. +inherit_rpath=$inherit_rpath + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs + +# Set to "yes" if exported symbols are required. +always_export_symbols=$always_export_symbols + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms + +# Commands necessary for linking programs (against libraries) with templates. +prelink_cmds=$lt_prelink_cmds + +# Commands necessary for finishing linking programs. +postlink_cmds=$lt_postlink_cmds + +# Specify filename containing input files. +file_list_spec=$lt_file_list_spec + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action + +# ### END LIBTOOL CONFIG + +_LT_EOF + + cat <<'_LT_EOF' >> "$cfgfile" + +# ### BEGIN FUNCTIONS SHARED WITH CONFIGURE + +# func_munge_path_list VARIABLE PATH +# ----------------------------------- +# VARIABLE is name of variable containing _space_ separated list of +# directories to be munged by the contents of PATH, which is string +# having a format: +# "DIR[:DIR]:" +# string "DIR[ DIR]" will be prepended to VARIABLE +# ":DIR[:DIR]" +# string "DIR[ DIR]" will be appended to VARIABLE +# "DIRP[:DIRP]::[DIRA:]DIRA" +# string "DIRP[ DIRP]" will be prepended to VARIABLE and string +# "DIRA[ DIRA]" will be appended to VARIABLE +# "DIR[:DIR]" +# VARIABLE will be replaced by "DIR[ DIR]" +func_munge_path_list () +{ + case x$2 in + x) + ;; + *:) + eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\" + ;; + x:*) + eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\" + ;; + *::*) + eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" + eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\" + ;; + *) + eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\" + ;; + esac +} + + +# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. +func_cc_basename () +{ + for cc_temp in $*""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac + done + func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` +} + + +# ### END FUNCTIONS SHARED WITH CONFIGURE + +_LT_EOF + + case $host_os in + aix3*) + cat <<\_LT_EOF >> "$cfgfile" +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test set != "${COLLECT_NAMES+set}"; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +_LT_EOF + ;; + esac + + +ltmain=$ac_aux_dir/ltmain.sh + + + # We use sed instead of cat because bash on DJGPP gets confused if + # if finds mixed CR/LF and LF-only lines. Since sed operates in + # text mode, it properly converts lines to CR/LF. This bash problem + # is reportedly fixed, but why not run on old versions too? + sed '$q' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + mv -f "$cfgfile" "$ofile" || + (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") + chmod +x "$ofile" + + ;; + "po-directories":C) + for ac_file in $CONFIG_FILES; do + # Support "outfile[:infile[:infile...]]" + case "$ac_file" in + *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; + esac + # PO directories have a Makefile.in generated from Makefile.in.in. + case "$ac_file" in */Makefile.in) + # Adjust a relative srcdir. + ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` + ac_dir_suffix=/`echo "$ac_dir"|sed 's%^\./%%'` + ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` + # In autoconf-2.13 it is called $ac_given_srcdir. + # In autoconf-2.50 it is called $srcdir. + test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" + case "$ac_given_srcdir" in + .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; + /*) top_srcdir="$ac_given_srcdir" ;; + *) top_srcdir="$ac_dots$ac_given_srcdir" ;; + esac + # Treat a directory as a PO directory if and only if it has a + # POTFILES.in file. This allows packages to have multiple PO + # directories under different names or in different locations. + if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then + rm -f "$ac_dir/POTFILES" + test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES" + gt_tab=`printf '\t'` + cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ${gt_tab}]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES" + POMAKEFILEDEPS="POTFILES.in" + # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend + # on $ac_dir but don't depend on user-specified configuration + # parameters. + if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then + # The LINGUAS file contains the set of available languages. + if test -n "$OBSOLETE_ALL_LINGUAS"; then + test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete" + fi + ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"` + # Hide the ALL_LINGUAS assignment from automake < 1.5. + eval 'ALL_LINGUAS''=$ALL_LINGUAS_' + POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS" + else + # The set of available languages was given in configure.in. + # Hide the ALL_LINGUAS assignment from automake < 1.5. + eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS' + fi + # Compute POFILES + # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po) + # Compute UPDATEPOFILES + # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update) + # Compute DUMMYPOFILES + # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop) + # Compute GMOFILES + # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo) + case "$ac_given_srcdir" in + .) srcdirpre= ;; + *) srcdirpre='$(srcdir)/' ;; + esac + POFILES= + UPDATEPOFILES= + DUMMYPOFILES= + GMOFILES= + for lang in $ALL_LINGUAS; do + POFILES="$POFILES $srcdirpre$lang.po" + UPDATEPOFILES="$UPDATEPOFILES $lang.po-update" + DUMMYPOFILES="$DUMMYPOFILES $lang.nop" + GMOFILES="$GMOFILES $srcdirpre$lang.gmo" + done + # CATALOGS depends on both $ac_dir and the user's LINGUAS + # environment variable. + INST_LINGUAS= + if test -n "$ALL_LINGUAS"; then + for presentlang in $ALL_LINGUAS; do + useit=no + if test "%UNSET%" != "$LINGUAS"; then + desiredlanguages="$LINGUAS" + else + desiredlanguages="$ALL_LINGUAS" + fi + for desiredlang in $desiredlanguages; do + # Use the presentlang catalog if desiredlang is + # a. equal to presentlang, or + # b. a variant of presentlang (because in this case, + # presentlang can be used as a fallback for messages + # which are not translated in the desiredlang catalog). + case "$desiredlang" in + "$presentlang"*) useit=yes;; + esac + done + if test $useit = yes; then + INST_LINGUAS="$INST_LINGUAS $presentlang" + fi + done + fi + CATALOGS= + if test -n "$INST_LINGUAS"; then + for lang in $INST_LINGUAS; do + CATALOGS="$CATALOGS $lang.gmo" + done + fi + test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile" + sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile" + for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do + if test -f "$f"; then + case "$f" in + *.orig | *.bak | *~) ;; + *) cat "$f" >> "$ac_dir/Makefile" ;; + esac + fi + done + fi + ;; + esac + done ;; + + esac +done # for ac_tag + + +as_fn_exit 0 +_ACEOF +ac_clean_files=$ac_clean_files_save + +test $ac_write_fail = 0 || + as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 + + +# configure is writing to config.log, and then calls config.status. +# config.status does its own redirection, appending to config.log. +# Unfortunately, on DOS this fails, as config.log is still kept open +# by configure, so config.status won't be able to write to it; its +# output is simply discarded. So we exec the FD to /dev/null, +# effectively closing config.log, so it can be properly (re)opened and +# appended to by config.status. When coming back to configure, we +# need to make the FD available again. +if test "$no_create" != yes; then + ac_cs_success=: + ac_config_status_args= + test "$silent" = yes && + ac_config_status_args="$ac_config_status_args --quiet" + exec 5>/dev/null + $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false + exec 5>>config.log + # Use ||, not &&, to avoid exiting from the if with $? = 1, which + # would make configure fail if this is the last instruction. + $ac_cs_success || as_fn_exit 1 +fi +if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 +$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} +fi + diff --git a/configure.ac b/configure.ac new file mode 100644 index 0000000..3758b29 --- /dev/null +++ b/configure.ac @@ -0,0 +1,639 @@ +AC_PREREQ([2.67]) +AC_INIT([cryptsetup],[2.2.2]) + +dnl library version from ..[-] +LIBCRYPTSETUP_VERSION=$(echo $PACKAGE_VERSION | cut -f1 -d-) +LIBCRYPTSETUP_VERSION_INFO=17:0:5 + +AM_SILENT_RULES([yes]) +AC_CONFIG_SRCDIR(src/cryptsetup.c) +AC_CONFIG_MACRO_DIR([m4]) + +AC_CONFIG_HEADERS([config.h:config.h.in]) + +# We do not want to run test in parallel. Really. +# http://lists.gnu.org/archive/html/automake/2013-01/msg00060.html + +# For old automake use this +#AM_INIT_AUTOMAKE(dist-xz subdir-objects) +AM_INIT_AUTOMAKE([dist-xz 1.12 serial-tests subdir-objects]) + +if test "x$prefix" = "xNONE"; then + sysconfdir=/etc +fi +AC_PREFIX_DEFAULT(/usr) + +AC_CANONICAL_HOST +AC_USE_SYSTEM_EXTENSIONS +AC_PROG_CC +AM_PROG_CC_C_O +AC_PROG_CPP +AC_PROG_INSTALL +AC_PROG_MAKE_SET +AC_ENABLE_STATIC(no) +LT_INIT +PKG_PROG_PKG_CONFIG + +dnl ========================================================================== +dnl define PKG_CHECK_VAR for old pkg-config <= 0.28 +m4_ifndef([AS_VAR_COPY], +[m4_define([AS_VAR_COPY], +[AS_LITERAL_IF([$1[]$2], [$1=$$2], [eval $1=\$$2])]) +]) +m4_ifndef([PKG_CHECK_VAR], [ +AC_DEFUN([PKG_CHECK_VAR], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG]) +AC_ARG_VAR([$1], [value of $3 for $2, overriding pkg-config]) + +_PKG_CONFIG([$1], [variable="][$3]["], [$2]) +AS_VAR_COPY([$1], [pkg_cv_][$1]) + +AS_VAR_IF([$1], [""], [$5], [$4]) +]) +]) +dnl ========================================================================== + +AC_C_RESTRICT + +AC_HEADER_DIRENT +AC_HEADER_STDC +AC_CHECK_HEADERS(fcntl.h malloc.h inttypes.h sys/ioctl.h sys/mman.h \ + sys/sysmacros.h sys/statvfs.h ctype.h unistd.h locale.h byteswap.h endian.h stdint.h) + +AC_CHECK_HEADERS(uuid/uuid.h,,[AC_MSG_ERROR([You need the uuid library.])]) +AC_CHECK_HEADER(libdevmapper.h,,[AC_MSG_ERROR([You need the device-mapper library.])]) + +AC_ARG_ENABLE([keyring], + AS_HELP_STRING([--disable-keyring], [disable kernel keyring support and builtin kernel keyring token]), + [], [enable_keyring=yes]) +if test "x$enable_keyring" = "xyes"; then + AC_CHECK_HEADERS(linux/keyctl.h,,[AC_MSG_ERROR([You need Linux kernel headers with kernel keyring service compiled.])]) + + dnl ========================================================================== + dnl check whether kernel is compiled with kernel keyring service syscalls + AC_CHECK_DECL(__NR_add_key,,[AC_MSG_ERROR([The kernel is missing add_key syscall.])], [#include ]) + AC_CHECK_DECL(__NR_keyctl,,[AC_MSG_ERROR([The kernel is missing keyctl syscall.])], [#include ]) + AC_CHECK_DECL(__NR_request_key,,[AC_MSG_ERROR([The kernel is missing request_key syscall.])], [#include ]) + + dnl ========================================================================== + dnl check that key_serial_t hasn't been adopted yet in stdlib + AC_CHECK_TYPES([key_serial_t], [], [], [ + AC_INCLUDES_DEFAULT + #ifdef HAVE_LINUX_KEYCTL_H + # include + #endif + ]) + + AC_DEFINE(KERNEL_KEYRING, 1, [Enable kernel keyring service support]) +fi +AM_CONDITIONAL(KERNEL_KEYRING, test "x$enable_keyring" = "xyes") + +saved_LIBS=$LIBS +AC_CHECK_LIB(uuid, uuid_clear, ,[AC_MSG_ERROR([You need the uuid library.])]) +AC_SUBST(UUID_LIBS, $LIBS) +LIBS=$saved_LIBS + +AC_SEARCH_LIBS([clock_gettime],[rt posix4]) +AC_CHECK_FUNCS([posix_memalign clock_gettime posix_fallocate explicit_bzero]) + +if test "x$enable_largefile" = "xno"; then + AC_MSG_ERROR([Building with --disable-largefile is not supported, it can cause data corruption.]) +fi + +AC_C_CONST +AC_C_BIGENDIAN +AC_TYPE_OFF_T +AC_SYS_LARGEFILE +AC_FUNC_FSEEKO +AC_PROG_GCC_TRADITIONAL +AC_FUNC_STRERROR_R + +dnl ========================================================================== + +AM_GNU_GETTEXT([external],[need-ngettext]) +AM_GNU_GETTEXT_VERSION([0.18.3]) + +dnl ========================================================================== + +saved_LIBS=$LIBS +AC_CHECK_LIB(popt, poptConfigFileToString,, + [AC_MSG_ERROR([You need popt 1.7 or newer to compile.])]) +AC_SUBST(POPT_LIBS, $LIBS) +LIBS=$saved_LIBS + +dnl ========================================================================== +dnl FIPS extensions +AC_ARG_ENABLE([fips], + AS_HELP_STRING([--enable-fips], [enable FIPS mode restrictions])) +if test "x$enable_fips" = "xyes"; then + AC_DEFINE(ENABLE_FIPS, 1, [Enable FIPS mode restrictions]) + + if test "x$enable_static" = "xyes" -o "x$enable_static_cryptsetup" = "xyes" ; then + AC_MSG_ERROR([Static build is not compatible with FIPS.]) + fi +fi + +AC_DEFUN([NO_FIPS], [ + if test "x$enable_fips" = "xyes"; then + AC_MSG_ERROR([This option is not compatible with FIPS.]) + fi +]) + +dnl ========================================================================== +dnl pwquality library (cryptsetup CLI only) +AC_ARG_ENABLE([pwquality], + AS_HELP_STRING([--enable-pwquality], [enable password quality checking using pwquality library])) + +if test "x$enable_pwquality" = "xyes"; then + AC_DEFINE(ENABLE_PWQUALITY, 1, [Enable password quality checking using pwquality library]) + PKG_CHECK_MODULES([PWQUALITY], [pwquality >= 1.0.0],, + AC_MSG_ERROR([You need pwquality library.])) + + dnl FIXME: this is really hack for now + PWQUALITY_STATIC_LIBS="$PWQUALITY_LIBS -lcrack -lz" +fi + +dnl ========================================================================== +dnl passwdqc library (cryptsetup CLI only) +AC_ARG_ENABLE([passwdqc], + AS_HELP_STRING([--enable-passwdqc@<:@=CONFIG_PATH@:>@], + [enable password quality checking using passwdqc library (optionally with CONFIG_PATH)])) + +case "$enable_passwdqc" in + ""|yes|no) use_passwdqc_config="" ;; + /*) use_passwdqc_config="$enable_passwdqc"; enable_passwdqc=yes ;; + *) AC_MSG_ERROR([Unrecognized --enable-passwdqc parameter.]) ;; +esac +AC_DEFINE_UNQUOTED([PASSWDQC_CONFIG_FILE], ["$use_passwdqc_config"], [passwdqc library config file]) + +if test "x$enable_passwdqc" = "xyes"; then + AC_DEFINE(ENABLE_PASSWDQC, 1, [Enable password quality checking using passwdqc library]) + + PASSWDQC_LIBS="-lpasswdqc" +fi + +if test "x$enable_pwquality$enable_passwdqc" = "xyesyes"; then + AC_MSG_ERROR([--enable-pwquality and --enable-passwdqc are mutually incompatible.]) +fi + +dnl ========================================================================== +dnl Crypto backend functions + +AC_DEFUN([CONFIGURE_GCRYPT], [ + if test "x$enable_fips" = "xyes"; then + GCRYPT_REQ_VERSION=1.4.5 + else + GCRYPT_REQ_VERSION=1.1.42 + fi + + dnl libgcrypt rejects to use pkgconfig, use AM_PATH_LIBGCRYPT from gcrypt-devel here. + dnl Do not require gcrypt-devel if other crypto backend is used. + m4_ifdef([AM_PATH_LIBGCRYPT],[ + AC_ARG_ENABLE([gcrypt-pbkdf2], + dnl Check if we can use gcrypt PBKDF2 (1.6.0 supports empty password) + AS_HELP_STRING([--enable-gcrypt-pbkdf2], [force enable internal gcrypt PBKDF2]), + if test "x$enableval" = "xyes"; then + [use_internal_pbkdf2=0] + else + [use_internal_pbkdf2=1] + fi, + [AM_PATH_LIBGCRYPT([1.6.1], [use_internal_pbkdf2=0], [use_internal_pbkdf2=1])]) + AM_PATH_LIBGCRYPT($GCRYPT_REQ_VERSION,,[AC_MSG_ERROR([You need the gcrypt library.])])], + AC_MSG_ERROR([Missing support for gcrypt: install gcrypt and regenerate configure.])) + + AC_MSG_CHECKING([if internal cryptsetup PBKDF2 is compiled-in]) + if test $use_internal_pbkdf2 = 0; then + AC_MSG_RESULT([no]) + else + AC_MSG_RESULT([yes]) + NO_FIPS([]) + fi + + AC_CHECK_DECLS([GCRY_CIPHER_MODE_XTS], [], [], [#include ]) + + if test "x$enable_static_cryptsetup" = "xyes"; then + saved_LIBS=$LIBS + LIBS="$saved_LIBS $LIBGCRYPT_LIBS -static" + AC_CHECK_LIB(gcrypt, gcry_check_version,, + AC_MSG_ERROR([Cannot find static gcrypt library.]), + [-lgpg-error]) + LIBGCRYPT_STATIC_LIBS="$LIBGCRYPT_LIBS -lgpg-error" + LIBS=$saved_LIBS + fi + + CRYPTO_CFLAGS=$LIBGCRYPT_CFLAGS + CRYPTO_LIBS=$LIBGCRYPT_LIBS + CRYPTO_STATIC_LIBS=$LIBGCRYPT_STATIC_LIBS + + AC_DEFINE_UNQUOTED(GCRYPT_REQ_VERSION, ["$GCRYPT_REQ_VERSION"], [Requested gcrypt version]) +]) + +AC_DEFUN([CONFIGURE_OPENSSL], [ + PKG_CHECK_MODULES([OPENSSL], [openssl >= 0.9.8],, + AC_MSG_ERROR([You need openssl library.])) + CRYPTO_CFLAGS=$OPENSSL_CFLAGS + CRYPTO_LIBS=$OPENSSL_LIBS + use_internal_pbkdf2=0 + + if test "x$enable_static_cryptsetup" = "xyes"; then + saved_PKG_CONFIG=$PKG_CONFIG + PKG_CONFIG="$PKG_CONFIG --static" + PKG_CHECK_MODULES([OPENSSL_STATIC], [openssl]) + CRYPTO_STATIC_LIBS=$OPENSSL_STATIC_LIBS + PKG_CONFIG=$saved_PKG_CONFIG + fi +]) + +AC_DEFUN([CONFIGURE_NSS], [ + if test "x$enable_static_cryptsetup" = "xyes"; then + AC_MSG_ERROR([Static build of cryptsetup is not supported with NSS.]) + fi + + AC_MSG_WARN([NSS backend does NOT provide backward compatibility (missing ripemd160 hash).]) + + PKG_CHECK_MODULES([NSS], [nss],, + AC_MSG_ERROR([You need nss library.])) + + saved_CFLAGS=$CFLAGS + CFLAGS="$CFLAGS $NSS_CFLAGS" + AC_CHECK_DECLS([NSS_GetVersion], [], [], [#include ]) + CFLAGS=$saved_CFLAGS + + CRYPTO_CFLAGS=$NSS_CFLAGS + CRYPTO_LIBS=$NSS_LIBS + use_internal_pbkdf2=1 + NO_FIPS([]) +]) + +AC_DEFUN([CONFIGURE_KERNEL], [ + AC_CHECK_HEADERS(linux/if_alg.h,, + [AC_MSG_ERROR([You need Linux kernel headers with userspace crypto interface.])]) +# AC_CHECK_DECLS([AF_ALG],, +# [AC_MSG_ERROR([You need Linux kernel with userspace crypto interface.])], +# [#include ]) + use_internal_pbkdf2=1 + NO_FIPS([]) +]) + +AC_DEFUN([CONFIGURE_NETTLE], [ + AC_CHECK_HEADERS(nettle/sha.h,, + [AC_MSG_ERROR([You need Nettle cryptographic library.])]) + AC_CHECK_HEADERS(nettle/version.h) + + saved_LIBS=$LIBS + AC_CHECK_LIB(nettle, nettle_pbkdf2_hmac_sha256,, + [AC_MSG_ERROR([You need Nettle library version 2.6 or more recent.])]) + CRYPTO_LIBS=$LIBS + LIBS=$saved_LIBS + + CRYPTO_STATIC_LIBS=$CRYPTO_LIBS + use_internal_pbkdf2=0 + NO_FIPS([]) +]) + +dnl ========================================================================== +saved_LIBS=$LIBS + +AC_ARG_ENABLE([static-cryptsetup], + AS_HELP_STRING([--enable-static-cryptsetup], [enable build of static version of tools])) +if test "x$enable_static_cryptsetup" = "xyes"; then + if test "x$enable_static" = "xno"; then + AC_MSG_WARN([Requested static cryptsetup build, enabling static library.]) + enable_static=yes + fi +fi +AM_CONDITIONAL(STATIC_TOOLS, test "x$enable_static_cryptsetup" = "xyes") + +AC_ARG_ENABLE([cryptsetup], + AS_HELP_STRING([--disable-cryptsetup], [disable cryptsetup support]), + [], [enable_cryptsetup=yes]) +AM_CONDITIONAL(CRYPTSETUP, test "x$enable_cryptsetup" = "xyes") + +AC_ARG_ENABLE([veritysetup], + AS_HELP_STRING([--disable-veritysetup], [disable veritysetup support]), + [], [enable_veritysetup=yes]) +AM_CONDITIONAL(VERITYSETUP, test "x$enable_veritysetup" = "xyes") + +AC_ARG_ENABLE([cryptsetup-reencrypt], + AS_HELP_STRING([--disable-cryptsetup-reencrypt], [disable cryptsetup-reencrypt tool]), + [], [enable_cryptsetup_reencrypt=yes]) +AM_CONDITIONAL(REENCRYPT, test "x$enable_cryptsetup_reencrypt" = "xyes") + +AC_ARG_ENABLE([integritysetup], + AS_HELP_STRING([--disable-integritysetup], [disable integritysetup support]), + [], [enable_integritysetup=yes]) +AM_CONDITIONAL(INTEGRITYSETUP, test "x$enable_integritysetup" = "xyes") + +AC_ARG_ENABLE([selinux], + AS_HELP_STRING([--disable-selinux], [disable selinux support [default=auto]]), + [], [enable_selinux=yes]) + +AC_ARG_ENABLE([udev], + AS_HELP_STRING([--disable-udev], [disable udev support]), + [], [enable_udev=yes]) + +dnl Try to use pkg-config for devmapper, but fallback to old detection +PKG_CHECK_MODULES([DEVMAPPER], [devmapper >= 1.02.03],, [ + AC_CHECK_LIB(devmapper, dm_task_set_name,, + [AC_MSG_ERROR([You need the device-mapper library.])]) + AC_CHECK_LIB(devmapper, dm_task_set_message,, + [AC_MSG_ERROR([The device-mapper library on your system is too old.])]) + DEVMAPPER_LIBS=$LIBS +]) +LIBS=$saved_LIBS + +LIBS="$LIBS $DEVMAPPER_LIBS" +AC_CHECK_DECLS([dm_task_secure_data], [], [], [#include ]) +AC_CHECK_DECLS([dm_task_retry_remove], [], [], [#include ]) +AC_CHECK_DECLS([dm_task_deferred_remove], [], [], [#include ]) +AC_CHECK_DECLS([dm_device_has_mounted_fs], [], [], [#include ]) +AC_CHECK_DECLS([dm_device_has_holders], [], [], [#include ]) +AC_CHECK_DECLS([DM_DEVICE_GET_TARGET_VERSION], [], [], [#include ]) +AC_CHECK_DECLS([DM_UDEV_DISABLE_DISK_RULES_FLAG], [have_cookie=yes], [have_cookie=no], [#include ]) +if test "x$enable_udev" = xyes; then + if test "x$have_cookie" = xno; then + AC_MSG_WARN([The device-mapper library on your system has no udev support, udev support disabled.]) + else + AC_DEFINE(USE_UDEV, 1, [Try to use udev synchronisation?]) + fi +fi +LIBS=$saved_LIBS + +dnl Check for JSON-C used in LUKS2 +PKG_CHECK_MODULES([JSON_C], [json-c]) +AC_CHECK_DECLS([json_object_object_add_ex], [], [], [#include ]) +AC_CHECK_DECLS([json_object_deep_copy], [], [], [#include ]) + +dnl Crypto backend configuration. +AC_ARG_WITH([crypto_backend], + AS_HELP_STRING([--with-crypto_backend=BACKEND], [crypto backend (gcrypt/openssl/nss/kernel/nettle) [openssl]]), + [], [with_crypto_backend=openssl]) + +dnl Kernel crypto API backend needed for benchmark and tcrypt +AC_ARG_ENABLE([kernel_crypto], + AS_HELP_STRING([--disable-kernel_crypto], [disable kernel userspace crypto (no benchmark and tcrypt)]), + [], [enable_kernel_crypto=yes]) + +if test "x$enable_kernel_crypto" = "xyes"; then + AC_CHECK_HEADERS(linux/if_alg.h,, + [AC_MSG_ERROR([You need Linux kernel headers with userspace crypto interface. (Or use --disable-kernel_crypto.)])]) + AC_DEFINE(ENABLE_AF_ALG, 1, [Enable using of kernel userspace crypto]) +fi + +case $with_crypto_backend in + gcrypt) CONFIGURE_GCRYPT([]) ;; + openssl) CONFIGURE_OPENSSL([]) ;; + nss) CONFIGURE_NSS([]) ;; + kernel) CONFIGURE_KERNEL([]) ;; + nettle) CONFIGURE_NETTLE([]) ;; + *) AC_MSG_ERROR([Unknown crypto backend.]) ;; +esac +AM_CONDITIONAL(CRYPTO_BACKEND_GCRYPT, test "$with_crypto_backend" = "gcrypt") +AM_CONDITIONAL(CRYPTO_BACKEND_OPENSSL, test "$with_crypto_backend" = "openssl") +AM_CONDITIONAL(CRYPTO_BACKEND_NSS, test "$with_crypto_backend" = "nss") +AM_CONDITIONAL(CRYPTO_BACKEND_KERNEL, test "$with_crypto_backend" = "kernel") +AM_CONDITIONAL(CRYPTO_BACKEND_NETTLE, test "$with_crypto_backend" = "nettle") + +AM_CONDITIONAL(CRYPTO_INTERNAL_PBKDF2, test $use_internal_pbkdf2 = 1) +AC_DEFINE_UNQUOTED(USE_INTERNAL_PBKDF2, [$use_internal_pbkdf2], [Use internal PBKDF2]) + +dnl Argon2 implementation +AC_ARG_ENABLE([internal-argon2], + AS_HELP_STRING([--disable-internal-argon2], [disable internal implementation of Argon2 PBKDF]), + [], [enable_internal_argon2=yes]) + +AC_ARG_ENABLE([libargon2], + AS_HELP_STRING([--enable-libargon2], [enable external libargon2 (PHC) library (disables internal bundled version)])) + +if test "x$enable_libargon2" = "xyes" ; then + AC_CHECK_HEADERS(argon2.h,, + [AC_MSG_ERROR([You need libargon2 development library installed.])]) + AC_CHECK_DECL(Argon2_id,,[AC_MSG_ERROR([You need more recent Argon2 library with support for Argon2id.])], [#include ]) + PKG_CHECK_MODULES([LIBARGON2], [libargon2],,[LIBARGON2_LIBS="-largon2"]) + enable_internal_argon2=no +else + AC_MSG_WARN([Argon2 bundled (slow) reference implementation will be used, please consider to use system library with --enable-libargon2.]) + + AC_ARG_ENABLE([internal-sse-argon2], + AS_HELP_STRING([--enable-internal-sse-argon2], [enable internal SSE implementation of Argon2 PBKDF])) + + if test "x$enable_internal_sse_argon2" = "xyes"; then + AC_MSG_CHECKING(if Argon2 SSE optimization can be used) + AC_LINK_IFELSE([AC_LANG_PROGRAM([[ + #include + __m128i testfunc(__m128i *a, __m128i *b) { + return _mm_xor_si128(_mm_loadu_si128(a), _mm_loadu_si128(b)); + } + ]])],,[enable_internal_sse_argon2=no]) + AC_MSG_RESULT($enable_internal_sse_argon2) + fi +fi + +if test "x$enable_internal_argon2" = "xyes"; then + AC_DEFINE(USE_INTERNAL_ARGON2, 1, [Use internal Argon2]) +fi +AM_CONDITIONAL(CRYPTO_INTERNAL_ARGON2, test "x$enable_internal_argon2" = "xyes") +AM_CONDITIONAL(CRYPTO_INTERNAL_SSE_ARGON2, test "x$enable_internal_sse_argon2" = "xyes") + +dnl Link with blkid to check for other device types +AC_ARG_ENABLE([blkid], + AS_HELP_STRING([--disable-blkid], [disable use of blkid for device signature detection and wiping]), + [], [enable_blkid=yes]) + +if test "x$enable_blkid" = "xyes"; then + PKG_CHECK_MODULES([BLKID], [blkid],[AC_DEFINE([HAVE_BLKID], 1, [Define to 1 to use blkid for detection of disk signatures.])],[LIBBLKID_LIBS="-lblkid"]) + + AC_CHECK_HEADERS(blkid/blkid.h,,[AC_MSG_ERROR([You need blkid development library installed.])]) + AC_CHECK_DECL([blkid_do_wipe], + [ AC_DEFINE([HAVE_BLKID_WIPE], 1, [Define to 1 to use blkid_do_wipe.]) + enable_blkid_wipe=yes + ],, + [#include ]) + AC_CHECK_DECL([blkid_probe_step_back], + [ AC_DEFINE([HAVE_BLKID_STEP_BACK], 1, [Define to 1 to use blkid_probe_step_back.]) + enable_blkid_step_back=yes + ],, + [#include ]) + AC_CHECK_DECLS([ blkid_reset_probe, + blkid_probe_set_device, + blkid_probe_filter_superblocks_type, + blkid_do_safeprobe, + blkid_do_probe, + blkid_probe_lookup_value + ],, + [AC_MSG_ERROR([Can not compile with blkid support, disable it by --disable-blkid.])], + [#include ]) +fi +AM_CONDITIONAL(HAVE_BLKID, test "x$enable_blkid" = "xyes") +AM_CONDITIONAL(HAVE_BLKID_WIPE, test "x$enable_blkid_wipe" = "xyes") +AM_CONDITIONAL(HAVE_BLKID_STEP_BACK, test "x$enable_blkid_step_back" = "xyes") + +dnl Magic for cryptsetup.static build. +if test "x$enable_static_cryptsetup" = "xyes"; then + saved_PKG_CONFIG=$PKG_CONFIG + PKG_CONFIG="$PKG_CONFIG --static" + + LIBS="$saved_LIBS -static" + AC_CHECK_LIB(popt, poptGetContext,, + AC_MSG_ERROR([Cannot find static popt library.])) + + dnl Try to detect needed device-mapper static libraries, try pkg-config first. + LIBS="$saved_LIBS -static" + PKG_CHECK_MODULES([DEVMAPPER_STATIC], [devmapper >= 1.02.27],,[ + DEVMAPPER_STATIC_LIBS=$DEVMAPPER_LIBS + if test "x$enable_selinux" = "xyes"; then + AC_CHECK_LIB(sepol, sepol_bool_set) + AC_CHECK_LIB(selinux, is_selinux_enabled) + DEVMAPPER_STATIC_LIBS="$DEVMAPPER_STATIC_LIBS $LIBS" + fi + ]) + LIBS="$saved_LIBS $DEVMAPPER_STATIC_LIBS" + AC_CHECK_LIB(devmapper, dm_task_set_uuid,, + AC_MSG_ERROR([Cannot link with static device-mapper library.])) + + dnl Try to detect uuid static library. + LIBS="$saved_LIBS -static" + AC_CHECK_LIB(uuid, uuid_generate,, + AC_MSG_ERROR([Cannot find static uuid library.])) + + LIBS=$saved_LIBS + PKG_CONFIG=$saved_PKG_CONFIG +fi + +AC_MSG_CHECKING([for systemd tmpfiles config directory]) +PKG_CHECK_VAR([systemd_tmpfilesdir], [systemd], [tmpfilesdir], [], [systemd_tmpfilesdir=no]) +AC_MSG_RESULT([$systemd_tmpfilesdir]) + +AC_SUBST([DEVMAPPER_LIBS]) +AC_SUBST([DEVMAPPER_STATIC_LIBS]) + +AC_SUBST([PWQUALITY_LIBS]) +AC_SUBST([PWQUALITY_STATIC_LIBS]) + +AC_SUBST([PASSWDQC_LIBS]) + +AC_SUBST([CRYPTO_CFLAGS]) +AC_SUBST([CRYPTO_LIBS]) +AC_SUBST([CRYPTO_STATIC_LIBS]) + +AC_SUBST([JSON_C_LIBS]) +AC_SUBST([LIBARGON2_LIBS]) +AC_SUBST([BLKID_LIBS]) + +AC_SUBST([LIBCRYPTSETUP_VERSION]) +AC_SUBST([LIBCRYPTSETUP_VERSION_INFO]) + +dnl ========================================================================== +AC_ARG_ENABLE([dev-random], + AS_HELP_STRING([--enable-dev-random], [use /dev/random by default for key generation (otherwise use /dev/urandom)])) +if test "x$enable_dev_random" = "xyes"; then + default_rng=/dev/random +else + default_rng=/dev/urandom +fi +AC_DEFINE_UNQUOTED(DEFAULT_RNG, ["$default_rng"], [default RNG type for key generator]) + +dnl ========================================================================== +AC_DEFUN([CS_DEFINE], + [AC_DEFINE_UNQUOTED(DEFAULT_[]m4_translit([$1], [-a-z], [_A-Z]), [$2], [$3]) +]) + +AC_DEFUN([CS_STR_WITH], [AC_ARG_WITH([$1], + [AS_HELP_STRING(--with-[$1], [default $2 [$3]])], + [CS_DEFINE([$1], ["$withval"], [$2])], + [CS_DEFINE([$1], ["$3"], [$2])] +)]) + +AC_DEFUN([CS_NUM_WITH], [AC_ARG_WITH([$1], + [AS_HELP_STRING(--with-[$1], [default $2 [$3]])], + [CS_DEFINE([$1], [$withval], [$2])], + [CS_DEFINE([$1], [$3], [$2])] +)]) + +AC_DEFUN([CS_ABSPATH], [ + case "$1" in + /*) ;; + *) AC_MSG_ERROR([$2 argument must be an absolute path.]);; + esac +]) + +dnl ========================================================================== +CS_STR_WITH([plain-hash], [password hashing function for plain mode], [ripemd160]) +CS_STR_WITH([plain-cipher], [cipher for plain mode], [aes]) +CS_STR_WITH([plain-mode], [cipher mode for plain mode], [cbc-essiv:sha256]) +CS_NUM_WITH([plain-keybits],[key length in bits for plain mode], [256]) + +CS_STR_WITH([luks1-hash], [hash function for LUKS1 header], [sha256]) +CS_STR_WITH([luks1-cipher], [cipher for LUKS1], [aes]) +CS_STR_WITH([luks1-mode], [cipher mode for LUKS1], [xts-plain64]) +CS_NUM_WITH([luks1-keybits],[key length in bits for LUKS1], [256]) + +AC_ARG_ENABLE([luks_adjust_xts_keysize], AS_HELP_STRING([--disable-luks-adjust-xts-keysize], + [XTS mode requires two keys, double default LUKS keysize if needed]), + [], [enable_luks_adjust_xts_keysize=yes]) +if test "x$enable_luks_adjust_xts_keysize" = "xyes"; then + AC_DEFINE(ENABLE_LUKS_ADJUST_XTS_KEYSIZE, 1, [XTS mode - double default LUKS keysize if needed]) +fi + +CS_STR_WITH([luks2-pbkdf], [Default PBKDF algorithm (pbkdf2 or argon2i/argon2id) for LUKS2], [argon2i]) +CS_NUM_WITH([luks1-iter-time], [PBKDF2 iteration time for LUKS1 (in ms)], [2000]) +CS_NUM_WITH([luks2-iter-time], [Argon2 PBKDF iteration time for LUKS2 (in ms)], [2000]) +CS_NUM_WITH([luks2-memory-kb], [Argon2 PBKDF memory cost for LUKS2 (in kB)], [1048576]) +CS_NUM_WITH([luks2-parallel-threads],[Argon2 PBKDF max parallel cost for LUKS2 (if CPUs available)], [4]) + +CS_STR_WITH([luks2-keyslot-cipher], [fallback cipher for LUKS2 keyslot (if data encryption is incompatible)], [aes-xts-plain64]) +CS_NUM_WITH([luks2-keyslot-keybits],[fallback key size for LUKS2 keyslot (if data encryption is incompatible)], [512]) + +CS_STR_WITH([loopaes-cipher], [cipher for loop-AES mode], [aes]) +CS_NUM_WITH([loopaes-keybits],[key length in bits for loop-AES mode], [256]) + +CS_NUM_WITH([keyfile-size-maxkb],[maximum keyfile size (in KiB)], [8192]) +CS_NUM_WITH([passphrase-size-max],[maximum keyfile size (in characters)], [512]) + +CS_STR_WITH([verity-hash], [hash function for verity mode], [sha256]) +CS_NUM_WITH([verity-data-block], [data block size for verity mode], [4096]) +CS_NUM_WITH([verity-hash-block], [hash block size for verity mode], [4096]) +CS_NUM_WITH([verity-salt-size], [salt size for verity mode], [32]) +CS_NUM_WITH([verity-fec-roots], [parity bytes for verity FEC], [2]) + +CS_STR_WITH([tmpfilesdir], [override default path to directory with systemd temporary files], []) +test -z "$with_tmpfilesdir" && with_tmpfilesdir=$systemd_tmpfilesdir +test "x$with_tmpfilesdir" = "xno" || { + CS_ABSPATH([${with_tmpfilesdir}],[with-tmpfilesdir]) + DEFAULT_TMPFILESDIR=$with_tmpfilesdir + AC_SUBST(DEFAULT_TMPFILESDIR) +} +AM_CONDITIONAL(CRYPTSETUP_TMPFILE, test -n "$DEFAULT_TMPFILESDIR") + +CS_STR_WITH([luks2-lock-path], [path to directory for LUKSv2 locks], [/run/cryptsetup]) +test -z "$with_luks2_lock_path" && with_luks2_lock_path=/run/cryptsetup +CS_ABSPATH([${with_luks2_lock_path}],[with-luks2-lock-path]) +DEFAULT_LUKS2_LOCK_PATH=$with_luks2_lock_path +AC_SUBST(DEFAULT_LUKS2_LOCK_PATH) + +CS_NUM_WITH([luks2-lock-dir-perms], [default luks2 locking directory permissions], [0700]) +test -z "$with_luks2_lock_dir_perms" && with_luks2_lock_dir_perms=0700 +DEFAULT_LUKS2_LOCK_DIR_PERMS=$with_luks2_lock_dir_perms +AC_SUBST(DEFAULT_LUKS2_LOCK_DIR_PERMS) + +dnl Override default LUKS format version (for cryptsetup or cryptsetup-reencrypt format actions only). +AC_ARG_WITH([default_luks_format], + AS_HELP_STRING([--with-default-luks-format=FORMAT], [default LUKS format version (LUKS1/LUKS2) [LUKS2]]), + [], [with_default_luks_format=LUKS2]) + +case $with_default_luks_format in + LUKS1) default_luks=CRYPT_LUKS1 ;; + LUKS2) default_luks=CRYPT_LUKS2 ;; + *) AC_MSG_ERROR([Unknown default LUKS format. Use LUKS1 or LUKS2 only.]) ;; +esac +AC_DEFINE_UNQUOTED([DEFAULT_LUKS_FORMAT], [$default_luks], [default LUKS format version]) + +dnl ========================================================================== + +AC_CONFIG_FILES([ Makefile +lib/libcryptsetup.pc +po/Makefile.in +scripts/cryptsetup.conf +tests/Makefile +]) +AC_OUTPUT diff --git a/depcomp b/depcomp new file mode 100755 index 0000000..65cbf70 --- /dev/null +++ b/depcomp @@ -0,0 +1,791 @@ +#! /bin/sh +# depcomp - compile a program generating dependencies as side-effects + +scriptversion=2018-03-07.03; # UTC + +# Copyright (C) 1999-2018 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Originally written by Alexandre Oliva . + +case $1 in + '') + echo "$0: No command. Try '$0 --help' for more information." 1>&2 + exit 1; + ;; + -h | --h*) + cat <<\EOF +Usage: depcomp [--help] [--version] PROGRAM [ARGS] + +Run PROGRAMS ARGS to compile a file, generating dependencies +as side-effects. + +Environment variables: + depmode Dependency tracking mode. + source Source file read by 'PROGRAMS ARGS'. + object Object file output by 'PROGRAMS ARGS'. + DEPDIR directory where to store dependencies. + depfile Dependency file to output. + tmpdepfile Temporary file to use when outputting dependencies. + libtool Whether libtool is used (yes/no). + +Report bugs to . +EOF + exit $? + ;; + -v | --v*) + echo "depcomp $scriptversion" + exit $? + ;; +esac + +# Get the directory component of the given path, and save it in the +# global variables '$dir'. Note that this directory component will +# be either empty or ending with a '/' character. This is deliberate. +set_dir_from () +{ + case $1 in + */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; + *) dir=;; + esac +} + +# Get the suffix-stripped basename of the given path, and save it the +# global variable '$base'. +set_base_from () +{ + base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` +} + +# If no dependency file was actually created by the compiler invocation, +# we still have to create a dummy depfile, to avoid errors with the +# Makefile "include basename.Plo" scheme. +make_dummy_depfile () +{ + echo "#dummy" > "$depfile" +} + +# Factor out some common post-processing of the generated depfile. +# Requires the auxiliary global variable '$tmpdepfile' to be set. +aix_post_process_depfile () +{ + # If the compiler actually managed to produce a dependency file, + # post-process it. + if test -f "$tmpdepfile"; then + # Each line is of the form 'foo.o: dependency.h'. + # Do two passes, one to just change these to + # $object: dependency.h + # and one to simply output + # dependency.h: + # which is needed to avoid the deleted-header problem. + { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" + sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" + } > "$depfile" + rm -f "$tmpdepfile" + else + make_dummy_depfile + fi +} + +# A tabulation character. +tab=' ' +# A newline character. +nl=' +' +# Character ranges might be problematic outside the C locale. +# These definitions help. +upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ +lower=abcdefghijklmnopqrstuvwxyz +digits=0123456789 +alpha=${upper}${lower} + +if test -z "$depmode" || test -z "$source" || test -z "$object"; then + echo "depcomp: Variables source, object and depmode must be set" 1>&2 + exit 1 +fi + +# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. +depfile=${depfile-`echo "$object" | + sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} +tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} + +rm -f "$tmpdepfile" + +# Avoid interferences from the environment. +gccflag= dashmflag= + +# Some modes work just like other modes, but use different flags. We +# parameterize here, but still list the modes in the big case below, +# to make depend.m4 easier to write. Note that we *cannot* use a case +# here, because this file can only contain one case statement. +if test "$depmode" = hp; then + # HP compiler uses -M and no extra arg. + gccflag=-M + depmode=gcc +fi + +if test "$depmode" = dashXmstdout; then + # This is just like dashmstdout with a different argument. + dashmflag=-xM + depmode=dashmstdout +fi + +cygpath_u="cygpath -u -f -" +if test "$depmode" = msvcmsys; then + # This is just like msvisualcpp but w/o cygpath translation. + # Just convert the backslash-escaped backslashes to single forward + # slashes to satisfy depend.m4 + cygpath_u='sed s,\\\\,/,g' + depmode=msvisualcpp +fi + +if test "$depmode" = msvc7msys; then + # This is just like msvc7 but w/o cygpath translation. + # Just convert the backslash-escaped backslashes to single forward + # slashes to satisfy depend.m4 + cygpath_u='sed s,\\\\,/,g' + depmode=msvc7 +fi + +if test "$depmode" = xlc; then + # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. + gccflag=-qmakedep=gcc,-MF + depmode=gcc +fi + +case "$depmode" in +gcc3) +## gcc 3 implements dependency tracking that does exactly what +## we want. Yay! Note: for some reason libtool 1.4 doesn't like +## it if -MD -MP comes after the -MF stuff. Hmm. +## Unfortunately, FreeBSD c89 acceptance of flags depends upon +## the command line argument order; so add the flags where they +## appear in depend2.am. Note that the slowdown incurred here +## affects only configure: in makefiles, %FASTDEP% shortcuts this. + for arg + do + case $arg in + -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; + *) set fnord "$@" "$arg" ;; + esac + shift # fnord + shift # $arg + done + "$@" + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile" + exit $stat + fi + mv "$tmpdepfile" "$depfile" + ;; + +gcc) +## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. +## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. +## (see the conditional assignment to $gccflag above). +## There are various ways to get dependency output from gcc. Here's +## why we pick this rather obscure method: +## - Don't want to use -MD because we'd like the dependencies to end +## up in a subdir. Having to rename by hand is ugly. +## (We might end up doing this anyway to support other compilers.) +## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like +## -MM, not -M (despite what the docs say). Also, it might not be +## supported by the other compilers which use the 'gcc' depmode. +## - Using -M directly means running the compiler twice (even worse +## than renaming). + if test -z "$gccflag"; then + gccflag=-MD, + fi + "$@" -Wp,"$gccflag$tmpdepfile" + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + echo "$object : \\" > "$depfile" + # The second -e expression handles DOS-style file names with drive + # letters. + sed -e 's/^[^:]*: / /' \ + -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" +## This next piece of magic avoids the "deleted header file" problem. +## The problem is that when a header file which appears in a .P file +## is deleted, the dependency causes make to die (because there is +## typically no way to rebuild the header). We avoid this by adding +## dummy dependencies for each header file. Too bad gcc doesn't do +## this for us directly. +## Some versions of gcc put a space before the ':'. On the theory +## that the space means something, we add a space to the output as +## well. hp depmode also adds that space, but also prefixes the VPATH +## to the object. Take care to not repeat it in the output. +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + tr ' ' "$nl" < "$tmpdepfile" \ + | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ + | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +hp) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +sgi) + if test "$libtool" = yes; then + "$@" "-Wp,-MDupdate,$tmpdepfile" + else + "$@" -MDupdate "$tmpdepfile" + fi + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + + if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files + echo "$object : \\" > "$depfile" + # Clip off the initial element (the dependent). Don't try to be + # clever and replace this with sed code, as IRIX sed won't handle + # lines with more than a fixed number of characters (4096 in + # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; + # the IRIX cc adds comments like '#:fec' to the end of the + # dependency line. + tr ' ' "$nl" < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \ + | tr "$nl" ' ' >> "$depfile" + echo >> "$depfile" + # The second pass generates a dummy entry for each header file. + tr ' ' "$nl" < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ + >> "$depfile" + else + make_dummy_depfile + fi + rm -f "$tmpdepfile" + ;; + +xlc) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +aix) + # The C for AIX Compiler uses -M and outputs the dependencies + # in a .u file. In older versions, this file always lives in the + # current directory. Also, the AIX compiler puts '$object:' at the + # start of each line; $object doesn't have directory information. + # Version 6 uses the directory in both cases. + set_dir_from "$object" + set_base_from "$object" + if test "$libtool" = yes; then + tmpdepfile1=$dir$base.u + tmpdepfile2=$base.u + tmpdepfile3=$dir.libs/$base.u + "$@" -Wc,-M + else + tmpdepfile1=$dir$base.u + tmpdepfile2=$dir$base.u + tmpdepfile3=$dir$base.u + "$@" -M + fi + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + do + test -f "$tmpdepfile" && break + done + aix_post_process_depfile + ;; + +tcc) + # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 + # FIXME: That version still under development at the moment of writing. + # Make that this statement remains true also for stable, released + # versions. + # It will wrap lines (doesn't matter whether long or short) with a + # trailing '\', as in: + # + # foo.o : \ + # foo.c \ + # foo.h \ + # + # It will put a trailing '\' even on the last line, and will use leading + # spaces rather than leading tabs (at least since its commit 0394caf7 + # "Emit spaces for -MD"). + "$@" -MD -MF "$tmpdepfile" + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. + # We have to change lines of the first kind to '$object: \'. + sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" + # And for each line of the second kind, we have to emit a 'dep.h:' + # dummy dependency, to avoid the deleted-header problem. + sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" + rm -f "$tmpdepfile" + ;; + +## The order of this option in the case statement is important, since the +## shell code in configure will try each of these formats in the order +## listed in this file. A plain '-MD' option would be understood by many +## compilers, so we must ensure this comes after the gcc and icc options. +pgcc) + # Portland's C compiler understands '-MD'. + # Will always output deps to 'file.d' where file is the root name of the + # source file under compilation, even if file resides in a subdirectory. + # The object file name does not affect the name of the '.d' file. + # pgcc 10.2 will output + # foo.o: sub/foo.c sub/foo.h + # and will wrap long lines using '\' : + # foo.o: sub/foo.c ... \ + # sub/foo.h ... \ + # ... + set_dir_from "$object" + # Use the source, not the object, to determine the base name, since + # that's sadly what pgcc will do too. + set_base_from "$source" + tmpdepfile=$base.d + + # For projects that build the same source file twice into different object + # files, the pgcc approach of using the *source* file root name can cause + # problems in parallel builds. Use a locking strategy to avoid stomping on + # the same $tmpdepfile. + lockdir=$base.d-lock + trap " + echo '$0: caught signal, cleaning up...' >&2 + rmdir '$lockdir' + exit 1 + " 1 2 13 15 + numtries=100 + i=$numtries + while test $i -gt 0; do + # mkdir is a portable test-and-set. + if mkdir "$lockdir" 2>/dev/null; then + # This process acquired the lock. + "$@" -MD + stat=$? + # Release the lock. + rmdir "$lockdir" + break + else + # If the lock is being held by a different process, wait + # until the winning process is done or we timeout. + while test -d "$lockdir" && test $i -gt 0; do + sleep 1 + i=`expr $i - 1` + done + fi + i=`expr $i - 1` + done + trap - 1 2 13 15 + if test $i -le 0; then + echo "$0: failed to acquire lock after $numtries attempts" >&2 + echo "$0: check lockdir '$lockdir'" >&2 + exit 1 + fi + + if test $stat -ne 0; then + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + # Each line is of the form `foo.o: dependent.h', + # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. + # Do two passes, one to just change these to + # `$object: dependent.h' and one to simply `dependent.h:'. + sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" + # Some versions of the HPUX 10.20 sed can't process this invocation + # correctly. Breaking it into two sed invocations is a workaround. + sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \ + | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +hp2) + # The "hp" stanza above does not work with aCC (C++) and HP's ia64 + # compilers, which have integrated preprocessors. The correct option + # to use with these is +Maked; it writes dependencies to a file named + # 'foo.d', which lands next to the object file, wherever that + # happens to be. + # Much of this is similar to the tru64 case; see comments there. + set_dir_from "$object" + set_base_from "$object" + if test "$libtool" = yes; then + tmpdepfile1=$dir$base.d + tmpdepfile2=$dir.libs/$base.d + "$@" -Wc,+Maked + else + tmpdepfile1=$dir$base.d + tmpdepfile2=$dir$base.d + "$@" +Maked + fi + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile1" "$tmpdepfile2" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" + do + test -f "$tmpdepfile" && break + done + if test -f "$tmpdepfile"; then + sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" + # Add 'dependent.h:' lines. + sed -ne '2,${ + s/^ *// + s/ \\*$// + s/$/:/ + p + }' "$tmpdepfile" >> "$depfile" + else + make_dummy_depfile + fi + rm -f "$tmpdepfile" "$tmpdepfile2" + ;; + +tru64) + # The Tru64 compiler uses -MD to generate dependencies as a side + # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. + # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put + # dependencies in 'foo.d' instead, so we check for that too. + # Subdirectories are respected. + set_dir_from "$object" + set_base_from "$object" + + if test "$libtool" = yes; then + # Libtool generates 2 separate objects for the 2 libraries. These + # two compilations output dependencies in $dir.libs/$base.o.d and + # in $dir$base.o.d. We have to check for both files, because + # one of the two compilations can be disabled. We should prefer + # $dir$base.o.d over $dir.libs/$base.o.d because the latter is + # automatically cleaned when .libs/ is deleted, while ignoring + # the former would cause a distcleancheck panic. + tmpdepfile1=$dir$base.o.d # libtool 1.5 + tmpdepfile2=$dir.libs/$base.o.d # Likewise. + tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 + "$@" -Wc,-MD + else + tmpdepfile1=$dir$base.d + tmpdepfile2=$dir$base.d + tmpdepfile3=$dir$base.d + "$@" -MD + fi + + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + do + test -f "$tmpdepfile" && break + done + # Same post-processing that is required for AIX mode. + aix_post_process_depfile + ;; + +msvc7) + if test "$libtool" = yes; then + showIncludes=-Wc,-showIncludes + else + showIncludes=-showIncludes + fi + "$@" $showIncludes > "$tmpdepfile" + stat=$? + grep -v '^Note: including file: ' "$tmpdepfile" + if test $stat -ne 0; then + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + echo "$object : \\" > "$depfile" + # The first sed program below extracts the file names and escapes + # backslashes for cygpath. The second sed program outputs the file + # name when reading, but also accumulates all include files in the + # hold buffer in order to output them again at the end. This only + # works with sed implementations that can handle large buffers. + sed < "$tmpdepfile" -n ' +/^Note: including file: *\(.*\)/ { + s//\1/ + s/\\/\\\\/g + p +}' | $cygpath_u | sort -u | sed -n ' +s/ /\\ /g +s/\(.*\)/'"$tab"'\1 \\/p +s/.\(.*\) \\/\1:/ +H +$ { + s/.*/'"$tab"'/ + G + p +}' >> "$depfile" + echo >> "$depfile" # make sure the fragment doesn't end with a backslash + rm -f "$tmpdepfile" + ;; + +msvc7msys) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +#nosideeffect) + # This comment above is used by automake to tell side-effect + # dependency tracking mechanisms from slower ones. + +dashmstdout) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout, regardless of -o. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + + # Remove '-o $object'. + IFS=" " + for arg + do + case $arg in + -o) + shift + ;; + $object) + shift + ;; + *) + set fnord "$@" "$arg" + shift # fnord + shift # $arg + ;; + esac + done + + test -z "$dashmflag" && dashmflag=-M + # Require at least two characters before searching for ':' + # in the target name. This is to cope with DOS-style filenames: + # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. + "$@" $dashmflag | + sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile" + rm -f "$depfile" + cat < "$tmpdepfile" > "$depfile" + # Some versions of the HPUX 10.20 sed can't process this sed invocation + # correctly. Breaking it into two sed invocations is a workaround. + tr ' ' "$nl" < "$tmpdepfile" \ + | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ + | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +dashXmstdout) + # This case only exists to satisfy depend.m4. It is never actually + # run, as this mode is specially recognized in the preamble. + exit 1 + ;; + +makedepend) + "$@" || exit $? + # Remove any Libtool call + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + # X makedepend + shift + cleared=no eat=no + for arg + do + case $cleared in + no) + set ""; shift + cleared=yes ;; + esac + if test $eat = yes; then + eat=no + continue + fi + case "$arg" in + -D*|-I*) + set fnord "$@" "$arg"; shift ;; + # Strip any option that makedepend may not understand. Remove + # the object too, otherwise makedepend will parse it as a source file. + -arch) + eat=yes ;; + -*|$object) + ;; + *) + set fnord "$@" "$arg"; shift ;; + esac + done + obj_suffix=`echo "$object" | sed 's/^.*\././'` + touch "$tmpdepfile" + ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" + rm -f "$depfile" + # makedepend may prepend the VPATH from the source file name to the object. + # No need to regex-escape $object, excess matching of '.' is harmless. + sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" + # Some versions of the HPUX 10.20 sed can't process the last invocation + # correctly. Breaking it into two sed invocations is a workaround. + sed '1,2d' "$tmpdepfile" \ + | tr ' ' "$nl" \ + | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ + | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" "$tmpdepfile".bak + ;; + +cpp) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + + # Remove '-o $object'. + IFS=" " + for arg + do + case $arg in + -o) + shift + ;; + $object) + shift + ;; + *) + set fnord "$@" "$arg" + shift # fnord + shift # $arg + ;; + esac + done + + "$@" -E \ + | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ + -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ + | sed '$ s: \\$::' > "$tmpdepfile" + rm -f "$depfile" + echo "$object : \\" > "$depfile" + cat < "$tmpdepfile" >> "$depfile" + sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +msvisualcpp) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + + IFS=" " + for arg + do + case "$arg" in + -o) + shift + ;; + $object) + shift + ;; + "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") + set fnord "$@" + shift + shift + ;; + *) + set fnord "$@" "$arg" + shift + shift + ;; + esac + done + "$@" -E 2>/dev/null | + sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" + rm -f "$depfile" + echo "$object : \\" > "$depfile" + sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" + echo "$tab" >> "$depfile" + sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +msvcmsys) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +none) + exec "$@" + ;; + +*) + echo "Unknown depmode $depmode" 1>&2 + exit 1 + ;; +esac + +exit 0 + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'before-save-hook 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC0" +# time-stamp-end: "; # UTC" +# End: diff --git a/docs/ChangeLog.old b/docs/ChangeLog.old new file mode 100644 index 0000000..7a4027c --- /dev/null +++ b/docs/ChangeLog.old @@ -0,0 +1,887 @@ +2012-12-21 Milan Broz + * Since version 1.6 This file is no longer maintained. + * See version control log http://code.google.com/p/cryptsetup/source/list + +2012-10-11 Milan Broz + * Added keyslot checker (by Arno Wagner). + * Version 1.5.1. + +2012-09-11 Milan Broz + * Add crypt_keyslot_area() API call. + +2012-08-27 Milan Broz + * Optimize seek to keyfile-offset (Issue #135, thx to dreisner). + * Fix luksHeaderBackup for very old v1.0 unaligned LUKS headers. + +2012-08-12 Milan Broz + * Allocate loop device late (only when real block device needed). + * Rework underlying device/file access functions. + * Create hash image if doesn't exist in veritysetup format. + * Provide better error message if running as non-root user (device-mapper, loop). + +2012-07-10 Milan Broz + * Version 1.5.0. + +2012-06-25 Milan Broz + * Add --device-size option for reencryption tool. + * Switch to use unit suffix for --reduce-device-size option. + * Remove open device debugging feature (no longer needed). + * Fix library name for FIPS check. + +2012-06-20 Milan Broz + * Version 1.5.0-rc2. + +2012-06-18 Milan Broz + * Introduce cryptsetup-reencrypt - experimental offline LUKS reencryption tool. + * Fix luks-header-from-active script (do not use LUKS header on-disk, add UUID). + * Add --test-passphrase option for luksOpen (check passphrase only). + +2012-06-11 Milan Broz + * Introduce veritysetup for dm-verity target management. + * Version 1.5.0-rc1. + +2012-06-10 Milan Broz + * Both data and header device can now be a file. + * Loop is automatically allocated in crypt_set_data_device(). + * Require only up to last keyslot area for header device (ignore data offset). + * Fix header backup and restore to work on files with large data offset. + +2012-05-27 Milan Broz + * Fix readonly activation if underlying device is readonly (1.4.0). + * Include stddef.h in libdevmapper.h (size_t definition). + * Version 1.4.3. + +2012-05-21 Milan Broz + * Add --enable-fips for linking with fipscheck library. + * Initialize binary and library selfcheck if running in FIPS mode. + * Use FIPS RNG in FIPS mode for KEY and SALT (only gcrypt backend supported). + +2012-05-09 Milan Broz + * Fix keyslot removal (wipe keyslot) for device with 4k hw block (1.4.0). + * Allow empty cipher (cipher_null) for testing. + +2012-05-02 Milan Broz + * Fix loop mapping on readonly file. + * Relax --shared test, allow mapping even for overlapping segments. + * Support shared flag for LUKS devices (dangerous). + * Switch on retry on device remove for libdevmapper. + * Allow "private" activation (skip some udev global rules) flag. + +2012-04-09 Milan Broz + * Fix header check to support old (cryptsetup 1.0.0) header alignment. (1.4.0) + * Version 1.4.2. + +2012-03-16 Milan Broz + * Add --keyfile-offset and --new-keyfile-offset parameters to API and CLI. + * Add repair command and crypt_repair() for known LUKS metadata problems repair. + * Allow to specify --align-payload only for luksFormat. + +2012-03-16 Milan Broz + * Unify password verification option. + * Support password verification with quiet flag if possible. (1.2.0) + * Fix retry if entered passphrases (with verify option) do not match. + * Support UUID= format for device specification. + +2012-02-11 Milan Broz + * Add --master-key-file option to luksOpen (open using volume key). + +2012-01-12 Milan Broz + * Fix use of empty keyfile. + +2011-11-13 Milan Broz + * Fix error message for luksClose and detached LUKS header. + * Allow --header for status command to get full info with detached header. + +2011-11-09 Milan Broz + * Version 1.4.1. + +2011-11-05 Milan Broz + * Merge pycryptsetup (Python libcryptsetup bindings). + * Fix stupid typo in set_iteration_time API call. + * Fix cryptsetup status output if parameter is device path. + +2011-10-27 Milan Broz + * Fix crypt_get_volume_key_size() for plain device. + * Fix FSF address in license text. + +2011-10-25 Milan Broz + * Print informative message in isLuks only in verbose mode. + * Version 1.4.0. + +2011-10-10 Milan Broz + * Version 1.4.0-rc1. + +2011-10-05 Milan Broz + * Support Nettle 2.4 crypto backend (for ripemd160). + * If device is not rotational, do not use Gutmann wipe method. + * Add crypt_last_error() API call. + * Fix luksKillSLot exit code if slot is inactive or invalid. + * Fix exit code if passphrases do not match in luksAddKey. + * Add LUKS on-disk format description into package. + +2011-09-22 Milan Broz + * Support key-slot option for luksOpen (use only explicit keyslot). + +2011-08-22 Milan Broz + * Add more paranoid checks for LUKS header and keyslot attributes. + * Fix crypt_load to properly check device size. + * Use new /dev/loop-control (kernel 3.1) if possible. + * Enhance check of device size before writing LUKS header. + * Do not allow context format of already formatted device. + +2011-07-25 Milan Broz + * Remove hash/hmac restart from crypto backend and make it part of hash/hmac final. + * Improve check for invalid offset and size values. + +2011-07-19 Milan Broz + * Revert default initialisation of volume key in crypt_init_by_name(). + * Do not allow key retrieval while suspended (key could be wiped). + * Do not allow suspend for non-LUKS devices. + * Support retries and timeout parameters for luksSuspend. + * Add --header option for detached metadata (on-disk LUKS header) device. + * Add crypt_init_by_name_and_header() and crypt_set_data_device() to API. + * Allow different data offset setting for detached header. + +2011-07-07 Milan Broz + * Remove old API functions (all functions using crypt_options). + * Add --enable-discards option to allow discards/TRIM requests. + * Add crypt_get_iv_offset() function to API. + +2011-07-01 Milan Broz + * Add --shared option for creating non-overlapping crypt segments. + * Add shared flag to libcryptsetup api. + * Fix plain crypt format parameters to include size option (API change). + +2011-06-08 Milan Broz + * Fix return code for status command when device doesn't exists. + +2011-05-24 Milan Broz + * Version 1.3.1. + +2011-05-17 Milan Broz + * Fix keyfile=- processing in create command (1.3.0). + * Simplify device path status check. + +2011-05-03 Milan Broz + * Do not ignore size argument for create command (1.2.0). + +2011-04-18 Milan Broz + * Fix error paths in blockwise code and lseek_write call. + * Add Nettle crypto backend support. + +2011-04-05 Milan Broz + * Version 1.3.0. + +2011-03-22 Milan Broz + * Also support --skip and --hash option for loopaesOpen. + * Fix return code when passphrase is read from pipe. + * Document cryptsetup exit codes. + +2011-03-18 Milan Broz + * Respect maximum keyfile size parameter. + * Introduce maximum default keyfile size, add configure option. + * Require the whole key read from keyfile in create command (broken in 1.2.0). + * Fix offset option for loopaesOpen. + * Lock memory also in luksDump command. + * Version 1.3.0-rc2. + +2011-03-14 Milan Broz + * Version 1.3.0-rc1. + +2011-03-11 Milan Broz + * Add loop manipulation code and support mapping of images in file. + * Add backing device loop info into status message. + * Add luksChangeKey command. + +2011-03-05 Milan Broz + * Add exception to COPYING for binary distribution linked with OpenSSL library. + * Set secure data flag (wipe all ioctl buffers) if devmapper library supports it. + +2011-01-29 Milan Broz + * Fix mapping removal if device disappeared but node still exists. + * Fix luksAddKey return code if master key is used. + +2011-01-25 Milan Broz + * Add loop-AES handling (loopaesOpen and loopaesClose commands). + (requires kernel 2.6.38 and above) + +2011-01-05 Milan Broz + * Fix static build (--disable-static-cryptsetup now works properly). + +2010-12-30 Milan Broz + * Add compile time crypto backends implementation + (gcrypt, OpenSSL, NSS and userspace Linux kernel crypto api). + * Currently NSS is lacking ripemd160, cannot provide full plain compatibility. + * Use --with-crypto_backend=[gcrypt|openssl|nss|kernel] to configure. + +2010-12-20 Milan Broz + * Version 1.2.0. + +2010-11-25 Milan Broz + * Fix crypt_activate_by_keyfile() to work with PLAIN devices. + * Fix create command to properly handle keyfile size. + +2010-11-16 Milan Broz + * Version 1.2.0-rc1. + +2010-11-13 Milan Broz + * Fix password callback call. + * Fix default plain password entry from terminal in activate_by_passphrase. + * Add --dump-master-key option for luksDump to allow volume key dump. + * Allow to activate by internally cached volume key + (format/activate without keyslots active - used for temporary devices). + * Initialize volume key from active device in crypt_init_by_name() + * Fix cryptsetup binary exitcodes. + * Increase library version (still binary compatible with 1.1.x release). + +2010-11-01 Milan Broz + * No longer support luksDelKey, reload and --non-exclusive. + * Remove some obsolete info from man page. + * Add crypt_get_type(), crypt_resize(), crypt_keyslot_max() + and crypt_get_active_device() to API. + * Rewrite all implementations in cryptsetup to new API. + * Fix luksRemoveKey to behave as documented (do not ask + for remaining keyslot passphrase). + * Add more regression tests for commands. + * Disallow mapping of device which is already in use (mapped or mounted). + * Disallow luksFormat on device in use. + +2010-10-27 Milan Broz + * Rewrite cryptsetup luksFormat, luksOpen, luksAddKey to use new API + to allow adding new features. + * Implement --use-random and --use-urandom for luksFormat to allow + setting of RNG for volume key generator. + * Add crypt_set_rng_type() and crypt_get_rng_type() to API. + * Add crypt_set_uuid() to API. + * Allow UUID setting in luksFormat and luksUUID (--uuid parameter). + * Add --keyfile-size and --new-keyfile-size (in bytes) size and disallow overloading + of --key-size for limiting keyfile reads. + * Fix luksFormat to properly use key file with --master-key-file switch. + * Fix possible double free when handling master key file. + +2010-10-17 Milan Broz + * Add crypt_get_device_name() to API (get underlying device name). + * Change detection for static libraries. + * Fix pkg-config use in automake scripts. + * Remove --disable-shared-library switch and handle static library build + by common libtool logic (using --enable-static). + * Add --enable-static-cryptsetup option to build cryptsetup.static binary + together with shared build. + +2010-08-05 Milan Broz + * Wipe iteration and salt after KillSlot in LUKS header. + * Rewrite file differ test to C (and fix it to really work). + * Switch to 1MiB default alignment of data. + For more info see https://bugzilla.redhat.com/show_bug.cgi?id=621684 + * Do not query non-existent device twice (cryptsetup status /dev/nonexistent). + * Check if requested hash is supported before writing LUKS header. + +2010-07-28 Arno Wagner + * Add FAQ (Frequently Asked Questions) file to distribution. + +2010-07-03 Milan Broz + * Fix udev support for old libdevmapper with not compatible definition. + * Version 1.1.3. + +2010-06-01 Milan Broz + * Fix device alignment ioctl calls parameters. + * Fix activate_by_* API calls to handle NULL device name as documented. + +2010-05-30 Milan Broz + * Version 1.1.2. + +2010-05-27 Milan Broz + * Fix luksFormat/luksOpen reading passphrase from stdin and "-" keyfile. + * Support --key-file/-d option for luksFormat. + * Fix description of --key-file and add --verbose and --debug options to man page. + * Add verbose log level and move unlocking message there. + * Remove device even if underlying device disappeared. + * Fix (deprecated) reload device command to accept new device argument. + +2010-05-23 Milan Broz + * Fix luksClose operation for stacked DM devices. + * Version 1.1.1. + +2010-05-03 Milan Broz + * Fix automatic dm-crypt module loading. + * Escape hyphens in man page. + * Version 1.1.1-rc2. + +2010-04-30 Milan Broz + * Try to use pkgconfig for device mapper library. + * Detect old dm-crypt module and disable LUKS suspend/resume. + * Fix apitest to work on older systems. + * Allow no hash specification in plain device constructor. + * Fix luksOpen reading of passphrase on stdin (if "-" keyfile specified). + * Fix isLuks to initialise crypto backend (blkid instead is suggested anyway). + * Version 1.1.1-rc1. + +2010-04-12 Milan Broz + * Fix package config to use proper package version. + * Avoid class C++ keyword in library header. + * Detect and use devmapper udev support if available (disable by --disable-udev). + +2010-04-06 Milan Broz + * Prefer some device paths in status display. + * Support device topology detectionfor data alignment. + +2010-02-25 Milan Broz + * Do not verify unlocking passphrase in luksAddKey command. + * Properly initialise crypto backend in header backup/restore commands. + +2010-01-17 Milan Broz + * If gcrypt compiled with capabilities, document workaround for cryptsetup (see lib/gcrypt.c). + * Version 1.1.0. + +2010-01-10 Milan Broz + * Fix initialisation of gcrypt during luksFormat. + * Convert hash name to lower case in header (fix sha1 backward compatible header) + * Check for minimum required gcrypt version. + +2009-12-30 Milan Broz + * Fix key slot iteration count calculation (small -i value was the same as default). + * The slot and key digest iteration minimum is now 1000. + * The key digest iteration # is calculated from iteration time (approx 1/8 of that). + * Version 1.1.0-rc4. + +2009-12-11 Milan Broz + * Fix error handling during reading passhrase. + +2009-12-01 Milan Broz + * Allow changes of default compiled-in cipher parameters through configure. + * Switch default key size for LUKS to 256bits. + * Switch default plain mode to aes-cbc-essiv:sha256 (default is backward incompatible!). + +2009-11-14 Milan Broz + * Add CRYPT_ prefix to enum defined in libcryptsetup.h. + * Fix status call to fail when running as non-root user. + * Check in configure if selinux libraries are required in static version. + * Add temporary debug code to find processes locking internal device. + * Simplify build system, use autopoint and clean gettext processing. + * Use proper NLS macros and detection (so the message translation works again). + * Version 1.1.0-rc3. + +2009-09-30 Milan Broz + * Fix exported symbols and versions in libcryptsetup. + * Do not use internal lib functions in cryptsetup. + * Add crypt_log to library. + * Fix crypt_remove_device (remove, luksClose) implementation. + * Move dm backend initialisation to library calls. + * Move duplicate Command failed message to verbose level (error is printed always). + * Add some password and used algorithms notes to man page. + * Version 1.1.0-rc2. + +2009-09-28 Milan Broz + * Add luksHeaderBackup and luksHeaderRestore commands. + * Fail passphrase read if piped input no longer exists. + * Version 1.1.0-rc1. + +2009-09-15 Milan Broz + * Initialize crypto library before LUKS header load. + * Fix manpage to not require --size which expands to device size by default. + +2009-09-10 Milan Broz + * Clean up Makefiles and configure script. + * Version 1.1.0-test0. + +2009-09-08 Milan Broz + * Use dm-uuid for all crypt devices, contains device type and name now. + * Try to read first sector from device to properly check that device is ready. + +2009-09-02 Milan Broz + * Add luksSuspend (freeze device and wipe key) and luksResume (with provided passphrase). + +2009-08-30 Milan Broz + * Require device device-mapper to build and do not use backend wrapper for dm calls. + * Move memory locking and dm initialization to command layer. + * Increase priority of process if memory is locked. + * Add log macros and make logging more consistent. + * Move command successful messages to verbose level. + * Introduce --debug parameter. + * Move device utils code and provide context parameter (for log). + * Keyfile now must be provided by path, only stdin file descriptor is used (api only). + * Do not call isatty() on closed keyfile descriptor. + * Run performance check for PBKDF2 from LUKS code, do not mix hash algorithms results. + * Add ability to provide pre-generated master key and UUID in LUKS header format. + * Add LUKS function to verify master key digest. + * Move key slot manipulation function into LUKS specific code. + * Replace global options struct with separate parameters in helper functions. + * Add new libcryptsetup API (documented in libcryptsetup.h). + * Implement old API calls using new functions. + * Remove old API code helper functions. + * Add --master-key-file option for luksFormat and luksAddKey. + +2009-08-17 Milan Broz + * Fix PBKDF2 speed calculation for large passphrases. + * Allow using passphrase provided in options struct for LuksOpen. + * Allow restrict keys size in LuksOpen. + +2009-07-30 Milan Broz + * Fix errors when compiled with LUKS_DEBUG. + * Print error when getline fails. + * Remove po/cryptsetup-luks.pot, it's autogenerated. + * Return ENOENT for empty keyslots, EINVAL will be used later for other type of error. + * Switch PBKDF2 from internal SHA1 to libgcrypt, make hash algorithm not hardcoded to SHA1 here. + * Add required parameters for changing hash used in LUKS key setup scheme. + * Do not export simple XOR helper now used only inside AF functions. + * Completely remove internal SHA1 implementation code, not needed anymore. + * Enable hash algorithm selection for LUKS through -h luksFormat option. + +2009-07-28 Milan Broz + * Pad luks header to 512 sector size. + * Rework read/write blockwise to not split operation to many pieces. + * Use posix_memalign if available. + +2009-07-22 Milan Broz + * Fix segfault if provided slot in luksKillslot is invalid. + * Remove unneeded timeout when remove of temporary device succeeded. + +2009-07-22 Milan Broz + * version 1.0.7 + +2009-07-16 Milan Broz + * Allow removal of last slot in luksRemoveKey and luksKillSlot. + +2009-07-11 Milan Broz + + * Add --disable-selinux option and fix static build if selinux is required. + * Reject unsupported --offset and --skip options for luksFormat and update man page. + +2009-06-22 Milan Broz + + * Summary of changes in subversion for 1.0.7-rc1: + * Various man page fixes. + * Set UUID in device-mapper for LUKS devices. + * Retain readahead of underlying device. + * Display device name when asking for password. + * Check device size when loading LUKS header. Remove misleading error message later. + * Add error hint if dm-crypt mapping failed. + * Use better error messages if device doesn't exist or is already used by other mapping. + * Fix make distcheck. + * Check if all slots are full during luksAddKey. + * Fix segfault in set_error. + * Code cleanups, remove precompiled pot files, remove unnecessary files from po directory + * Fix uninitialized return value variable in setup.c. + * Code cleanups. (thanks to Ivan Stankovic) + * Fix wrong output for remaining key at key deletion. + * Allow deletion of key slot while other keys have the same key information. + * Add missing AM_PROG_CC_C_O to configure.in + * Remove duplicate sentence in man page. + * Wipe start of device (possible fs signature) before LUKS-formatting. + * Do not process configure.in in hidden directories. + * Return more descriptive error in case of IO or header format error. + * Use remapping to error target instead of calling udevsettle for temporary crypt device. + * Check device mapper communication and warn user if device-mapper support missing in kernel. + * Fix signal handler to properly close device. + * write_lseek_blockwise: declare innerCount outside the if block. + * add -Wall to the default CFLAGS. fix some signedness issues. + * Error handling improvement. + * Add non-exclusive override to interface definition. + * Refactor key slot selection into keyslot_from_option. + +2007-05-01 Clemens Fruhwirth + + * lib/backends.c, man/cryptsetup.8: Apply patch from Ludwig Nussel + , for old SuSE compat hashing. + +2007-04-16 Clemens Fruhwirth + + * Summary of changes in subversion: + Fix segfault for key size > 32 bytes. + Kick ancient header version conversion. + Fix http://bugs.debian.org/403075 + No passwort retrying for I/O errors. + Fix hang on "-i 0". + Fix parenthesization error that prevented --tries from working + correctly. + +2006-11-28 gettextize + + * m4/gettext.m4: Upgrade to gettext-0.15. + * m4/glibc2.m4: New file, from gettext-0.15. + * m4/intmax.m4: New file, from gettext-0.15. + * m4/inttypes-h.m4: New file, from gettext-0.15. + * m4/inttypes-pri.m4: Upgrade to gettext-0.15. + * m4/lib-link.m4: Upgrade to gettext-0.15. + * m4/lib-prefix.m4: Upgrade to gettext-0.15. + * m4/lock.m4: New file, from gettext-0.15. + * m4/longdouble.m4: New file, from gettext-0.15. + * m4/longlong.m4: New file, from gettext-0.15. + * m4/nls.m4: Upgrade to gettext-0.15. + * m4/po.m4: Upgrade to gettext-0.15. + * m4/printf-posix.m4: New file, from gettext-0.15. + * m4/signed.m4: New file, from gettext-0.15. + * m4/size_max.m4: New file, from gettext-0.15. + * m4/visibility.m4: New file, from gettext-0.15. + * m4/wchar_t.m4: New file, from gettext-0.15. + * m4/wint_t.m4: New file, from gettext-0.15. + * m4/xsize.m4: New file, from gettext-0.15. + * m4/Makefile.am: New file. + * configure.in (AC_OUTPUT): Add m4/Makefile. + (AM_GNU_GETTEXT_VERSION): Bump to 0.15. + +2006-10-22 David Härdeman + + * Allow hashing of keys passed through stdin. + +2006-10-13 Clemens Fruhwirth + + * configure.in: 1.0.4 release + +2006-10-13 Clemens Fruhwirth + + * man/cryptsetup.8: Document --tries switch; patch by Jonas + Meurer. + +2006-10-13 Clemens Fruhwirth + + * lib/setup.c: Added terminal timeout rewrite as forwarded by + Jonas Meurer + +2006-10-04 Clemens Fruhwirth + + * Merged patch from Marc Merlin to allow user + selection of key slot. + +2006-09-26 gettextize + + * m4/codeset.m4: Upgrade to gettext-0.14.4. + * m4/gettext.m4: Upgrade to gettext-0.14.4. + * m4/glibc2.m4: New file, from gettext-0.14.4. + * m4/glibc21.m4: Upgrade to gettext-0.14.4. + * m4/iconv.m4: Upgrade to gettext-0.14.4. + * m4/intdiv0.m4: Upgrade to gettext-0.14.4. + * m4/intmax.m4: New file, from gettext-0.14.4. + * m4/inttypes.m4: Upgrade to gettext-0.14.4. + * m4/inttypes_h.m4: Upgrade to gettext-0.14.4. + * m4/inttypes-pri.m4: Upgrade to gettext-0.14.4. + * m4/isc-posix.m4: Upgrade to gettext-0.14.4. + * m4/lcmessage.m4: Upgrade to gettext-0.14.4. + * m4/lib-ld.m4: Upgrade to gettext-0.14.4. + * m4/lib-link.m4: Upgrade to gettext-0.14.4. + * m4/lib-prefix.m4: Upgrade to gettext-0.14.4. + * m4/longdouble.m4: New file, from gettext-0.14.4. + * m4/longlong.m4: New file, from gettext-0.14.4. + * m4/nls.m4: Upgrade to gettext-0.14.4. + * m4/po.m4: Upgrade to gettext-0.14.4. + * m4/printf-posix.m4: New file, from gettext-0.14.4. + * m4/progtest.m4: Upgrade to gettext-0.14.4. + * m4/signed.m4: New file, from gettext-0.14.4. + * m4/size_max.m4: New file, from gettext-0.14.4. + * m4/stdint_h.m4: Upgrade to gettext-0.14.4. + * m4/uintmax_t.m4: Upgrade to gettext-0.14.4. + * m4/ulonglong.m4: Upgrade to gettext-0.14.4. + * m4/wchar_t.m4: New file, from gettext-0.14.4. + * m4/wint_t.m4: New file, from gettext-0.14.4. + * m4/xsize.m4: New file, from gettext-0.14.4. + * Makefile.am (ACLOCAL_AMFLAGS): New variable. + * configure.in (AM_GNU_GETTEXT_VERSION): Bump to 0.14.4. + +2006-08-04 Clemens Fruhwirth + + * configure.in: 1.0.4-rc2 + +2006-08-04 Clemens Fruhwirth + + * luks/Makefile.am: Add a few regression tests + +2006-08-04 Clemens Fruhwirth + + * lib/setup.c (get_key): Applied patch from David Härdeman + for reading binary keys from stdin using + the "-" as key file. + +2006-08-04 Clemens Fruhwirth + + * lib/setup.c (__crypt_luks_add_key): For checking options struct + (optionsCheck) filter out CRYPT_FLAG_VERIFY and + CRYPT_FLAG_VERIFY_IF_POSSIBLE, so that in no case password verification is done + for password retrieval. + +2006-08-04 Clemens Fruhwirth + + * configure.in: Merge Patch from http://bugs.gentoo.org/show_bug.cgi?id=132126 for sepol + +2006-07-23 Clemens Fruhwirth + + * Applied patches from David Härdeman to fix 64 + bit compiler warning issues. + +2006-05-19 Clemens Fruhwirth + + * Applied patches from Jonas Meurer + - fix terminal status after timeout + - add remark for --tries to manpage + - allow more than 32 chars from standard input. + - exit status fix for cryptsetup status. + +2006-05-06 Clemens Fruhwirth + + * src/cryptsetup.c (yesDialog): Fix getline problem for 64-bit archs. + +2006-04-05 Clemens Fruhwirth + + * configure.in: Release 1.0.3. + + * Applied patch by Johannes Weißl for more meaningful exit codes + and password retries + +2006-03-30 Clemens Fruhwirth + + * lib/setup.c (__crypt_create_device): (char *) -> (const char *) + +2006-03-30 Clemens Fruhwirth + + * Apply alignPayload patch from Peter Palfrader + +2006-03-15 Clemens Fruhwirth + + * configure.in: 1.0.3-rc3. Most displease release ever. + * lib/setup.c (__crypt_create_device): More verbose error message. + +2006-02-26 Clemens Fruhwirth + + * lib/setup.c: Revert to 1.0.1 key reading. + +2006-02-25 Clemens Fruhwirth + + * man/cryptsetup.8: merge patch from Jonas Meurer + +2006-02-25 Clemens Fruhwirth + + * configure.in: 1.0.3-rc2 + +2006-02-25 Clemens Fruhwirth + + * lib/libdevmapper.c (dm_create_device): Remove dup check here. + * lib/setup.c (__crypt_luks_open): Adopt same dup check as regular + create command. + +2006-02-22 Clemens Fruhwirth + + * configure.in: Spin 1.0.3-rc1 + +2006-02-22 Clemens Fruhwirth + + * src/cryptsetup.c (action_create): Change defaulting. + (action_luksFormat): Change defaulting. + + * lib/setup.c (parse_into_name_and_mode): Revert that default + change. This is FORBIDDEN here, as it will change cryptsetup + entire default. This is BAD in a non-LUKS world. + +2006-02-21 Clemens Fruhwirth + + * luks/keyencryption.c (setup_mapping): Add proper size restriction to mapping. + (LUKS_endec_template): Add more verbose error message. + +2006-02-21 Clemens Fruhwirth + + * lib/libdevmapper.c (dm_query_device): Incorporate patch from + Bastian Blank + http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=344313 + +2006-02-21 Clemens Fruhwirth + + * src/cryptsetup.c: Rename show_error -> show_status. + +2006-02-20 Clemens Fruhwirth + + * lib/libdevmapper.c (dm_create_device): Prevent existing mapping + from being removed when a mapping with the same name is added + + * Add timeout patch from Jonas Meurer + + * src/cryptsetup.c: Remove conditional error printing to enable + printing the no-error msg (Command successful). Verify passphrase + for LUKS volumes. + (main): Add no-verify-passphrase + + * lib/setup.c (parse_into_name_and_mode): Change default mode complition to essiv:sha256. + +2006-01-04 Clemens Fruhwirth + + * src/cryptsetup.c (help): Merge patch from Gentoo: change gettext(..) to _(..). + +2005-12-06 Clemens Fruhwirth + + * man/cryptsetup.8: Correct "seconds" to "microseconds" in the explanation for -i. + +2005-11-09 Clemens Fruhwirth + + * src/cryptsetup.c (main): Add version string. + +2005-11-08 Clemens Fruhwirth + + * lib/backends.c: compile fix. + +2005-09-11 Clemens Fruhwirth + + * lib/setup.c (get_key): Fixed another incompatibility from my + get_key rewrite with original cryptsetup. + +2005-09-11 Clemens Fruhwirth + + * Merged changes from Florian Knauf's fk02 branch. + +2005-09-08 Clemens Fruhwirth + + * lib/setup.c (get_key): Fixed another incompatibility with + original cryptsetup. + +2005-08-20 Clemens Fruhwirth + + * Checked in a patch from Michael Gebetsroither + to silent all confirmation dialogs. + +2005-06-23 Clemens Fruhwirth + + * src/cryptsetup.c (help): print PACKAGE_STRING + +2005-06-20 Clemens Fruhwirth + + * luks/keymanage.c (LUKS_set_key): Security check against header manipulation + + * src/cryptsetup.c (action_luksDelKey): Safety check in luksDelKey + + * luks/keymanage.c: Changed disk layout generation to align key material to 4k boundaries. + (LUKS_is_last_keyslot): Added LUKS_is_last_keyslot function. + + * Applied patch from Bill Nottingham fixing a lot of prototypes. + + * src/cryptsetup.c (action_luksOpen): Add support for -r flag. + + * configure.in: Version bump 1.0.1 + +2005-06-16 Clemens Fruhwirth + + * lib/setup.c (__crypt_luks_open): Remove mem leaking of dmCipherSpec. + (get_key): Fix missing zero termination for read string. + +2005-06-12 Clemens Fruhwirth + + * luks/keyencryption.c (setup_mapping): Added CRYPT_FLAG_READONLY in case of O_RDONLY mode + +2005-06-11 Clemens Fruhwirth + + * configure.in: Version bump 1.0.1-pre + +2005-06-09 Clemens Fruhwirth + + * lib/utils.c: Added write_llseek_blocksize method to support sector wiping on sector_size != 512 + media + +2005-05-23 Clemens Fruhwirth + + * lib/setup.c (crypt_luksDelKey): Added missing return statement + (setup_leave): Added missing return statement + + * luks/keyencryption.c (clear_mapping): Added missing return statement + +2005-05-19 Clemens Fruhwirth + + * lib/utils.c (write_blockwise, read_blockwise): Changed to soft bsize instead of SECTOR_SIZE + + * luks/keymanage.c (wipe): Changed open mode to O_DIRECT | O_SYNC, and changed write + to use the blockwise write helper + +2005-04-21 Clemens Fruhwirth + + * man/cryptsetup.8: Corrected an error, thanks to Dick Middleton. + +2005-04-09 Clemens Fruhwirth + + * luks/sha/hmac.c: Add 64 bit bug fix courtesy to + Oliver Paukstadt . + + * luks/pbkdf.c, luks/keyencryption.c, luks/keymanage.c, luks/af.c: Added a license + disclaimer and remove option for "any future GPL versions". + +2005-03-25 Clemens Fruhwirth + + * configure.in: man page Makefile. Version bump 1.0. + + * man/cryptsetup.8: finalize man page and move to section 8. + + * src/cryptsetup.c (action_luksFormat): Add "are you sure" for interactive sessions. + + * lib/setup.c (crypt_luksDump), src/cryptsetup.c: add LUKS dump command + +2005-03-24 Clemens Fruhwirth + + * src/cryptsetup.c, luks/Makefile.am (test), lib/setup.c (setup_enter): + rename luksInit to luksFormat + +2005-03-12 Clemens Fruhwirth + + * man/cryptsetup.1: Add man page. + + * lib/setup.c: Remove unnecessary LUKS_write_phdr call, so the + phdr is written after passphrase reading, so the user can change + his mind, and not have a partial written LUKS header on it's disk. + +2005-02-09 Clemens Fruhwirth + + * luks/keymanage.c (LUKS_write_phdr): converted argument phdr to + pointer, and make a copy of phdr for conversion + + * configure.in: Version dump. + + * luks/keyencryption.c: Convert to read|write_blockwise. + + * luks/keymanage.c: Convert to read|write_blockwise. + + * lib/utils.c: Add read|write_blockwise functions, to use in + O_DIRECT file accesses. + +2004-03-11 Thursday 15:52 Jana Saout + + * lib/blockdev.h: BLKGETSIZE64 really uses size_t as third + argument, the rest is wrong. + +2004-03-10 Wednesday 17:50 Jana Saout + + * lib/: libcryptsetup.h, libdevmapper.c: Small fixes. + +2004-03-09 Tuesday 21:41 Jana Saout + + * lib/internal.h, lib/libcryptsetup.h, lib/libdevmapper.c, + lib/setup.c, po/de.po, src/cryptsetup.c: Added internal flags to + keep track of malloc'ed return values in struct crypt_options and + add a function to free the memory. Also add a readonly flag to + libcryptsetup. + +2004-03-09 Tuesday 16:03 Jana Saout + + * ChangeLog, configure.in, setup-gettext, lib/Makefile.am, + lib/backends.c, lib/blockdev.h, lib/gcrypt.c, lib/internal.h, + lib/libcryptsetup.h, lib/libdevmapper.c, lib/setup.c, + lib/utils.c, po/de.po, src/Makefile.am, src/cryptsetup.c: More + reorganization work. + +2004-03-08 Monday 01:38 Jana Saout + + * ChangeLog, Makefile.am, acinclude.m4, configure.in, + lib/Makefile.am, lib/backends.c, lib/blockdev.h, lib/gcrypt.c, + lib/libdevmapper.c, lib/setup.c, lib/utils.c, po/de.po, + src/Makefile.am: BLKGETSIZE64 fixes and started modularity + enhancements + +2004-03-04 Thursday 21:06 Jana Saout + + * Makefile.am, po/de.po, src/cryptsetup.c, src/cryptsetup.h: First + backward compatible working version. + +2004-03-04 Thursday 00:42 Jana Saout + + * NEWS, AUTHORS, ChangeLog, Makefile.am, README, autogen.sh, + configure.in, setup-gettext, po/ChangeLog, po/LINGUAS, + po/POTFILES.in, po/de.po, src/cryptsetup.c, src/cryptsetup.h, + src/Makefile.am (utags: initial): Initial checkin. + +2004-03-04 Thursday 00:42 Jana Saout + + * NEWS, AUTHORS, ChangeLog, Makefile.am, README, autogen.sh, + configure.in, setup-gettext, po/ChangeLog, po/LINGUAS, + po/POTFILES.in, po/de.po, src/cryptsetup.c, src/cryptsetup.h, + src/Makefile.am: Initial revision diff --git a/docs/Keyring.txt b/docs/Keyring.txt new file mode 100644 index 0000000..bdcc838 --- /dev/null +++ b/docs/Keyring.txt @@ -0,0 +1,56 @@ +Integration with kernel keyring service +--------------------------------------- + +We have two different use cases for kernel keyring service: + +I) Volume keys + +Since upstream kernel 4.10 dm-crypt device mapper target allows loading volume +key (VK) in kernel keyring service. The key offloaded in kernel keyring service +is only referenced (by key description) in dm-crypt target and the VK is therefore +no longer stored directly in dm-crypt target. Starting with cryptsetup 2.0 we +load VK in kernel keyring by default for LUKSv2 devices (when dm-crypt with the +feature is available). + +Currently cryptsetup loads VK in 'logon' type kernel key so that VK is passed in +the kernel and can't be read from userspace afterward. Also cryptsetup loads VK in +thread keyring (before passing the reference to dm-crypt target) so that the key +lifetime is directly bound to the process that performs the dm-crypt setup. When +cryptsetup process exits (for whatever reason) the key gets unlinked in kernel +automatically. In summary, the key description visible in dm-crypt table line is +a reference to VK that usually no longer exists in kernel keyring service if you +used cryptsetup to for device activation. + +Using this feature dm-crypt no longer maintains a direct key copy (but there's +always at least one copy in kernel crypto layer). + +II) Keyslot passphrase +The second use case for kernel keyring is to allow cryptsetup reading the keyslot +passphrase stored in kernel keyring instead. The user may load passphrase in kernel +keyring and notify cryptsetup to read it from there later. Currently, cryptsetup +cli supports kernel keyring for passphrase only via LUKS2 internal token +(luks2-keyring). Library also provides a general method for device activation by +reading passphrase from keyring: crypt_activate_by_keyring(). The key type +for use case II) must always be 'user' since we need to read the actual key +data from userspace unlike with VK in I). Ability to read keyslot passphrase +from kernel keyring also allows easily auto-activate LUKS2 devices. + +Simple example how to use kernel keyring for keyslot passphrase: + +1) create LUKS2 keyring token for keyslot 0 (in LUKS2 device/image) +cryptsetup token add --key-description my:key -S 0 /dev/device + +2) Load keyslot passphrase in user keyring +read -s -p "Keyslot passphrase: "; echo -n $REPLY | keyctl padd user my:key @u + +3) Activate device using passphrase stored in kernel keyring +cryptsetup open /dev/device my_unlocked_device + +4a) unlink the key when no longer needed by +keyctl unlink %user:my:key @u + +4b) or revoke it immediately by +keyctl revoke %user:my:key + +If cryptsetup asks for passphrase in step 3) something went wrong with keyring +activation. See --debug output then. diff --git a/docs/LUKS2-locking.txt b/docs/LUKS2-locking.txt new file mode 100644 index 0000000..e401b61 --- /dev/null +++ b/docs/LUKS2-locking.txt @@ -0,0 +1,61 @@ +LUKS2 device locking overview +============================= + +Why +~~~ + +LUKS2 format keeps two identical copies of metadata stored consecutively +at the head of metadata device (file or bdev). The metadata +area (both copies) must be updated in a single atomic operation to avoid +header corruption during concurrent write. + +While with LUKS1 users may have clear knowledge of when a LUKS header is +being updated (written to) or when it's being read solely the need for +locking with legacy format was not so obvious as it is with the LUKSv2 format. + +With LUKS2 the boundary between read-only and read-write is blurry and what +used to be the exclusively read-only operation (i.e., cryptsetup open command) may +easily become read-update operation silently without user's knowledge. +Major feature of LUKS2 format is resilience against accidental +corruption of metadata (i.e., partial header overwrite by parted or cfdisk +while creating partition on mistaken block device). +Such header corruption is detected early on header read and auto-recovery +procedure takes place (the corrupted header with checksum mismatch is being +replaced by the secondary one if that one is intact). +On current Linux systems header load operation may be triggered without user +direct intervention for example by udev rule or from systemd service. +Such clash of header read and auto-recovery procedure could have severe +consequences with the worst case of having LUKS2 device unaccessible or being +broken beyond repair. + +The whole locking of LUKSv2 device headers split into two categories depending +what backend the header is stored on: + +I) block device +~~~~~~~~~~~~~~~ + +We perform flock() on file descriptors of files stored in a private +directory (by default /run/lock/cryptsetup). The file name is derived +from major:minor couple of affected block device. Note we recommend +that access to private locking directory is supposed to be limited +to superuser only. For this method to work the distribution needs +to install the locking directory with appropriate access rights. + +II) regular files +~~~~~~~~~~~~~~~~~ + +First notable difference between headers stored in a file +vs. headers stored in a block device is that headers in a file may be +manipulated by the regular user unlike headers on block devices. Therefore +we perform flock() protection on file with the luks2 header directly. + +Limitations +~~~~~~~~~~~ + +a) In general, the locking model provides serialization of I/Os targeting +the header only. It means the header is always written or read at once +while locking is enabled. +We do not suppress any other negative effect that two or more concurrent +writers of the same header may cause. + +b) The locking is not cluster aware in any way. diff --git a/docs/doxyfile b/docs/doxyfile new file mode 100644 index 0000000..a8c84db --- /dev/null +++ b/docs/doxyfile @@ -0,0 +1,313 @@ +# Doxyfile 1.8.8 + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- +DOXYFILE_ENCODING = UTF-8 +PROJECT_NAME = "cryptsetup API" +PROJECT_NUMBER = +PROJECT_BRIEF = "Public cryptsetup API" +PROJECT_LOGO = +OUTPUT_DIRECTORY = doxygen_api_docs +CREATE_SUBDIRS = NO +ALLOW_UNICODE_NAMES = NO +OUTPUT_LANGUAGE = English +BRIEF_MEMBER_DESC = YES +REPEAT_BRIEF = YES +ABBREVIATE_BRIEF = +ALWAYS_DETAILED_SEC = NO +INLINE_INHERITED_MEMB = NO +FULL_PATH_NAMES = YES +STRIP_FROM_PATH = +STRIP_FROM_INC_PATH = +SHORT_NAMES = NO +JAVADOC_AUTOBRIEF = NO +QT_AUTOBRIEF = NO +MULTILINE_CPP_IS_BRIEF = NO +INHERIT_DOCS = YES +SEPARATE_MEMBER_PAGES = NO +TAB_SIZE = 8 +ALIASES = +TCL_SUBST = +OPTIMIZE_OUTPUT_FOR_C = YES +OPTIMIZE_OUTPUT_JAVA = NO +OPTIMIZE_FOR_FORTRAN = NO +OPTIMIZE_OUTPUT_VHDL = NO +EXTENSION_MAPPING = +MARKDOWN_SUPPORT = YES +AUTOLINK_SUPPORT = YES +BUILTIN_STL_SUPPORT = NO +CPP_CLI_SUPPORT = NO +SIP_SUPPORT = NO +IDL_PROPERTY_SUPPORT = YES +DISTRIBUTE_GROUP_DOC = NO +SUBGROUPING = YES +INLINE_GROUPED_CLASSES = NO +INLINE_SIMPLE_STRUCTS = NO +TYPEDEF_HIDES_STRUCT = YES +LOOKUP_CACHE_SIZE = 0 +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- +EXTRACT_ALL = NO +EXTRACT_PRIVATE = NO +EXTRACT_PACKAGE = NO +EXTRACT_STATIC = NO +EXTRACT_LOCAL_CLASSES = YES +EXTRACT_LOCAL_METHODS = NO +EXTRACT_ANON_NSPACES = NO +HIDE_UNDOC_MEMBERS = NO +HIDE_UNDOC_CLASSES = NO +HIDE_FRIEND_COMPOUNDS = NO +HIDE_IN_BODY_DOCS = NO +INTERNAL_DOCS = NO +CASE_SENSE_NAMES = YES +HIDE_SCOPE_NAMES = NO +SHOW_INCLUDE_FILES = YES +SHOW_GROUPED_MEMB_INC = NO +FORCE_LOCAL_INCLUDES = NO +INLINE_INFO = YES +SORT_MEMBER_DOCS = YES +SORT_BRIEF_DOCS = NO +SORT_MEMBERS_CTORS_1ST = NO +SORT_GROUP_NAMES = NO +SORT_BY_SCOPE_NAME = NO +STRICT_PROTO_MATCHING = NO +GENERATE_TODOLIST = YES +GENERATE_TESTLIST = YES +GENERATE_BUGLIST = YES +GENERATE_DEPRECATEDLIST= YES +ENABLED_SECTIONS = +MAX_INITIALIZER_LINES = 30 +SHOW_USED_FILES = YES +SHOW_FILES = YES +SHOW_NAMESPACES = YES +FILE_VERSION_FILTER = +LAYOUT_FILE = +CITE_BIB_FILES = +#--------------------------------------------------------------------------- +# Configuration options related to warning and progress messages +#--------------------------------------------------------------------------- +QUIET = NO +WARNINGS = YES +WARN_IF_UNDOCUMENTED = YES +WARN_IF_DOC_ERROR = YES +WARN_NO_PARAMDOC = NO +WARN_FORMAT = "$file:$line: $text" +WARN_LOGFILE = +#--------------------------------------------------------------------------- +# Configuration options related to the input files +#--------------------------------------------------------------------------- +INPUT = "doxygen_index.h" \ + "../lib/libcryptsetup.h" +INPUT_ENCODING = UTF-8 +FILE_PATTERNS = +RECURSIVE = NO +EXCLUDE = +EXCLUDE_SYMLINKS = NO +EXCLUDE_PATTERNS = +EXCLUDE_SYMBOLS = +EXAMPLE_PATH = "examples" +EXAMPLE_PATTERNS = +EXAMPLE_RECURSIVE = NO +IMAGE_PATH = +INPUT_FILTER = +FILTER_PATTERNS = +FILTER_SOURCE_FILES = NO +FILTER_SOURCE_PATTERNS = +USE_MDFILE_AS_MAINPAGE = +#--------------------------------------------------------------------------- +# Configuration options related to source browsing +#--------------------------------------------------------------------------- +SOURCE_BROWSER = NO +INLINE_SOURCES = NO +STRIP_CODE_COMMENTS = YES +REFERENCED_BY_RELATION = NO +REFERENCES_RELATION = NO +REFERENCES_LINK_SOURCE = YES +SOURCE_TOOLTIPS = YES +USE_HTAGS = NO +VERBATIM_HEADERS = YES +CLANG_ASSISTED_PARSING = NO +CLANG_OPTIONS = +#--------------------------------------------------------------------------- +# Configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- +ALPHABETICAL_INDEX = YES +COLS_IN_ALPHA_INDEX = 5 +IGNORE_PREFIX = +#--------------------------------------------------------------------------- +# Configuration options related to the HTML output +#--------------------------------------------------------------------------- +GENERATE_HTML = YES +HTML_OUTPUT = html +HTML_FILE_EXTENSION = .html +HTML_HEADER = +HTML_FOOTER = +HTML_STYLESHEET = +HTML_EXTRA_STYLESHEET = +HTML_EXTRA_FILES = +HTML_COLORSTYLE_HUE = 220 +HTML_COLORSTYLE_SAT = 100 +HTML_COLORSTYLE_GAMMA = 80 +HTML_TIMESTAMP = YES +HTML_DYNAMIC_SECTIONS = NO +HTML_INDEX_NUM_ENTRIES = 100 +GENERATE_DOCSET = NO +DOCSET_FEEDNAME = "Doxygen generated docs" +DOCSET_BUNDLE_ID = org.doxygen.Project +DOCSET_PUBLISHER_ID = org.doxygen.Publisher +DOCSET_PUBLISHER_NAME = Publisher +GENERATE_HTMLHELP = NO +CHM_FILE = +HHC_LOCATION = +GENERATE_CHI = NO +CHM_INDEX_ENCODING = +BINARY_TOC = NO +TOC_EXPAND = NO +GENERATE_QHP = NO +QCH_FILE = +QHP_NAMESPACE = org.doxygen.Project +QHP_VIRTUAL_FOLDER = doc +QHP_CUST_FILTER_NAME = +QHP_CUST_FILTER_ATTRS = +QHP_SECT_FILTER_ATTRS = +QHG_LOCATION = +GENERATE_ECLIPSEHELP = NO +ECLIPSE_DOC_ID = org.doxygen.Project +DISABLE_INDEX = NO +GENERATE_TREEVIEW = NO +ENUM_VALUES_PER_LINE = 4 +TREEVIEW_WIDTH = 250 +EXT_LINKS_IN_WINDOW = NO +FORMULA_FONTSIZE = 10 +FORMULA_TRANSPARENT = YES +USE_MATHJAX = NO +MATHJAX_FORMAT = HTML-CSS +MATHJAX_RELPATH = http://www.mathjax.org/mathjax +MATHJAX_EXTENSIONS = +MATHJAX_CODEFILE = +SEARCHENGINE = YES +SERVER_BASED_SEARCH = NO +EXTERNAL_SEARCH = NO +SEARCHENGINE_URL = +SEARCHDATA_FILE = searchdata.xml +EXTERNAL_SEARCH_ID = +EXTRA_SEARCH_MAPPINGS = +#--------------------------------------------------------------------------- +# Configuration options related to the LaTeX output +#--------------------------------------------------------------------------- +GENERATE_LATEX = YES +LATEX_OUTPUT = latex +LATEX_CMD_NAME = latex +MAKEINDEX_CMD_NAME = makeindex +COMPACT_LATEX = NO +PAPER_TYPE = a4 +EXTRA_PACKAGES = +LATEX_HEADER = +LATEX_FOOTER = +LATEX_EXTRA_FILES = +PDF_HYPERLINKS = YES +USE_PDFLATEX = YES +LATEX_BATCHMODE = NO +LATEX_HIDE_INDICES = NO +LATEX_SOURCE_CODE = NO +LATEX_BIB_STYLE = plain +#--------------------------------------------------------------------------- +# Configuration options related to the RTF output +#--------------------------------------------------------------------------- +GENERATE_RTF = NO +RTF_OUTPUT = rtf +COMPACT_RTF = NO +RTF_HYPERLINKS = NO +RTF_STYLESHEET_FILE = +RTF_EXTENSIONS_FILE = +#--------------------------------------------------------------------------- +# Configuration options related to the man page output +#--------------------------------------------------------------------------- +GENERATE_MAN = NO +MAN_OUTPUT = man +MAN_EXTENSION = .3 +MAN_SUBDIR = +MAN_LINKS = NO +#--------------------------------------------------------------------------- +# Configuration options related to the XML output +#--------------------------------------------------------------------------- +GENERATE_XML = NO +XML_OUTPUT = xml +XML_PROGRAMLISTING = YES +#--------------------------------------------------------------------------- +# Configuration options related to the DOCBOOK output +#--------------------------------------------------------------------------- +GENERATE_DOCBOOK = NO +DOCBOOK_OUTPUT = docbook +DOCBOOK_PROGRAMLISTING = NO +#--------------------------------------------------------------------------- +# Configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- +GENERATE_AUTOGEN_DEF = NO +#--------------------------------------------------------------------------- +# Configuration options related to the Perl module output +#--------------------------------------------------------------------------- +GENERATE_PERLMOD = NO +PERLMOD_LATEX = NO +PERLMOD_PRETTY = YES +PERLMOD_MAKEVAR_PREFIX = +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- +ENABLE_PREPROCESSING = YES +MACRO_EXPANSION = NO +EXPAND_ONLY_PREDEF = NO +SEARCH_INCLUDES = YES +INCLUDE_PATH = +INCLUDE_FILE_PATTERNS = +PREDEFINED = +EXPAND_AS_DEFINED = +SKIP_FUNCTION_MACROS = YES +#--------------------------------------------------------------------------- +# Configuration options related to external references +#--------------------------------------------------------------------------- +TAGFILES = +GENERATE_TAGFILE = +ALLEXTERNALS = NO +EXTERNAL_GROUPS = YES +EXTERNAL_PAGES = YES +PERL_PATH = +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- +CLASS_DIAGRAMS = YES +MSCGEN_PATH = +DIA_PATH = +HIDE_UNDOC_RELATIONS = YES +HAVE_DOT = NO +DOT_NUM_THREADS = 0 +DOT_FONTNAME = Helvetica +DOT_FONTSIZE = 10 +DOT_FONTPATH = +CLASS_GRAPH = YES +COLLABORATION_GRAPH = YES +GROUP_GRAPHS = YES +UML_LOOK = NO +UML_LIMIT_NUM_FIELDS = 10 +TEMPLATE_RELATIONS = NO +INCLUDE_GRAPH = YES +INCLUDED_BY_GRAPH = YES +CALL_GRAPH = NO +CALLER_GRAPH = NO +GRAPHICAL_HIERARCHY = YES +DIRECTORY_GRAPH = YES +DOT_IMAGE_FORMAT = png +INTERACTIVE_SVG = NO +DOT_PATH = +DOTFILE_DIRS = +MSCFILE_DIRS = +DIAFILE_DIRS = +PLANTUML_JAR_PATH = +DOT_GRAPH_MAX_NODES = 50 +MAX_DOT_GRAPH_DEPTH = 0 +DOT_TRANSPARENT = NO +DOT_MULTI_TARGETS = NO +GENERATE_LEGEND = YES +DOT_CLEANUP = YES diff --git a/docs/doxygen_index.h b/docs/doxygen_index.h new file mode 100644 index 0000000..8bdf05f --- /dev/null +++ b/docs/doxygen_index.h @@ -0,0 +1,110 @@ +/*! \mainpage Cryptsetup API + * + * The documentation covers public parts of cryptsetup API. In the following sections you'll find + * the examples that describe some features of cryptsetup API. + * For more info about libcryptsetup API versions see + * API Tracker. + * + *
    + *
  1. @ref cexamples "Cryptsetup API examples"
  2. + *
      + *
    1. @ref cluks "crypt_luks_usage" - cryptsetup LUKS device type usage examples
    2. + *
        + *
      • @ref cinit "crypt_init()"
      • + *
      • @ref cformat "crypt_format()" - header and payload on mutual device
      • + *
      • @ref ckeys "Keyslot operations"
      • + *
          + *
        • @ref ckeyslot_vol "crypt_keyslot_add_by_volume_key()"
        • + *
        • @ref ckeyslot_pass "crypt_keyslot_add_by_passphrase()"
        • + *
        + *
      • @ref cload "crypt_load()" + *
      • @ref cactivate "crypt_activate_by_passphrase()"
      • + *
      • @ref cactive_pars "crypt_get_active_device()"
      • + *
      • @ref cinit_by_name "crypt_init_by_name()"
      • + *
      • @ref cdeactivate "crypt_deactivate()"
      • + *
      • @ref cluks_ex "crypt_luks_usage.c"
      • + *
      + *
    3. @ref clog "crypt_log_usage" - cryptsetup logging API examples
    4. + *
    + *
+ * + * @section cexamples Cryptsetup API examples + * @section cluks crypt_luks_usage - cryptsetup LUKS device type usage + * @subsection cinit crypt_init() + * Every time you need to do something with cryptsetup or dmcrypt device + * you need a valid context. The first step to start your work is + * @ref crypt_init call. You can call it either with path + * to the block device or path to the regular file. If you don't supply the path, + * empty context is initialized. + * + * @subsection cformat crypt_format() - header and payload on mutual device + * This section covers basic use cases for formatting LUKS devices. Format operation + * sets device type in context and in case of LUKS header is written at the beginning + * of block device. In the example below we use the scenario where LUKS header and data + * are both stored on the same device. There's also a possibility to store header and + * data separately. + * + * Bear in mind that @ref crypt_format() is destructive operation and it + * overwrites part of the backing block device. + * + * @subsection ckeys Keyslot operations examples + * After successful @ref crypt_format of LUKS device, volume key is not stored + * in a persistent way on the device. Keyslot area is an array beyond LUKS header, where + * volume key is stored in the encrypted form using user input passphrase. For more info about + * LUKS keyslots and how it's actually protected, please look at + * LUKS specification. + * There are two basic methods to create a new keyslot: + * + * @subsection ckeyslot_vol crypt_keyslot_add_by_volume_key() + * Creates a new keyslot directly by encrypting volume_key stored in the device + * context. Passphrase should be supplied or user is prompted if passphrase param is + * NULL. + * + * @subsection ckeyslot_pass crypt_keyslot_add_by_passphrase() + * Creates a new keyslot for the volume key by opening existing active keyslot, + * extracting volume key from it and storing it into a new keyslot + * protected by a new passphrase + * + * @subsection cload crypt_load() + * Function loads header from backing block device into device context. + * + * @subsection cactivate crypt_activate_by_passphrase() + * Activates crypt device by user supplied password for keyslot containing the volume_key. + * If keyslot parameter is set to CRYPT_ANY_SLOT then all active keyslots + * are tried one by one until the volume key is found. + * + * @subsection cactive_pars crypt_get_active_device() + * This call returns structure containing runtime attributes of active device. + * + * @subsection cinit_by_name crypt_init_by_name() + * In case you need to do operations with active device (device which already + * has its corresponding mapping) and you miss valid device context stored in + * *crypt_device reference, you should use this call. Function tries to + * get path to backing device from DM, initializes context for it and loads LUKS + * header. + * + * @subsection cdeactivate crypt_deactivate() + * Deactivates crypt device (removes DM mapping and safely erases volume key from kernel). + * + * @subsection cluks_ex crypt_luks_usage.c - Complex example + * To compile and run use following commands in examples directory: + * + * @code + * make + * ./crypt_luks_usage _path_to_[block_device]_file + * @endcode + * Note that you need to have the cryptsetup library compiled. @include crypt_luks_usage.c + * + * @section clog crypt_log_usage - cryptsetup logging API example + * Example describes basic use case for cryptsetup logging. To compile and run + * use following commands in examples directory: + * + * @code + * make + * ./crypt_log_usage + * @endcode + * Note that you need to have the cryptsetup library compiled. @include crypt_log_usage.c + * + * @example crypt_luks_usage.c + * @example crypt_log_usage.c + */ diff --git a/docs/examples/Makefile b/docs/examples/Makefile new file mode 100644 index 0000000..845b6cb --- /dev/null +++ b/docs/examples/Makefile @@ -0,0 +1,17 @@ +TARGETS=crypt_log_usage crypt_luks_usage +CFLAGS=-O0 -g -Wall -D_GNU_SOURCE +LDLIBS=-lcryptsetup +CC=gcc + +all: $(TARGETS) + +crypt_log_usage: crypt_log_usage.o + $(CC) -o $@ $^ $(LDLIBS) + +crypt_luks_usage: crypt_luks_usage.o + $(CC) -o $@ $^ $(LDLIBS) + +clean: + rm -f *.o *~ core $(TARGETS) + +.PHONY: clean diff --git a/docs/examples/crypt_log_usage.c b/docs/examples/crypt_log_usage.c new file mode 100644 index 0000000..d371528 --- /dev/null +++ b/docs/examples/crypt_log_usage.c @@ -0,0 +1,94 @@ +/* + * libcryptsetup API log example + * + * Copyright (C) 2011-2019 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 + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This file is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this file; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#include +#include +#include +#include +#include + +/* + * This is an example of crypt_set_log_callback API callback. + * + */ +static void simple_syslog_wrapper(int level, const char *msg, void *usrptr) +{ + const char *prefix = (const char *)usrptr; + int priority; + + switch(level) { + case CRYPT_LOG_NORMAL: priority = LOG_NOTICE; break; + case CRYPT_LOG_ERROR: priority = LOG_ERR; break; + case CRYPT_LOG_VERBOSE: priority = LOG_INFO; break; + case CRYPT_LOG_DEBUG: priority = LOG_DEBUG; break; + default: + fprintf(stderr, "Unsupported log level requested!\n"); + return; + } + + if (prefix) + syslog(priority, "%s:%s", prefix, msg); + else + syslog(priority, "%s", msg); +} + +int main(void) +{ + struct crypt_device *cd; + char usrprefix[] = "cslog_example"; + int r; + + if (geteuid()) { + printf("Using of libcryptsetup requires super user privileges.\n"); + return 1; + } + + openlog("cryptsetup", LOG_CONS | LOG_PID, LOG_USER); + + /* Initialize empty crypt device context */ + r = crypt_init(&cd, NULL); + if (r < 0) { + printf("crypt_init() failed.\n"); + return 2; + } + + /* crypt_set_log_callback() - register a log callback for crypt context */ + crypt_set_log_callback(cd, &simple_syslog_wrapper, (void *)usrprefix); + + /* send messages ithrough the crypt_log() interface */ + crypt_log(cd, CRYPT_LOG_NORMAL, "This is normal log message"); + crypt_log(cd, CRYPT_LOG_ERROR, "This is error log message"); + crypt_log(cd, CRYPT_LOG_VERBOSE, "This is verbose log message"); + crypt_log(cd, CRYPT_LOG_DEBUG, "This is debug message"); + + /* release crypt context */ + crypt_free(cd); + + /* Initialize default (global) log callback */ + crypt_set_log_callback(NULL, &simple_syslog_wrapper, NULL); + + crypt_log(NULL, CRYPT_LOG_NORMAL, "This is normal log message"); + crypt_log(NULL, CRYPT_LOG_ERROR, "This is error log message"); + crypt_log(NULL, CRYPT_LOG_VERBOSE, "This is verbose log message"); + crypt_log(NULL, CRYPT_LOG_DEBUG, "This is debug message"); + + closelog(); + return 0; +} diff --git a/docs/examples/crypt_luks_usage.c b/docs/examples/crypt_luks_usage.c new file mode 100644 index 0000000..1af6f54 --- /dev/null +++ b/docs/examples/crypt_luks_usage.c @@ -0,0 +1,250 @@ +/* + * libcryptsetup API - using LUKS device example + * + * Copyright (C) 2011-2019 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 + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This file is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this file; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#include +#include +#include +#include +#include +#include +#include + +static int format_and_add_keyslots(const char *path) +{ + struct crypt_device *cd; + int r; + + /* + * The crypt_init() call is used to initialize crypt_device context, + * The path parameter specifies a device path. + * + * For path, you can use either link to a file or block device. + * The loopback device will be detached automatically. + */ + + r = crypt_init(&cd, path); + if (r < 0) { + printf("crypt_init() failed for %s.\n", path); + return r; + } + + printf("Context is attached to block device %s.\n", crypt_get_device_name(cd)); + + /* + * So far, no data were written to the device. + */ + printf("Device %s will be formatted as a LUKS device after 5 seconds.\n" + "Press CTRL+C now if you want to cancel this operation.\n", path); + sleep(5); + + /* + * NULLs for uuid and volume_key means that these attributes will be + * generated during crypt_format(). + */ + r = crypt_format(cd, /* crypt context */ + CRYPT_LUKS2, /* LUKS2 is a new LUKS format; use CRYPT_LUKS1 for LUKS1 */ + "aes", /* used cipher */ + "xts-plain64", /* used block mode and IV */ + NULL, /* generate UUID */ + NULL, /* generate volume key from RNG */ + 512 / 8, /* 512bit key - here AES-256 in XTS mode, size is in bytes */ + NULL); /* default parameters */ + + if (r < 0) { + printf("crypt_format() failed on device %s\n", crypt_get_device_name(cd)); + crypt_free(cd); + return r; + } + + /* + * The device now contains a LUKS header, but there is no active keyslot. + * + * crypt_keyslot_add_* call stores the volume_key in the encrypted form into the keyslot. + * + * After format, the volume key is stored internally. + */ + r = crypt_keyslot_add_by_volume_key(cd, /* crypt context */ + CRYPT_ANY_SLOT, /* just use first free slot */ + NULL, /* use internal volume key */ + 0, /* unused (size of volume key) */ + "foo", /* passphrase - NULL means query*/ + 3); /* size of passphrase */ + + if (r < 0) { + printf("Adding keyslot failed.\n"); + crypt_free(cd); + return r; + } + + printf("The first keyslot is initialized.\n"); + + /* + * Add another keyslot, now authenticating with the first keyslot. + * It decrypts the volume key from the first keyslot and creates a new one with the specified passphrase. + */ + r = crypt_keyslot_add_by_passphrase(cd, /* crypt context */ + CRYPT_ANY_SLOT, /* just use first free slot */ + "foo", 3, /* passphrase for the old keyslot */ + "bar", 3); /* passphrase for the new kesylot */ + if (r < 0) { + printf("Adding keyslot failed.\n"); + crypt_free(cd); + return r; + } + + printf("The second keyslot is initialized.\n"); + + crypt_free(cd); + return 0; +} + +static int activate_and_check_status(const char *path, const char *device_name) +{ + struct crypt_device *cd; + struct crypt_active_device cad; + int r; + + /* + * LUKS device activation example. + */ + r = crypt_init(&cd, path); + if (r < 0) { + printf("crypt_init() failed for %s.\n", path); + return r; + } + + /* + * crypt_load() is used to load existing LUKS header from a block device + */ + r = crypt_load(cd, /* crypt context */ + CRYPT_LUKS, /* requested type - here LUKS of any type */ + NULL); /* additional parameters (not used) */ + + if (r < 0) { + printf("crypt_load() failed on device %s.\n", crypt_get_device_name(cd)); + crypt_free(cd); + return r; + } + + /* + * Device activation creates a device-mapper device with the specified name. + */ + r = crypt_activate_by_passphrase(cd, /* crypt context */ + device_name, /* device name to activate */ + CRYPT_ANY_SLOT,/* the keyslot use (try all here) */ + "foo", 3, /* passphrase */ + CRYPT_ACTIVATE_READONLY); /* flags */ + if (r < 0) { + printf("Device %s activation failed.\n", device_name); + crypt_free(cd); + return r; + } + + printf("%s device %s/%s is active.\n", crypt_get_type(cd), crypt_get_dir(), device_name); + printf("\tcipher used: %s\n", crypt_get_cipher(cd)); + printf("\tcipher mode: %s\n", crypt_get_cipher_mode(cd)); + printf("\tdevice UUID: %s\n", crypt_get_uuid(cd)); + + /* + * Get info about the active device. + */ + r = crypt_get_active_device(cd, device_name, &cad); + if (r < 0) { + printf("Get info about active device %s failed.\n", device_name); + crypt_deactivate(cd, device_name); + crypt_free(cd); + return r; + } + + printf("Active device parameters for %s:\n" + "\tDevice offset (in sectors): %" PRIu64 "\n" + "\tIV offset (in sectors) : %" PRIu64 "\n" + "\tdevice size (in sectors) : %" PRIu64 "\n" + "\tread-only flag : %s\n", + device_name, cad.offset, cad.iv_offset, cad.size, + cad.flags & CRYPT_ACTIVATE_READONLY ? "1" : "0"); + + crypt_free(cd); + return 0; +} + +static int handle_active_device(const char *device_name) +{ + struct crypt_device *cd; + int r; + + /* + * crypt_init_by_name() initializes context by an active device-mapper name + */ + r = crypt_init_by_name(&cd, device_name); + if (r < 0) { + printf("crypt_init_by_name() failed for %s.\n", device_name); + return r; + } + + if (crypt_status(cd, device_name) == CRYPT_ACTIVE) + printf("Device %s is still active.\n", device_name); + else { + printf("Something failed perhaps, device %s is not active.\n", device_name); + crypt_free(cd); + return -1; + } + + /* + * crypt_deactivate() is used to deactivate a device + */ + r = crypt_deactivate(cd, device_name); + if (r < 0) { + printf("crypt_deactivate() failed.\n"); + crypt_free(cd); + return r; + } + + printf("Device %s is now deactivated.\n", device_name); + + crypt_free(cd); + return 0; +} + +int main(int argc, char **argv) +{ + if (geteuid()) { + printf("Using of libcryptsetup requires super user privileges.\n"); + return 1; + } + + if (argc != 2) { + printf("usage: ./crypt_luks_usage \n" + " refers to either a regular file or a block device.\n" + " WARNING: the file or device will be wiped.\n"); + return 2; + } + + if (format_and_add_keyslots(argv[1])) + return 3; + + if (activate_and_check_status(argv[1], "example_device")) + return 4; + + if (handle_active_device("example_device")) + return 5; + + return 0; +} diff --git a/docs/on-disk-format-luks2.pdf b/docs/on-disk-format-luks2.pdf new file mode 100644 index 0000000000000000000000000000000000000000..f4ecda31ae4e11ec9551f44a5cb3a894bea9d0f6 GIT binary patch literal 290651 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 literal 0 HcmV?d00001 diff --git a/docs/on-disk-format.pdf b/docs/on-disk-format.pdf new file mode 100644 index 0000000000000000000000000000000000000000..7f6e5e7e14b9710d386214a83734aebbd7b5000a GIT binary patch literal 119729 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 z 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ξ8`yoaaf(@$6_Nf4ujyBTOV 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�UxWzh6GV{GS~mUgX*;rO%= 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 i(z=lU{;4}T8#p?
wBKu^YiY97x>Z5c^lDSr<^}9ZZ0ioi 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, 2015, 2016, 2017, 2018, 2019. +# +# Konventioner +# argument -> argument +# deferred -> udskudt +# iteration -> iteration (gennemløb) +# parameter -> parameter +# probe -> undersøge (bedre mulighed?) +# reencryption -> omkryptering +# suspended -> suspenderet (skal det være standset i stedet for?) +# wipe -> rydde +# +msgid "" +msgstr "" +"Project-Id-Version: cryptsetup-2.1.0\n" +"Report-Msgid-Bugs-To: dm-crypt@saout.de\n" +"POT-Creation-Date: 2019-11-01 09:04+0100\n" +"PO-Revision-Date: 2019-03-03 22:35+0200\n" +"Last-Translator: Joe Hansen \n" +"Language-Team: Danish \n" +"Language: da\n" +"MIME-Version: 1.0\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" + +#: lib/libdevmapper.c:384 +msgid "Cannot initialize device-mapper, running as non-root user." +msgstr "Kan ikke initialisere enhedsoversætter, kører som ikke-root bruger." + +#: lib/libdevmapper.c:387 +msgid "Cannot initialize device-mapper. Is dm_mod kernel module loaded?" +msgstr "Kan ikke initialisere enhedsoversætter. Er dm_mod-kernemodulet indlæst?" + +#: lib/libdevmapper.c:1082 +msgid "Requested deferred flag is not supported." +msgstr "Det anmodede udskudte flag er ikke understøttet." + +#: lib/libdevmapper.c:1149 +#, c-format +msgid "DM-UUID for device %s was truncated." +msgstr "DM-UUID for enheden %s blev afkortet." + +#: lib/libdevmapper.c:1463 +#, fuzzy +msgid "Unknown dm target type." +msgstr "Ukendt PBKDF-type %s." + +#: lib/libdevmapper.c:1565 lib/libdevmapper.c:1617 +msgid "Requested dm-crypt performance options are not supported." +msgstr "Forespurgte dm-crypt-ydelsestilvalg er ikke understøttede." + +#: lib/libdevmapper.c:1572 +msgid "Requested dm-verity data corruption handling options are not supported." +msgstr "Forespurgte dm-verity-håndteringstilvalg for datakorruption er ikke understøttede." + +#: lib/libdevmapper.c:1576 +msgid "Requested dm-verity FEC options are not supported." +msgstr "Forespurgte dm-verity FEC-tilvalg er ikke understøttede." + +#: lib/libdevmapper.c:1580 +msgid "Requested data integrity options are not supported." +msgstr "Forespurgte dataintegritetstilvalg er ikke understøttede." + +#: lib/libdevmapper.c:1582 +msgid "Requested sector_size option is not supported." +msgstr "Forespurgte sector_size-tilvalg er ikke understøttet." + +#: lib/libdevmapper.c:1587 +msgid "Requested automatic recalculation of integrity tags is not supported." +msgstr "Forespurgte automatiske genberegning af integritetsmærker er ikke understøttet." + +#: lib/libdevmapper.c:1591 +#, fuzzy +msgid "Requested dm-integrity bitmap mode is not supported." +msgstr "Forespurgte dataintegritetstilvalg er ikke understøttede." + +#: lib/libdevmapper.c:1620 +msgid "Discard/TRIM is not supported." +msgstr "Discard/TRIM %s er ikke understøttet." + +#: lib/libdevmapper.c:2511 +#, c-format +msgid "Failed to query dm-%s segment." +msgstr "Kunne ikke forespørge dm-%s-segment." + +#: lib/random.c:80 +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" +msgstr "" +"Systemet har ikke nok entropi til oprettelse af diskenhedsnøgle.\n" +"Flyt venligst musen eller indtast noget tekst i et andet vindue for at samle nogle vilkårlige hændelser.\n" + +#: lib/random.c:84 +#, c-format +msgid "Generating key (%d%% done).\n" +msgstr "Opretter nøgle (%d%% færdig).\n" + +#: lib/random.c:170 +msgid "Running in FIPS mode." +msgstr "Kører i FIPS-tilstand." + +#: lib/random.c:176 +msgid "Fatal error during RNG initialisation." +msgstr "Fatal fejl under RNG-initialisering." + +#: lib/random.c:213 +msgid "Unknown RNG quality requested." +msgstr "Der blev anmodt om ukendt RNG-kvalitet." + +#: lib/random.c:218 +msgid "Error reading from RNG." +msgstr "Der opstod en fejl under læsning fra RNG." + +#: lib/setup.c:223 +msgid "Cannot initialize crypto RNG backend." +msgstr "Kan ikke initialisere crypto RNG-motor." + +#: lib/setup.c:229 +msgid "Cannot initialize crypto backend." +msgstr "Kan ikke initialisere crypto-motor." + +#: lib/setup.c:260 lib/setup.c:1990 lib/verity/verity.c:120 +#, c-format +msgid "Hash algorithm %s not supported." +msgstr "Hashalgoritmen %s er ikke understøttet." + +#: lib/setup.c:263 lib/loopaes/loopaes.c:90 +#, c-format +msgid "Key processing error (using hash %s)." +msgstr "Nøglebehandlingsfejl (der bruger hash %s)." + +#: lib/setup.c:324 lib/setup.c:351 +msgid "Cannot determine device type. Incompatible activation of device?" +msgstr "Kan ikke bestemme enhedstype. Er aktivering af enhed ikke kompatibel?" + +#: lib/setup.c:330 lib/setup.c:2985 +msgid "This operation is supported only for LUKS device." +msgstr "Denne operation er kun understøttet for LUKS-enhed." + +#: lib/setup.c:357 +msgid "This operation is supported only for LUKS2 device." +msgstr "Denne operation er kun understøttet for LUKS2-enhed." + +#: lib/setup.c:412 lib/luks2/luks2_reencrypt.c:2345 +msgid "All key slots full." +msgstr "Alle nøglepladser er udfyldt." + +#: lib/setup.c:423 +#, c-format +msgid "Key slot %d is invalid, please select between 0 and %d." +msgstr "Nøglepladsen %d er ugyldig, vælg venligst mellem 0 og %d." + +#: lib/setup.c:429 +#, c-format +msgid "Key slot %d is full, please select another one." +msgstr "Nøglepladsen %d er fuld, vælg venligst en anden." + +#: lib/setup.c:514 lib/setup.c:2759 +#, fuzzy +msgid "Device size is not aligned to device logical block size." +msgstr "Enhedsstørrelsen er ikke justeret til den anmodede sektorstørrelse." + +#: lib/setup.c:610 +#, c-format +msgid "Header detected but device %s is too small." +msgstr "Teksthoved registreret men enheden %s er for lille." + +#: lib/setup.c:647 +msgid "This operation is not supported for this device type." +msgstr "Denne operation er ikke understøttet for denne enhedstype." + +#: lib/setup.c:652 +#, fuzzy +msgid "Illegal operation with reencryption in-progress." +msgstr "Frakoblet omkryptering i gang. Afbryder." + +#: lib/setup.c:821 lib/luks1/keymanage.c:476 +#, c-format +msgid "Unsupported LUKS version %d." +msgstr "LUKS-version %d er ikke understøttet." + +#: lib/setup.c:838 lib/setup.c:1483 lib/setup.c:1903 +msgid "Detached metadata device is not supported for this crypt type." +msgstr "Frakoblet metadataenhed er ikke understøttet for denne crypttype." + +#: lib/setup.c:1373 lib/setup.c:2479 lib/setup.c:2551 lib/setup.c:2563 +#: lib/setup.c:2712 lib/setup.c:4310 +#, c-format +msgid "Device %s is not active." +msgstr "Enheden %s er ikke aktiv." + +#: lib/setup.c:1390 +#, c-format +msgid "Underlying device for crypt device %s disappeared." +msgstr "Underliggende enhed for cryptenheden %s forsvandt." + +#: lib/setup.c:1468 +msgid "Invalid plain crypt parameters." +msgstr "Ugyldige rene crypt-parametre." + +#: lib/setup.c:1473 lib/setup.c:1893 src/integritysetup.c:73 +msgid "Invalid key size." +msgstr "Ugyldig nøglestørrelse." + +#: lib/setup.c:1478 lib/setup.c:1898 lib/setup.c:2100 +msgid "UUID is not supported for this crypt type." +msgstr "UUID er ikke understøttet for denne crypttype." + +#: lib/setup.c:1493 lib/setup.c:1683 lib/luks2/luks2_reencrypt.c:2308 +#: src/cryptsetup.c:1169 +msgid "Unsupported encryption sector size." +msgstr "Sektorstørrelsen på krypteringen er ikke understøttet." + +#: lib/setup.c:1501 lib/setup.c:1808 lib/setup.c:2753 +msgid "Device size is not aligned to requested sector size." +msgstr "Enhedsstørrelsen er ikke justeret til den anmodede sektorstørrelse." + +#: lib/setup.c:1552 lib/setup.c:1671 +msgid "Can't format LUKS without device." +msgstr "Kan ikke formatere LUKS uden enhed." + +#: lib/setup.c:1558 lib/setup.c:1677 +msgid "Requested data alignment is not compatible with data offset." +msgstr "Forespurgte datajustering er ikke kompatibel med dataforskydning." + +#: lib/setup.c:1626 lib/setup.c:1795 +msgid "WARNING: Data offset is outside of currently available data device.\n" +msgstr "ADVARSEL: Dataforskydning er uden for nuværende tilgængelige dataenhed.\n" + +#: lib/setup.c:1636 lib/setup.c:1823 lib/setup.c:1844 lib/setup.c:2112 +#, c-format +msgid "Cannot wipe header on device %s." +msgstr "Kan ikke rydde teksthoved på enheden %s." + +#: lib/setup.c:1688 +msgid "WARNING: The device activation will fail, dm-crypt is missing support for requested encryption sector size.\n" +msgstr "ADVARSEL: Enhedsaktiveringen vil fejle, dm-crypt mangler understøttelse for anmodet størrelse på krypteringssektor.\n" + +#: lib/setup.c:1710 +msgid "Volume key is too small for encryption with integrity extensions." +msgstr "Diskenhedsnøglen er for lille til kryptering med integritetsudvidelser." + +#: lib/setup.c:1765 +#, c-format +msgid "Cipher %s-%s (key size %zd bits) is not available." +msgstr "Krypteringsalgoritmen %s-%s (nøglestørrelse %zd bit) er ikke tilgængelig." + +#: lib/setup.c:1798 +#, c-format +msgid "WARNING: LUKS2 metadata size changed to % bytes.\n" +msgstr "" + +#: lib/setup.c:1802 +#, c-format +msgid "WARNING: LUKS2 keyslots area size changed to % bytes.\n" +msgstr "" + +#: lib/setup.c:1826 lib/utils_device.c:829 lib/luks1/keyencryption.c:256 +#: lib/luks2/luks2_reencrypt.c:2356 lib/luks2/luks2_reencrypt.c:3348 +#, c-format +msgid "Device %s is too small." +msgstr "Enheden %s er for lille." + +#: lib/setup.c:1837 lib/setup.c:1863 +#, c-format +msgid "Cannot format device %s in use." +msgstr "Kan ikke formatere enheden %s i brug." + +#: lib/setup.c:1840 lib/setup.c:1866 +#, c-format +msgid "Cannot format device %s, permission denied." +msgstr "Kan ikke formatere enheden %s, tilladelse nægtet." + +#: lib/setup.c:1852 lib/setup.c:2164 +#, c-format +msgid "Cannot format integrity for device %s." +msgstr "Kan ikke formatere integritet for enheden %s." + +#: lib/setup.c:1870 +#, c-format +msgid "Cannot format device %s." +msgstr "Kan ikke formatere enheden %s." + +#: lib/setup.c:1888 +msgid "Can't format LOOPAES without device." +msgstr "Kan ikke formatere LOOPAES uden enhed." + +#: lib/setup.c:1933 +msgid "Can't format VERITY without device." +msgstr "Kan ikke formatere VERITY uden enhed." + +#: lib/setup.c:1944 lib/verity/verity.c:103 +#, c-format +msgid "Unsupported VERITY hash type %d." +msgstr "VERITY-hashtypen %d er ikke understøttet." + +#: lib/setup.c:1950 lib/verity/verity.c:111 +msgid "Unsupported VERITY block size." +msgstr "VERITY-blokstørrelse er ikke understøttet." + +#: lib/setup.c:1955 lib/verity/verity.c:75 +msgid "Unsupported VERITY hash offset." +msgstr "VERITY-hashforskydning er ikke understøttet." + +#: lib/setup.c:1960 +msgid "Unsupported VERITY FEC offset." +msgstr "VERITY FEC-forskydning er ikke understøttet." + +#: lib/setup.c:1984 +msgid "Data area overlaps with hash area." +msgstr "Dataområde overlapper med hashområde." + +#: lib/setup.c:2009 +msgid "Hash area overlaps with FEC area." +msgstr "Dataområde overlapper med FEC-område." + +#: lib/setup.c:2016 +msgid "Data area overlaps with FEC area." +msgstr "Dataområde overlapper med FEC-område." + +#: lib/setup.c:2221 +#, c-format +msgid "Unknown crypt device type %s requested." +msgstr "Der blev anmodt om ukendt crypt-enhedstype %s." + +#: lib/setup.c:2485 lib/setup.c:2557 lib/setup.c:2570 +#, c-format +msgid "Unsupported parameters on device %s." +msgstr "Ikke understøttede parametre på enheden %s." + +#: lib/setup.c:2491 lib/setup.c:2576 lib/luks2/luks2_reencrypt.c:2408 +#: lib/luks2/luks2_reencrypt.c:2718 +#, c-format +msgid "Mismatching parameters on device %s." +msgstr "Parametre matcher ikke på enheden %s." + +#: lib/setup.c:2596 +msgid "Crypt devices mismatch." +msgstr "" + +#: lib/setup.c:2633 lib/setup.c:2638 lib/luks2/luks2_reencrypt.c:2054 +#: lib/luks2/luks2_reencrypt.c:3126 +#, fuzzy, c-format +msgid "Failed to reload device %s." +msgstr "Kunne ikke køre stat på enheden %s." + +#: lib/setup.c:2643 lib/setup.c:2648 lib/luks2/luks2_reencrypt.c:2025 +#: lib/luks2/luks2_reencrypt.c:2032 +#, fuzzy, c-format +msgid "Failed to suspend device %s." +msgstr "Kunne ikke køre stat på enheden %s." + +#: lib/setup.c:2653 lib/luks2/luks2_reencrypt.c:2039 +#: lib/luks2/luks2_reencrypt.c:3061 lib/luks2/luks2_reencrypt.c:3130 +#, fuzzy, c-format +msgid "Failed to resume device %s." +msgstr "Kunne ikke køre stat på enheden %s." + +#: lib/setup.c:2667 +#, c-format +msgid "Fatal error while reloading device %s (on top of device %s)." +msgstr "" + +#: lib/setup.c:2670 lib/setup.c:2672 +#, fuzzy, c-format +msgid "Failed to switch device %s to dm-error." +msgstr "Kunne ikke køre stat på enheden %s." + +#: lib/setup.c:2744 +msgid "Cannot resize loop device." +msgstr "Kan ikke ændre størrelse på loop-enhed." + +#: lib/setup.c:2817 +msgid "Do you really want to change UUID of device?" +msgstr "Ønsker du at ændre UUID for enhed?" + +#: lib/setup.c:2893 +msgid "Header backup file does not contain compatible LUKS header." +msgstr "Sikkerhedskopifilen indeholder ikke gyldige LUKS-teksthoveder." + +#: lib/setup.c:2993 +#, c-format +msgid "Volume %s is not active." +msgstr "Diskenheden %s er ikke aktiv." + +#: lib/setup.c:3004 +#, c-format +msgid "Volume %s is already suspended." +msgstr "Diskenheden %s er allerede suspenderet." + +#: lib/setup.c:3017 +#, c-format +msgid "Suspend is not supported for device %s." +msgstr "Suspension er ikke understøttet for enheden %s." + +#: lib/setup.c:3019 +#, c-format +msgid "Error during suspending device %s." +msgstr "Fejl under suspension af enheden %s." + +#: lib/setup.c:3052 lib/setup.c:3119 +#, c-format +msgid "Volume %s is not suspended." +msgstr "Diskenheden %s er ikke suspenderet." + +#: lib/setup.c:3081 +#, c-format +msgid "Resume is not supported for device %s." +msgstr "Genoptag er ikke understøttet for enheden %s." + +#: lib/setup.c:3083 lib/setup.c:3151 +#, c-format +msgid "Error during resuming device %s." +msgstr "Fejl under genoptagelse af enheden %s." + +#: lib/setup.c:3219 lib/setup.c:3407 +msgid "Cannot add key slot, all slots disabled and no volume key provided." +msgstr "Kan ikke tilføje nøgleplads, alle pladser er deaktiveret og ingen diskenhedsnøgle tilbudt." + +#: lib/setup.c:3359 +msgid "Failed to swap new key slot." +msgstr "Kunne ikke swappe ny nøgleplads." + +#: lib/setup.c:3524 lib/setup.c:4161 lib/setup.c:4174 lib/setup.c:4182 +#: lib/setup.c:4195 lib/setup.c:4480 lib/setup.c:5593 +msgid "Volume key does not match the volume." +msgstr "Diskenhedsnøgle matcher ikke diskenheden." + +#: lib/setup.c:3545 +#, c-format +msgid "Key slot %d is invalid." +msgstr "Nøglepladsen %d er ugyldig." + +#: lib/setup.c:3551 src/cryptsetup.c:1511 src/cryptsetup.c:1856 +#, c-format +msgid "Keyslot %d is not active." +msgstr "Nøglepladsen %d er ikke aktiv." + +#: lib/setup.c:3570 +msgid "Device header overlaps with data area." +msgstr "Enhedsteksthoved overlapper med dataområde." + +#: lib/setup.c:3836 +#, fuzzy +msgid "Reencryption in-progress. Cannot activate device." +msgstr "Omkryptering er allerede i gang." + +#: lib/setup.c:3838 lib/luks2/luks2_json_metadata.c:2244 +#: lib/luks2/luks2_reencrypt.c:2817 +#, fuzzy +msgid "Failed to get reencryption lock." +msgstr "Kunne ikke indhente skrivelås for enheden." + +#: lib/setup.c:3851 lib/luks2/luks2_reencrypt.c:2836 +#, fuzzy +msgid "LUKS2 reencryption recovery failed." +msgstr "Sektorstørrelsen på krypteringen er ikke understøttet." + +#: lib/setup.c:3978 lib/setup.c:4248 +msgid "Device type is not properly initialised." +msgstr "Enhedstypen er ikke ordentlig initialiseret." + +#: lib/setup.c:4022 +#, c-format +msgid "Cannot use device %s, name is invalid or still in use." +msgstr "Kan ikke bruge enheden %s, navnet er ugyldigt eller stadig i brug." + +#: lib/setup.c:4025 +#, c-format +msgid "Device %s already exists." +msgstr "Enheden %s findes allerede." + +#: lib/setup.c:4148 +msgid "Incorrect volume key specified for plain device." +msgstr "Ukorrekt diskenhedsnøgle specificeret for ren enhed." + +#: lib/setup.c:4214 +msgid "Incorrect root hash specified for verity device." +msgstr "Ukorrekt roothash specificeret for verity-enhed." + +#: lib/setup.c:4289 lib/setup.c:4305 lib/luks2/luks2_json_metadata.c:2297 +#: src/cryptsetup.c:2527 +#, c-format +msgid "Device %s is still in use." +msgstr "Enheden %s er stadig i brug." + +#: lib/setup.c:4314 +#, c-format +msgid "Invalid device %s." +msgstr "Ugyldig enhed %s." + +#: lib/setup.c:4430 +msgid "Volume key buffer too small." +msgstr "Diskenhedsnøglebuffer er for lille." + +#: lib/setup.c:4438 +msgid "Cannot retrieve volume key for plain device." +msgstr "Kan ikke indhente diskenhedsnøgle for ren enhed." + +#: lib/setup.c:4449 +#, c-format +msgid "This operation is not supported for %s crypt device." +msgstr "Denne operation er ikke understøttet for %s crypt-enhed." + +#: lib/setup.c:4636 +msgid "Dump operation is not supported for this device type." +msgstr "Dump-operation er ikke understøttet for denne enhedstype." + +#: lib/setup.c:4947 +#, c-format +msgid "Data offset is not multiple of %u bytes." +msgstr "" + +#: lib/setup.c:5229 +#, c-format +msgid "Cannot convert device %s which is still in use." +msgstr "Kan ikke konvertere enheden %s som stadig er i brug." + +#: lib/setup.c:5526 +#, c-format +msgid "Failed to assign keyslot %u as the new volume key." +msgstr "Kunne ikke tildele nøglepladsen %u som den nye diskenhedsnøgle." + +#: lib/setup.c:5599 +msgid "Failed to initialise default LUKS2 keyslot parameters." +msgstr "Kunne ikke initialisere standardparametre for LUKS2-nøgleplads." + +#: lib/setup.c:5605 +#, c-format +msgid "Failed to assign keyslot %d to digest." +msgstr "Kunne ikke tildele nøglepladsen %d til sammendrag." + +#: lib/setup.c:5690 +msgid "Failed to load key in kernel keyring." +msgstr "Kunne ikke indlæse nøgle i kernenøglefil." + +#: lib/setup.c:5757 +msgid "Kernel keyring is not supported by the kernel." +msgstr "Kernenøglering er ikke understøttet af kernen." + +#: lib/setup.c:5767 lib/luks2/luks2_reencrypt.c:2933 +#, c-format +msgid "Failed to read passphrase from keyring (error %d)." +msgstr "Kunne ikke læse adgangsfrase fra nøglering (fejl %d)." + +#: lib/setup.c:5791 +msgid "Failed to acquire global memory-hard access serialization lock." +msgstr "" + +#: lib/utils.c:81 +msgid "Cannot get process priority." +msgstr "Kan ikke indhente procesprioritet." + +#: lib/utils.c:95 +msgid "Cannot unlock memory." +msgstr "Kan ikke låse hukommelsen op." + +#: lib/utils.c:169 lib/tcrypt/tcrypt.c:498 +msgid "Failed to open key file." +msgstr "Kunne ikke åbne nøglefil." + +#: lib/utils.c:174 +msgid "Cannot read keyfile from a terminal." +msgstr "Kan ikke læse nøglefilen fra en terminal." + +#: lib/utils.c:191 +msgid "Failed to stat key file." +msgstr "Kunne ikke køre stat på nøglefil." + +#: lib/utils.c:199 lib/utils.c:220 +msgid "Cannot seek to requested keyfile offset." +msgstr "Kan ikke søge til anmodede nøglefilsforskydning." + +#: lib/utils.c:214 lib/utils.c:229 src/utils_password.c:188 +#: src/utils_password.c:201 +msgid "Out of memory while reading passphrase." +msgstr "Ikke nok hukommelse under læsning af adgangsfrase." + +#: lib/utils.c:249 +msgid "Error reading passphrase." +msgstr "Der opstod en fejl under læsning af adgangsfrase." + +#: lib/utils.c:266 +msgid "Nothing to read on input." +msgstr "Intet at læse på inddata." + +#: lib/utils.c:273 +msgid "Maximum keyfile size exceeded." +msgstr "Nøglefilsstørrelsen er over maksimum." + +#: lib/utils.c:278 +msgid "Cannot read requested amount of data." +msgstr "Kan ikke læse den anmodede datamængde." + +#: lib/utils_device.c:188 lib/utils_storage_wrappers.c:111 +#: lib/luks1/keyencryption.c:92 +#, c-format +msgid "Device %s doesn't exist or access denied." +msgstr "Enheden %s findes ikke eller adgang nægtet." + +#: lib/utils_device.c:198 +#, c-format +msgid "Device %s is not compatible." +msgstr "Enheden %s er ikke kompatibel." + +#: lib/utils_device.c:643 +#, c-format +msgid "Device %s is too small. Need at least % bytes." +msgstr "Enheden %s er for lille. Kræver mindst % byte." + +#: lib/utils_device.c:724 +#, c-format +msgid "Cannot use device %s which is in use (already mapped or mounted)." +msgstr "Kan ikke bruge enheden %s som er i brug (allerede kortlagt eller monteret)." + +#: lib/utils_device.c:728 +#, c-format +msgid "Cannot use device %s, permission denied." +msgstr "Kan ikke bruge enheden %s, tilladelse nægtet." + +#: lib/utils_device.c:731 +#, c-format +msgid "Cannot get info about device %s." +msgstr "Kan ikke indhente information om enheden %s." + +#: lib/utils_device.c:754 +msgid "Cannot use a loopback device, running as non-root user." +msgstr "Kan ikke bruge en loopback-enhed, kører som ikke-root bruger." + +#: lib/utils_device.c:764 +msgid "Attaching loopback device failed (loop device with autoclear flag is required)." +msgstr "Vedhæftelse af loopback-enhed mislykkedes (loop-enhed med flaget autoclear er krævet)." + +#: lib/utils_device.c:810 +#, c-format +msgid "Requested offset is beyond real size of device %s." +msgstr "Anmodt forskydning er mere end den reelle størrelse for enheden %s." + +#: lib/utils_device.c:818 +#, c-format +msgid "Device %s has zero size." +msgstr "Enheden %s har nul størrelse." + +#: lib/utils_pbkdf.c:100 +msgid "Requested PBKDF target time cannot be zero." +msgstr "Anmodede PBKDF-måltidspunkt kan ikke være nul." + +#: lib/utils_pbkdf.c:106 +#, c-format +msgid "Unknown PBKDF type %s." +msgstr "Ukendt PBKDF-type %s." + +#: lib/utils_pbkdf.c:111 +#, c-format +msgid "Requested hash %s is not supported." +msgstr "Den anmodede hash %s er ikke understøttet." + +#: lib/utils_pbkdf.c:122 +msgid "Requested PBKDF type is not supported for LUKS1." +msgstr "Den anmodede PBKDF-type er ikke understøttet for LUKS1." + +#: lib/utils_pbkdf.c:128 +msgid "PBKDF max memory or parallel threads must not be set with pbkdf2." +msgstr "PBKDF maks hukommelse eller parallelle tråde må ikke angives med pbkdf2." + +#: lib/utils_pbkdf.c:133 lib/utils_pbkdf.c:143 +#, c-format +msgid "Forced iteration count is too low for %s (minimum is %u)." +msgstr "Tvungen iterationantal er for lavt for %s (minimum er %u)." + +#: lib/utils_pbkdf.c:148 +#, c-format +msgid "Forced memory cost is too low for %s (minimum is %u kilobytes)." +msgstr "Tvungen hukommelsesomkostning er for lav for %s (minimum er %u kilobyte)." + +#: lib/utils_pbkdf.c:155 +#, c-format +msgid "Requested maximum PBKDF memory cost is too high (maximum is %d kilobytes)." +msgstr "Anmodede maksimal PBKDF-hukommelsesomkostning er for høj (maksimum er %d kilobyte)." + +#: lib/utils_pbkdf.c:160 +msgid "Requested maximum PBKDF memory cannot be zero." +msgstr "Anmodede maksimal PBKDF-hukommelse kan ikke være nul." + +#: lib/utils_pbkdf.c:164 +msgid "Requested PBKDF parallel threads cannot be zero." +msgstr "Anmodede PBKDF parallelle tråde kan ikke være nul." + +#: lib/utils_pbkdf.c:184 +msgid "Only PBKDF2 is supported in FIPS mode." +msgstr "" + +#: lib/utils_benchmark.c:166 +msgid "PBKDF benchmark disabled but iterations not set." +msgstr "PBKDF-sammenligning deaktiveret men iterationer er ikke angivet." + +#: lib/utils_benchmark.c:185 +#, c-format +msgid "Not compatible PBKDF2 options (using hash algorithm %s)." +msgstr "Ikke kompatible PBKDF2-tilvalg (der bruger hash-algoritme %s)." + +#: lib/utils_benchmark.c:205 +msgid "Not compatible PBKDF options." +msgstr "Ikke kompatible PBKDF2-tilvalg." + +#: lib/utils_device_locking.c:103 +#, c-format +msgid "Locking aborted. The locking path %s/%s is unusable (not a directory or missing)." +msgstr "Låsning afbrudt. Låsestien %s/%s kan ikke bruges (ikke en mappe eller mangler)." + +#: lib/utils_device_locking.c:110 +#, c-format +msgid "WARNING: Locking directory %s/%s is missing!\n" +msgstr "ADVARSEL: Låsemappen %s/%s mangler!\n" + +#: lib/utils_device_locking.c:120 +#, c-format +msgid "Locking aborted. The locking path %s/%s is unusable (%s is not a directory)." +msgstr "Låsning afbrudt. Låsestien %s/%s kan ikke bruges (%s er ikke en mappe)." + +#: lib/utils_wipe.c:185 src/cryptsetup_reencrypt.c:933 +#: src/cryptsetup_reencrypt.c:1017 +msgid "Cannot seek to device offset." +msgstr "Kan ikke søge til enhedsforskydning." + +#: lib/utils_wipe.c:209 +#, c-format +msgid "Device wipe error, offset %." +msgstr "" + +#: lib/luks1/keyencryption.c:40 +#, c-format +msgid "" +"Failed to setup dm-crypt key mapping for device %s.\n" +"Check that kernel supports %s cipher (check syslog for more info)." +msgstr "" +"Kunne ikke opsætte dm-crypt nøgleoversættelse for enheden %s.\n" +"Kontroller at kernen understøtter krypteringsalgoritmen %s (kontroller syslog for yderligere information)." + +#: lib/luks1/keyencryption.c:45 +msgid "Key size in XTS mode must be 256 or 512 bits." +msgstr "Nøglestørrelse i XTS-tilstand skal være 256- eller 512-bit." + +#: lib/luks1/keyencryption.c:47 +msgid "Cipher specification should be in [cipher]-[mode]-[iv] format." +msgstr "Specifikation for krypteringsalgoritme skal være i [cipher]-[mode]-[iv]-format." + +#: lib/luks1/keyencryption.c:98 lib/luks1/keymanage.c:345 +#: lib/luks1/keymanage.c:636 lib/luks1/keymanage.c:1074 +#: lib/luks2/luks2_json_metadata.c:1253 lib/luks2/luks2_keyslot.c:739 +#, c-format +msgid "Cannot write to device %s, permission denied." +msgstr "Kan ikke skrive til enheden %s, tilladelse nægtet." + +#: lib/luks1/keyencryption.c:121 +msgid "Failed to open temporary keystore device." +msgstr "Kunne ikke åbne midlertidig nøglelagerenhed." + +#: lib/luks1/keyencryption.c:128 +msgid "Failed to access temporary keystore device." +msgstr "Kunne ikke tilgå midlertidig nøglelagerenhed." + +#: lib/luks1/keyencryption.c:201 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 "IO-fejl under kryptering af nøgleplads." + +#: lib/luks1/keyencryption.c:247 lib/luks1/keymanage.c:348 +#: lib/luks1/keymanage.c:589 lib/luks1/keymanage.c:639 lib/tcrypt/tcrypt.c:661 +#: lib/verity/verity.c:81 lib/verity/verity.c:179 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:1256 +#: src/cryptsetup_reencrypt.c:205 +#, c-format +msgid "Cannot open device %s." +msgstr "Kan ikke åbne enheden %s." + +#: lib/luks1/keyencryption.c:258 lib/luks2/luks2_keyslot_luks2.c:137 +msgid "IO error while decrypting keyslot." +msgstr "IO-fejl under dekryptering af nøgleplads." + +#: lib/luks1/keymanage.c:111 +#, c-format +msgid "Device %s is too small. (LUKS1 requires at least % bytes.)" +msgstr "Enheden %s er for lille. (LUKS1 kræver mindst % 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 +#, c-format +msgid "LUKS keyslot %u is invalid." +msgstr "LUKS-nøgleplads %u er ugyldig." + +#: lib/luks1/keymanage.c:229 lib/luks1/keymanage.c:473 +#: lib/luks2/luks2_json_metadata.c:1084 src/cryptsetup.c:1372 +#: src/cryptsetup.c:1498 src/cryptsetup.c:1555 src/cryptsetup.c:1611 +#: src/cryptsetup.c:1678 src/cryptsetup.c:1781 src/cryptsetup.c:1845 +#: src/cryptsetup.c:2005 src/cryptsetup.c:2194 src/cryptsetup.c:2254 +#: src/cryptsetup.c:2320 src/cryptsetup.c:2484 src/cryptsetup.c:3137 +#: src/cryptsetup.c:3146 src/cryptsetup_reencrypt.c:1372 +#, c-format +msgid "Device %s is not a valid LUKS device." +msgstr "Enheden %s er ikke en gyldig LUKS-enhed." + +#: lib/luks1/keymanage.c:247 lib/luks2/luks2_json_metadata.c:1101 +#, c-format +msgid "Requested header backup file %s already exists." +msgstr "Den anmodede sikkerhedskopifil %s for teksthoveder findes allerede." + +#: lib/luks1/keymanage.c:249 lib/luks2/luks2_json_metadata.c:1103 +#, c-format +msgid "Cannot create header backup file %s." +msgstr "Kan ikke oprette sikkerhedskopifilen %s for teksthoveder." + +#: lib/luks1/keymanage.c:256 lib/luks2/luks2_json_metadata.c:1110 +#, c-format +msgid "Cannot write header backup file %s." +msgstr "Kan ikke skrive sikkerhedskopifilen %sf for teksthoveder." + +#: lib/luks1/keymanage.c:287 lib/luks2/luks2_json_metadata.c:1162 +msgid "Backup file doesn't contain valid LUKS header." +msgstr "Sikkerhedskopifilen indeholder ikke gyldige LUKS-teksthoveder." + +#: lib/luks1/keymanage.c:300 lib/luks1/keymanage.c:550 +#: lib/luks2/luks2_json_metadata.c:1183 +#, c-format +msgid "Cannot open header backup file %s." +msgstr "Kan ikke åbne sikkerhedskopifilen %s for teksthoveder." + +#: lib/luks1/keymanage.c:308 lib/luks2/luks2_json_metadata.c:1191 +#, c-format +msgid "Cannot read header backup file %s." +msgstr "Kan ikke læse sikkerhedskopifilen %s for teksthoveder." + +#: lib/luks1/keymanage.c:318 +msgid "Data offset or key size differs on device and backup, restore failed." +msgstr "Dataforskydning eller nøglestørrelse er forskellige på enhed eller sikkerhedskopi, gendannelse mislykkedes." + +#: lib/luks1/keymanage.c:326 +#, c-format +msgid "Device %s %s%s" +msgstr "Enheden %s %s%s" + +#: lib/luks1/keymanage.c:327 +msgid "does not contain LUKS header. Replacing header can destroy data on that device." +msgstr "indeholder ikke LUKS-teksthoveder. Erstatning af teksthoved kan ødelægge data på den enhed." + +#: lib/luks1/keymanage.c:328 +msgid "already contains LUKS header. Replacing header will destroy existing keyslots." +msgstr "indeholder allerede LUKS-teksthoveder. Erstatning af teksthoveder vil ødelægge eksisterende nøglepladser." + +#: lib/luks1/keymanage.c:329 lib/luks2/luks2_json_metadata.c:1225 +msgid "" +"\n" +"WARNING: real device header has different UUID than backup!" +msgstr "" +"\n" +"ADVARSEL: reel enhedsteksthoved har en anden UUID end sikkerhedskopien!" + +#: lib/luks1/keymanage.c:376 +msgid "Non standard key size, manual repair required." +msgstr "Nøglestørrelsen følger ikke standarden, en manuel reparation er krævet." + +#: lib/luks1/keymanage.c:381 +msgid "Non standard keyslots alignment, manual repair required." +msgstr "Nøglepladsopstillingen følger ikke standarden, en manuel reparation er krævet." + +#: lib/luks1/keymanage.c:391 +msgid "Repairing keyslots." +msgstr "Reparerer nøglepladser." + +#: lib/luks1/keymanage.c:410 +#, c-format +msgid "Keyslot %i: offset repaired (%u -> %u)." +msgstr "Nøgleplads %i: forskydning repareret (%u -> %u)." + +#: lib/luks1/keymanage.c:418 +#, c-format +msgid "Keyslot %i: stripes repaired (%u -> %u)." +msgstr "Nøgleplads %i: striber (»stripes«) repareret (%u -> %u)." + +#: lib/luks1/keymanage.c:427 +#, c-format +msgid "Keyslot %i: bogus partition signature." +msgstr "Nøgleplads %i: falsk partitionssignatur." + +#: lib/luks1/keymanage.c:432 +#, c-format +msgid "Keyslot %i: salt wiped." +msgstr "Nøgleplads %i: salt ryddet." + +#: lib/luks1/keymanage.c:449 +msgid "Writing LUKS header to disk." +msgstr "Skriver LUKS-teksthovedet til disken." + +#: lib/luks1/keymanage.c:454 +msgid "Repair failed." +msgstr "Reparation mislykkedes." + +#: lib/luks1/keymanage.c:482 lib/luks1/keymanage.c:751 +#, c-format +msgid "Requested LUKS hash %s is not supported." +msgstr "Den anmodede LUKS-hash %s er ikke understøttet." + +#: lib/luks1/keymanage.c:510 src/cryptsetup.c:1081 +msgid "No known problems detected for LUKS header." +msgstr "Ingen kendte problemer registreret for LUKS-teksthoved." + +#: lib/luks1/keymanage.c:661 +#, c-format +msgid "Error during update of LUKS header on device %s." +msgstr "Fejl under opdatering af LUKS-teksthoved på enheden %s." + +#: lib/luks1/keymanage.c:669 +#, c-format +msgid "Error re-reading LUKS header after update on device %s." +msgstr "Fejl under genlæsning af LUKS-teksthoved efter opdatering på enheden %s." + +#: lib/luks1/keymanage.c:745 +msgid "Data offset for LUKS header must be either 0 or higher than header size." +msgstr "Dataforskydning for LUKS-teksthoved skal være enten 0 eller større end teksthovedstørrelse." + +#: lib/luks1/keymanage.c:756 lib/luks1/keymanage.c:821 +#: lib/luks2/luks2_json_format.c:283 lib/luks2/luks2_json_metadata.c:1002 +#: src/cryptsetup.c:2647 +msgid "Wrong LUKS UUID format provided." +msgstr "Forkert LUKS UUID-format anført." + +#: lib/luks1/keymanage.c:779 +msgid "Cannot create LUKS header: reading random salt failed." +msgstr "Kan ikke oprette LUKS-teksthoved: læsning af vilkårlig salt mislykkedes." + +#: lib/luks1/keymanage.c:800 +#, c-format +msgid "Cannot create LUKS header: header digest failed (using hash %s)." +msgstr "Kan ikke oprette LUKS-teksthoved: Teksthovedsammendrag mislykkedes (bruger hash %s)." + +#: lib/luks1/keymanage.c:844 +#, c-format +msgid "Key slot %d active, purge first." +msgstr "Nøgleplads %d aktiv, nulstil (purge) den først." + +#: lib/luks1/keymanage.c:850 +#, c-format +msgid "Key slot %d material includes too few stripes. Header manipulation?" +msgstr "Nøgleplads %d-materiale inkluderer for få striber (»stribes«). Teksthovedmanipulering?" + +#: lib/luks1/keymanage.c:1060 +#, c-format +msgid "Key slot %d is invalid, please select keyslot between 0 and %d." +msgstr "Nøgleplads %d er ugyldig, vælg nøgleplads mellem 0 og %d." + +#: lib/luks1/keymanage.c:1078 lib/luks2/luks2_keyslot.c:743 +#, c-format +msgid "Cannot wipe device %s." +msgstr "Kan ikke rydde enheden %s." + +#: lib/loopaes/loopaes.c:146 +msgid "Detected not yet supported GPG encrypted keyfile." +msgstr "Registreret endnu ikke understøttet GPG-krypteret nøglefil." + +#: lib/loopaes/loopaes.c:147 +msgid "Please use gpg --decrypt | cryptsetup --keyfile=- ...\n" +msgstr "Brug venligst gpg --decrypt | cryptsetup --keyfile=- ...\n" + +#: lib/loopaes/loopaes.c:168 lib/loopaes/loopaes.c:188 +msgid "Incompatible loop-AES keyfile detected." +msgstr "Ikke kompatibel loop-AES-nøglefil registreret." + +#: lib/loopaes/loopaes.c:245 +msgid "Kernel doesn't support loop-AES compatible mapping." +msgstr "Kerne understøtter ikke loop-AES-kompatibel oversættelse." + +#: lib/tcrypt/tcrypt.c:505 +#, c-format +msgid "Error reading keyfile %s." +msgstr "Fejl under læsning af nøglefilen %s." + +#: lib/tcrypt/tcrypt.c:545 +#, c-format +msgid "Maximum TCRYPT passphrase length (%d) exceeded." +msgstr "Den maksimale længde for TCRYPT-adgangsfrasen (%d) er overskredet." + +#: lib/tcrypt/tcrypt.c:586 +#, c-format +msgid "PBKDF2 hash algorithm %s not available, skipping." +msgstr "PBKDF2-hashalgoritmen %s er ikke tilgængelig, udelader." + +#: lib/tcrypt/tcrypt.c:602 src/cryptsetup.c:959 +msgid "Required kernel crypto interface not available." +msgstr "Krævet kernegrænseflade for crypto er ikke tilgængelig." + +#: lib/tcrypt/tcrypt.c:604 src/cryptsetup.c:961 +msgid "Ensure you have algif_skcipher kernel module loaded." +msgstr "Sikr dig at du har kernemodulet algif_skcipher indlæst." + +#: lib/tcrypt/tcrypt.c:744 +#, c-format +msgid "Activation is not supported for %d sector size." +msgstr "Aktivering er endnu ikke understøttet for %d sektorstørrelse." + +#: lib/tcrypt/tcrypt.c:750 +msgid "Kernel doesn't support activation for this TCRYPT legacy mode." +msgstr "Kerne understøtter ikke aktivering for denne TCRYPT legacy-tilstand." + +#: lib/tcrypt/tcrypt.c:784 +#, c-format +msgid "Activating TCRYPT system encryption for partition %s." +msgstr "Aktivering af TCRYPT-systemkryptering for partition %s." + +#: lib/tcrypt/tcrypt.c:862 +msgid "Kernel doesn't support TCRYPT compatible mapping." +msgstr "Kerne undersøtter ikke TCRYPT-kompatibel oversættelse." + +#: lib/tcrypt/tcrypt.c:1084 +msgid "This function is not supported without TCRYPT header load." +msgstr "Denne funktion er ikke understøttet uden TCRYPT-teksthovedindlæsning." + +#: lib/verity/verity.c:69 lib/verity/verity.c:172 +#, c-format +msgid "Verity device %s doesn't use on-disk header." +msgstr "Verity-enheden %s bruger ikke on-disk-teksthoved." + +#: lib/verity/verity.c:91 +#, c-format +msgid "Device %s is not a valid VERITY device." +msgstr "Enheden %s er ikke en gyldig VERITY-enhed." + +#: lib/verity/verity.c:98 +#, c-format +msgid "Unsupported VERITY version %d." +msgstr "Ikke understøttet VERITY-version %d." + +#: lib/verity/verity.c:129 +msgid "VERITY header corrupted." +msgstr "VERITY-teksthovedet er ødelagt." + +#: lib/verity/verity.c:166 +#, c-format +msgid "Wrong VERITY UUID format provided on device %s." +msgstr "Forkert VERITY UUID-format indeholdt på enheden %s." + +#: lib/verity/verity.c:199 +#, c-format +msgid "Error during update of verity header on device %s." +msgstr "Fejl under opdatering af verity-teksthoved på enheden %s." + +#: lib/verity/verity.c:262 +msgid "Errors cannot be repaired with FEC device." +msgstr "Fejl kan ikke repareres med FEC-enhed." + +#: lib/verity/verity.c:264 +#, c-format +msgid "Found %u repairable errors with FEC device." +msgstr "Fandt %u fejl der kan repareres med FEC-enhed." + +#: lib/verity/verity.c:302 +msgid "Kernel doesn't support dm-verity mapping." +msgstr "Kerne understøtter ikke dm-verity-oversættelse." + +#: lib/verity/verity.c:313 +msgid "Verity device detected corruption after activation." +msgstr "Verity-enheden registrerede korruption efter aktivering." + +#: lib/verity/verity_hash.c:59 +#, c-format +msgid "Spare area is not zeroed at position %." +msgstr "Ledigt område nulstilles ikke (»not zeroed«) på position %." + +#: lib/verity/verity_hash.c:160 lib/verity/verity_hash.c:287 +#: lib/verity/verity_hash.c:300 +msgid "Device offset overflow." +msgstr "Forskydningsoverløb for enhed." + +#: lib/verity/verity_hash.c:200 +#, c-format +msgid "Verification failed at position %." +msgstr "Verificering mislykkedes på position %." + +#: lib/verity/verity_hash.c:273 +msgid "Invalid size parameters for verity device." +msgstr "Ugyldig størrelse for parametre for verity-enhed." + +#: lib/verity/verity_hash.c:293 +msgid "Hash area overflow." +msgstr "Hashområdeoverløb." + +#: lib/verity/verity_hash.c:370 +msgid "Verification of data area failed." +msgstr "Verifikation af dataområde mislykkedes." + +#: lib/verity/verity_hash.c:375 +msgid "Verification of root hash failed." +msgstr "Verifikation af root-hash mislykkedes." + +#: lib/verity/verity_hash.c:381 +msgid "Input/output error while creating hash area." +msgstr "Inddata/uddata-fejl under oprettelse af hash-område." + +#: lib/verity/verity_hash.c:383 +msgid "Creation of hash area failed." +msgstr "Oprettelse af hash-område mislykkedes." + +#: lib/verity/verity_hash.c:430 +#, c-format +msgid "WARNING: Kernel cannot activate device if data block size exceeds page size (%u)." +msgstr "ADVARSEL: Kerne kan ikke aktivere enhed hvis dataenes blokstørrelse er større end sidestørrelsen (%u)." + +#: lib/verity/verity_fec.c:132 +msgid "Failed to allocate RS context." +msgstr "Kunne ikke allokere RS-kontekst." + +#: lib/verity/verity_fec.c:147 +msgid "Failed to allocate buffer." +msgstr "Kunne ikke allokere buffer." + +#: lib/verity/verity_fec.c:157 +#, c-format +msgid "Failed to read RS block % byte %d." +msgstr "Kunne ikke læse RS-blok % byte %d." + +#: lib/verity/verity_fec.c:170 +#, c-format +msgid "Failed to read parity for RS block %." +msgstr "Kunne ikke læse paritet for RS-blok %." + +#: lib/verity/verity_fec.c:178 +#, c-format +msgid "Failed to repair parity for block %." +msgstr "Kunne ikke reparere paritet for blok %." + +#: lib/verity/verity_fec.c:189 +#, c-format +msgid "Failed to write parity for RS block %." +msgstr "Kunne ikke skrive paritet for RS-blok %.." + +#: lib/verity/verity_fec.c:224 +msgid "Block sizes must match for FEC." +msgstr "Blokstørrelser skal matche for FEC." + +#: lib/verity/verity_fec.c:230 +msgid "Invalid number of parity bytes." +msgstr "Ugyldigt antal paritetsbyte." + +#: lib/verity/verity_fec.c:266 +#, c-format +msgid "Failed to determine size for device %s." +msgstr "Kunne ikke bestemme størrelsen på enheden %s." + +#: lib/integrity/integrity.c:241 lib/integrity/integrity.c:306 +msgid "Kernel doesn't support dm-integrity mapping." +msgstr "Kerne understøtter ikke dm-verity-oversættelse." + +#: lib/luks2/luks2_disk_metadata.c:383 lib/luks2/luks2_json_metadata.c:959 +#: lib/luks2/luks2_json_metadata.c:1245 +#, c-format +msgid "Failed to acquire write lock on device %s." +msgstr "Kunne ikke indhente skrivelås på enheden %s." + +#: lib/luks2/luks2_disk_metadata.c:392 +msgid "Detected attempt for concurrent LUKS2 metadata update. Aborting operation." +msgstr "" + +#: 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 "" +"Enhed indeholder tvetydige signaturer, kan ikke gendanne LUKS2 automatisk.\n" +"Kør venligst »cryptsetup repair« for gendannelse." + +#: lib/luks2/luks2_json_format.c:227 +msgid "Requested data offset is too small." +msgstr "Forespurgte dataforskydning er for lille." + +#: 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 "ADVARSEL: nøglepladsområde (% byte) er meget lille, tilgængelige LUKS2-nøglepladsantal er meget begrænset.\n" + +#: lib/luks2/luks2_json_metadata.c:946 lib/luks2/luks2_json_metadata.c:1075 +#: lib/luks2/luks2_json_metadata.c:1151 lib/luks2/luks2_keyslot_luks2.c:92 +#: lib/luks2/luks2_keyslot_luks2.c:114 +#, c-format +msgid "Failed to acquire read lock on device %s." +msgstr "Kunne ikke indhente læselås på enheden %s." + +#: lib/luks2/luks2_json_metadata.c:1168 +#, c-format +msgid "Forbidden LUKS2 requirements detected in backup %s." +msgstr "Forbudt LUKS2-krav registreret i sikkerhedskopien %s." + +#: lib/luks2/luks2_json_metadata.c:1209 +msgid "Data offset differ on device and backup, restore failed." +msgstr "Dataforskydning er forskellig på enhed eller sikkerhedskopi, gendannelse mislykkedes." + +#: lib/luks2/luks2_json_metadata.c:1215 +msgid "Binary header with keyslot areas size differ on device and backup, restore failed." +msgstr "Binær teksthoved med nøglepladsområdestørrelse er forskellige på enhed eller sikkerhedskopi, gendannelse mislykkedes." + +#: lib/luks2/luks2_json_metadata.c:1222 +#, c-format +msgid "Device %s %s%s%s%s" +msgstr "Enheden %s %s%s%s%s" + +#: lib/luks2/luks2_json_metadata.c:1223 +msgid "does not contain LUKS2 header. Replacing header can destroy data on that device." +msgstr "indeholder ikke LUKS2-teksthoveder. Erstatning af teksthoved kan ødelægge data på den enhed." + +#: lib/luks2/luks2_json_metadata.c:1224 +msgid "already contains LUKS2 header. Replacing header will destroy existing keyslots." +msgstr "indeholder allerede LUKS2-teksthoveder. Erstatning af teksthoveder vil ødelægge eksisterende nøglepladser." + +#: lib/luks2/luks2_json_metadata.c:1226 +msgid "" +"\n" +"WARNING: unknown LUKS2 requirements detected in real device header!\n" +"Replacing header with backup may corrupt the data on that device!" +msgstr "" +"\n" +"ADVARSEL: Ukendte LUKS2-krav registreret i reel enhedsteksthoved!\n" +"Erstatning af teksthoved med sikkerhedskopi kan ødelægge data på den enhed!" + +#: lib/luks2/luks2_json_metadata.c:1228 +msgid "" +"\n" +"WARNING: Unfinished offline reencryption detected on the device!\n" +"Replacing header with backup may corrupt data." +msgstr "" +"\n" +"ADVARSEL: Ufærdig frakoblet omkryptering registreret på enheden!\n" +"Erstatning af teksthoved med sikkerhedskopi kan ødelægge data." + +#: lib/luks2/luks2_json_metadata.c:1324 +#, c-format +msgid "Ignored unknown flag %s." +msgstr "Ignorerede ukendt flag %s." + +#: lib/luks2/luks2_json_metadata.c:2011 lib/luks2/luks2_reencrypt.c:1746 +#, c-format +msgid "Missing key for dm-crypt segment %u" +msgstr "" + +#: lib/luks2/luks2_json_metadata.c:2023 lib/luks2/luks2_reencrypt.c:1764 +#, fuzzy +msgid "Failed to set dm-crypt segment." +msgstr "Kunne ikke forespørge dm-%s-segment." + +#: lib/luks2/luks2_json_metadata.c:2029 lib/luks2/luks2_reencrypt.c:1770 +#, fuzzy +msgid "Failed to set dm-linear segment." +msgstr "Kunne ikke forespørge dm-%s-segment." + +#: lib/luks2/luks2_json_metadata.c:2156 +msgid "Unsupported device integrity configuration." +msgstr "" + +#: lib/luks2/luks2_json_metadata.c:2242 +msgid "Reencryption in-progress. Cannot deactivate device." +msgstr "" + +#: lib/luks2/luks2_json_metadata.c:2253 lib/luks2/luks2_reencrypt.c:3171 +#, c-format +msgid "Failed to replace suspended device %s with dm-error target." +msgstr "" + +#: lib/luks2/luks2_json_metadata.c:2333 +msgid "Failed to read LUKS2 requirements." +msgstr "Kunne ikke læse LUKS2-krav." + +#: lib/luks2/luks2_json_metadata.c:2340 +msgid "Unmet LUKS2 requirements detected." +msgstr "Uopfyldte LUKS2-krav registreret." + +#: lib/luks2/luks2_json_metadata.c:2348 +msgid "Offline reencryption in progress. Aborting." +msgstr "Frakoblet omkryptering i gang. Afbryder." + +#: lib/luks2/luks2_json_metadata.c:2350 +#, fuzzy +msgid "Online reencryption in progress. Aborting." +msgstr "Frakoblet omkryptering i gang. Afbryder." + +#: lib/luks2/luks2_keyslot.c:552 lib/luks2/luks2_keyslot.c:589 +msgid "Not enough available memory to open a keyslot." +msgstr "" + +#: lib/luks2/luks2_keyslot.c:554 lib/luks2/luks2_keyslot.c:591 +#, fuzzy +msgid "Keyslot open failed." +msgstr "Nøgleplads %i: salt ryddet." + +#: lib/luks2/luks2_keyslot_luks2.c:53 lib/luks2/luks2_keyslot_luks2.c:108 +#, fuzzy, c-format +msgid "Cannot use %s-%s cipher for keyslot encryption." +msgstr "LUKS2-nøgleplads: krypteringsalgoritmen brugt for nøglepladskryptering" + +#: lib/luks2/luks2_keyslot_luks2.c:480 +msgid "No space for new keyslot." +msgstr "Ingen plads for ny nøgleplads." + +#: lib/luks2/luks2_luks1_convert.c:481 +#, fuzzy, c-format +msgid "Cannot check status of device with uuid: %s." +msgstr "Kan ikke kontrollere status for enheden med uuid: %s." + +#: lib/luks2/luks2_luks1_convert.c:507 +msgid "Unable to convert header with LUKSMETA additional metadata." +msgstr "Kan ikke konvertere teksthoved med yderligere metadata for LUKSMETA." + +#: lib/luks2/luks2_luks1_convert.c:547 +msgid "Unable to move keyslot area. Not enough space." +msgstr "Kan ikke flytte nøglepladsområde. Ikke nok plads." + +#: lib/luks2/luks2_luks1_convert.c:590 lib/luks2/luks2_luks1_convert.c:872 +msgid "Unable to move keyslot area." +msgstr "Kan ikke flytte nøglepladsområde." + +#: lib/luks2/luks2_luks1_convert.c:682 +#, fuzzy +msgid "Cannot convert to LUKS1 format - default segment encryption sector size is not 512 bytes." +msgstr "" +"Kan ikke konvertere til LUKS1-format - nøglepladsen %u er ikke\n" +"LUKS1-kompatibel." + +#: lib/luks2/luks2_luks1_convert.c:690 +msgid "Cannot convert to LUKS1 format - key slot digests are not LUKS1 compatible." +msgstr "Kan ikke konverterer til LUKS1-format - nøglepladssammendrag er ikke LUKS1-kompatibel." + +#: lib/luks2/luks2_luks1_convert.c:702 +#, c-format +msgid "Cannot convert to LUKS1 format - device uses wrapped key cipher %s." +msgstr "" +"Kan ikke konverterer til LUKS1-format - enheden bruger omsluttet\n" +"nøglekrypteringsalgoritme %s." + +#: lib/luks2/luks2_luks1_convert.c:710 +#, c-format +msgid "Cannot convert to LUKS1 format - LUKS2 header contains %u token(s)." +msgstr "" +"Kan ikke konverterer til LUKS1-format - LUKS2-teksthoved indeholder\n" +"%u symboler (tokens)." + +#: lib/luks2/luks2_luks1_convert.c:724 +#, c-format +msgid "Cannot convert to LUKS1 format - keyslot %u is in invalid state." +msgstr "Kan ikke konvertere til LUKS1-format - nøgleplads %u er i ugyldig tilstand." + +#: lib/luks2/luks2_luks1_convert.c:729 +#, c-format +msgid "Cannot convert to LUKS1 format - slot %u (over maximum slots) is still active." +msgstr "" +"Kan ikke konverterer til LUKS1-format - plads %u (over maksimalt antal pladser)\n" +"er stadig aktiv." + +#: lib/luks2/luks2_luks1_convert.c:734 +#, c-format +msgid "Cannot convert to LUKS1 format - keyslot %u is not LUKS1 compatible." +msgstr "" +"Kan ikke konvertere til LUKS1-format - nøglepladsen %u er ikke\n" +"LUKS1-kompatibel." + +#: lib/luks2/luks2_reencrypt.c:892 +#, c-format +msgid "Hotzone size must be multiple of calculated zone alignment (%zu bytes)." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:897 +#, fuzzy, c-format +msgid "Device size must be multiple of calculated zone alignment (%zu bytes)." +msgstr "Enhedsstørrelsen for %s er ikke justeret til den anmodede sektorstørrelse (%u byte)." + +#: lib/luks2/luks2_reencrypt.c:941 +#, fuzzy, c-format +msgid "Unsupported resilience mode %s" +msgstr "Ikke understøttede parametre på enheden %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:3011 +#, fuzzy +msgid "Failed to initialize old segment storage wrapper." +msgstr "Kunne ikke initialisere enhedssignaturundersøgelser." + +#: lib/luks2/luks2_reencrypt.c:1172 lib/luks2/luks2_reencrypt.c:1291 +#, fuzzy +msgid "Failed to initialize new segment storage wrapper." +msgstr "Kunne ikke initialisere enhedssignaturundersøgelser." + +#: lib/luks2/luks2_reencrypt.c:1340 +#, fuzzy +msgid "Failed to read checksums for current hotzone." +msgstr "Kunne ikke læse krav fra sikkerhedskopiteksthoved." + +#: lib/luks2/luks2_reencrypt.c:1347 lib/luks2/luks2_reencrypt.c:3019 +#, fuzzy, c-format +msgid "Failed to read hotzone area starting at %." +msgstr "Kunne ikke læse paritet for RS-blok %." + +#: lib/luks2/luks2_reencrypt.c:1366 +#, fuzzy, c-format +msgid "Failed to decrypt sector %zu." +msgstr "Kunne ikke køre stat på enheden %s." + +#: lib/luks2/luks2_reencrypt.c:1372 +#, fuzzy, c-format +msgid "Failed to recover sector %zu." +msgstr "Kunne ikke bestemme størrelsen på enheden %s." + +#: lib/luks2/luks2_reencrypt.c:1867 +#, c-format +msgid "Source and target device sizes don't match. Source %, target: %." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:1965 +#, fuzzy, c-format +msgid "Failed to activate hotzone device %s." +msgstr "Kunne ikke køre stat på enheden %s." + +#: lib/luks2/luks2_reencrypt.c:1982 +#, fuzzy, c-format +msgid "Failed to activate overlay device %s with actual origin table." +msgstr "Kunne ikke undersøge enheden %s for en signatur." + +#: lib/luks2/luks2_reencrypt.c:1989 +#, fuzzy, c-format +msgid "Failed to load new mapping for device %s." +msgstr "Kunne ikke bestemme størrelsen på enheden %s." + +#: lib/luks2/luks2_reencrypt.c:2060 +#, fuzzy +msgid "Failed to refresh reencryption devices stack." +msgstr "Kunne ikke indhente læselås på enheden %s." + +#: lib/luks2/luks2_reencrypt.c:2216 +#, fuzzy +msgid "Failed to set new keyslots area size." +msgstr "Kunne ikke swappe ny nøgleplads." + +#: lib/luks2/luks2_reencrypt.c:2318 +#, fuzzy, c-format +msgid "Data shift is not aligned to requested encryption sector size (% bytes)." +msgstr "Enhedsstørrelsen for %s er ikke justeret til den anmodede sektorstørrelse (%u byte)." + +#: lib/luks2/luks2_reencrypt.c:2339 +#, fuzzy, c-format +msgid "Data device is not aligned to requested encryption sector size (% bytes)." +msgstr "Enhedsstørrelsen for %s er ikke justeret til den anmodede sektorstørrelse (%u byte)." + +#: lib/luks2/luks2_reencrypt.c:2360 +#, c-format +msgid "Data shift (% sectors) is less than future data offset (% sectors)." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:2366 lib/luks2/luks2_reencrypt.c:2760 +#: lib/luks2/luks2_reencrypt.c:2781 +#, fuzzy, c-format +msgid "Failed to open %s in exclusive mode (already mapped or mounted)." +msgstr "Kan ikke bruge enheden %s som er i brug (allerede kortlagt eller monteret)." + +#: lib/luks2/luks2_reencrypt.c:2534 +#, fuzzy +msgid "No LUKS2 reencryption in progress." +msgstr "Omkryptering er allerede i gang." + +#: lib/luks2/luks2_reencrypt.c:2540 lib/luks2/luks2_reencrypt.c:3276 +#, fuzzy +msgid "Failed to load LUKS2 reencryption context." +msgstr "Kunne ikke allokere RS-kontekst." + +#: lib/luks2/luks2_reencrypt.c:2600 +#, fuzzy +msgid "Failed to get reencryption state." +msgstr "Kunne ikke indhente symbolet %d for eksport." + +#: lib/luks2/luks2_reencrypt.c:2604 +#, fuzzy +msgid "Device is not in reencryption." +msgstr "Enheden %s er ikke aktiv." + +#: lib/luks2/luks2_reencrypt.c:2611 +#, fuzzy +msgid "Reencryption process is already running." +msgstr "Omkryptering er allerede i gang." + +#: lib/luks2/luks2_reencrypt.c:2613 +#, fuzzy +msgid "Failed to acquire reencryption lock." +msgstr "Kunne ikke indhente skrivelås for enheden." + +#: lib/luks2/luks2_reencrypt.c:2631 +msgid "Cannot proceed with reencryption. Run reencryption recovery first." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:2731 +#, fuzzy +msgid "Active device size and requested reencryption size don't match." +msgstr "Enhedsstørrelsen er ikke justeret til den anmodede sektorstørrelse." + +#: lib/luks2/luks2_reencrypt.c:2745 +msgid "Illegal device size requested in reencryption parameters." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:2815 +#, fuzzy +msgid "Reencryption in-progress. Cannot perform recovery." +msgstr "Omkryptering er allerede i gang." + +#: lib/luks2/luks2_reencrypt.c:2887 +msgid "LUKS2 reencryption already initialized in metadata." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:2894 +#, fuzzy +msgid "Failed to initialize LUKS2 reencryption in metadata." +msgstr "Kunne ikke initialisere standardparametre for LUKS2-nøgleplads." + +#: lib/luks2/luks2_reencrypt.c:2985 +#, fuzzy +msgid "Failed to set device segments for next reencryption hotzone." +msgstr "Kunne ikke undersøge enheden %s for en signatur." + +#: lib/luks2/luks2_reencrypt.c:3027 +#, fuzzy +msgid "Failed to write reencryption resilience metadata." +msgstr "Kunne ikke skrive aktiveringsflag til nyt teksthoved." + +#: lib/luks2/luks2_reencrypt.c:3034 +#, fuzzy +msgid "Decryption failed." +msgstr "Reparation mislykkedes." + +#: lib/luks2/luks2_reencrypt.c:3039 +#, fuzzy, c-format +msgid "Failed to write hotzone area starting at %." +msgstr "Kunne ikke skrive paritet for RS-blok %.." + +#: lib/luks2/luks2_reencrypt.c:3044 +#, fuzzy +msgid "Failed to sync data." +msgstr "Kunne ikke angive dataforskydning." + +#: lib/luks2/luks2_reencrypt.c:3052 +msgid "Failed to update metadata after current reencryption hotzone completed." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:3119 +#, fuzzy +msgid "Failed to write LUKS2 metadata." +msgstr "Kunne ikke læse LUKS2-krav." + +#: lib/luks2/luks2_reencrypt.c:3142 +#, fuzzy +msgid "Failed to wipe backup segment data." +msgstr "Kunne ikke rydde enhedssignatur." + +#: lib/luks2/luks2_reencrypt.c:3155 +#, fuzzy +msgid "Failed to disable reencryption requirement flag." +msgstr "Kunne ikke læse LUKS2-krav." + +#: lib/luks2/luks2_reencrypt.c:3163 +#, c-format +msgid "Fatal error while reencrypting chunk starting at %, % sectors long." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:3172 +msgid "Do not resume the device unless replaced with error target manually." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:3221 +msgid "Cannot proceed with reencryption. Unexpected reencryption status." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:3227 +msgid "Missing or invalid reencrypt context." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:3234 +#, fuzzy +msgid "Failed to initialize reencryption device stack." +msgstr "Kunne ikke initialisere enhedssignaturundersøgelser." + +#: lib/luks2/luks2_reencrypt.c:3253 lib/luks2/luks2_reencrypt.c:3289 +#, fuzzy +msgid "Failed to update reencryption context." +msgstr "Kunne ikke allokere RS-kontekst." + +#: lib/luks2/luks2_token.c:262 +msgid "No free token slot." +msgstr "Ingen frie symbolpladser." + +#: lib/luks2/luks2_token.c:269 +#, c-format +msgid "Failed to create builtin token %s." +msgstr "Kunne ikke oprette indbygget symbol %s." + +#: src/cryptsetup.c:162 +msgid "Can't do passphrase verification on non-tty inputs." +msgstr "Kan ikke udføre verificering af adgangsfrase på ikke-tty-inddata." + +#: src/cryptsetup.c:215 +msgid "Keyslot encryption parameters can be set only for LUKS2 device." +msgstr "Parametre til kryptering af nøgleplads kan kun angives for LUKS2-enhed." + +#: src/cryptsetup.c:245 src/cryptsetup.c:893 src/cryptsetup.c:1212 +#: src/cryptsetup.c:3011 src/cryptsetup_reencrypt.c:715 +#: src/cryptsetup_reencrypt.c:785 +msgid "No known cipher specification pattern detected." +msgstr "Ikke kendt specifikationsmønster for krypteringsalgoritme registreret." + +#: src/cryptsetup.c:253 +msgid "WARNING: The --hash parameter is being ignored in plain mode with keyfile specified.\n" +msgstr "ADVARSEL: Parameteren --hash bliver ignoreret i ren (plain) tilstand med nøglefil specificeret.\n" + +#: src/cryptsetup.c:261 +msgid "WARNING: The --keyfile-size option is being ignored, the read size is the same as the encryption key size.\n" +msgstr "ADVARSEL: Tilvalget --keyfile-size bliver ignoreret, læsestørrelsen er den samme som størrelsen for krypteringsnøglen.\n" + +#: src/cryptsetup.c:301 +#, c-format +msgid "Detected device signature(s) on %s. Proceeding further may damage existing data." +msgstr "Registrerede enhedssignaturer på %s. Videre behandling kan beskadige eksisterende data." + +#: src/cryptsetup.c:307 src/cryptsetup.c:1038 src/cryptsetup.c:1090 +#: src/cryptsetup.c:1189 src/cryptsetup.c:1262 src/cryptsetup.c:1913 +#: src/cryptsetup.c:2545 src/cryptsetup.c:2668 src/integritysetup.c:232 +msgid "Operation aborted.\n" +msgstr "Operation afbrudt.\n" + +#: src/cryptsetup.c:375 +msgid "Option --key-file is required." +msgstr "Tilvalget --key-file er krævet." + +#: src/cryptsetup.c:428 +msgid "Enter VeraCrypt PIM: " +msgstr "Indtast VeraCrypt-PIM: " + +#: src/cryptsetup.c:437 +msgid "Invalid PIM value: parse error." +msgstr "Ugyldig PIM-værdi: fortolkningsfejl." + +#: src/cryptsetup.c:440 +msgid "Invalid PIM value: 0." +msgstr "Ugyldig PIM-værdi: 0." + +#: src/cryptsetup.c:443 +msgid "Invalid PIM value: outside of range." +msgstr "Ugyldig PIM-værdi: uden for interval." + +#: src/cryptsetup.c:466 +msgid "No device header detected with this passphrase." +msgstr "Intet enhedsteksthoved registreret med denne adgangsfrase." + +#: src/cryptsetup.c:528 src/cryptsetup.c:1940 +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 "" +"Teksthoveddump med diskenhedsnøgle er sensitiv information\n" +"som giver adgang til krypteret partition uden adgangsfrase.\n" +"Dette dump bør altid lagres krypteret et sikkert sted." + +#: src/cryptsetup.c:607 +#, c-format +msgid "Device %s is still active and scheduled for deferred removal.\n" +msgstr "Enheden %s er stadig aktiv og planlagt til udskudt fjernelse.\n" + +#: src/cryptsetup.c:635 +msgid "Resize of active device requires volume key in keyring but --disable-keyring option is set." +msgstr "Ændring af størrelse på aktiv enhed kræver diskenhedsnøgle i nøglering men tilvalget --disable-keyring er ikke angivet." + +#: src/cryptsetup.c:771 +msgid "Benchmark interrupted." +msgstr "Sammenligning afbrudt." + +#: src/cryptsetup.c:792 +#, c-format +msgid "PBKDF2-%-9s N/A\n" +msgstr "PBKDF2-%-9s -\n" + +#: src/cryptsetup.c:794 +#, c-format +msgid "PBKDF2-%-9s %7u iterations per second for %zu-bit key\n" +msgstr "PBKDF2-%-9s %7u iterationer per sekund for %zu-bit nøgle\n" + +#: src/cryptsetup.c:808 +#, c-format +msgid "%-10s N/A\n" +msgstr "%-10s .\n" + +#: src/cryptsetup.c:810 +#, c-format +msgid "%-10s %4u iterations, %5u memory, %1u parallel threads (CPUs) for %zu-bit key (requested %u ms time)\n" +msgstr "%-10s %4u iterationer, %5u hukommelse, %1u parallelle tråde (CPU'er) for %zu-bit nøgle (anmodet %u ms time)\n" + +#: src/cryptsetup.c:834 +msgid "Result of benchmark is not reliable." +msgstr "Sammenligningens resultat er ikke troværdigt." + +#: src/cryptsetup.c:885 +msgid "# Tests are approximate using memory only (no storage IO).\n" +msgstr "# Test bruger kun hukommelse omtrentlig (ingen lager-IO).\n" + +#. TRANSLATORS: The string is header of a table and must be exactly (right side) aligned. +#: src/cryptsetup.c:919 +#, c-format +msgid "#%*s Algorithm | Key | Encryption | Decryption\n" +msgstr "#%*s Algoritme | Nøgle | Kryptering | Dekryptering\n" + +#: src/cryptsetup.c:923 +#, c-format +msgid "Cipher %s is not available." +msgstr "Krypteringsalgoritmen %s er ikke tilgængelig." + +#. TRANSLATORS: The string is header of a table and must be exactly (right side) aligned. +#: src/cryptsetup.c:943 +msgid "# Algorithm | Key | Encryption | Decryption\n" +msgstr "# Algoritme | Nøgle | Kryptering | Dekryptering\n" + +#: src/cryptsetup.c:952 +msgid "N/A" +msgstr "-" + +#: src/cryptsetup.c:1031 +msgid "" +"Seems device does not require reencryption recovery.\n" +"Do you want to proceed anyway?" +msgstr "" + +#: src/cryptsetup.c:1037 +msgid "Really proceed with LUKS2 reencryption recovery?" +msgstr "" + +#: src/cryptsetup.c:1046 +#, fuzzy +msgid "Enter passphrase for reencryption recovery: " +msgstr "Indtast adgangsfrase for nøgleplads til konvertering: " + +#: src/cryptsetup.c:1089 +msgid "Really try to repair LUKS device header?" +msgstr "Skal LUKS-enhedsteksthovedet forsøges repareres?" + +#: src/cryptsetup.c:1108 src/integritysetup.c:145 +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 "" +"Rydder enhed for at initialisere integritetskontrolsum.\n" +"Du kan afbryde dette ved at trykke på CTRL+c (resten af ikke ryddet enhed vil indeholder ugyldig kontrolsum).\n" + +#: src/cryptsetup.c:1130 src/integritysetup.c:167 +#, c-format +msgid "Cannot deactivate temporary device %s." +msgstr "Kan ikke deaktivere midlertidig enhed %s." + +#: src/cryptsetup.c:1174 +msgid "Integrity option can be used only for LUKS2 format." +msgstr "Integritetstilvalg kan kun bruges for LUKS2-format." + +#: src/cryptsetup.c:1179 src/cryptsetup.c:1239 +msgid "Unsupported LUKS2 metadata size options." +msgstr "Indstillinger for LUKS2-metadatastørrelse er ikke understøttet." + +#: src/cryptsetup.c:1196 +#, c-format +msgid "Cannot create header file %s." +msgstr "Kan ikke oprette teksthovedfilen %s." + +#: src/cryptsetup.c:1219 src/integritysetup.c:194 src/integritysetup.c:203 +#: src/integritysetup.c:212 src/integritysetup.c:279 src/integritysetup.c:288 +#: src/integritysetup.c:298 +msgid "No known integrity specification pattern detected." +msgstr "Ikke kendt specifikationsmønster for krypteringsalgoritme registreret." + +#: src/cryptsetup.c:1232 +#, c-format +msgid "Cannot use %s as on-disk header." +msgstr "Kan ikke bruge %s på on-disk-teksthoved." + +#: src/cryptsetup.c:1256 src/integritysetup.c:226 +#, c-format +msgid "This will overwrite data on %s irrevocably." +msgstr "Dette vil uigenkaldeligt overskrive data på %s." + +#: src/cryptsetup.c:1297 src/cryptsetup.c:1627 src/cryptsetup.c:1694 +#: src/cryptsetup.c:1796 src/cryptsetup.c:1862 src/cryptsetup_reencrypt.c:545 +msgid "Failed to set pbkdf parameters." +msgstr "Kunne ikke angive pbkdf-parametre." + +#: src/cryptsetup.c:1378 +msgid "Reduced data offset is allowed only for detached LUKS header." +msgstr "Reduceret dataforskydning er kun tilladt for frakoblet LUKS-teksthoved." + +#: src/cryptsetup.c:1389 src/cryptsetup.c:1700 +msgid "Cannot determine volume key size for LUKS without keyslots, please use --key-size option." +msgstr "" + +#: src/cryptsetup.c:1427 +msgid "Device activated but cannot make flags persistent." +msgstr "Enhed aktiveret men kan ikke gøre flag vedvarende." + +#: src/cryptsetup.c:1508 src/cryptsetup.c:1578 +#, c-format +msgid "Keyslot %d is selected for deletion." +msgstr "Nøgleplads %d valgt for sletning." + +#: src/cryptsetup.c:1520 src/cryptsetup.c:1581 +msgid "This is the last keyslot. Device will become unusable after purging this key." +msgstr "Dette er den sidste nøgleplads. Enheden vil blive ubrugelig efter fjernelse af denne nøgle." + +#: src/cryptsetup.c:1521 +msgid "Enter any remaining passphrase: " +msgstr "Indtast en eventuel tilbageværende adgangsfrase: " + +#: src/cryptsetup.c:1522 src/cryptsetup.c:1583 +msgid "Operation aborted, the keyslot was NOT wiped.\n" +msgstr "Operation afbrudt, nøglepladsen var IKKE ryddet.\n" + +#: src/cryptsetup.c:1560 +msgid "Enter passphrase to be deleted: " +msgstr "Indtast adgangsfrase som skal slettes: " + +#: src/cryptsetup.c:1641 src/cryptsetup.c:1715 src/cryptsetup.c:1749 +msgid "Enter new passphrase for key slot: " +msgstr "Indtast ny adgangsfrase for nøgleplads: " + +#: src/cryptsetup.c:1732 src/cryptsetup_reencrypt.c:1327 +#, c-format +msgid "Enter any existing passphrase: " +msgstr "Indtast en eventuel eksisterende adgangsfrase: " + +#: src/cryptsetup.c:1800 +msgid "Enter passphrase to be changed: " +msgstr "Indtast adgangsfrase som skal ændres: " + +#: src/cryptsetup.c:1816 src/cryptsetup_reencrypt.c:1313 +msgid "Enter new passphrase: " +msgstr "Indtast ny adgangsfrase: " + +#: src/cryptsetup.c:1866 +msgid "Enter passphrase for keyslot to be converted: " +msgstr "Indtast adgangsfrase for nøgleplads til konvertering: " + +#: src/cryptsetup.c:1890 +msgid "Only one device argument for isLuks operation is supported." +msgstr "Kun et enhedsargument for isLuks-operation er understøttet." + +#: src/cryptsetup.c:2074 src/cryptsetup.c:2095 +msgid "Option --header-backup-file is required." +msgstr "Tilvalget --header-backup-file er krævet." + +#: src/cryptsetup.c:2125 +#, c-format +msgid "%s is not cryptsetup managed device." +msgstr "%s er ikke en cryptsetup-håndteret enhed." + +#: src/cryptsetup.c:2136 +#, c-format +msgid "Refresh is not supported for device type %s" +msgstr "Opdater er ikke understøttet for enhedstypen %s" + +#: src/cryptsetup.c:2174 +#, c-format +msgid "Unrecognized metadata device type %s." +msgstr "Metadataenhedstypen %s blev ikke genkendt." + +#: src/cryptsetup.c:2177 +msgid "Command requires device and mapped name as arguments." +msgstr "Kommandoen kræver enhedsnavn og oversat navn som argumenter." + +#: src/cryptsetup.c:2199 +#, c-format +msgid "" +"This operation will erase all keyslots on device %s.\n" +"Device will become unusable after this operation." +msgstr "" +"Denne operation vil slette alle nøglepladser på enheden %s.\n" +"Enheden vil blive ubrugelig efter denne operation." + +#: src/cryptsetup.c:2206 +msgid "Operation aborted, keyslots were NOT wiped.\n" +msgstr "Operation afbrudt, nøglepladser blev IKKE fjernet (wiped).\n" + +#: src/cryptsetup.c:2243 +msgid "Invalid LUKS type, only luks1 and luks2 are supported." +msgstr "Ugyldig LUKS-type, kun luks1 og luks2 er understøttet." + +#: src/cryptsetup.c:2261 +#, c-format +msgid "Device is already %s type." +msgstr "Enheden er allerede %s-type." + +#: src/cryptsetup.c:2266 +#, c-format +msgid "This operation will convert %s to %s format.\n" +msgstr "Denne operation vil konvertere %s til %s-format.\n" + +#: src/cryptsetup.c:2272 +msgid "Operation aborted, device was NOT converted.\n" +msgstr "Operation afbrudt, enheden blev IKKE konverteret.\n" + +#: src/cryptsetup.c:2312 +msgid "Option --priority, --label or --subsystem is missing." +msgstr "Tilvalget --priority, --label eller --subsystem mangler." + +#: src/cryptsetup.c:2346 src/cryptsetup.c:2379 src/cryptsetup.c:2402 +#, c-format +msgid "Token %d is invalid." +msgstr "Symbolet %d er ugyldigt." + +#: src/cryptsetup.c:2349 src/cryptsetup.c:2405 +#, c-format +msgid "Token %d in use." +msgstr "Symbolet %d er i brug." + +#: src/cryptsetup.c:2356 +#, c-format +msgid "Failed to add luks2-keyring token %d." +msgstr "Kunne ikke tilføje luks2-keyringsymbolet %d." + +#: src/cryptsetup.c:2365 src/cryptsetup.c:2427 +#, c-format +msgid "Failed to assign token %d to keyslot %d." +msgstr "Kunne ikke tildele symbolet %d til nøglepladsen %d." + +#: src/cryptsetup.c:2382 +#, c-format +msgid "Token %d is not in use." +msgstr "Symbolet %d er ikke i brug." + +#: src/cryptsetup.c:2417 +msgid "Failed to import token from file." +msgstr "Kunne ikke importere symbol fra fil." + +#: src/cryptsetup.c:2442 +#, c-format +msgid "Failed to get token %d for export." +msgstr "Kunne ikke indhente symbolet %d for eksport." + +#: src/cryptsetup.c:2457 +msgid "--key-description parameter is mandatory for token add action." +msgstr "parameteren --key-description er obligatorisk for symbol tilføj-handling." + +#: src/cryptsetup.c:2463 src/cryptsetup.c:2471 +msgid "Action requires specific token. Use --token-id parameter." +msgstr "Handling kræver specifik symbol. Brug parameteren --token-id." + +#: src/cryptsetup.c:2476 +#, c-format +msgid "Invalid token operation %s." +msgstr "Ugyldig symboloperation %s." + +#: src/cryptsetup.c:2531 +#, c-format +msgid "Auto-detected active dm device '%s' for data device %s.\n" +msgstr "" + +#: src/cryptsetup.c:2535 +#, fuzzy, c-format +msgid "Device %s is not a block device.\n" +msgstr "Enheden %s er ikke en gyldig LUKS-enhed." + +#: src/cryptsetup.c:2537 +#, fuzzy, c-format +msgid "Failed to auto-detect device %s holders." +msgstr "Kunne ikke køre stat på enheden %s." + +#: src/cryptsetup.c:2539 +#, 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 "" + +#: src/cryptsetup.c:2619 +#, fuzzy +msgid "Invalid LUKS device type." +msgstr "Ugyldig enhed %s." + +#: src/cryptsetup.c:2624 +msgid "Encryption without detached header (--header) is not possible without data device size reduction (--reduce-device-size)." +msgstr "" + +#: src/cryptsetup.c:2629 +msgid "Requested data offset must be less than or equal to half of --reduce-device-size parameter." +msgstr "" + +#: src/cryptsetup.c:2638 +#, c-format +msgid "Adjusting --reduce-device-size value to twice the --offset % (sectors).\n" +msgstr "" + +#: src/cryptsetup.c:2642 +#, fuzzy +msgid "Encryption is supported only for LUKS2 format." +msgstr "Integritetstilvalg kan kun bruges for LUKS2-format." + +#: src/cryptsetup.c:2664 +#, c-format +msgid "Detected LUKS device on %s. Do you want to encrypt that LUKS device again?" +msgstr "" + +#: src/cryptsetup.c:2679 +#, fuzzy, c-format +msgid "Temporary header file %s already exists. Aborting." +msgstr "Den anmodede sikkerhedskopifil %s for teksthoveder findes allerede." + +#: src/cryptsetup.c:2681 src/cryptsetup.c:2688 +#, fuzzy, c-format +msgid "Cannot create temporary header file %s." +msgstr "Kan ikke oprette teksthovedfilen %s." + +#: src/cryptsetup.c:2752 +#, c-format +msgid "%s/%s is now active and ready for online encryption." +msgstr "" + +#: src/cryptsetup.c:2919 src/cryptsetup.c:2925 +#, fuzzy +msgid "Not enough free keyslots for reencryption." +msgstr "Ændr ikke nøgle, ingen dataområdeomkryptering" + +#: src/cryptsetup.c:2945 src/cryptsetup_reencrypt.c:1284 +msgid "Key file can be used only with --key-slot or with exactly one key slot active." +msgstr "Nøglefil kan kun bruges med --key-slot eller med præcis en aktiv nøgleplads." + +#: src/cryptsetup.c:2954 src/cryptsetup_reencrypt.c:1325 +#: src/cryptsetup_reencrypt.c:1336 +#, fuzzy, c-format +msgid "Enter passphrase for key slot %d: " +msgstr "Indtast adgangsfrase for nøgleplads %u: " + +#: src/cryptsetup.c:2962 +#, c-format +msgid "Enter passphrase for key slot %u: " +msgstr "Indtast adgangsfrase for nøgleplads %u: " + +#: src/cryptsetup.c:3129 +#, fuzzy +msgid "Command requires device as argument." +msgstr "Kommandoen kræver enhedsnavn og oversat navn som argumenter." + +#: src/cryptsetup.c:3151 +msgid "Only LUKS2 format is currently supported. Please use cryptsetup-reencrypt tool for LUKS1." +msgstr "" + +#: src/cryptsetup.c:3163 +msgid "Legacy offline reencryption already in-progress. Use cryptsetup-reencrypt utility." +msgstr "" + +#: src/cryptsetup.c:3173 src/cryptsetup_reencrypt.c:178 +msgid "Reencryption of device with integrity profile is not supported." +msgstr "Omkryptering af enhed med integritetsprofil er ikke understøttet." + +#: src/cryptsetup.c:3181 +msgid "LUKS2 reencryption already initialized. Aborting operation." +msgstr "" + +#: src/cryptsetup.c:3185 +#, fuzzy +msgid "LUKS2 device is not in reencryption." +msgstr "Logfilen %s findes, genoptager omkryptering.\n" + +#: src/cryptsetup.c:3212 +msgid " [--type ] []" +msgstr " [--type ] []" + +#: src/cryptsetup.c:3212 src/veritysetup.c:358 src/integritysetup.c:470 +msgid "open device as " +msgstr "åbn enhed som " + +#: src/cryptsetup.c:3213 src/cryptsetup.c:3214 src/cryptsetup.c:3215 +#: src/veritysetup.c:359 src/veritysetup.c:360 src/integritysetup.c:471 +#: src/integritysetup.c:472 +msgid "" +msgstr "" + +#: src/cryptsetup.c:3213 src/veritysetup.c:359 src/integritysetup.c:471 +msgid "close device (remove mapping)" +msgstr "luk enhed (fjern oversættelse)" + +#: src/cryptsetup.c:3214 +msgid "resize active device" +msgstr "ændr størrelse på aktiv enhed" + +#: src/cryptsetup.c:3215 +msgid "show device status" +msgstr "vis enhedsstatus" + +#: src/cryptsetup.c:3216 +msgid "[--cipher ]" +msgstr "[--cipher ]" + +#: src/cryptsetup.c:3216 +msgid "benchmark cipher" +msgstr "krypteringsalgoritme for sammenligning" + +#: src/cryptsetup.c:3217 src/cryptsetup.c:3218 src/cryptsetup.c:3219 +#: src/cryptsetup.c:3220 src/cryptsetup.c:3221 src/cryptsetup.c:3228 +#: src/cryptsetup.c:3229 src/cryptsetup.c:3230 src/cryptsetup.c:3231 +#: src/cryptsetup.c:3232 src/cryptsetup.c:3233 src/cryptsetup.c:3234 +#: src/cryptsetup.c:3235 +msgid "" +msgstr "" + +#: src/cryptsetup.c:3217 +msgid "try to repair on-disk metadata" +msgstr "prøv at reparere on-disk-metadata" + +#: src/cryptsetup.c:3218 +#, fuzzy +msgid "reencrypt LUKS2 device" +msgstr "tilføj nøgle til LUKS-enhed" + +#: src/cryptsetup.c:3219 +msgid "erase all keyslots (remove encryption key)" +msgstr "slet alle nøglepladser (fjern krypteringsnøgle)" + +#: src/cryptsetup.c:3220 +msgid "convert LUKS from/to LUKS2 format" +msgstr "konverter LUKS fra/til LUKS2-format" + +#: src/cryptsetup.c:3221 +msgid "set permanent configuration options for LUKS2" +msgstr "angiv permanente konfigurationstilvalg for LUKS2" + +#: src/cryptsetup.c:3222 src/cryptsetup.c:3223 +msgid " []" +msgstr " []" + +#: src/cryptsetup.c:3222 +msgid "formats a LUKS device" +msgstr "formaterer en LUKS-enhed" + +#: src/cryptsetup.c:3223 +msgid "add key to LUKS device" +msgstr "tilføj nøgle til LUKS-enhed" + +#: src/cryptsetup.c:3224 src/cryptsetup.c:3225 src/cryptsetup.c:3226 +msgid " []" +msgstr " []" + +#: src/cryptsetup.c:3224 +msgid "removes supplied key or key file from LUKS device" +msgstr "fjerner leveret nøgle eller nøglefil fra LUKS-enhed" + +#: src/cryptsetup.c:3225 +msgid "changes supplied key or key file of LUKS device" +msgstr "ændrer leveret nøgle eller nøglefil for LUKS-enhed" + +#: src/cryptsetup.c:3226 +msgid "converts a key to new pbkdf parameters" +msgstr "konverterer en nøgle til nye pbkdf-parametre" + +#: src/cryptsetup.c:3227 +msgid " " +msgstr " " + +#: src/cryptsetup.c:3227 +msgid "wipes key with number from LUKS device" +msgstr "rydder nøgle med nummer fra LUKS-enhed" + +#: src/cryptsetup.c:3228 +msgid "print UUID of LUKS device" +msgstr "vis UUID for lUKS-enhed" + +#: src/cryptsetup.c:3229 +msgid "tests for LUKS partition header" +msgstr "tester for LUKS-partitionsteksthoved" + +#: src/cryptsetup.c:3230 +msgid "dump LUKS partition information" +msgstr "dump LUKS-partitionsinformation" + +#: src/cryptsetup.c:3231 +msgid "dump TCRYPT device information" +msgstr "dump TCRYPT-enhedsinformation" + +#: src/cryptsetup.c:3232 +msgid "Suspend LUKS device and wipe key (all IOs are frozen)" +msgstr "Suspender LUKS-enhed og ryd nøgle (alle IO'er fryses fast)" + +#: src/cryptsetup.c:3233 +msgid "Resume suspended LUKS device" +msgstr "Genoptag suspenderet LUKS-enhed" + +#: src/cryptsetup.c:3234 +msgid "Backup LUKS device header and keyslots" +msgstr "Lav sikkerhedskopi af LUKS-enhedsteksthoved og nøglepladser" + +#: src/cryptsetup.c:3235 +msgid "Restore LUKS device header and keyslots" +msgstr "Gendan LUKS-teksthoved og nøglepladser" + +#: src/cryptsetup.c:3236 +msgid " " +msgstr " " + +#: src/cryptsetup.c:3236 +msgid "Manipulate LUKS2 tokens" +msgstr "Manipuler LUKS2-symboler" + +#: src/cryptsetup.c:3254 src/veritysetup.c:376 src/integritysetup.c:488 +msgid "" +"\n" +" is one of:\n" +msgstr "" +"\n" +" er en af:\n" + +#: src/cryptsetup.c:3260 +msgid "" +"\n" +"You can also use old syntax aliases:\n" +"\topen: create (plainOpen), luksOpen, loopaesOpen, tcryptOpen\n" +"\tclose: remove (plainClose), luksClose, loopaesClose, tcryptClose\n" +msgstr "" +"\n" +"Du kan også bruge gamle syntaksaliasser:\n" +"\topen: create (plainOpen), luksOpen, loopaesOpen, tcryptOpen\n" +"\tclose: remove (plainClose), luksClose, loopaesClose, tcryptClose\n" + +#: src/cryptsetup.c:3264 +#, c-format +msgid "" +"\n" +" is the device to create under %s\n" +" is the encrypted device\n" +" is the LUKS key slot number to modify\n" +" optional key file for the new key for luksAddKey action\n" +msgstr "" +"\n" +" er enheden at oprette under %s\n" +" er den krypterede enhed\n" +" er LUKS-nøglens pladsnummer, der skal ændres\n" +" valgfri nøglefil for den nye nøgle for luksAddKey-handling\n" + +#: src/cryptsetup.c:3271 +#, c-format +msgid "" +"\n" +"Default compiled-in metadata format is %s (for luksFormat action).\n" +msgstr "" +"\n" +"Standardindkompileret metadataformat er %s (for luksFormat-handling).\n" + +#: src/cryptsetup.c:3276 +#, c-format +msgid "" +"\n" +"Default compiled-in key and passphrase parameters:\n" +"\tMaximum keyfile size: %dkB, Maximum interactive passphrase length %d (characters)\n" +"Default PBKDF for LUKS1: %s, iteration time: %d (ms)\n" +"Default PBKDF for LUKS2: %s\n" +"\tIteration time: %d, Memory required: %dkB, Parallel threads: %d\n" +msgstr "" +"\n" +"Standardindkompileret nøgle og adgangsfraseparametre.\n" +"\tMaksimal nøglefilsstørrelse: %dkB, Maksimal interaktiv adgangsfraselængde %d (tegn)\n" +"Standard-PBKDF for LUKS1: %s, iterationtid: %d (ms)\n" +"Standard-PBKDF for LUKS2: %s\n" +"\tTterationtid: %d, hukommelse krævet: %dkB, parallelle tråde: %d\n" + +#: src/cryptsetup.c:3287 +#, c-format +msgid "" +"\n" +"Default compiled-in device cipher parameters:\n" +"\tloop-AES: %s, Key %d bits\n" +"\tplain: %s, Key: %d bits, Password hashing: %s\n" +"\tLUKS: %s, Key: %d bits, LUKS header hashing: %s, RNG: %s\n" +msgstr "" +"\n" +"Standardindkompileret enhedskrypteringsalgoritmeparametre:\n" +"\tloop-AES: %s, Nøgle %d bit\n" +"\tplain: %s, Nøgle: %d bit, Adgangskodehashing: %s\n" +"\tLUKS: %s, Nøgle: %d bit, LUKS-teksthovedhashing: %s, RNG: %s\n" + +#: src/cryptsetup.c:3296 +msgid "\tLUKS: Default keysize with XTS mode (two internal keys) will be doubled.\n" +msgstr "\tLUKS: Standardstørrelse på nøgle med XTS-tilstand (to interne nøgler) vil blive fordoblet.\n" + +#: src/cryptsetup.c:3312 src/veritysetup.c:532 src/integritysetup.c:630 +#, c-format +msgid "%s: requires %s as arguments" +msgstr "%s: kræver %s som argumenter" + +#: src/cryptsetup.c:3350 src/veritysetup.c:421 src/integritysetup.c:527 +#: src/cryptsetup_reencrypt.c:1591 +msgid "Show this help message" +msgstr "Vis denne hjælpetekst" + +#: src/cryptsetup.c:3351 src/veritysetup.c:422 src/integritysetup.c:528 +#: src/cryptsetup_reencrypt.c:1592 +msgid "Display brief usage" +msgstr "Vis en kort brugsmanual" + +#: src/cryptsetup.c:3352 src/veritysetup.c:423 src/integritysetup.c:529 +#: src/cryptsetup_reencrypt.c:1593 +msgid "Print package version" +msgstr "Vis pakkeversion" + +#: src/cryptsetup.c:3356 src/veritysetup.c:427 src/integritysetup.c:533 +#: src/cryptsetup_reencrypt.c:1597 +msgid "Help options:" +msgstr "Hjælpetilvalg:" + +#: src/cryptsetup.c:3357 src/veritysetup.c:428 src/integritysetup.c:534 +#: src/cryptsetup_reencrypt.c:1598 +msgid "Shows more detailed error messages" +msgstr "Viser mere detaljerede fejlbeskeder" + +#: src/cryptsetup.c:3358 src/veritysetup.c:429 src/integritysetup.c:535 +#: src/cryptsetup_reencrypt.c:1599 +msgid "Show debug messages" +msgstr "Vis fejlsøgningsbeskeder" + +#: src/cryptsetup.c:3359 +msgid "Show debug messages including JSON metadata" +msgstr "Vis fejlsøgningsbeskeder inklusive JSON-metadata" + +#: src/cryptsetup.c:3360 src/cryptsetup_reencrypt.c:1601 +msgid "The cipher used to encrypt the disk (see /proc/crypto)" +msgstr "Krypteringsalgoritmen brugt til at kryptere disken (se /proc/crypto)" + +#: src/cryptsetup.c:3361 src/cryptsetup_reencrypt.c:1603 +msgid "The hash used to create the encryption key from the passphrase" +msgstr "Hashen brugt til at oprette krypteringsnøglen fra adgangsfrasen" + +#: src/cryptsetup.c:3362 +msgid "Verifies the passphrase by asking for it twice" +msgstr "Verificerer adgangsfrasen ved at anmode om den to gange" + +#: src/cryptsetup.c:3363 src/cryptsetup_reencrypt.c:1605 +msgid "Read the key from a file" +msgstr "Læs nøglen fra en fil" + +#: src/cryptsetup.c:3364 +msgid "Read the volume (master) key from file." +msgstr "Læs diskenhedens (master) nøgle fra fil." + +#: src/cryptsetup.c:3365 +msgid "Dump volume (master) key instead of keyslots info" +msgstr "Dump diskenheds (master) nøgle i stedet for information om nøgleplads" + +#: src/cryptsetup.c:3366 src/cryptsetup_reencrypt.c:1602 +msgid "The size of the encryption key" +msgstr "Krypteringsnøglens størrelse" + +#: src/cryptsetup.c:3366 src/cryptsetup.c:3425 src/integritysetup.c:553 +#: src/integritysetup.c:557 src/integritysetup.c:561 +#: src/cryptsetup_reencrypt.c:1602 +msgid "BITS" +msgstr "BIT" + +#: src/cryptsetup.c:3367 src/cryptsetup_reencrypt.c:1618 +msgid "Limits the read from keyfile" +msgstr "Begræns læsningen fra nøglefil" + +#: src/cryptsetup.c:3367 src/cryptsetup.c:3368 src/cryptsetup.c:3369 +#: src/cryptsetup.c:3370 src/cryptsetup.c:3373 src/cryptsetup.c:3422 +#: src/cryptsetup.c:3423 src/cryptsetup.c:3431 src/cryptsetup.c:3432 +#: src/veritysetup.c:432 src/veritysetup.c:433 src/veritysetup.c:434 +#: src/veritysetup.c:437 src/veritysetup.c:438 src/integritysetup.c:542 +#: src/integritysetup.c:548 src/integritysetup.c:549 +#: src/cryptsetup_reencrypt.c:1617 src/cryptsetup_reencrypt.c:1618 +#: src/cryptsetup_reencrypt.c:1619 src/cryptsetup_reencrypt.c:1620 +msgid "bytes" +msgstr "byte" + +#: src/cryptsetup.c:3368 src/cryptsetup_reencrypt.c:1617 +msgid "Number of bytes to skip in keyfile" +msgstr "Antallet af byte at udelade i nøglefil" + +#: src/cryptsetup.c:3369 +msgid "Limits the read from newly added keyfile" +msgstr "Begræns læsningnen fra nyligt tilføjet nøglefil" + +#: src/cryptsetup.c:3370 +msgid "Number of bytes to skip in newly added keyfile" +msgstr "Antallet af byte at udelade i senest tilføjet nøglefil" + +#: src/cryptsetup.c:3371 +msgid "Slot number for new key (default is first free)" +msgstr "Pladsnummer for ny nøgle (standard er den første ledige)" + +#: src/cryptsetup.c:3372 +msgid "The size of the device" +msgstr "Størrelse på enheden" + +#: src/cryptsetup.c:3372 src/cryptsetup.c:3374 src/cryptsetup.c:3375 +#: src/cryptsetup.c:3381 src/integritysetup.c:543 src/integritysetup.c:550 +msgid "SECTORS" +msgstr "SEKTORER" + +#: src/cryptsetup.c:3373 src/cryptsetup_reencrypt.c:1620 +msgid "Use only specified device size (ignore rest of device). DANGEROUS!" +msgstr "Brug kun specificeret enhedstørrelse (ignorer resten af enheden). FARLIGT!" + +#: src/cryptsetup.c:3374 +msgid "The start offset in the backend device" +msgstr "Startforskydningen i motorenheden" + +#: src/cryptsetup.c:3375 +msgid "How many sectors of the encrypted data to skip at the beginning" +msgstr "Antal sektorer med krypterede data som skal udelades i begyndelsen" + +#: src/cryptsetup.c:3376 +msgid "Create a readonly mapping" +msgstr "Opret en skrivebeskyttet oversættelse" + +#: src/cryptsetup.c:3377 src/integritysetup.c:536 +#: src/cryptsetup_reencrypt.c:1608 +msgid "Do not ask for confirmation" +msgstr "Anmod ikke om bekræftelse" + +#: src/cryptsetup.c:3378 +msgid "Timeout for interactive passphrase prompt (in seconds)" +msgstr "Tidsudløb for interaktiv adgangsfraseprompt (i sekunder)" + +#: src/cryptsetup.c:3378 src/cryptsetup.c:3379 src/integritysetup.c:537 +#: src/cryptsetup_reencrypt.c:1609 +msgid "secs" +msgstr "sek" + +#: src/cryptsetup.c:3379 src/integritysetup.c:537 +#: src/cryptsetup_reencrypt.c:1609 +msgid "Progress line update (in seconds)" +msgstr "Statuslinjeopdatering (i sekunder)" + +#: src/cryptsetup.c:3380 src/cryptsetup_reencrypt.c:1610 +msgid "How often the input of the passphrase can be retried" +msgstr "Hvor ofte inddata for adgangsfrasen kan indhentes" + +#: src/cryptsetup.c:3381 +msgid "Align payload at sector boundaries - for luksFormat" +msgstr "Juster belastning ved sektorgrænser - for luksFormat" + +#: src/cryptsetup.c:3382 +msgid "File with LUKS header and keyslots backup" +msgstr "Fil med LUKS-teksthoved og sikkerhedskopi af nøglepladser" + +#: src/cryptsetup.c:3383 src/cryptsetup_reencrypt.c:1611 +msgid "Use /dev/random for generating volume key" +msgstr "Brug /dev/random til oprettelse af diskenhedsnøgle" + +#: src/cryptsetup.c:3384 src/cryptsetup_reencrypt.c:1612 +msgid "Use /dev/urandom for generating volume key" +msgstr "Brug /dev/urandom til oprettelse af diskenhedsnøgle" + +#: src/cryptsetup.c:3385 +msgid "Share device with another non-overlapping crypt segment" +msgstr "Del enhed med et andet ikkeoverlappende kryptsegment" + +#: src/cryptsetup.c:3386 src/veritysetup.c:441 +msgid "UUID for device to use" +msgstr "UUID som enheden skal bruge" + +#: src/cryptsetup.c:3387 +msgid "Allow discards (aka TRIM) requests for device" +msgstr "Tillader fjernelsesforespørgsler (a.k.a. TRIM) for enhed" + +#: src/cryptsetup.c:3388 src/cryptsetup_reencrypt.c:1629 +msgid "Device or file with separated LUKS header" +msgstr "Enhed eller fil med adskilt LUKS-teksthoved" + +#: src/cryptsetup.c:3389 +msgid "Do not activate device, just check passphrase" +msgstr "Aktiver ikke enhed, kontroller bare adgangsfrase" + +#: src/cryptsetup.c:3390 +msgid "Use hidden header (hidden TCRYPT device)" +msgstr "Brug skjult teksthoved (skjult TCRYPT-enhed)" + +#: src/cryptsetup.c:3391 +msgid "Device is system TCRYPT drive (with bootloader)" +msgstr "Enhed er system-TCRYPT-drev (med opstartsindlæser)" + +#: src/cryptsetup.c:3392 +msgid "Use backup (secondary) TCRYPT header" +msgstr "Brug sikkerhedskopi (sekundær) TCRYPT-teksthoved" + +#: src/cryptsetup.c:3393 +msgid "Scan also for VeraCrypt compatible device" +msgstr "Skan også for VeraCrypt-kompatibel enhed" + +#: src/cryptsetup.c:3394 +msgid "Personal Iteration Multiplier for VeraCrypt compatible device" +msgstr "Personlig iterationmultiplikator for VeraCrypt-kompatibel enhed" + +#: src/cryptsetup.c:3395 +msgid "Query Personal Iteration Multiplier for VeraCrypt compatible device" +msgstr "Forespørg personlig iterationmultiplikator for VeraCrypt-kompatibel enhed" + +#: src/cryptsetup.c:3396 +#, fuzzy +msgid "Type of device metadata: luks, luks1, luks2, plain, loopaes, tcrypt" +msgstr "Type for enhedsmetadata: luks, plain, loopaes, tcrypt" + +#: src/cryptsetup.c:3397 +msgid "Disable password quality check (if enabled)" +msgstr "Deaktiver kontrol af adgangskodens kvalitet (hvis aktiveret)" + +#: src/cryptsetup.c:3398 +msgid "Use dm-crypt same_cpu_crypt performance compatibility option" +msgstr "Brug tilvalgene dm-crypt og same_cpu_crypt for ydelseskompatibilitet" + +#: src/cryptsetup.c:3399 +msgid "Use dm-crypt submit_from_crypt_cpus performance compatibility option" +msgstr "Brug tilvalgene dm-crypt og submit_from_crypt_cpus for ydelseskompatibilitet" + +#: src/cryptsetup.c:3400 +msgid "Device removal is deferred until the last user closes it" +msgstr "Enhedsfjernelse er udskudt indtil den sidste bruger lukker enheden" + +#: src/cryptsetup.c:3401 +msgid "Use global lock to serialize memory hard PBKDF (OOM workaround)" +msgstr "" + +#: src/cryptsetup.c:3402 +msgid "PBKDF iteration time for LUKS (in ms)" +msgstr "PBKDF-iterationstid for LUKS (i ms)" + +#: src/cryptsetup.c:3402 src/cryptsetup_reencrypt.c:1607 +msgid "msecs" +msgstr "ms" + +#: src/cryptsetup.c:3403 src/cryptsetup_reencrypt.c:1625 +msgid "PBKDF algorithm (for LUKS2): argon2i, argon2id, pbkdf2" +msgstr "PBKDF-algoritme (for LUKS2): argon2i, argon2id, pbkdf2" + +#: src/cryptsetup.c:3404 src/cryptsetup_reencrypt.c:1626 +msgid "PBKDF memory cost limit" +msgstr "PBKDF-hukommelsesomkostningsbegrænsning" + +#: src/cryptsetup.c:3404 src/cryptsetup_reencrypt.c:1626 +msgid "kilobytes" +msgstr "kilobyte" + +#: src/cryptsetup.c:3405 src/cryptsetup_reencrypt.c:1627 +msgid "PBKDF parallel cost" +msgstr "PBKDF-parallel omkostning" + +#: src/cryptsetup.c:3405 src/cryptsetup_reencrypt.c:1627 +msgid "threads" +msgstr "tråde" + +#: src/cryptsetup.c:3406 src/cryptsetup_reencrypt.c:1628 +msgid "PBKDF iterations cost (forced, disables benchmark)" +msgstr "PBKDF-iterationsomkostning (tvunget, deaktiverer sammenligning)" + +#: src/cryptsetup.c:3407 +msgid "Keyslot priority: ignore, normal, prefer" +msgstr "Nøglepladsprioritet: ignore, normal, prefer" + +#: src/cryptsetup.c:3408 +msgid "Disable locking of on-disk metadata" +msgstr "Deaktiver låsning af on-disk-metadata" + +#: src/cryptsetup.c:3409 +msgid "Disable loading volume keys via kernel keyring" +msgstr "Deaktiver indlæsning af diskenhedsnøgler via kernenøglering" + +#: src/cryptsetup.c:3410 +msgid "Data integrity algorithm (LUKS2 only)" +msgstr "Dataintegritetsalgoritme (kun LUKS2)" + +#: src/cryptsetup.c:3411 src/integritysetup.c:564 +msgid "Disable journal for integrity device" +msgstr "Deaktiver journal for integritetsenhed" + +#: src/cryptsetup.c:3412 src/integritysetup.c:538 +msgid "Do not wipe device after format" +msgstr "Ryd ikke enhed efter formatering" + +#: src/cryptsetup.c:3413 +msgid "Do not ask for passphrase if activation by token fails" +msgstr "Spørg ikke om adgangsfrase hvis aktivering via symbol mislykkes" + +#: src/cryptsetup.c:3414 +msgid "Token number (default: any)" +msgstr "Symbolnummer (standard: alle)" + +#: src/cryptsetup.c:3415 +msgid "Key description" +msgstr "Nøglebeskrivelse" + +#: src/cryptsetup.c:3416 +msgid "Encryption sector size (default: 512 bytes)" +msgstr "Sektorstørrelse for kryptering (standard: 512 byte)" + +#: src/cryptsetup.c:3417 +msgid "Set activation flags persistent for device" +msgstr "Angiv aktiveringsflag vedvarende for enhed" + +#: src/cryptsetup.c:3418 +msgid "Set label for the LUKS2 device" +msgstr "Angiv etiket for LUKS2-enhed" + +#: src/cryptsetup.c:3419 +msgid "Set subsystem label for the LUKS2 device" +msgstr "Angiv undersystemetiket for LUKS2-enhed" + +#: src/cryptsetup.c:3420 +msgid "Create unbound (no assigned data segment) LUKS2 keyslot" +msgstr "Opret ubunden (intet tildelt datasegment) LUKS2-nøgleplads" + +#: src/cryptsetup.c:3421 +msgid "Read or write the json from or to a file" +msgstr "Læs eller skriv json fra eller til en fil" + +#: src/cryptsetup.c:3422 +msgid "LUKS2 header metadata area size" +msgstr "Størrelse på metadataområdet for LUKS2-teksthovedet" + +#: src/cryptsetup.c:3423 +msgid "LUKS2 header keyslots area size" +msgstr "Størrelse på nøglepladsområdet for LUKS2-teksthovedet" + +#: src/cryptsetup.c:3424 +msgid "Refresh (reactivate) device with new parameters" +msgstr "Opdater (genaktiver) enhed med nye parametre" + +#: src/cryptsetup.c:3425 +msgid "LUKS2 keyslot: The size of the encryption key" +msgstr "LUKS2-nøgleplads: Krypteringsnøglens størrelse" + +#: src/cryptsetup.c:3426 +msgid "LUKS2 keyslot: The cipher used for keyslot encryption" +msgstr "LUKS2-nøgleplads: krypteringsalgoritmen brugt for nøglepladskryptering" + +#: src/cryptsetup.c:3427 +#, fuzzy +msgid "Encrypt LUKS2 device (in-place encryption)." +msgstr "Dekrypter enhed permanent (fjern kryptering)" + +#: src/cryptsetup.c:3428 +#, fuzzy +msgid "Decrypt LUKS2 device (remove encryption)." +msgstr "Dekrypter enhed permanent (fjern kryptering)" + +#: src/cryptsetup.c:3429 +msgid "Initialize LUKS2 reencryption in metadata only." +msgstr "" + +#: src/cryptsetup.c:3430 +msgid "Resume initialized LUKS2 reencryption only." +msgstr "" + +#: src/cryptsetup.c:3431 src/cryptsetup_reencrypt.c:1619 +msgid "Reduce data device size (move data offset). DANGEROUS!" +msgstr "Reducer dataenhedstørrelse (flyt dataforskydning). FARLIGT!" + +#: src/cryptsetup.c:3432 +#, fuzzy +msgid "Maximal reencryption hotzone size." +msgstr "Blokstørrelse for omkryptering" + +#: src/cryptsetup.c:3433 +msgid "Reencryption hotzone resilience type (checksum,journal,none)" +msgstr "" + +#: src/cryptsetup.c:3434 +#, fuzzy +msgid "Reencryption hotzone checksums hash" +msgstr "Blokstørrelse for omkryptering" + +#: src/cryptsetup.c:3435 +msgid "Override device autodetection of dm device to be reencrypted" +msgstr "" + +#: src/cryptsetup.c:3451 src/veritysetup.c:462 src/integritysetup.c:583 +msgid "[OPTION...] " +msgstr "[TILVALG...] " + +#: src/cryptsetup.c:3502 src/veritysetup.c:496 src/integritysetup.c:594 +msgid "Argument missing." +msgstr "Argument mangler." + +#: src/cryptsetup.c:3565 src/veritysetup.c:527 src/integritysetup.c:625 +msgid "Unknown action." +msgstr "Ukendt handling." + +#: src/cryptsetup.c:3575 +msgid "Parameter --refresh is only allowed with open or refresh commands.\n" +msgstr "Parameteren --refresh er kun tilladt for kommandoerne open (åbn) eller refresh (opdater).\n" + +#: src/cryptsetup.c:3580 +msgid "Options --refresh and --test-passphrase are mutually exclusive.\n" +msgstr "Tilvalgene --refresh og --test-passphrase udelukker hinanden.\n" + +#: src/cryptsetup.c:3585 +msgid "Option --deferred is allowed only for close command.\n" +msgstr "Tilvalget --deferred er kun tilladt for kommandoen close (luk).\n" + +#: src/cryptsetup.c:3590 +msgid "Option --shared is allowed only for open of plain device.\n" +msgstr "Tilvalget --shared er kun tilladt for åbning af en ren enhed.\n" + +#: src/cryptsetup.c:3595 +msgid "Option --allow-discards is allowed only for open operation.\n" +msgstr "Tilvalget --allow-discards er kun tilladt for åbne operationer.\n" + +#: src/cryptsetup.c:3600 +msgid "Option --persistent is allowed only for open operation.\n" +msgstr "Tilvalget --persistent er kun tilladt for åben operation.\n" + +#: src/cryptsetup.c:3605 +#, fuzzy +msgid "Option --serialize-memory-hard-pbkdf is allowed only for open operation.\n" +msgstr "Tilvalget --allow-discards er kun tilladt for åbne operationer.\n" + +#: src/cryptsetup.c:3610 +msgid "Option --persistent is not allowed with --test-passphrase.\n" +msgstr "Tilvalget --persistent er ikke tilladt med --test-passphrase.\n" + +#: src/cryptsetup.c:3620 +#, fuzzy +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 "" +"Tilvalget --key-size er kun tilladt for luksFormat, luksAddKey (med --unbound),\n" +"åbn- og sammenligningshandlinger. For at begrænse læsning fra nøglefilen bruges\n" +"--keyfile-size=(bytes)." + +#: src/cryptsetup.c:3626 +msgid "Option --integrity is allowed only for luksFormat (LUKS2).\n" +msgstr "Tilvalget --integrity er kun tilladt for luksFormat (LUKS2).\n" + +#: src/cryptsetup.c:3631 +msgid "Option --integrity-no-wipe can be used only for format action with integrity extension.\n" +msgstr "Tilvalget --integrity-no-wipe kan kun bruges for formathandling med integritetudvidelse.\n" + +#: src/cryptsetup.c:3637 +msgid "Options --label and --subsystem are allowed only for luksFormat and config LUKS2 operations.\n" +msgstr "Tilvalget --label og --subsystem er kun tilladt for luksFormat og config LUKS2-operationer.\n" + +#: src/cryptsetup.c:3643 +msgid "Option --test-passphrase is allowed only for open of LUKS and TCRYPT devices.\n" +msgstr "Tilvalget --test-passphrase er kun tilladt for åbning af LUKS- og TCRYPT-enheder.\n" + +#: src/cryptsetup.c:3648 src/cryptsetup_reencrypt.c:1692 +msgid "Key size must be a multiple of 8 bits" +msgstr "Nøglestørrelse skal gå op i 8 bit" + +#: src/cryptsetup.c:3654 src/cryptsetup_reencrypt.c:1378 +#: src/cryptsetup_reencrypt.c:1697 +msgid "Key slot is invalid." +msgstr "Nøgleplads er ugyldig." + +#: src/cryptsetup.c:3661 +msgid "Option --key-file takes precedence over specified key file argument." +msgstr "Tilvalget --key-file har forrang over specificeret nøglefilsargument." + +#: src/cryptsetup.c:3668 src/veritysetup.c:539 src/integritysetup.c:649 +#: src/cryptsetup_reencrypt.c:1671 +msgid "Negative number for option not permitted." +msgstr "Negativ nummer for tilvalg er ikke tilladt." + +#: src/cryptsetup.c:3672 +msgid "Only one --key-file argument is allowed." +msgstr "Kun et argument for --key-file er tilladt." + +#: src/cryptsetup.c:3676 src/cryptsetup_reencrypt.c:1663 +#: src/cryptsetup_reencrypt.c:1701 +msgid "Only one of --use-[u]random options is allowed." +msgstr "Kun et af tilvalgene --use-[u]random er tilladt." + +#: src/cryptsetup.c:3680 +msgid "Option --use-[u]random is allowed only for luksFormat." +msgstr "Tilvalget --use-[u]random er kun tilladt for luksFormat." + +#: src/cryptsetup.c:3684 +msgid "Option --uuid is allowed only for luksFormat and luksUUID." +msgstr "Tilvalget --uid er kun tilladt for luksFormat og luksUUID." + +#: src/cryptsetup.c:3688 +msgid "Option --align-payload is allowed only for luksFormat." +msgstr "Tilvalget --align-payload er kun tilladt for luksFormat." + +#: src/cryptsetup.c:3692 +msgid "Options --luks2-metadata-size and --opt-luks2-keyslots-size are allowed only for luksFormat with LUKS2." +msgstr "Tilvalgene --luks2-metadata-size og --opt-luks2-keyslots-size er kun tilladt for luksFormat med LUKS2." + +#: src/cryptsetup.c:3697 +msgid "Invalid LUKS2 metadata size specification." +msgstr "Ugyldig specifikation for størrelsen på LUKS2-metadata." + +#: src/cryptsetup.c:3701 +msgid "Invalid LUKS2 keyslots size specification." +msgstr "Ugyldig specifikation for størrelsen på LUKS2-nøgleplads." + +#: src/cryptsetup.c:3705 +#, fuzzy +msgid "Options --align-payload and --offset cannot be combined." +msgstr "Tilvalgene --align-payload og --offset kan ikke kombineres." + +#: src/cryptsetup.c:3711 +msgid "Option --skip is supported only for open of plain and loopaes devices.\n" +msgstr "Tilvalget --skip er kun understøttet for åbning af plain- og loopaes-enheder.\n" + +#: src/cryptsetup.c:3718 +#, fuzzy +msgid "Option --offset is supported only for open of plain and loopaes devices, luksFormat and device reencryption.\n" +msgstr "Tilvalget --offset er kun understøttet for åbning af plain- og loopaes-enheder samt for LuksFormat.\n" + +#: src/cryptsetup.c:3724 +msgid "Option --tcrypt-hidden, --tcrypt-system or --tcrypt-backup is supported only for TCRYPT device.\n" +msgstr "Tilvalgene --tcrypt-hidden, --tcrypt-system eller --tcrypt-backup er kun understøttet for TCRYPT-enhed.\n" + +#: src/cryptsetup.c:3729 +msgid "Option --tcrypt-hidden cannot be combined with --allow-discards.\n" +msgstr "Tilvaget --tcrypt-hidden kan ikke kombineres med --allow-discards.\n" + +#: src/cryptsetup.c:3734 +msgid "Option --veracrypt is supported only for TCRYPT device type.\n" +msgstr "Tilvalget --veracrypt er kun understøttet for TCRYPT-enhedstype.\n" + +#: src/cryptsetup.c:3740 +msgid "Invalid argument for parameter --veracrypt-pim supplied.\n" +msgstr "Ugyldigt argument for parameteren --veracrypt-pim angivet.\n" + +#: src/cryptsetup.c:3744 +msgid "Option --veracrypt-pim is supported only for VeraCrypt compatible devices.\n" +msgstr "Tilvalget --veracrypt-pim er kun understøttet for VeraCrypt-kompatible enheder.\n" + +#: src/cryptsetup.c:3752 +msgid "Option --veracrypt-query-pim is supported only for VeraCrypt compatible devices.\n" +msgstr "Tilvalget --veracrypt-query-pim er kun understøttet for VeraCrypt-kompatible enheder.\n" + +#: src/cryptsetup.c:3756 +msgid "The options --veracrypt-pim and --veracrypt-query-pim are mutually exclusive.\n" +msgstr "Tilvalgene --veracrypt-pim og --veracrypt-query-pm udelukker hinanden.\n" + +#: src/cryptsetup.c:3763 +msgid "Option --priority can be only ignore/normal/prefer.\n" +msgstr "Tilvalget --priority kan kun være ignore/normal/prefer.\n" + +#: src/cryptsetup.c:3768 +msgid "Keyslot specification is required.\n" +msgstr "Nøglepladsspecifikation er krævet.\n" + +#: src/cryptsetup.c:3773 src/cryptsetup_reencrypt.c:1677 +msgid "Password-based key derivation function (PBKDF) can be only pbkdf2 or argon2i/argon2id.\n" +msgstr "Adgangskodebaseret nøgleudledningsfunktion (PBKDF) kan kun være pbkdf2 eller argon2i/argon2id.\n" + +#: src/cryptsetup.c:3778 src/cryptsetup_reencrypt.c:1682 +msgid "PBKDF forced iterations cannot be combined with iteration time option.\n" +msgstr "PBKDF-tvungne iterationer kan ikke kombineres med tilvalg for iterationstid.\n" + +#: src/cryptsetup.c:3784 +msgid "Sector size option is not supported for this command.\n" +msgstr "Tilvalg for sektorstørrelse er ikke understøttet for denne kommando..\n" + +#: src/cryptsetup.c:3790 +msgid "Unsupported encryption sector size.\n" +msgstr "Krypteringsektorstørrelsen er ikke understøttet.\n" + +#: src/cryptsetup.c:3795 +msgid "Key size is required with --unbound option.\n" +msgstr "Nøglestørrelse er krævet med tilvalget --unbound.\n" + +#: src/cryptsetup.c:3800 +msgid "Option --unbound may be used only with luksAddKey action.\n" +msgstr "Tilvalget --unbound kan kun bruges med luksAddKey-handlingen.\n" + +#: src/cryptsetup.c:3805 +msgid "Option --refresh may be used only with open action.\n" +msgstr "Tilvalget --refresh kan kun bruges med open-handlingen.\n" + +#: src/cryptsetup.c:3816 +msgid "Cannot disable metadata locking.\n" +msgstr "Kan ikke deaktivere metadatalåsning.\n" + +#: src/cryptsetup.c:3826 +#, fuzzy +msgid "Invalid max reencryption hotzone size specification." +msgstr "Ugyldig specifikation for enhedsstørrelse." + +#: src/cryptsetup.c:3834 src/cryptsetup_reencrypt.c:1706 +#: src/cryptsetup_reencrypt.c:1711 +msgid "Invalid device size specification." +msgstr "Ugyldig specifikation for enhedsstørrelse." + +#: src/cryptsetup.c:3837 +#, fuzzy +msgid "Maximum device reduce size is 1 GiB." +msgstr "Maksimal reduceringsstørrelse for enhed er 64 MiB." + +#: src/cryptsetup.c:3840 src/cryptsetup_reencrypt.c:1717 +msgid "Reduce size must be multiple of 512 bytes sector." +msgstr "Reducer størrelse skal være multiplum af 512 byte sektor." + +#: src/cryptsetup.c:3845 +#, fuzzy +msgid "Invalid data size specification." +msgstr "Ugyldig specifikation for enhedsstørrelse." + +#: src/cryptsetup.c:3850 +#, fuzzy +msgid "Reduce size overflow." +msgstr "Forskydningsoverløb for enhed." + +#: src/cryptsetup.c:3854 +msgid "LUKS2 decryption requires option --header." +msgstr "" + +#: src/cryptsetup.c:3858 +#, fuzzy +msgid "Device size must be multiple of 512 bytes sector." +msgstr "Reducer størrelse skal være multiplum af 512 byte sektor." + +#: src/cryptsetup.c:3862 +#, fuzzy +msgid "Options --reduce-device-size and --data-size cannot be combined." +msgstr "Tilvalgene --align-payload og --offset kan ikke kombineres." + +#: src/cryptsetup.c:3866 +#, fuzzy +msgid "Options --device-size and --size cannot be combined." +msgstr "Tilvalgene --align-payload og --offset kan ikke kombineres." + +#: src/veritysetup.c:65 +msgid "Invalid salt string specified." +msgstr "Ugyldig salt-streng angivet." + +#: src/veritysetup.c:96 +#, c-format +msgid "Cannot create hash image %s for writing." +msgstr "Kan ikke oprette hashaftryk %s for skriving." + +#: src/veritysetup.c:106 +#, c-format +msgid "Cannot create FEC image %s for writing." +msgstr "Kan ikke oprette FEC-aftryk %s for skriving." + +#: src/veritysetup.c:176 +msgid "Invalid root hash string specified." +msgstr "Ugyldig root-hash-streng angivet." + +#: src/veritysetup.c:356 +msgid " " +msgstr " " + +#: src/veritysetup.c:356 src/integritysetup.c:469 +msgid "format device" +msgstr "formater enhed" + +#: src/veritysetup.c:357 +msgid " " +msgstr " " + +#: src/veritysetup.c:357 +msgid "verify device" +msgstr "verificer enhed" + +#: src/veritysetup.c:358 +msgid " " +msgstr " " + +#: src/veritysetup.c:360 src/integritysetup.c:472 +msgid "show active device status" +msgstr "vis aktiv enhedsstatus" + +#: src/veritysetup.c:361 +msgid "" +msgstr "" + +#: src/veritysetup.c:361 src/integritysetup.c:473 +msgid "show on-disk information" +msgstr "vis on-disk-information" + +#: src/veritysetup.c:380 +#, c-format +msgid "" +"\n" +" is the device to create under %s\n" +" is the data device\n" +" is the device containing verification data\n" +" hash of the root node on \n" +msgstr "" +"\n" +" er enheden der skal opretttes under %s\n" +" er dataenheden\n" +" er enheden indeholdende verifikationsdata\n" +" hash for root-knuden på \n" + +#: src/veritysetup.c:387 +#, c-format +msgid "" +"\n" +"Default compiled-in dm-verity parameters:\n" +"\tHash: %s, Data block (bytes): %u, Hash block (bytes): %u, Salt size: %u, Hash format: %u\n" +msgstr "" +"\n" +"Standardindkompilerede dm-verity-parametre:\n" +"\tHash: %s, Databok (byte): %u, Hashblok (byte): %u, Salt-str.: %u, Hashformat: %u\n" + +#: src/veritysetup.c:430 +msgid "Do not use verity superblock" +msgstr "Brug ikke verity-superblok" + +#: src/veritysetup.c:431 +msgid "Format type (1 - normal, 0 - original Chrome OS)" +msgstr "Formatype (1 - normal, 0 - original Chrome OS)" + +#: src/veritysetup.c:431 +msgid "number" +msgstr "nummer" + +#: src/veritysetup.c:432 +msgid "Block size on the data device" +msgstr "Blokstørrelse på dataenheden" + +#: src/veritysetup.c:433 +msgid "Block size on the hash device" +msgstr "Blokstørrelse på hashenheden" + +#: src/veritysetup.c:434 +msgid "FEC parity bytes" +msgstr "FEC-paritetbyte" + +#: src/veritysetup.c:435 +msgid "The number of blocks in the data file" +msgstr "Antallet af blokke i datafilen" + +#: src/veritysetup.c:435 +msgid "blocks" +msgstr "blokke" + +#: src/veritysetup.c:436 +msgid "Path to device with error correction data" +msgstr "Sti til enhed med fejlkorrektionsdata" + +#: src/veritysetup.c:436 src/integritysetup.c:540 +msgid "path" +msgstr "sti" + +#: src/veritysetup.c:437 +msgid "Starting offset on the hash device" +msgstr "Starter forskydning på hashenheden" + +#: src/veritysetup.c:438 +msgid "Starting offset on the FEC device" +msgstr "Starter forskydning på FEC-enheden" + +#: src/veritysetup.c:439 +msgid "Hash algorithm" +msgstr "Hashalgoritme" + +#: src/veritysetup.c:439 +msgid "string" +msgstr "streng" + +#: src/veritysetup.c:440 +msgid "Salt" +msgstr "Salt" + +#: src/veritysetup.c:440 +msgid "hex string" +msgstr "hex-streng" + +#: src/veritysetup.c:442 +msgid "Restart kernel if corruption is detected" +msgstr "Genstart kerne hvis korruption er registreret" + +#: src/veritysetup.c:443 +msgid "Ignore corruption, log it only" +msgstr "Ignorer korruption, log den kun" + +#: src/veritysetup.c:444 +msgid "Do not verify zeroed blocks" +msgstr "Bekræft ikke nulstillede blokke" + +#: src/veritysetup.c:445 +msgid "Verify data block only the first time it is read" +msgstr "Verificer kun datablok første gang den læses" + +#: src/veritysetup.c:545 +msgid "Option --ignore-corruption, --restart-on-corruption or --ignore-zero-blocks is allowed only for open operation.\n" +msgstr "Tilvalgene --ignore-corruption, --restart-on-corruption eller --ignore-zero-blocks er kun tilladt for åben operation.\n" + +#: src/veritysetup.c:550 +msgid "Option --ignore-corruption and --restart-on-corruption cannot be used together.\n" +msgstr "Tilvalgene --ignore-corruption og --restart-on-corruption kan ikke bruges sammen.\n" + +#: src/integritysetup.c:83 src/utils_password.c:305 +#, c-format +msgid "Cannot read keyfile %s." +msgstr "Kan ikke læse nøglefilen %s." + +#: src/integritysetup.c:87 src/utils_password.c:310 +#, c-format +msgid "Cannot read %d bytes from keyfile %s." +msgstr "Kan ikke læse %d byte fra nøglefilen %s." + +#: src/integritysetup.c:250 +#, c-format +msgid "Formatted with tag size %u, internal integrity %s.\n" +msgstr "Formateret med mærkestørrelse %u, intern integritet %s.\n" + +#: src/integritysetup.c:469 src/integritysetup.c:473 +msgid "" +msgstr "" + +#: src/integritysetup.c:470 +msgid " " +msgstr " " + +#: src/integritysetup.c:492 +#, c-format +msgid "" +"\n" +" is the device to create under %s\n" +" is the device containing data with integrity tags\n" +msgstr "" +"\n" +" er enheden der skal opretttes under %s\n" +" er enheden indeholdende data med integritetsmærker\n" + +#: src/integritysetup.c:497 +#, c-format +msgid "" +"\n" +"Default compiled-in dm-integrity parameters:\n" +"\tTag size: %u bytes, Checksum algorithm: %s\n" +msgstr "" +"\n" +"Standardindkompilerede dm-verity-parametre:\n" +"\tMærkestørrelse: %u byte, kontrolsumalgoritme: %s\n" + +#: src/integritysetup.c:540 +msgid "Path to data device (if separated)" +msgstr "Sti til dataenhed (hvis adskilt)" + +#: src/integritysetup.c:542 +msgid "Journal size" +msgstr "Journalstørrelse" + +#: src/integritysetup.c:543 +msgid "Interleave sectors" +msgstr "Interleave-sektorer" + +#: src/integritysetup.c:544 +msgid "Journal watermark" +msgstr "Journalvandmærke" + +#: src/integritysetup.c:544 +msgid "percent" +msgstr "procent" + +#: src/integritysetup.c:545 +msgid "Journal commit time" +msgstr "Journal commit-tid" + +#: src/integritysetup.c:545 src/integritysetup.c:547 +msgid "ms" +msgstr "ms" + +#: src/integritysetup.c:546 +msgid "Number of 512-byte sectors per bit (bitmap mode)." +msgstr "" + +#: src/integritysetup.c:547 +msgid "Bitmap mode flush time" +msgstr "" + +#: src/integritysetup.c:548 +msgid "Tag size (per-sector)" +msgstr "Mærkestørrelse (per-sektor)" + +#: src/integritysetup.c:549 +msgid "Sector size" +msgstr "Sektorstørrelse" + +#: src/integritysetup.c:550 +msgid "Buffers size" +msgstr "Bufferstørrelse" + +#: src/integritysetup.c:552 +msgid "Data integrity algorithm" +msgstr "Dataintegritetsalgoritme" + +#: src/integritysetup.c:553 +msgid "The size of the data integrity key" +msgstr "Størrelsen for dataintegritetsnøglen" + +#: src/integritysetup.c:554 +msgid "Read the integrity key from a file" +msgstr "Læs integritetsnøglen fra en fil" + +#: src/integritysetup.c:556 +msgid "Journal integrity algorithm" +msgstr "Journalintegritetsalgoritme" + +#: src/integritysetup.c:557 +msgid "The size of the journal integrity key" +msgstr "Størrelsen for journalintegritetsnøglen" + +#: src/integritysetup.c:558 +msgid "Read the journal integrity key from a file" +msgstr "Læs journalintegritetsnøglen fra en fil" + +#: src/integritysetup.c:560 +msgid "Journal encryption algorithm" +msgstr "Journalkrypteringsalgoritme" + +#: src/integritysetup.c:561 +msgid "The size of the journal encryption key" +msgstr "Størrelsen for journalkrypteringsnøglen" + +#: src/integritysetup.c:562 +msgid "Read the journal encryption key from a file" +msgstr "Læs journalkrypteringsnøglen fra en fil" + +#: src/integritysetup.c:565 +msgid "Recovery mode (no journal, no tag checking)" +msgstr "Gendannelsestilstand (ingen journal, ingen mærkekontrol)" + +#: src/integritysetup.c:566 +#, fuzzy +msgid "Use bitmap to track changes and disable journal for integrity device" +msgstr "Deaktiver journal for integritetsenhed" + +#: src/integritysetup.c:567 +msgid "Recalculate initial tags automatically." +msgstr "Genberegn oprindelige mærker automatisk." + +#: src/integritysetup.c:640 +msgid "Option --integrity-recalculate can be used only for open action." +msgstr "Tilvalget --integrity-recalculate kan kun bruges for open-handling." + +#: src/integritysetup.c:655 +msgid "Options --journal-size, --interleave-sectors, --sector-size, --tag-size and --no-wipe can be used only for format action.\n" +msgstr "Tilvalgene --journal-size, --interleave-sectors, --sector-size, --tag-size og --no-wipe kan kun bruges for formathandlingen.\n" + +#: src/integritysetup.c:661 +msgid "Invalid journal size specification." +msgstr "Ugyldig specifikation for journalstørrelse." + +#: src/integritysetup.c:666 +msgid "Both key file and key size options must be specified." +msgstr "Både nøglefil og tilvalg for nøglestørrelse skal være angivet." + +#: src/integritysetup.c:669 +msgid "Integrity algorithm must be specified if integrity key is used." +msgstr "Integritetsalgoritme skal være angivet hvis der bruges integritetsnøgle." + +#: src/integritysetup.c:674 +msgid "Both journal integrity key file and key size options must be specified." +msgstr "Både journalintegritetsnøglefil og tilvalg for nøglestørrelse skal være angivet." + +#: src/integritysetup.c:677 +msgid "Journal integrity algorithm must be specified if journal integrity key is used." +msgstr "Journalintegritetsalgoritme skal være angivet hvis journalintegritetsnøgle anvendes." + +#: src/integritysetup.c:682 +msgid "Both journal encryption key file and key size options must be specified." +msgstr "Både journalkrypteringsnøglefil og tilvalg for nøglestørrelse skal være angivet." + +#: src/integritysetup.c:685 +msgid "Journal encryption algorithm must be specified if journal encryption key is used." +msgstr "Journalkrypteringsalgoritme skal være angivet hvis journalkrypteringsnøgle bruges." + +#: src/integritysetup.c:689 +#, fuzzy +msgid "Recovery and bitmap mode options are mutually exclusive." +msgstr "Tilvalgene --refresh og --test-passphrase udelukker hinanden.\n" + +#: src/integritysetup.c:693 +msgid "Journal options cannot be used in bitmap mode." +msgstr "" + +#: src/integritysetup.c:697 +#, fuzzy +msgid "Bitmap options can be used only in bitmap mode." +msgstr "Integritetstilvalg kan kun bruges for LUKS2-format." + +#: src/cryptsetup_reencrypt.c:172 +msgid "Reencryption already in-progress." +msgstr "Omkryptering er allerede i gang." + +#: src/cryptsetup_reencrypt.c:201 +#, c-format +msgid "Cannot exclusively open %s, device in use." +msgstr "Kan ikke eksklusivt åbne %s, enheden er i brug." + +#: src/cryptsetup_reencrypt.c:215 src/cryptsetup_reencrypt.c:1127 +msgid "Allocation of aligned memory failed." +msgstr "Allokering af tilpasset hukommelse mislykkedes." + +#: src/cryptsetup_reencrypt.c:222 +#, c-format +msgid "Cannot read device %s." +msgstr "Kan ikke læse enheden %s." + +#: src/cryptsetup_reencrypt.c:233 +#, c-format +msgid "Marking LUKS1 device %s unusable." +msgstr "Markerer LUKS-enheden %s som ubrugelig." + +#: src/cryptsetup_reencrypt.c:237 +#, c-format +msgid "Setting LUKS2 offline reencrypt flag on device %s." +msgstr "Angivelse af LUKS2 som frakoblet omkrypterer flag på enheden %s." + +#: src/cryptsetup_reencrypt.c:254 +#, c-format +msgid "Cannot write device %s." +msgstr "Kan ikke skrive enhed %s." + +#: src/cryptsetup_reencrypt.c:302 +msgid "Cannot write reencryption log file." +msgstr "Kan ikke skrive omkrypteringslogfilen." + +#: src/cryptsetup_reencrypt.c:358 +msgid "Cannot read reencryption log file." +msgstr "Kan ikke læse omkrypteringslogfilen." + +#: src/cryptsetup_reencrypt.c:396 +#, c-format +msgid "Log file %s exists, resuming reencryption.\n" +msgstr "Logfilen %s findes, genoptager omkryptering.\n" + +#: src/cryptsetup_reencrypt.c:445 +msgid "Activating temporary device using old LUKS header." +msgstr "Aktiverer midlertidig enhed via brug af gammelt LUKS-teksthoved." + +#: src/cryptsetup_reencrypt.c:455 +msgid "Activating temporary device using new LUKS header." +msgstr "Aktiverer midlertidig enhed via brug af nyt LUKS-teksthoved." + +#: src/cryptsetup_reencrypt.c:465 +msgid "Activation of temporary devices failed." +msgstr "Aktivering af midlertidige enheder mislykkedes." + +#: src/cryptsetup_reencrypt.c:551 +msgid "Failed to set data offset." +msgstr "Kunne ikke angive dataforskydning." + +#: src/cryptsetup_reencrypt.c:557 +#, fuzzy +msgid "Failed to set metadata size." +msgstr "Kunne ikke angive dataforskydning." + +#: src/cryptsetup_reencrypt.c:565 +#, c-format +msgid "New LUKS header for device %s created." +msgstr "Nyt LUKS-teksthoved for enheden %s oprettet." + +#: src/cryptsetup_reencrypt.c:625 +#, c-format +msgid "This version of cryptsetup-reencrypt can't handle new internal token type %s." +msgstr "Denne version af cryptsetup-reencrypt kan ikke håndtere ny intern symboltype %s." + +#: src/cryptsetup_reencrypt.c:647 +msgid "Failed to read activation flags from backup header." +msgstr "Kunne ikke læse aktiveringsflag fra sikkerhedskopiteksthoved." + +#: src/cryptsetup_reencrypt.c:651 +msgid "Failed to write activation flags to new header." +msgstr "Kunne ikke skrive aktiveringsflag til nyt teksthoved." + +#: src/cryptsetup_reencrypt.c:655 src/cryptsetup_reencrypt.c:659 +msgid "Failed to read requirements from backup header." +msgstr "Kunne ikke læse krav fra sikkerhedskopiteksthoved." + +#: src/cryptsetup_reencrypt.c:697 +#, c-format +msgid "%s header backup of device %s created." +msgstr "%s-sikkerhedskopi af teksthoved for enheden %s er oprettet." + +#: src/cryptsetup_reencrypt.c:760 +msgid "Creation of LUKS backup headers failed." +msgstr "Oprettelse af LUKS-sikkerhedskopiteksthoveder mislykkedes." + +#: src/cryptsetup_reencrypt.c:893 +#, c-format +msgid "Cannot restore %s header on device %s." +msgstr "Kan ikke gendanne %s-teksthoved på enheden %s." + +#: src/cryptsetup_reencrypt.c:895 +#, c-format +msgid "%s header on device %s restored." +msgstr "%s-teksthoved på enheden %s er gendannet." + +#: src/cryptsetup_reencrypt.c:1099 src/cryptsetup_reencrypt.c:1105 +msgid "Cannot open temporary LUKS device." +msgstr "Kan ikke åbne midlertidig LUKS-enhed." + +#: src/cryptsetup_reencrypt.c:1110 src/cryptsetup_reencrypt.c:1115 +msgid "Cannot get device size." +msgstr "Kan ikke indhente enhedsstørrelse." + +#: src/cryptsetup_reencrypt.c:1150 +msgid "IO error during reencryption." +msgstr "IO-fejl under omkryptering." + +#: src/cryptsetup_reencrypt.c:1181 +msgid "Provided UUID is invalid." +msgstr "Angivet UUID er ugyldig." + +#: src/cryptsetup_reencrypt.c:1407 +msgid "Cannot open reencryption log file." +msgstr "Kan ikke åbne omkrypteringslogfilen." + +#: src/cryptsetup_reencrypt.c:1413 +msgid "No decryption in progress, provided UUID can be used only to resume suspended decryption process." +msgstr "Ingen dekryptering i gang, angivet UUID kan kun bruges til at genoptage suspenderet dekrypteringsproces." + +#: src/cryptsetup_reencrypt.c:1488 +#, c-format +msgid "Changed pbkdf parameters in keyslot %i." +msgstr "Ændret pbkdf-parameter i nøgleplads %i." + +#: src/cryptsetup_reencrypt.c:1600 +msgid "Reencryption block size" +msgstr "Blokstørrelse for omkryptering" + +#: src/cryptsetup_reencrypt.c:1600 +msgid "MiB" +msgstr "MiB" + +#: src/cryptsetup_reencrypt.c:1604 +msgid "Do not change key, no data area reencryption" +msgstr "Ændr ikke nøgle, ingen dataområdeomkryptering" + +#: src/cryptsetup_reencrypt.c:1606 +msgid "Read new volume (master) key from file" +msgstr "Læs ny diskenhednøgle (master) fra fil" + +#: src/cryptsetup_reencrypt.c:1607 +msgid "PBKDF2 iteration time for LUKS (in ms)" +msgstr "PBKDF2-iterationstid for LUKS (i ms)" + +#: src/cryptsetup_reencrypt.c:1613 +msgid "Use direct-io when accessing devices" +msgstr "Brug direct-io når enheder tilgås" + +#: src/cryptsetup_reencrypt.c:1614 +msgid "Use fsync after each block" +msgstr "Brug fsync efter hver blok" + +#: src/cryptsetup_reencrypt.c:1615 +msgid "Update log file after every block" +msgstr "Opdater logfil efter hver blok" + +#: src/cryptsetup_reencrypt.c:1616 +msgid "Use only this slot (others will be disabled)" +msgstr "Brug kun denne plads (andre vil blive deaktiveret)" + +#: src/cryptsetup_reencrypt.c:1621 +msgid "Create new header on not encrypted device" +msgstr "Opret nyt teksthoved på ikke krypteret enhed" + +#: src/cryptsetup_reencrypt.c:1622 +msgid "Permanently decrypt device (remove encryption)" +msgstr "Dekrypter enhed permanent (fjern kryptering)" + +#: src/cryptsetup_reencrypt.c:1623 +msgid "The UUID used to resume decryption" +msgstr "UUID'en brugt til at genoptage dekryptering" + +#: src/cryptsetup_reencrypt.c:1624 +msgid "Type of LUKS metadata: luks1, luks2" +msgstr "Type for LUKS-metadata: luks1, luks2" + +#: src/cryptsetup_reencrypt.c:1643 +msgid "[OPTION...] " +msgstr "[TILVALG...] " + +#: src/cryptsetup_reencrypt.c:1651 +#, c-format +msgid "Reencryption will change: %s%s%s%s%s%s." +msgstr "Omkryptering vil ændre: %s%s%s%s%s%s." + +#: src/cryptsetup_reencrypt.c:1652 +msgid "volume key" +msgstr "diskenhedsnøgle" + +#: src/cryptsetup_reencrypt.c:1654 +msgid "set hash to " +msgstr "sæt hash til " + +#: src/cryptsetup_reencrypt.c:1655 +msgid ", set cipher to " +msgstr ", set krypteringsalgoritme til " + +#: src/cryptsetup_reencrypt.c:1659 +msgid "Argument required." +msgstr "Argument krævet." + +#: src/cryptsetup_reencrypt.c:1687 +msgid "Only values between 1 MiB and 64 MiB allowed for reencryption block size." +msgstr "Kun værdier mellem 1 MiB og 64 MiB tilladt for omkrypteringsblokstørrelsen." + +#: src/cryptsetup_reencrypt.c:1714 +msgid "Maximum device reduce size is 64 MiB." +msgstr "Maksimal reduceringsstørrelse for enhed er 64 MiB." + +#: src/cryptsetup_reencrypt.c:1721 +msgid "Option --new must be used together with --reduce-device-size or --header." +msgstr "Tilvalget --new skal bruges sammen med --reduce-device-size eller --header." + +#: src/cryptsetup_reencrypt.c:1725 +msgid "Option --keep-key can be used only with --hash, --iter-time or --pbkdf-force-iterations." +msgstr "Tilvalget --keep-key kan kun bruges med --hash, --iter-time eller --pbkdf-force-iterations." + +#: src/cryptsetup_reencrypt.c:1729 +msgid "Option --new cannot be used together with --decrypt." +msgstr "Tilvalget --new kan ikke bruges sammen med --decrypt." + +#: src/cryptsetup_reencrypt.c:1733 +msgid "Option --decrypt is incompatible with specified parameters." +msgstr "Tilvalget --decrypt er ikke kompatibelt med specificerede parametre." + +#: src/cryptsetup_reencrypt.c:1737 +msgid "Option --uuid is allowed only together with --decrypt." +msgstr "Tilvalget --uuid er kun tilladt sammen med --decrypt." + +#: src/cryptsetup_reencrypt.c:1741 +msgid "Invalid luks type. Use one of these: 'luks', 'luks1' or 'luks2'." +msgstr "Ugyldig luks-type. Brug en af disse: »luks«, »luks2« eller »luks2«." + +#: src/utils_tools.c:151 +msgid "Error reading response from terminal." +msgstr "Fejl ved læsning af svar fra terminal." + +#: src/utils_tools.c:186 +msgid "Command successful.\n" +msgstr "Kommando succesfuld.\n" + +#: src/utils_tools.c:194 +msgid "wrong or missing parameters" +msgstr "forkert eller manglende parametre" + +#: src/utils_tools.c:196 +msgid "no permission or bad passphrase" +msgstr "ingen tilladelse eller ugyldg adgangsfrase" + +#: src/utils_tools.c:198 +msgid "out of memory" +msgstr "ikke nok hukommelse" + +#: src/utils_tools.c:200 +msgid "wrong device or file specified" +msgstr "forkert enhed eller fil angivet" + +#: src/utils_tools.c:202 +msgid "device already exists or device is busy" +msgstr "enheden findes allerede eller enheden er optaget" + +#: src/utils_tools.c:204 +msgid "unknown error" +msgstr "ukendt fejl" + +#: src/utils_tools.c:206 +#, c-format +msgid "Command failed with code %i (%s).\n" +msgstr "Kommando mislykkedes med kode %i (%s).\n" + +#: src/utils_tools.c:283 +#, c-format +msgid "Key slot %i created." +msgstr "Nøglepladsen %i oprettet." + +#: src/utils_tools.c:285 +#, c-format +msgid "Key slot %i unlocked." +msgstr "Nøgleplads %i låst op." + +#: src/utils_tools.c:287 +#, c-format +msgid "Key slot %i removed." +msgstr "Nøgleplads %i fjernet." + +#: src/utils_tools.c:296 +#, c-format +msgid "Token %i created." +msgstr "Symbol %i oprettet." + +#: src/utils_tools.c:298 +#, c-format +msgid "Token %i removed." +msgstr "Symbol %i fjernet." + +#: src/utils_tools.c:464 +#, fuzzy +msgid "" +"\n" +"Wipe interrupted." +msgstr "" +"\n" +"Skrivning afbrudt." + +#: src/utils_tools.c:475 +#, c-format +msgid "WARNING: Device %s already contains a '%s' partition signature.\n" +msgstr "ADVARSEL: Enheden %s indeholder allerede en »%s«-partitionsignatur.\n" + +#: src/utils_tools.c:483 +#, c-format +msgid "WARNING: Device %s already contains a '%s' superblock signature.\n" +msgstr "ADVARSEL: Enheden %s indeholder allerede en »%s«-superbloksignatur.\n" + +#: src/utils_tools.c:504 src/utils_tools.c:568 +msgid "Failed to initialize device signature probes." +msgstr "Kunne ikke initialisere enhedssignaturundersøgelser." + +#: src/utils_tools.c:548 +#, c-format +msgid "Failed to stat device %s." +msgstr "Kunne ikke køre stat på enheden %s." + +#: src/utils_tools.c:561 +#, c-format +msgid "Device %s is in use. Can not proceed with format operation." +msgstr "Enheden %s er i brug. Kan ikke fortsætte med formatoperation." + +#: src/utils_tools.c:563 +#, c-format +msgid "Failed to open file %s in read/write mode." +msgstr "Kunne ikke åbne filen %s i læs/skriv-tilstand." + +#: src/utils_tools.c:577 +#, c-format +msgid "Existing '%s' partition signature (offset: % bytes) on device %s will be wiped." +msgstr "" + +#: src/utils_tools.c:580 +#, c-format +msgid "Existing '%s' superblock signature (offset: % bytes) on device %s will be wiped." +msgstr "" + +#: src/utils_tools.c:583 +msgid "Failed to wipe device signature." +msgstr "Kunne ikke rydde enhedssignatur." + +#: src/utils_tools.c:590 +#, c-format +msgid "Failed to probe device %s for a signature." +msgstr "Kunne ikke undersøge enheden %s for en signatur." + +#: src/utils_tools.c:629 +#, fuzzy +msgid "" +"\n" +"Reencryption interrupted." +msgstr "" +"\n" +"Læsning afbrudt." + +#: src/utils_password.c:43 src/utils_password.c:75 +#, c-format +msgid "Cannot check password quality: %s" +msgstr "Kan ikke kontrollere adganskodekvalitet: %s" + +#: src/utils_password.c:51 +#, c-format +msgid "" +"Password quality check failed:\n" +" %s" +msgstr "" +"Kontrol af adgangskodens kvalitet mislykkedes:\n" +" %s" + +#: src/utils_password.c:83 +#, c-format +msgid "Password quality check failed: Bad passphrase (%s)" +msgstr "Kontrol af adgangskodens kvalitet mislykkedes: Ugyldig adgangsfrase (%s)" + +#: src/utils_password.c:193 src/utils_password.c:208 +msgid "Error reading passphrase from terminal." +msgstr "Kunne ikke læse adgangsfrase fra terminal." + +#: src/utils_password.c:206 +msgid "Verify passphrase: " +msgstr "Verificer adgangsfrase: " + +#: src/utils_password.c:213 +msgid "Passphrases do not match." +msgstr "Adgangsfraser matcher ikke." + +#: src/utils_password.c:250 +msgid "Cannot use offset with terminal input." +msgstr "Kan ikke bruge forskydning med terminalinddata." + +#: src/utils_password.c:253 +#, c-format +msgid "Enter passphrase: " +msgstr "Indtast adgangsfrase: " + +#: src/utils_password.c:256 +#, c-format +msgid "Enter passphrase for %s: " +msgstr "Indtast adgangsfrase for %s: " + +#: src/utils_password.c:287 +msgid "No key available with this passphrase." +msgstr "Ingen nøgle tilgængelig med denne adgangsfrase." + +#: src/utils_password.c:289 +msgid "No usable keyslot is available." +msgstr "" + +#: src/utils_password.c:328 +#, c-format +msgid "Cannot open keyfile %s for write." +msgstr "Kan ikke bne nøglefilen %s for skrivning." + +#: src/utils_password.c:335 +#, c-format +msgid "Cannot write to keyfile %s." +msgstr "Kan ikke skrive til nøglefilen %s." + +#: src/utils_luks2.c:47 +#, c-format +msgid "Failed to open file %s in read-only mode." +msgstr "Kunne ikke åbne filen %s i skrivebeskyttet tilstand." + +#: src/utils_luks2.c:60 +msgid "Provide valid LUKS2 token JSON:\n" +msgstr "Tilbyd gyldig LUKS2-symbol JSON:\n" + +#: src/utils_luks2.c:67 +msgid "Failed to read JSON file." +msgstr "Kunne ikke læse JSON-fil." + +#: src/utils_luks2.c:72 +msgid "" +"\n" +"Read interrupted." +msgstr "" +"\n" +"Læsning afbrudt." + +#: src/utils_luks2.c:113 +#, c-format +msgid "Failed to open file %s in write mode." +msgstr "Kunne ikke åbne filen %s i skrive-tilstand." + +#: src/utils_luks2.c:122 +msgid "" +"\n" +"Write interrupted." +msgstr "" +"\n" +"Skrivning afbrudt." + +#: src/utils_luks2.c:126 +msgid "Failed to write JSON file." +msgstr "Kunne ikke skrive JSON-fil." + +#~ msgid "Requested dmcrypt performance options are not supported." +#~ msgstr "Forespurgte dmcrypt-ydelsestilvalg er ikke understøttede." + +#~ msgid "Cannot format device %s which is still in use." +#~ msgstr "Kan ikke formatere enheden %s som stadig er i brug." + +#~ msgid "Key slot %d is not used." +#~ msgstr "Nøglepladsen %d er ikke brugt." + +#~ msgid "Function not available in FIPS mode." +#~ msgstr "Funktion er ikke tilgængelig i FIPS-tilstand." + +#~ msgid "Key slot %d selected for deletion." +#~ msgstr "Nøgleplads %d valgt for sletning." + +#~ msgid "open device as mapping " +#~ msgstr "åbn enhed som oversættelse " + +#~ msgid "close device (deactivate and remove mapping)" +#~ msgstr "luk enhed (deaktiver og fjern oversættelse)" + +#~ msgid "Failed to set PBKDF parameters." +#~ msgstr "Kunne ikke angive PBKDF-parametre." + +#~ msgid "Cannot seek to device offset.\n" +#~ msgstr "Kan ikke søge til enhedsforskydning.\n" + +#~ msgid "Interrupted by a signal." +#~ msgstr "Afbrudt af et signal." + +#~ msgid "Device %s is too small. (LUKS2 requires at least % bytes.)" +#~ msgstr "Enheden %s er for lille. (LUKS2 kræver mindst % byte.)" diff --git a/po/de.gmo b/po/de.gmo new file mode 100644 index 0000000000000000000000000000000000000000..5f04be57521a93aa9b58a31ab670c7d980e8754b GIT binary patch literal 104105 zcmcGX2b^R@wf}n+1V)gY5$*~Dv#>qOE_qp&jVueB*g#G_Gd(lSgdV!5*&vt^14=X} zP~-_HJ`RXa{=shB zylzUNP}uRAg~E~Gwfhtb#cc|O-{HWkaLfEcVK4AraE}GN@VDbBg~DmzPT-#4+2CE^ zDELXRa|!R@qu__YHK!H|=YrcUEflTv50L5=LuoJun6dgVS&IZ2?&I5P5!0EmQd>-ygK!tlvaKAs`*T4n% z{|THA9)F>yy9wM2_f4SUe-uFNJ}COX6MQcC6;Sm0 zHMl3Z*Tr6+>7e*xId~j+1*md-1QebB0xDj2$@(={Zzia6j)0xuHQ-_3 zM?i)9U+@6%&!F<(z2fb?8dQBpK+*F`a0I*?JQO_i5)Zc=JP`LFsP?`JRJ@OZ)4;EQ zqQl<;&Kh$0Is~ddH-V>sUjw_qeTSXC3qZ-80q|h(_23cU$3f-y7`QvQErk+4> zE&;_~z2J24&EO*N0Z{eaan!?20}sNz7*x12cno+wsB%3BD!;#j-Qb~Bcdr9C;C?Z9 zw7!Gl`x#>)Jutyt2378tgW~JkLABFoK=I4>0zL^U{i&CFIaYxQ?kfVm9aKAiD!9J} zD*hATk>Fl6Z=WTg_;wR0`hO5qeqR99-j4?Nj&Ka6UN-oQ3;bQ0@DgfOmna#}7ftk!M`y zr^lSH-h5dH-id)Z*cz*JQnwq_1+H0gGJmU;7sr>0UrWq;QlwL`p%&7RQ_{8 z)$c{%Jn;75{w1hzdv5e_^T2&@_k#-mLQvmt16AK|fct_^fGXckn|wSw5>$EmK-K?x zQ02HERDJ&xzVH5g=g0ZriTGa-+;0N+!~GF(4)`!Ae%h`Q2h5q^gWA*g!26x6?-w{ydxEkCa{3s|oe;rgi{0uw;+~$@3{Y-Er?iwh$bsxAR_OY?b75_KEfB&nU4)a0L zy$3uFydG3Le*xSZ?0Ajqh0g=`z}+A4`Jm{0ZE)WTs$K2@MfY!lhk}0x4+E#Z*3(-G zcHu68%I8&}()~j4{~;*4Zhwu_X*zf~?o&afTL;w+Zwz=hcnt3EfJN{**E(J1fa2>h zQ0cuFTn#=9syzo&nwk9szEDy_ffBa4PO)p!j4IoB>`3syv?oMd!yr z@xhKa_#E#DP~T^O%6~1Wa2vw+w}WcOcY>nRmq4Ze1Xu$1y3zC50Pc?aJ)pwf8~lF) z&ceO>>%6?DfTDj56n(A+yTSK@$AjMkp9}8sdUwwP^?e8wecuc!{{7%g@Q0wvv+El? z+|i)u(hDm5HQ+hm$3c~Ak2g9!PXtBxK2UVJ30w+3461$hdz16wsi5+2fU4gu;IZJ{ z;2iL`pwgNCW^dm?P<-=ta25CfI0o+X77zDI@NC@ogY&=x-|Fs*K())=;3DwbAS_Tg z;BDTo-v_FEKL$s@>2G)XyctyfUk8r{cYcSLV-YC#CQ$L-56%Yv1}*`QzRC6T%fX9r ze-c~)9(1#Z8wFL*+k*Q?!M*=Gk;(Y422TgC1;vlw2agB4-{tuZfSYi?6}$l4`xbON zumR2k|2N=)@AiIo5jY3`t3c)ZS@1~kAE3%R{Z{A8aZvp9W^g|E5V$wE^M85!90rOn zP6Q7HN5DP68$qiNxDfY`z@GON7{=Wjn|2yC2d~gD&`VWHhz+1sR z!JmOs!GD1Xc+l;h{yb3moeQcwZwI@;`@!ddzX8RsyWZjadJ?z~?m_S{@Wr6$a2u$2 z{}cS5`Cg~@5#SN{_kpV4wV>+%0H|{P4ODq|exH|bIVgHn!Gpo8K+*jUQ1KoIj{^6* z)9JASJQ??kLFNA$Q04jssD88C`#t{!;B#<~g6bz%fC_&dsPcatR5^bc+>XXQ0Zl@4YT>mx2Ab zH-U=x2&j6`_=K15Ja8A>*Mob2?*jJ*?*?}T9}f6qaDUu?1jP@#eA4^h(V*zJ0TlhO z0Z#-!4sJ7r`7n3@?tgsB`D33?d-;}tinj?o5WEiD8T@Zh^!+rbay$--PKD1nJq`wy z-cnHQ+Yc)KH39Dg55oNrn1H_y{?ED3>sW@DJd0@R<8u9`%6A@A(1W2C5%@ z3Oo}04Jdv+=yM+LDDWuU7lW$jjo?1uhe5T^L!jvMbFdS9)&nljr-O@dkAm~S4+Z}} zf@k19_Ce>DSAgqq-vthVJAS@U7zQ_hH-bL}mHwtLIDOv$s=wR~s+^C5hl2kE#ZL!+ z(cAfWP<+1AqzmY<2q3Jj)LNw z2B>`A4ysG!%5)xroivudH5gmHP7cd@PBdN4sOr) zS9~2Afcv^{Fn0wH`KIeHe*s^C`|NKa#|ZZbxDt2r9k1UQC_cLqd>42JxC~tR-9q6V z;9J4xfph-H^SucC2<{EwLa_UL=*D0TJOz9JTn|3y`%a&igVS-}1a^ZD1^g#CANLVd zLiHU1B`>Z9PXliO4+eh=?ho$%1LvC=pwc-D+#Y;6sCKvpOu*Z~1HdnUQ^B8sqW2Cz z^!n}%D!u8T+UZnqHMkN~eclPq0Urx^@Q=K|T@22^|7P%f@T;KYLH8q`&!ynexNiVY z1Rn(V0k`?F^W$^D3htA@Q^EfN#aF)rj|2Y%&H{@+aXMTKz6|#UQ1ts3crtkSqh8NT z0=^nlx!w!D2>d=+1uyuikE;)Xs{ho-JpK$&d{zZT$D6?;!H2;sz$rg-{(d1SI=l~D z0{#MA3eI}m_3X>Re))qJgJ=BQ^}`Q>=i=`8MWJvJSO(Q!?gz`@6W|)~oL_qW?*mou z?}JBxJO9e*aUys;?mD;}d@oo7{|<`IBfoY&ekXVe?mvK{&k4WrbT)#salad!2L1?C zJ{`YxdY%L--X-7+@B`qb;3MEA;F{k#zkL!^yvIP%ZQtL!zI8e%_m!aN_EAvuIOY$| z*KY+6!TkeJ^8T4mIGv9JPr^M2s(iPCqVpr*G2nrJbbVtjI3M>7;9=l5!Rg??K=s$d z|K#JrD)21auLCate+{kzPye&eL*EL{#rsbe@_Ng zuIGcQ=iQ*f{{k$6Q~&1evJyNE_uIfD!Nsvf=If#40`!QcnMQ^9Y6&jSy7#uSrB3&54QF9hEK-U*7HE1o&U^-1s~+_!?N z&!eEyJrE^LbUFz<1FV4Jn|r_o;J*US+jffS1uq2^{=1;sb=zmT|8d}PxL*S*{{5i( z&34;)`DTLRkL959eF>=iZU#>Vp9t=w7>p9!SAvIvw}NW-hd|}`S5WC6zQYt7H-C_Gncgv_a2;3zMXx8oeZV=-cDk$s#YZm(PXs>(ioSmWmEXQQPO<*9DBvb= z5&r)Tu2nctbU1A%&;K%TPu%YU=YSsr=Yf9)Rj%WnJ7{ZE1_-!DM%)1kX~x+j1uaBl+Vf}aOZ1GnFGipjk-pz3!ucro}XQ0XMQO)VL$3UY|iw^|%dGyhp($;I8|7zdQ%*!F?5| z_WA{=eD^(IijC_FK(*^TK=JFtpxW^n&-HY=LFIoL_&?yypvramfu7DSpwfK^RK5NQ zs(eQuIVy_I$jNmp5Fx3{||uo$GHG3f)|3~hpR!Q^C0-l zDU8G5&bXiKoKm&gJ-~jHcK(+60!M(ua4)^k}041j{0Y#siLB)RrlpNXj2&dO9 zP;z4kRJdz``zzpnxSs$u-aco#=2!8S*FzNTzpnztXLayw@ZF&L z=aZoL`LJWXU(`Xh%iBTG;j;n%4vKG%JkIGo3`*X=4O{^J0aQOa=6Fy41)%!jx516z zUMG0^*Mi66z6X?E@kg)(o;us zfD1wOza^l;jf49B&hY&Q;row4#ozfP&u1?9M%Q^0eoz8PX(d|4?eD)ep{pORw z{Z~+Of7;3Z{X$Ufehn!4d;?TFO`GTCSQ7B1pu&9$JP6!ozNd2tsQ!8mxDtE|sQ&Xy zQ1m=v!4%V{F9Frg-v?FCJr+(e{b~Uyy1fFt2)qYWdG}xB`K<%z;eIo?C-^;3^!Yug zb}TOT{x=4SzdsJDzyB5N181BvrSJmqMo{v1_a!bbR)Oc^z8ky(-1AhY#|_{axIYVi z8Qg2B^ZQRhwfm8$O|kjd^`Ppv_vzk$&IILt8>sxh4~ibUFLUe#Mc)sBtHAA-ySz9D zY~X$mcn)~r3daqg>iIQL^nA`rujdL-{rruf(t8X%7d&y5m-F?Y`tu{;4Pe(9PQQCW zjW_=SSA&7}6R@fA>Vf1eASkLQ7+$CcnA;Cn&k`&IB9@Yxr7 zdz3-(&4^tt@5fC~R6Q1bZe zpvL7L%3iNCKz+X%oCkgnd;@quzt`u(p!|Ocs=U(&ydPW)F2wy-Q0@C8a1XF!aEjS~ z4g$Bq-34kKDS|tL7l4|_jez3+4}s#hq~h(r4pe)-1XO?eIJf}Z`4X3>t3lDZ3M#)_ zLAC2Wpy>4zQ1Y;AXo~U8sbCN83MjeuCGbJ;-{8LBgTtQwk3q@(&Jpitt3l=eR#5!@ zdr;%vexn|)4yt``3hui>)#In2#;5(NQwmeTHK6)Q11y6d1m}bMj5+_F3o87ZK()iy zg8z<}I(<$D*WiCQC_3y|bNa6Y)z4oIsvNh18h1Yl?gl;@@GqeFyrb@XJ`)uE&jiJn zZw1v~J`IX5p9D{z!hCw%>+`yX^T`)L@y&jh`FPX=&c^*BQ2E^hs-9m44*;LN-ua>n z6kS(?>Sr$mmESF(+U>`n=-aWu@hDLK=YuNu%RuFGN5IEG$>FIRz298`D&JRwiuYh} z{|;0>#Z8{h5Lm)}Jt%(sBPh9j$n#y#t%2g32f=>uaZr4?^71KW$GHj=fBg^?-4D6K z^`(kD(hb8wG> zl0OfEYX5y+T_rC-wdkU4}u4R4}(*|--1iQU0><_;ymz~xL*i98+<9K@?R6ae-7LW z_b)*8-zl$}V(SpILGjlTQ2DF}#jh^}t)GCq4U{_u|ptV?1xd|JUK$b8&x|_iK36&mIrqo)-|W0wT%&-U99hZvg2Mg(;xq;){7sz^%V)!9VhRE2R0a;ID7r=6Qf;Bi{}S-)DyJ zx8VPG{2l@?4BvPye1-3HGn-e5H*e)#G}GT}d4FRFi%2xy{-S@fc|T&S@E6=~3x2II ziig@qe`TKaJZJHIg)|@I5s!(V_v8IS@IyQ|^1d@D{zq+cdkcQ?@AB~SJMfb^e~s6R zd47$b&aC_lJdNi>o+{s!B2hY4*8owgIr*m$FzcEGv zAIg2}$@%N`0MdF6kN*A%{*b4a@V^It@7{%(y#IseFZkaE{uj@;dA|ny3}G${;RLV2 z|J~q|e0x9dl7}U525$W=;{6!j2SCI_`ga6xx8Q$I@Ij;(uEfpMrmzhBR`9=^cm4eZ zOn46D`D73(c245b)~(f5W%$5#}zQXOZWlxJP;aLHK?HcnZ%Y_ zKM(j`z8}u}6W}Ys?-6zt&zr;dO9D>e`~CU`cJh1`|Mj@Hq3lK6{X8$h{coOE@NEyC zSKz0=S>W|Nr}2Cr_b%Ywg!`#|^?y*e3s>RyC!P=Ebu-T~_?^hJE6>%qZv)Q-&mauy zkj?A%!o8a3lRWynj&C!;fAamSJTK*ad;Ct}U4LhSN8#4r>Aau9`v!Lw-pYG_`1UgV z9u9FX3V3|@b}+b*XJ7nLLrqT)Nf-2e@$Wd^e~kY%czlTW zb3&LSct4ltoA_T1&f(GDBYgizcy}NAJMJrk<1M^j5Z)IM_8+`|Fr;}uIEecK!VK}g z1J8lDe-+XzgXi#!;r|DoZFqkV&wji=kLUi7ZiF3q`EhU@$@h1J_g@faId1)(3+{{i zM({rHN8tN-R`Xux`$4=j4J;haqrVFN-8}lc7{3?s9LDqN;P-Rhp9t@>z&^t5h2NWb z^f#U76TH{>7J?OC#LGcE?}{E461srf;`c1VpTPUg;9GfKfZutb{lVLx3-86?CHQIZ zdzklU@IFqQkMi{6o`HKe-s9h{yl)H+*_9sQxtlQG<#_>575Dbx`_Z_k=i(lK|Bkp{ zpY!`V@BhlVml9?U&vfFxIryImZi_p?f1lvD6x^L>fBZLqUyz&k+d=(3lXv}X2VQ~S zr+M!Pevb$IHGVtu?Gm2tcz-R=9lXDh@1Fzpw@bi#!C&IO-h8uv{u+e;#r~0e?dnf3GYjIKb~i&kp3rlU&H$%@O?b-?_vDjk7GNq z7{WdP{)BWkg|t=&9K!#T;XTIx8t#|z?1{(M!S561{E*ID@jDp5|Kic#p25EdycfSG z@mmU>Y+wDKyZClwaKDakJBPUcl?$WSZScP(e0z4wH#wgh@`|6ni~9h=zZiU7^vvO* zA^aM`9LxJAp5OBRe8TjFd_EuW1K>IMe=WpOGM^3K^!^*3!*kzm;M>W#KdX=Yeb1qA z75=Zle;;rv&mVdJd5E`1z>5g`ZQg$Z_69#iukgH)X93S_{9nhjBWe5<_d9t%AJpF; zcz>oCk-vL*kAMG7Sp7{2-}L@$-cKdWp?v!k&$0M@9{1TH-eUZg<98|U^Av%<(|K;j z{XaZiA>7g6kMMtx=QG4J{>=Le5QQq(1`6c1b1efs~$@`$b^Zq5??*nfF_4gK@?RZ}DYPWs7GT^n~@B;cX z&y76q;klRRVV*~M{>roCLdwr`G|#C#=ktv5T+MS6&xd&)=6RGyoq7+RE}l6&t9bf& zHt<}{a}&>pc^>5XKF{xXwpk3{@l5BL$8$c<7|+XiZsPec&%->A^8A(O4U~BrS?O;F zo`3WAdHlM~C-alAJS_NWyim9q`0XG3o)P?(;WsPz#q_SiFUrpt?)~^pZHfCe{Pqog z9U;9x;de+&xcy(_wkvtZ^ycB$*%EF5znI<14BmUo7V( z_?-~^Vtc+9zu0z~b1Lqm__en2j@M`5A}x-`FY;E*V-UZiTJn7xevv*g+*k37d7K{d zU4RglzOBE=GgshuihEg`={2VDWxh$Ks6C~-tL(?2ATDq5dozBTL+CHoe@EUG{t3Pv zV_&j7XECUWC-fKFa~Iwf{^fj&_yqq*f`^vSX zv)(bMuQXn|$iHX7@e6S}<_wnVgA)RHdcD=r@ls{9GCGi4R<2e0E4?KZB~h9kb86M< z_(h66H_^WoEKynHos6o2gltOvX%*W_ke0YS+FRQ=HeT*aiw#Ya`fznT4I+|@isqY) zHb#1&02G1NmHv$#bM&ddG7QnGW2%MI+`N+hDnTjxXnDOQA@^`&s6M~1?{uPh3p}0T zt62wXmGO;FO<57sIU|jfjF$%LWEc6Tw>mOL$@_{GXdjxUGB!y4#!5B#02Zpx?$}|t zS{*CSUku}Q)~6>bcxPYIQyH&!>@YS=JEs1;_=oAqs#3kazFOK<|3~x4J7IsL~bNK8^_BOeBofZcc|VNNlL>5 zRcJUkvgM@3n&TUr(>;~KDc1C4k;vOKTR}5bgZel<2UrNFf;PFj5*< zyh$2Gyj2?QqYU->*kG+xFEyUR^hKu_|Eg_fdYvnT@t!(f84+!XJThsdS&G!L!_o1b5n$k?!fj}^FG(x*CBM#6;gr^^J+ zO1!2`H%Y2j-jGnGa@`%{CeroZu|w~0wGN}!;5XRcV=t6nh;Hv`{NVBg%+XOeIMLty zC^C}E&7GJS4DXA55D^yzpG9RW13pS%ZMjYZlxpRqG&WYN(q(NZt&2NGyeCvghc_l& zqt&E7Uage|%E{7|;@X2d53m0xd3P3P9!bYIx{;(^7tz&uOe5sW`^<)klzg{Kx)!cl zSD$9RzjITgh^V*Gt4sZry1?y7)scE4DKM?0;JK`rF`w6Zrai~_H86;%k)>~Jni6t#1I~bE0Yay$8Y}U;c zN$g;9$3#X+Ei=%tPEwejkWNe-de>*_e}mO;}NneQDo0;ygF2d zt^4|d-03dN!Ew1W-{qB&v1)Dn^7013++>bddv2jwlWJ0Iw)8E@=}E2OT!(8)swKE< zLBtE{kZCcd_GEtN6^r8=>Ctoa@7xQL^ISK)AQvK2ewut!bw_FuUo@mgg{3ej9kRFJ zm3Ur-0P{^%&DyO#R_>MBh#m&XyOVWD5lSmZv7+HJXfNFb#k`C$i>|hI;p%f%txf71 z;oy-RPZ*~VWxQfaXlK1C7GY_y5=|WVv|;^LRm^EETN6cMu5A?hKw$QIV@%uukBfUd z`(Vdj*vrQCEDOR*CvGWNJ?Sq=nG4}k<=tio-YsJ9Z5qMsdtY_*uyNRVymyfJ!Y#&QYdYZkW`8d>A5Fe8a$$(jnbvYc(r%9T&gAg!|0K;O-ybY>G2VP5C+qrSM`m= z1P<%0A7*qhVa#G=BF%PNZM7@+DobpoBd{z-{)Uak^`l^_OZy85@imOMct?=p;T!7AJc*G zJ|*1h+#6E(yp0MAOX7gODxES_;G1U7P;s<6S{!G-QW+g|*T-cOfiq##Ec+0iv0r_3rr1jKD+ZN1^rg@jQ6L&V1a;LB4Y3N7 zrqLJdHuds=^o{%&loRxEFgRxBET6h=Rmx_lp(@m{hMEbr)f7RMX+x2THH=M%ARaK8 zD~(k|bV|rrfFP$Kx1v0xB`y$sAT>m;jJn)XyFL8`{*R@IMd(8LuQ9s$WZ6XQw2TE@ zhG&&RG%{yFmLw?ZsNyhVXeM2*F_;YN%=1Z`1n}z9 zSXDzzR7aA!j0SO(Y|ht`+nNFfmJRy24Jmnc@Ir(@lYGrojY-1wm5qp^TNXAO{9@10 zuvr_CMjpONv+Pcmj%K{&dVH!dc({`%CXkaMHjJo+tSO@W3LMCEXN;j7{gA$aj)-^B z#~oAW(^d~M3e6}~TBS_ucgiTb zpv2fHJX*;K#MZEBiNl9%V8SDoC)dCOOlU$uRPQvp{41mV)ue<T>1HaVSa$m|!)`)2vrRkdYmOG6Ffs;aaNyS4( zT?^5qW)D{fOaW-lC+jW7yk43#h>;&jZev?MweDnfLuQU z%thUJ)s&JCt!WApNt%k7ku&M9A(pbLH;0-?OpCl_Vp@>NQjGqVZ3*Eb@lj%45rm;d zZYuo*I)@-}?o%3J1~YDo14gV|LM9b*bAkLPStT?Mgqmc!a<0GB%HvFnFhS%*le(l? ztU?z|)2x@vLs~=#6vMQL;bFqp%-#~|&=RmQYKpW^r_$(>bQG4JL&rg|4TW;I1Sk?F z=m#n%S=e})@l;dzQtSL_E4ru(lJZ2RdAYP?nm4Sr*~q|b`U+*Rwkh{zx>QpN(-Rps zT%mAnf+%g(xRz*>OIHPSntCUT42Eb#i%to!UY50_nKFgHlA&wUe1 zbrH+wR-K!CHOO?W_EDlC#|Qj6GY^a;Ov7N2^PD#?D4wU;CQ!NTf}oC*V|7Hfx2R&7 zfb7+zw6l_QNy%c^4nb05UuZu?3mj+cls5oo2~UWXnF+H%^+vCTM=Tx64`!yZONiwX z<`lF9<$?+kzsO{iF^lLCx*F8?vc-^%Q8TlcL6`}j+f2-$5M~b3!gM4wkjInqzw z+)>_$Uneuigms3%4S~Ti)7xrCCdiSe*@{Hk+>20kd$q8Y>bxO=Q1E7B;(@Vx&bng_4L~KATMIHo)@n$yrjRaVbPhc_0aM?A}Jr zmb|=;(_%Kp=nKpn=J#ML)oclE%hx4U&rqsR7j+&i1+_9W^jNx8(rU{#&+2c~tW~ul z*H^OXUU@@>F@;pgL|hvaREOP&(wvcH$*Lu>YEY3Tls>2!HWx<}cGfXlG&@_o;t*(= zVz$TvN3)-O5zm!O)<8L*9%LcuKgp(YjkP1w@3RjySeTe3s7ofan>0$OEZasC^3M@>2sU}BU_hEYoUK#m=@1H%%@A8Y`uHF0u<9#y@igkb+t4w& zlwl$*3ehRh99yc;tUff=ZoCRfM=)chImSsY9g-=%Zyn~rw39|j zEk&h~p2|R@ip?rzNe1hXhAhs-puu}*?(SIS(^e#G^1R$4Sgkx(s??rmT_o!KX>M_N zX_CO=<0yiiHKA!_Jh(J=XKVUEZulmzd88TeIjod9r564K3P(g?YlRGOG(u##wOi*t=ArqeL8S?7(p2_00sW-9$iPcsa|F243NL#sZq zHmRVsDlm=OnDj8i>ZiRi%M}=7O#b)+U(~XvCzohVz_ZA#CBqwiOTWAxz<9VWC^I zUxY4TJpz$MBaO2#&47cVixqqr<4ed<=Qk; zdn%*6V`3l&XlTY+*t5UNuK>Ba;iG>@tgA9wG)l#hmxiG;gs^HQiKuiL)%0*RxF_Nx zUQ_T~XHL3;fqr(9_S$Lrq}4WVEDM@bkhfjMqQ9jxov|uvJ98szPKzS82z4+4!LJ-%7)45+%0@4}879s>OvV|zMGTiB7LT+?UTztfw+hi3Z zndJ`SaI9AJr=8Q)2Cs1Zl4l568>3C8HH9o(>lcVRRvkr3TIMbBZFyQF2aMs$RFt}! zsydCk3wlQ@k&HFNXW9u(s1E85pkipl!IJuE>5%?GZB5 zI=YJ)(%k~0@s!Lb#20Naz%guQ6GJs?yO7zu&tkL-i@;CrY#QCo7Md=E)ES-r+~ zL6kS3U$^<(V@u{upUij?#}!$zr2*RV=9YprWINRuEn${vLT#eN;woLSfvtHq7e3oB z66HU{8DujMlZAYWVTWT+qk_EvTG?i@<~Hv0ZG~|!4%%Qofj&fzuddkuqfxJIn_&@F zJHY%oP6_rdQ!_Q0$tNr&q$zMKmre)}R(Z2FQizmRDw%JC%je?z<3cFwxIUfE63Mh$ zD&{93d{~c^PxpN_5jI9+t;&Np)df;VjkT#X*#cJ}VmfVOHLTiGo-7NoOkCfOn>l?& zo~5gab)it&7xwgGG*uuL50#`zblB#tHWk*4w511GP>3jVL9?QtFS3PF^@3f~#{ae) zW~*OtImxA~roLxri#Gp^I+j2f9+Zm2U(s!<7p+t*T?z5b> zO6VJZWPQ)*RLZ9P`7*I8rJaQ%GMon<$bUAmf7+UrD<+i2zQoqGF~)YVPKcbFzPOFT zdRCKpctRYTJfW8OzK3Xp3**3q(AhAYE)JR`@A64Zr&e>ambG%{gbjIUjNd|mOc|R* z(7J5Y@||7V5Y9`fPSsv?bSyNBfSHGb{0UPy+oByNJe*UJ-2nTOt?@F5 zaEL@pMg7$#7SrI9wO&(!^rcPE(SoIqWA(+g^%5WR<3H8%KMC zML8pLP@mIgaHTqSxF#tdwJ_O1ZElfIJfzbUp^ccg>3`^Hfg>gqDQ_Z3N4$JqE;ZZA zB>&_>Db{IX)Cm#^iix^D2bmbYsaEv%%5Vj}rQ9@XkE3IH?+nu_?M8{?e%(}SC7cCg z7ocfC5(rJRucQkFdz=lyslfv)zSv9QO{G=+;yRw}&1oNT$`($k)_N*^nCVk(BNNZ? zNp=b+w1la6)tYQS=^+i&Ty0Xolp!OuHb+ZmVvOiwu4pH|_|(}@xjbgrP~BU__VrY; zlA#K-5uJ(i_*w%nD`MA7_BoDfQDAsF>s-a4wnN*6g9zzzvU1HdWk>`WYmFM5C^Wf1 zX{JMQG*BIY%*>0_u7fyi8rR~N&$mqbwC2jK5qb~mE-WdJ+F}lKWA)Uo&c4o0cD|05 zwWfQj_5o+Bg3V6RNAtSW`qLf4OLl2~;udI+6#d#QRGx~qfe|INkEtPAjj_aoJ)Z`O zyCL&NYjX6sX*+A7AQKLuX~L>P3@gi+5i^@=m=&u$T4$FPmLG|@V65!${j1pNs_PNU zK8K_S1y!DA$xbpTP1&BZ5xTo$t(Ninlw-EoUK(Cs+NkkTXK!*T(G%*WeohU_GO4N! z%kC$WX?=F#)G#fyxkfv~_g0#*PldU$aAHNWqYk#ES5vR7LN!2kbovTQS2l}_yo~A2zPgkMvo48=(AOsfi4&=& zAOmzI*`Dm2A4JnJGfoq*;Kt^F!czO($BAk`vS&vPBny^u6l;J!6u2fB3*+`BQ-))9 zG*EuZ6Jw&OhGUw>Rr$)nN=4Mu0pzH%%5S`kr+igO=lLM3JRFN?y{IKRgw2BEV75`- zL{qRM#ZIh*JwlG9)2;Ou1E!)bS%h>yVN_~!l_X#sPmFjf5!-WSz}!G+N^dNiMXRZ- zkiPL?X?jLD6&-$ZAiv*Vw*E|PN%YWBu(UIo&*D4xM{d$rE00yk%k3T2XYamx8{3r!kPtDKTp;)pJDdso?0YBW)F{5XVF%Fs5(P;f z9XUNrUk{t^IP);A;G5U1!?Fa}k={IYiCW&4$`NiLfa=gTwNGY=ddG5=yGc3(a^$)& z8y4v)X}`?UuzlzC$v=z3vb5Vv0B1Ni`eYJG4RcyJoWmG8f;hAjMA0wT>(kDfMril3 zeNT=Jnv2oYrDJwkkDr)Zn{QjrEQ`=KuXxlbtob8+On@NVn$AYWqKOC6ny+U$7!9B{ zR5;xiV&nFZpzOrMjXAX>Otrcvi;>sEVNP4I3yb<1fO?s%nE_>z44LF)^?j*+ zhH_48(D*ii>X%IxX*O17Z(7j0(K#z)+Gc@fc5<$46*jqPBWF{AD~M_BscZ4{?bl7d z5HM8C3KkXwq)UiZbF7p5;zUN5KzV>+nch>TT=dH9q^CN-&LKo@IHa7LnnPAki(p~9 zO}ebr#hj}+*Jq0Pa3FBZT}wzkBT zRWhD1nVqm<54~A?DSRS2hLNvaQwv!!n-m+-H5e16C75P46zLI;p4m9mZQo`=T^kso zZ;Z!;!w>eyHT*2-7B@t>x;N<4y^v?lP8RYD-&5^1wWEdaA>!<0EpjW^xlAmH6=F>? zg13uh;v&p=vXF`#LO1FEao<-oj%=clbLw@h{8PngzxmQ>(iAr?rl-43m-*NNr%t>~ zB`aJuNio&R8V%NJjIkIUDw#Cc1ZHQFmQ_$Ae8G;cOE=1$Q7N?jh`kA^&Usa851}+D z6qfmcFP(?dR)KD760LMexO4K6yK>@v6OB=}AZZDWt>$UhW?fNJBrb!%tnzW&xn$( zLUZX!VFes*W}2XxE5#sF)S^trVNV-SRxl2kj0$4G<-Lg+S|J^GR#YvNF7U~<0=+bw zxf3KO%5t9=hQpC+zbI&es)Heg$-g$C<(E2AsTdTR?t3Xs%QeQWnda`!SQKo=ybrkAH$7N|N zCYR3LQv)5dF7=4~mWu7gMokbYNJm|iH^iC;M(;fA}W)5z(Z2O)rnQN;3SwK0H= zH6HH4R$y0k!8SH-YbU5xy(zf0eE8stSb5g9pmqg^F`xGO=|H$0uv+2w=`ntx1Q%tM zj`k9D9BHszua;dMp;D$X{6u234AKcGfr;`h1ZgMvSGF6Aa(yZr?79mp{YIgD^)!B_ zJu^L&U_m#Aj!Z|Fl^t#gi#v=ynVC8XTfG_h{e(s9NXH_;aLT7ML(10bvy^6XVvY#JMseOGHyCpW_4>od%MCs??Xs&XG;w^Eu|?(uB-W>gD2j zjSIr@^~iG*@-n+pojI7#5oSuf+dRP~eJq*Pxrx;I?b<6-GiMmG)8p7WnzUl&T8U|< zof5qrg*Ks6hF#CiY8Js&;njBCQrFi?Z2C zKP?t*13-}ivvE0Hzr>P}mW(vF#1HA`@zPLPHw~0o2}SK8dHQZqAABFfsx%~l!@EKy$!tcqlGc|HJ9D912J*hdOO@DkyiWO#!dK}Ri?>uVCG+ap$`PHiD zeS3zR4raLJpj{;KF=v;#8p3$E-slOZnxI&ia^FLpe3X8Wd^GH7O%Et1RTU}F5H)U;C}m0Ho*+P=-zKU|EM zNv~NHH|s#{nl0;IIWE)PRc%Y1g|^Npr;g-2Rn%7DF;U*6t8J68NE3B@p({tBG`6kP zwQsF6({m^}CB)gZiP~9OwjuIAO_93^ThuN!cCi@5;za(9v{Xbdo?jB=(QIVda-^`{ zWU*|J)J_;%{w;>(U-|lL8i>6!`E0gcBS;xl<#jn0N}38XEfsHJBs5M!J?^gzgeeMQ z%r^~W4P&XpZL<(zek)SGxYe=oqIl8v?%UKge0_?XO`R}HVV>%3hBmK~R(w6-Ew?}v z(jKd2;INhRk%rD9Fw;r*B#VyhA7JJZX1Q@&m~RTp4LpUFuxL%I-C-=$iCs4#NJArq z>K{jw58lv@CkZ0+qP?}jRag8&Sa}PI;+BkdH&Le2}gHv%nH#m?Idj6_tVFj zuH}nhx;`eow7Y3DS^mIFv%pT%ur=6VB7i8KPRm#6r6xEzg2&~*(^^B3jdq`@Ze-6~ z%#RspmKW5k7)8t8f#9U6HH4(?Vg=wDiUOW`&&~ z=>^VM+Dy}k77p(GWt7xK9U*n*)O21yk7Ign`l+ilQx^|8;#-Lvz!{Ef?I z$)N975kg8Ucc(J6&TW5)Jd7|kbtZOTqkyYzvLE@L=P(IVcU_fgNa%2WDiw2su5#6v zHfL}9ZS`e#2X>#Q2$C#7|IIprU9OTwVY;U+Fq$>6Vb1Q^r8D$%Cy32kx{M^#nlvO{OgKFt4hP8)uOPm0+9=~IuVKfLx})M3R%yX}6gwI{ zKF)_@n!cJB_m~ldgi&Jc#~YTWjlbL%Q!7kE)NETA%nCUR&cN7!jUv7SW6tS|&pBo3 zvc+?`8a!LYAV8QvoK#G@yH#~ow6#;OcZjpiI^C-Y9=^U+i^&LPoUqMT{m;2cozShl zxl0&k1rw~c=<U%cb6?a)mtwAQ)oC6>bAXtY@!Ui_=X`KRQGy1S@XTRi;Xb_^K>mmak4=0@F%>I)RIiqQ6 z`z%!zF><$ZI!A3q9JD}W-AKx&Em5TCm6KoV6&nc z!h;_H@rxc?0@@E2`2_^J&^P-};d}t(o+H~&!DfwVO{J1N%62BC;mNb9XeQJ{ZLDb+ z3|IRajgODYN=r6cOGGM|jw`>o7uQ)!n_!)CTm%UA=DTon;Z@l;_YeQxScEZIwP1N*V1~MaPW&ifUbLU`m zR~zSMLaGq56OA=@0w&8jW3Ha^Mk(tE8169FX4g#aX#;B(#b@*vc^F^1Y2Q@(nInXV zU7}-pVEBo)el0Ycc#rcDB_H!N`IgQ(Yw>4Ga+~VW1rbdqqIA>*^My~l(gXG0j%MM} z6p^&G%o2-&a-C~@iXNB6EuhXXOjJnBb`a&E!s(~zAW%Bbi^72OmK8touRtsq%lv)n))^~3Ita4Ao`L@z3q zoR#6Y&dH=1_7nO{)lc^#aiS?+)$-BJg1VVVo>H%!`nk`U34F@|?PffWO?PSD!sS1g zq4}4q2x_J^GG0dy8xl%zyY`amR%hvToWRoL+h<2;e|9xK@$`!z<(`IqBB`zmpX%-W zU@7hMRD3&<7!6e()>>gu$Cg4G=8cJ8j4ch3DF+9h>^_z(7j13LZRL?Rp*cak97qjr zcPuk2DWkZpQGYUtX_xqFZ-XeDT_!SF2os*M3H;b`Q*VTouMmPj(D)AUkrGNtW~iI@9a9n3rWQF^}|& zx();C5&_7MH1PIZU*XF7^%`5*4y6XRP+=zk_agHnWb}l!@w{LctQriW(+X?T-?9m# zh3S$Lhl$+oinY+#Zl($=W%QzO3Onv)Dkw;PPbEbQ9nD$@Ny#l_+{B!)QdI4o;bNJ> z5Y5^qrW|hOpi(iu)Friw%{AqpSx78;U>^xZ?I6^o+q2ZH#U{GSBo48y=U&`|N!JKx zVKSSz`cj(-9AqWAIB2LmEeaN8ofyPA=>+ebC~6n0{iJ(BDlu55zjyrcElGO1z98r0S8Tv6f8? zVk8ZUmR?Y|vd%1Pj_#vvGP$kwn|W;CG$Mj@QV(_Xu-`oIDg6!!kPnh5K1)n80Dpp*&Cwt799bik(fhJpj`aUxh8S z-uMi2P=5EG&?Q~1z}vfmv-CQ<+)-Q=_F=_S^QH!<{L2@wov&Tkoc%P@YbmamgLmg=^}jR^~P zep8ghbzVRAbH$+`UJ74QN{hn@YixO~KhB_xeB+?n;38UD3h;+b= z2sQ?X9;aC{_Y!aEW3mE<3p+V&E31NIp&#BT`4)<=Hp@#cbq`G*xQm}0kfrOw$z-31 zr9CWq>xzZ&^GuAr!6uT$Qss1tB?fQGDkRn}9_wh)?qPy)9eZKNgT5LRX1nQzYQ+7( z>qezC4~#NVn|PUZuH2bKwayb|PN&ti`D5!D*)UYAI$6MQnX%2f!w)#L`JCUf*ygio z8a^DhP2IkGC0fcEvY)IPkxS!_Gxb82dmFy8)tpyu(DxawDHB^2Mr@jqBxU24aiJ*? znp!l8n!y>n+d8|_+YZQ^>gPA1pfzI6HUbvbG49NuPBVf=DfVrvxMm@#s{M-6mV<`v zCMbehpyLPgrZsC8mR_*MAj`(l%7(Cq>%=o+NLov{Pc7;^$}ZD;ycsMJKOj=9RMETH zBkz|tWIYlpP{-7GROh!YF6td?T;x3`Z%c|+Haq_k)X0{|jUINdT_pX~<0~b*pqkRL zEQZlx(nR|C3EtkI6JcQuzh-UehieR_(@L(Vdz|8Ou3c>C@}g_y%H;`5k3*%JZvU8O z@xun9pt5xZXVX3t4`?b+wox_kvT3+ozR64azRhL)Tk~pz2x&=}vLOYKdtJ~8`8_?; z4X`7HR-<5{AB92%aW4UQCRVldx9J&jO^=ZDO%F4*hRDuVM+>rtfK#NA<`fI=5-zds zj5s!S;S}_GR5Z_$^-2vqE;vFp!f8!ksApdygAWDiixIMvxnNXzVhs#LlUV2W66sG2 z;E<*HCt;ccN1>V@^}H{J5zb`#nf?QQq^vP8{EAC@oCLz{$iIEuPxLsYp zeF%r87qEvE^)WS{jA)75=<2i9GBh{5V0Q+Hy&6pFl@aH8{RC4lG+7eFJj!%rRL zix5t4hvkFNh%$bdDN0&Z#%k8R{5X{k=&%m$9nLNqN-GtQwx!42P#nVVFo&&^Q*$*~ z3)}nN;cQ7pjnh*W?|WA^P1<*(+IV2?LnGQqkP3l(tvuBb#CHc}cFv}x(Pt@vx{6mu ze1V6AYrNz$#~I=r)wwmVK(4G0xEN6^45d=FblaVW&#V@ zAXzg@X>KTqD~H`3@h8-6)?z;+Z-Ne?!k$+@j=pg1>SagtCM=Sg zI@oIFIP$~M=dE0|cInC$Y>>Dh`?25fOYy~c0n4c&=QaQjig?;ws^hx9F7 zjA9i;+YsAYXNmK|P+32%5x6S;EX;`8Tc;J`tjs7NO<_i$)hw|strJjJZH6`l??Qe^d_auvI>)Vvfb^|+XC^QIziow zW#q`@a_;V}g58_dq^;0#oK}pBg*L{KNc3hIGp*o}LQR58WX`kdV0nYxTEHb&>3UUR zq|X24-g;q_9|P9OQhGadf!IAw8?_2q~c~OZ$rGfa0RrIon$@tDFCdwcaB;5Q?0LFD|bS zRQiew8Uyv>+Uo3d)SFi?!A;$L<&IS=i>py9lu{A(i93*H9Xa!a;>;t9GmlSZ9y@#H z%p;DRb>xv9%lPq!;#%frb#C9N)@CQGtHYW{aeW!Pk>}LR)m@Qm-oVHPlAcSP(SZgU zNpWqtG%`C`Vr-GjVKQc^C`*1sVua1x^M?5ao_cqkJBE78um|^2jh4r=6exMQWBJnM zi?dqK>^`z%p>9PUrCb;tX4~4v4AV$X)Krfvtj14TxAv6c@mVnF`R5euHaoYXa%Og$-?Iqk%b!Vcn**$GQib{4s~rgw07^SyO08X2f< zzH9S4SVbURuA?a~=ciG*R&vw&a>X)_^FhQ~YRtmgW< zqLK+YP$s!xi8@?Z9p@Oj&epN9u0LtY?rGGnT-#J`sB%!QV@_*vAtgUh6&i!X&i=h) zPDXQf1jOP|ofVCd5lX27^4mYe-h7KJc|3l|kBK^)qh&K0R5L zZnQQoDkCyGiRQhnIni7!eJ-AADq$|#^yJ(|KPxHqO{GEIoZ*YG>h>gA=vZ7C9b)Z4 zhB8htCubtbs5LzXhqqg9uMm}6JYE?pkB^7`O(KnCf$n&v(6!C?lF@*E!FiCqmro-D z_zg<}sjHVL-t@%U#7z@jmH|f?boZ-5wDHzni{cU&I$1zhf8?g7XO(M1b>s+U@8MzE zjHa~;<{C)X$7Zxg*zB;}FDjt}1%W1x&0-jTlRhf)g6T;bcp1HiX|2NA)Tx9dV`Vy* zw#7NOTw$&?+7XCebc>c1N^LolK%xXA%-}GhViP|NY4Mh8(5jb*DDLF3XDN2a4(T@Y zdW=3@J7_lFHC`EztXwl@g%CSMvQ{O5-NUjtbm*pym~E76O~Q+onh*-> z$+{IwW+&@L(Q067nUj*0zE7k$Ng9&1edUoL2_>vq@);VR+OddnW3h%__Bs%v9&YZ^ zBwKTU5soJG4spTw5PQQU9E~$6BEQm(#i=<}>I>1VCb5i*AhLH#OT64WsIkK3F+b43 zJj2E|Mo`@jUV;L!0j!

4T)E(z|(3^2a4WKxm4PMw3 ziQP~u(JwXMkREBjh1+HFbR}NXeAQ8}y!mlscldIn-aB@%`RZ(}HMZX6u@~xh{X%qm zxA;RGR}L;uz#JWggE@~gKNEEvy2xY#j@ID;uf^<3Ne5(FOKB{krfY2qz|DS~Z)k8@ zWps4&Ef|n-BA`kLygprs&tf#hjqEn+JUGrE&Cmu{lwsr(Q{JCA9k0t45~h8f$Mq(#!TaMe0~1J!!IP9QPj<&=k{>)c9txUa;S5Dgto zl5AQ>!Sn6%%5G|ma|nrg_32B!=-nZVa8d?iUvAO&x)nHdIrUHPYf&p)Zz2W~v#z3% zfX#|XD(RR*bVN(mRzeU6bb9*vdNHGfoTsDUZigICEotU-7!ygD zZ)0nt~q+uK2Hs8V|Fm{VL%DHZy(;xab2-%b zCNYe*C88RZN2NPRBF$mG8Y{$bR6(AXB5@jICm@8n<%I4@c3cFoq6Sg(#8f*C)8`HKnt>*?O zsa;-F8;!h_-GRj^c%1o6U>YVOVZ`tnQt!xNtl6Le+s$Zh#3@L$xreWXk!jT5q`{=Y zS!2WGqXElUhS)9UTPMc&lae1CGqjz35hga8E z2Zv2mAZ(#iXlZ0oJ#*P0oNAyMrDIW>@{y8yn%^%zK@?ByAF%*L%F=cA(a8UQ$W+tH z0Vd6iM{WA!f1cmOI;^tA@<5Ejs?0(GNmEOhsUW7uqOYvgx&c4aQe4bT5u<{d>aGEC zIX5y4V$Tb_Y7?tvD_5?1P@DuF3H=ZpEZmOTt3_Lz+5Sa zid{yQq_#v;%Qa0-P6=|GLy%#F<5Z$#xP*#nl*{08>?uP{td@z;2Gh6Z(aj7gP)kFb z=*;exao+()Yim~DG!|x|>sWeNco^-Y*JaAFkMA{~S!$PlpnA{{jQC#9A>X2#qqXzJ02lkD z$@htUI%pKmjquyJU43q5q^DEvKq)$S5Mc}n102=FYyeRvWJ|dIlBWMO(bLJMne&Q^ z>~}-8DFP0PiicA)k*N-oGdD{8-!l;5HQk|^5P)H{8i~B~pQro(smNWM?`3)wZEWhJ z`W0-B&|o`q1)#a;P&F7Fq(3n(6zBK!REFss&iUPi-1waD?h<{uWrNvCUh~v2WL+~e z6Y*PF<7Sq`OpzKtLngXVSqel@G;*D7i@6{$IZhh#+0;NI(JB>gnK@f{tGS*wOtw}u zUxE3gtdt~Nyi{Rc?ZZ)|&6cBVUD&)@?paM9Z&4~fL#^|Xy&q-`=k9WmiC@0q;?yb* z8Oc&JZL7Z^sN$ zZ4y_)PAC;&rJvQj@1F3Z53EOP_MNA0OU>c%XiK%#%?kTZI81=X8l=%gxn15cge?*i z#6WrTUH$zmLk0>&@$F^_yCEkhzb8#^!r&Ow8E7{QJe_3D#Zp!2?{}pThSrpH>*F`m z?G)QP!eAAcIX6*9p=z=EG)GH`0 zoH(oBn^g{T%-p_9 zPm1|40?L>3i`uADW}21nN^xJ9%GJb8nz~V^0gO;1VQ`Z8vjtD?1+lsA@a9_@{Z#Zn z&apdLihx&^Ed?LBh&oVW1T}gIzpIh&P@7+`KA<*BJ9#Sd+lSj~Ntlw3>Hl8^D!3FKj7x|{7H;-c=FiWK`gm0Bf}4Oq$OoepJHyPmv`J>J%*v*&JA_IyOGL zxQRv+I;MnQ(b5=rW#kSul zZ{lcUf>GgG4REqjQt*{0TE!vsi2?wYomKsX?3CkmgujT_H}+qoDrng5r6$?G9Xe<^`Oh zs<1u~=tUKMC8bfP%x1LUGaTfL1nFF>L(?P9Uj=`$Zq7{ajLSN;O#d=?iDsLyl`&Uh z8iGTejYX3D@+M+!Ym>~!lL@__^$VMdvA((S5yW~_I#sU zd6XZ}(e5*6VjFK7`q>8JrrYG=z`(F*vt*7FGN~kSxWH^aZpq3T(AcG`Dr07@+9NL9 z!yO~j($w<2n$5$*8iQNw!${Dg-{%9{3_lwF2}g5hRggt{z*Z^!6d3i5=9sv2wP<@oV(`&dG;+xjoY>YDbjEzO@D>F*S+h;<$RfSBnY|tjS${M5F#A#yioFTiO zH=ual`LCs%b)`!-W@`-2@wKj?SgHL?Rg)xC1-5=o#8L?wf-m0XEjhLjhADHs_ABw@ zgX&y9#Eg^&*~S6GOL=f+3*9^r$V+B&!|cOnvLQlzMCUV|Hf*TVsaOIH4;gvx3#sy%Tw=S6YB?h|&-auo=H*>IHp zM)v=!?Ob-_yplYhYduAF145A)Ce_yT)XWHO7i3G81>3S(l5I>C3P$oGk|i?9W|Eez z)hzlk8kkLCHofnSck-Lelg#fQ5$BvZUw)aSJT>SBN@jlN7AH>JFGM)c_i&t+XgA*o zNeYoqr}(GUb9{e@w5Kyjk#oYn;|@3AD6vdtF9N*~%AM@!5BmfnAIM^et6KI^CjuFO zUi`IQ6>~j#{v-wJIL|E5EcX~dR++?+KiQvG1z$_lF++mU0vRyl4$7VVgb-#Q_&!Zk z8)NqUFvZU4LW=Q@_R;adUFF{b?xW6N#f<>2Y&VkqIKJ_fn}e!fN*~%|b>E~>*cFpp z{iqn#JA|v7i$jlm?JlaSy{vA*H))QhvFZHh>?0VNqMFN%pi3Fz3B1EGr-!*voSHvu zJph~?r}KrP@%xF!fIIj^$Kx>&7a*x4hF2FERmj1GqF;l6%$ucCBP#97`kr?Dt!BBr6s6>afFdH^%*zTE304fpcW`g>Ac|n5 z$M^RsChXFxb^blaD|&ZPYb9dAXJVmNVwO^&jwRiX$ z2NB#ryf+>=BungQT;vw}sf*}(4){-xCYnWTQ89f}#}KvUQ!*7~U%T9%{Q7U~NHNIl z3{lgs^RVjAalQ6#bg>FVu2GOVlWQvD*~zLNf+ZMMo-s0Y_FhQ)COoJhQTBJc z)m++vTXGYl+0*L?LvB1ka0DFU)n8h;n53e{ZiR#b1C|~=(r!1!TR!_|%H>#a1eSNQ z5_FvW;dBd!uB28BVAX36bhan&e|hAs(C&HAl=BfshRi8@A)u1Q70m|b zgn^0a7IK%!HQY`3EU{Iayg0T3R|Xc_q0|$jdkY00dq5i)(^yr@k3c9+w*5@iY*x%sg$n40#~4m#x@16v^(}wo9?hIk3pMk*ANeJ2Kmzd{9c6CNEC1 z^WhQW+>&E{=KCf5t(R(vxT7xY8zP0yrr%s%A+mp$rCuSKU6QcVPr?1TnCp;3RFEoC zLNSM~N}waZOlEEQ6oNHwtePY^QT)-qNkc|AR0ep)wx%fx}L+zCYd4MT*s zisH@R)a&dKNt^7J8yh?JOvJHU5yn+1lWu5UF;H+X&a?wZB5=9GtbN0c-jdV=&aJq&B$vVi z&!#V~j}Ng)FHe>dIGPZJpeig|Q!7Kdu17k*+PfoaThy0oW5>Oh(xh_4ng8L#(oN3(rmM*`B z4*e$DoDZ>2!IH;)h$UuMl0JYFm&CYNIH$=XQgkkzj)tc~pI|w6(P~ew*A4@U&TcXq zPq6u|6Euo8=hPbE`}BOzvW7#;!;q>V5#sJIPXe8IcgReNgCPRWvfrGoDu@b(2>iy~ zBi(*@%>qr#QwigS`yUSHM#XHq87hr{N-wKG#fJM!DKR=?2R=(2(`-H)_E03bcu`-R zU%i9($30aueRm6kA)&hgZh_IEUIs>vBPkT~D?}oxR2D`4?InVl~ZO&Zh{3L@~AY>h`$laER1xG@=avF&DS22Eg+8 z63CefwnD{wSU$EA00Bs63CzTQ2kgfvPH&(!KH+Mp+Jz0Lhc+N1xly4=TQ}?}D};8o zabv`C-V#^)RaYLJzx!rv+5FHR7n&{pvu16At2|EHG~Q5+`kQp}pv(A4RY?p1j4bh| z5)|PW(BY3W*~_ULK|HapC!i^dX(ehaTpH;mnb2Qdl^#rbe_e)i>?GKB)0mxBcB+0o zLqo(f!X@#&X9iyUL)Ao0Gc9!Z{=P;=eS5|oDNGs)5())idl~fIWK`IrSKuFzmJgrJ zjfc0Kt=PZNujkYmAvH-}uyHi$kNK4X%@Va6AG0jP>~KKM+VDmn$T~e6w}*@`O#x!_ zU^dsL?S2FENL;6clj-?}sJCU>k?CA0O(WqK=tz#p*wZ^SXW!4RFK1$>QQ2h}db(kx zjk*UI#7jL%=mSRIFfQYBIr4}w)&sbGm_-)j)ZrS2<%=<*#F>U!EQZq|U?liRn5sr- zEL&!j7?)2T?nRQGh!p{uXBHuVHf_x*Kp{1o@G#*10yf2GHTlm~_^w1ifAIEckr~AE zmyvE)Rff(ry>5o*GPF_BPyT+Vo`^r1mEI|=Y7cRM1|J(K>_%z{amsbnbQEp!+4Elut?-tuuZxxf{RClKkC3 zttrf-vk2bVdMOXITe=W|Ek#|ir&B53JJa($_fj25ltOzT$`324`L7nc+nC8jRab~9 zx*fg&rY!A9t;U$>{ z91j&sl)1DdskFiQFfXZueN2hHVmlEn66YO=S`g{ZM3OKQ*8-51{voSXCA&AgD{PT6 zDzd57EX3hrYo%!bHKM-pRH7sd7x+~v3M0&QqP+BXC)3E_l-xObuN(M0;{X^_O1rDWfLF0@;Xk8w2Bh#iink;TF^YWZJrE94k6HzN!wGIMB z-ck_;by?AMmz|I<@mi9@xM|8&Wnl64L>XTioN*4MmveW_R2Zpt9eP(;Q1&9>nO|dt zW(i@IH&3&s*W_tZ3wZ$cRQIlg&~$={(h+0Ic(yqAtwNK^3#fLPErnv?-dG-p)x}b- z3E__(ZE%FisHhx>W?NsQ^qdjlpr5U}G+XfDRU3Ij3qQ7N$(Gn(*UezRlQ{Whbo7%T zVxAaFLfiU?0uKxQH+7o-fqzp2jUGQ-;&S>K5Bm&P`OEDXVfvt;*q2gMTBd-fkT*h; zbki-xTP<%Ud{8WM#F&zL?7F0;N~XI)HM60_{U9I#@R6--3uX82UHoqJC8G?O>T!AE zU<A!9fN9Yf#%S)`09*V-@zDkgb{5Q$c%Sv9- zp+F%5O*&LA*b=cRkASt0vbwunG(ozeJRPPj98aw*pV`>vbt-Q#!F$e>)Y12VFhnJb zv)7~v_RvB8a(rGnxIuXG_};_W7^P)KKJPXK!9@^j-&-)uz@jGPPs9(d4E_(te3!4^ zb&8cS1OY@CpXj`mus5@*M-lMqiEZIYTa2=7kdO^6?DmkLq4rqIP&}32)`ag+ENaw@ z2R#N~8$Wt0a;dU6)$-oWT7Ba9X)D{}YQ|^8-Q}r*U8b%wQ&c}QiMA3GPD&W2800Ci z;k>obYWmjIi!PSVwrdWvGEi>(*K5qS-9Q&7 zUK>x(-?YMTj@Z>2OaVB69=#hcFv-msu@eAvR2l@W?fVGXi|yS@YI=t`K!e_9J7e+Zy;$a zQ*EYenWp70^S;|Y^Vcwx5XS;ZZoS1kOJ1{HW=C}kfQzs-h9L@itO@(3%I z0FkPjTrc+2evQbuRw+ejv$7VvY2|ODYK5rnf76P#U>a1s{suIdK(Q?;j1P_r!9~bu zYn0Dr15jPXQm#efX^H-mz-9g~x$VY>a>vff*NmrbeksBC52kb}@Zq;jH60B5@QHUP zUn4Lpe8%7EU_yo7mCOlj9#CJ)o1ogRRS||PEKV-44oMp{pywd-6b;1Zpad#m!ti zO&2GwHF8N-*I-;^;}x5X%qrK@*(YvkT7d>_GEmKU_KvXQTY<;B?ms^13NswA`@y1a zswvXEOU5C?bz~W(C{dPXSszhk`xR!-FHcnNAM5>tXtG8R<0C9#rm0d+yBNjj7p7Kw zTYI!czEnUAZRH=qVf*<)of&E?cPzL$5oYGRp{4j|N^!cE=33pxB}YxS!j-+AHp^O`qbR z0R62|401xdYm-qXMC1@s3F}K)sfJwk!^LYleYINWaCj3(Fg-))QpI%6XJRMbD+w3B zc}`D;Zj-s#(UM1vpkvNF5xgpgh#;!#CZZQq~Iw^!!#%37;ew>QqVV$7KpeF(OsESW2Hre z_{I~h0fFbvt2!CUNmaw>)dae}(*?vVCZ@PVx;f8$$QYNf;v;6Y%yQfwmboRp4XW)2 zJuF^5DHQBMj);Vw#mN$5UPGJ_z(2?2?clZN6+fmM9-r*TR6WJEP&%EAR9Zzvk+mBc zGCYKX0a+s_bn9KMPrMu*shk|Qpkv^{IZG{btEeI(Q6Nw=;h&l73jyZ(s5%kJlD>N9 zXO>HNDAr&CPV`bbo&0yhucYdOWL`h!Tdw`>um5pO0|^Y>iE;;(!Sd@FbxiXj!t}Y~ zqI_wTnS1gi4^y6~h*Z0hh)22Aq@AhWqEzlz$B~S?P4S)%e!WRAt&p|Ia!RsC&|Sgk zykX&(QfsW$+|G-Wr!~~QS|*UC(EzsYllT7+mCEyHT_gFTN*5Y zgFdrofBNEJ;%o+ap8e_i&-8gbz&@ot)P+AU?PkXDn#MV~;=VCr?O%=z$`%!?#YYkV z*z3X6Wq~%oWplzNl9&h*BbEj?blLpb)6c$mrEo-U%8Gd)WsQ#nP7Uva^pt{IJ`3Se zo}a7I6XTPt>W+CEH%-8_eqCnbn9YcKKU&N#=0BgFBlMOVHe%6Qb~K0##-5(PRkQp3 z`6bn*%V6^jzyIZ&@<_G!Mx9}>JX}oaqe6142-p>MFm?$JH2!aH2nuT{P{bv?ilqlq zv&nWHZew5Vt;Y5dBUPdJ*joqgDRBS7a2@0|YhYcvvt%diG@bu&wtr5>zLz`}A}Q~d zKzo|H(l<5zR#MMg=Bfb~y&ThBkv)NxMRwM%;H$@gcZZkfvpv0m5JQFicDIN$Xc2Km zvT$SXD$i*of{u3o;^rn0u`x!kSICbqL3p zpYF?sN6MVli{#7|(vDIX5&Xyn1c*Vs!8zf%m#{v(n9-UWv>2b$u!x#p@Be)VxXxzU z?u>RvV4iDp`s0QAde1oR{-J$fW=7G;8&`J%d>f<;i@VWl=sl_LDyTqSRg~s}dQ_aw z)X2CnAzj{yYw)(j0j#5RdE$0?-oDg1m!De{qqH;Kxl@5FoP7TahulAw?#MC9EmH5n z>l=6~I=OhrwbpmYq5iYZVN3s0^ulDJJBax=+6E*eg(_E6$MoRyRhm@WA&Axv!gTZH z_*6zLRwjWQU31q_ZdwpzKGWf}gj1c(E6ir+Uiqv*-iT{4RLWC;1Ww&oV_&D<_AhjJ zC`W*KhftxnJoq71*S(B$&W;3uQkXWD>;Sc+zTXd_^26Z;FnL#IEKeaFjLi8T7 ziv&zkOmaX>qL%p2?F}Mp$mV)@&#kTZ+}H|8t**?P;Ub==%I@^5n9Y{gdrJ%4E?u9} z>lYK*o*PWR}coo1UUdZ?;ncEay4WqV1J-#qERU_tx&Z#K1IdoP4JatCMVWy;l;ldi<3 zO5DgW6#54-8U$n9Jk4JsTtjIH^p7;J>k_o2&HqjR3OdQOcS{}o|qNj$^Sf2~U8 z@Og;6nXSE&*x^O2N(XTt$YQZ}1&oo(n=hsCs-S)Y-nxvSX^v{8^AsAnfK#gOIA#G} z$sfZfUM*0N$}^dP+$zUZiJ5Tzmd{1QLd{S$)R{T~E`nsj|XMj}_bun8{BBah`OLgJHMD)smc zpJx@0<%l|QLmtxR^`u zWctP}w^zQ3#EmV?=x^}_98z;E9a18-ADy%d*+(2M(*ypkhAwZdZm;C$Vr4X!3fFA? zqy`6zPUuZ%D4UO6l{tJ*<~ccxpX3lB0XC}9`3DwgwI)8t#nUiHIZZaK&qk!3YS+Uu ziKWPbBB!qoPv{C3BX0%G`?I^V|E_k?)9F~tWuMBwx%*$cR?t&fJBj_}g@r)9+Uhxz z73flVl%2Ftlp```^iJOY5?_s3D%z9d;i`u&*XR}mvzj8naC$^&mApv>09%bcb7m3f zV99vaF7?439Go9K2oHyapC=+9k0>Y_tMAQK0}0K$nYrew;C00gmgF?L*1cu$-ELCB z`(GSMn|2h>`d)e7O{9M==d7sGBQ$)Fz!E6Es^QTgK_sLDu%Gf#80tif-68%4Lk+1H zWc_LQBz|u-S5a|9Catq3^*=V%f1W%?E24k9IVwB^-76k1XJ22_3H1UYU#?ZW#)MBt z_gTb?pNHZ_u_sR4;ESScHUCT}e*eqS#SutU3}qj`{OpUbe*L$XFCTyP=;5o!Pd}l< zdh?_6A?!&?^FPg||L1@H@Av->k(s|ayu!Y=l#K^6Z{hG0*lWqC)ZG~O{*m|UuMnkP zV36ZgM2UPA5u-qR0$85Z@@^%}yOhl{&(}=Z`_POB{t_zX3;&%S0*iW7nbX-ZsjF05 zwFJ+pbjSj1Ds~`jxcOuati5z(&2(t>1{-Dy7=}eBQ)6#dbHM&6m7tU|an5It6cFf_ z7$f*tZ8}^(HD4{q`)c}?nQE9ZCvJ$QD`@{UzK3&1MeF;(S(yAqQ*GW$7KDJ~V(sg=7@Rl6h zDH3nby4IX*e! zz8twr8sJSr>=uZNwf*{RC-kG81x3rY13!i=u%+qgjKfR|F2d~(8d(WkUdS%k5&a`>#`~o7RrgBAE#2G>4=ZXm#4Dc zUPGlQu3gY+i(%+OZNqEt7gV#K3Ao`Ama5$TlJGi|W!Ff}Zp}~X3NS3Wg0DVq|h-w3V}8Y`@ZeE*G$E! zf$Su_u$hcYh3apFhGY`h5APikX`~glX=O$viMKm?&UB}?mC}4g+rW>J(zRE&9eXkrHG<2{@(6qhPG3DSe7*KP!A0z|FSf{+ZHiP^ysQvIfZ)~>`1?i?;s=L!BB zrM8^-p3Tx_Z=e|c#jqb{RW^+(2Ha{R>n5-(vJ@C=HDVm(HWQ{>mI{31qkWiB)EQ=1 z86ap)jRLJ~#I)=NLw|BbQ{Ou@RB@9=_p-%&+NkoqEABH3+eGUMlsr~5jje)jq*bKy z5RbUQ4o|;nF08+}!O43YfJ;_(9NJTa6k)5A(^9B&NCn)Y_=C)jagCdC01?Uib{$Sl z?>Z-%Tw! za}&ZX>q>%F7^P%)aU_zmce0e)EM3l$BR#-FFg4|^W|+aKEXsgg5F$hwkuGumHReAw zeoIm@7?lzc5^UQ}N*szr(>qb#2mV^f5G7(%_f78?Ef z*Ch>pQd|$VFpFKkA>ds~L5avr^3WJ(U8(CVPHp9i@Ou~8#<--Ph@VG?cL{~9ZB{gB?8p&+$a?Y`cIC^zS4zMbJv^)5NECs7& zfNZC+BAPkmUA|#qoVSlNOr)5x3_mW5v(JbNj$!R%+3(zKM~k(k%nr93r<)}Nb7Ou2 zbt!on$SBe%9m?Etyxu~B{iS$7bL>uXpk9QM%K;r@?IvbsR6DiaZ*pXM&*~`YMAc_Z zC5s7$-=izi3HGj!sDyAtI?L$+aNzSfPiXYdY|sq3CyRaSXnr`g0*EzzM2JJ-FfXq% zFWokLA!;Jbshekpw^|(MEU&4+YG5D*Eq&?S+zu+MU-yS zG(ho8LCXb0AxbO1Gyc2TdL5*b{18z?Q#p3A9e?uX0g*tO2$WuJ&2`+eAD@0hpDW7^ z)g?*3CI}!BtKtHKUS#3I)$eX)xC=-1vTalK9|{e9admlq0ZCSSC5ytKbSnn^$jH`W5w`6>iHh0@KtWM2#?f zUH+~VMOB^tD|gI4A7gbog8qUIEN;yWPg!{~D5?~8Y8-KsSG9?DDfffz^Q0jEs{8<* z7)HKI%$1|pVZpv1_jXbd46HF0NN?gtcHPKY3%P7i^V~|4qoNNmsk>N?@gfnzalU`g zESl$@C?^yGKS~2Q=F(ks^GO72vj>&Wt|~!FSqDnLGa8(fq0&u-3lNR8T^$HOiCDAX z&}-~2HZ~S@D4Nq(J5g;S2CZ?k37SQwki=taX04$eW@)>~A3J`p{(S>PRzD6~;YzAp z0^{nSBzNcU8hwvh4FQZ?gmMC9QH3+gw}dw^$l2%N5x~1GWoa6W$Ox}m(4Nk@YQPv? zewTrHvP!m)ASyBy4YFR=C#e)kg103P>6!8V6w%&(uX)oH>Jgr6lAsyHU>GY@>``p7 z#WmZ<#`m1)AGzxx=*$S8-Y|o0s)&%X8{B$$jeJPdR85_s7qv@`;FBY=ZRg#<(k|y# zBkjy_%o7URe{SKLg?wC}MXM1HvRGYsK+TJ|xypqLjo-cVXm0sZx49o-y&M}7&6^)2 zg~OXEMsEwDA52nh{wu5xcVTcQtm*|vIRR>@LB_@TgST)^{x&67)&noz%1lV}D=R+c zi3<{1WQ`@Yi(G0XA$eYHRo53vDut1l=Fc0rRXi&XZAw!>kC3kM1VP<)C*4o{r8rOO z-|dpYNuEqQnI#TjG>Wfs(t7(-%~iKQ&7QfS&{`Qu3_`brrtQIhwkHq4S5ZpCz$&45 zX_}9`HqHI|k-sd8WtYCEV1A65Fd6<`G-4?sa>uBXuxI+ zhO;4CBH~csM&1=u8PgU6dAcp`-uc#5;0+tV0ZLyEU*F!Xwa8H6&YgB&MvGBaYk;qq zc(qHxUFZ8sQJkrxHk2e^i{GUeIMuB*QZ7I-T7jJ!v0NQfM~s@U1IcFc38M+DhZV1I~f=!oM~yjDoYvb83X?9 zhTa*yxc2JPZehryo21gS5w<`g8!_spYuWK;p7{&@SfoznzF1LcL`;RIApYMY0P*US34m~10S$N8xwX1wE9 zvy=07>@UOPaT3v7vsJ4;&m3L!@Q3}2>mN)IBV@<+Qak}4Jlpji-0ufe`!kHH-1|ynyM5PR48WRpg<*w%&r<7oMT9#K*@5ddyh`BCgxban?-9{7K9*9 zwyMl)QB8#H*Ig1FRZ~y)fGT`ZU(#JrJE#Q&3lH-v2rE&&-(n22<-?%iM`#nswq$}d z^9JyE%Wg`RfG7T~=3x3`Hr(%;Rhm0_Q}!VFA_5{*Cn1^9#=l*dfMbt;(+BIOq7+nR z2N(Fk*(>OtT#_RMb9w<(i&85pS-xo-NCt%BQ?fbZb#vtas$)beF#{FRPHK;Rxo*~qDMV<@Q3I>xR5{w(Bw6vx!v*}@DM8c`ahmu9*cl1{x0qK5xCNr zJqd5}dYYyNvUwhoGxtKhaA%lOVqk4(cVOnqN*J|l2JRycRb6Kh{^-H^zE)J_GGB=i zldmw3l=BNBM?|P9f?daX%YW-{L+nfVT855nBUotRw0g|0nG$>}WS&D?aM?tS7f&~{ z<-TnO9HRgwvAy%7uIwpx0x$wcZLyXD?$%mP(^?d@_myM>y=d&rsR!Eb9of!G`T+ou z4Xp&)NGYXW+tGje%neU_il*cDEfF%uhqea~)d0SUVPU*?%NyD$$8}pq-sJ*YJhWEj z`OV4@5|WK_Y8%frs4ccaz*|i)9;F=4OxX}-VY8|@1m7wj1#iornN6p>`=Yrw@9Upt zGjE4H{WzJqKl$_IPv1O$_4J!(ySux8<|ot0KACb9y4c zBq%S-8(Q*C!+gKhDz5@}SRW?D?a3cY;Rvnjh{ZoNl?med$9?3%FpEyU7hR?y zGYouk!bM0_Bb3)?6Ww4u=@s{kpD3=fRE3jza@B6kyjZuz3galoD_j*oZ;G`?u_4WU z3pBXhO$mhLcletG_m{kuJMh}_(40MXDh%rD}0Y~#l)X)Pv? z!yp_|W(gtbk=M3Ad{QbPoB-6tH5*T44u|V9!Y~&TL1xEl_8Rsnsp8C{38?3oO&iPe z=+WUE%#M))4sbVJS#SrjM-rv$O46thTYy+V74m1F);~WCU$#Ag#85&dB!=#3k7{MU z?!I4%tX@q&_VayWhY7Z&mmgNCisO@rwv?Vx!`-1$)k0R^Vz(_gLn)BTftsPMbT}%Q z!<9B2r%2xk(Gkjb(f;Q@lfd`l=?VW;#d*K!v&hNBrAo3Y(TGs{gXz`z^zPKUafd)? z3V@F&d75gcFyAoj5gl3f4<+6s*Iu2UPnT!t!@JXGhb(~BMoueoVOa*>rhRU;Oz;Ao z%hK=hZFlh*u9<5~Tl$Er`L>KcDatYga zF=hVfEt4GPZ}MFAKKpyw3czj)`e5zP4t}EIeq?b)!5KxlPhf_n-A?zZwyi1@{_*Jv z!sy`vx1aaQp^v?rL0rB{d6ng=s|eT`a*dZXP3&ZciyZ*mh1ty3E@6+D3H+hb*j)e^1(^!_n!Fp?D$ z+;@0Gu`m35@@YOi_zV6heXb&b4zn@>K ztvR-Yn(5;V;eK-))`c4lce0D< zot&`P7AW%cPD?zm^pW>iOcEyXEUv9Wd)~DZ&@fVVgLwg|8n~_)}R(CQ)NkzK}S`22i~Byh{D+Ph}H6&_-8du z_G(6I@_Xc-EYEr_7i-!%GS%+XzJ_)0O!aXg&4=>hFD*Szwv>bsy3Rf}eI$^K%DZof znhV=Xf|MbYccRtK5ps}0EdBWZ=MvpnxVGYX^P9t5hG-kLz4+gE*Kc@}uVuu>48RT> zov#CXRLodK#DlZV&6may4ASTh2-N~;zW, 2010-2019. +# +msgid "" +msgstr "" +"Project-Id-Version: cryptsetup 2.2.2-rc0\n" +"Report-Msgid-Bugs-To: dm-crypt@saout.de\n" +"POT-Creation-Date: 2019-11-01 09:04+0100\n" +"PO-Revision-Date: 2019-10-18 16:11+0200\n" +"Last-Translator: Roland Illig \n" +"Language-Team: German \n" +"Language: de\n" +"MIME-Version: 1.0\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.4\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: lib/libdevmapper.c:384 +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:387 +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:1082 +msgid "Requested deferred flag is not supported." +msgstr "Verlangter »deferred«-Schalter wird nicht unterstützt." + +#: lib/libdevmapper.c:1149 +#, c-format +msgid "DM-UUID for device %s was truncated." +msgstr "DM-UUID für Gerät »%s« wurde verkürzt." + +#: lib/libdevmapper.c:1463 +msgid "Unknown dm target type." +msgstr "Unbekannte Art des dm-Ziels." + +#: lib/libdevmapper.c:1565 lib/libdevmapper.c:1617 +msgid "Requested dm-crypt performance options are not supported." +msgstr "Die verlangten dm-crypt-Performance-Optionen werden nicht unterstützt." + +#: lib/libdevmapper.c:1572 +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:1576 +msgid "Requested dm-verity FEC options are not supported." +msgstr "Die verlangten dm-verity-FEC-Optionen werden nicht unterstützt." + +#: lib/libdevmapper.c:1580 +msgid "Requested data integrity options are not supported." +msgstr "Die verlangten Datenintegritäts-Optionen werden nicht unterstützt." + +#: lib/libdevmapper.c:1582 +msgid "Requested sector_size option is not supported." +msgstr "Die verlangte sector_size-Option wird nicht unterstützt." + +#: lib/libdevmapper.c:1587 +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:1591 +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:1620 +msgid "Discard/TRIM is not supported." +msgstr "»Discard/TRIM« wird nicht unterstützt." + +#: lib/libdevmapper.c:2511 +#, c-format +msgid "Failed to query dm-%s segment." +msgstr "Fehler beim Abfragen des »dm-%s«-Segments." + +#: lib/random.c:80 +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" +msgstr "" +"Das System hat keine Entropie mehr, um den Laufwerksschlüssel zu generieren.\n" +"Bitte bewegen Sie die Maus oder tippen Sie etwas Text in ein anderes Fenster, um einige zufällige Ereignisse zu sammeln.\n" + +#: lib/random.c:84 +#, c-format +msgid "Generating key (%d%% done).\n" +msgstr "Schlüssel wird generiert (%d %% erledigt).\n" + +#: lib/random.c:170 +msgid "Running in FIPS mode." +msgstr "Laufe im FIPS-Modus." + +#: lib/random.c:176 +msgid "Fatal error during RNG initialisation." +msgstr "Fataler Fehler während der Initialisierung des Zufallszahlengenerators." + +#: lib/random.c:213 +msgid "Unknown RNG quality requested." +msgstr "Unbekannte Qualität des Zufallszahlengenerators verlangt." + +#: lib/random.c:218 +msgid "Error reading from RNG." +msgstr "Fehler beim Einlesen vom Zufallszahlengenerator." + +#: lib/setup.c:223 +msgid "Cannot initialize crypto RNG backend." +msgstr "Fehler beim Initialisieren des Krypto-Zufallszahlengenerator-Backends." + +#: lib/setup.c:229 +msgid "Cannot initialize crypto backend." +msgstr "Fehler beim Initialisieren des Krypto-Backends." + +#: lib/setup.c:260 lib/setup.c:1990 lib/verity/verity.c:120 +#, c-format +msgid "Hash algorithm %s not supported." +msgstr "Hash-Algorithmus »%s« wird nicht unterstützt." + +#: lib/setup.c:263 lib/loopaes/loopaes.c:90 +#, c-format +msgid "Key processing error (using hash %s)." +msgstr "Fehler beim Verarbeiten des Schlüssels (mit Hash-Algorithmus »%s«)." + +#: lib/setup.c:324 lib/setup.c:351 +msgid "Cannot determine device type. Incompatible activation of device?" +msgstr "Geräte-Art kann nicht bestimmt werden. Inkompatible Aktivierung des Geräts?" + +#: lib/setup.c:330 lib/setup.c:2985 +msgid "This operation is supported only for LUKS device." +msgstr "Diese Operation wird nur für LUKS-Geräte unterstützt." + +#: lib/setup.c:357 +msgid "This operation is supported only for LUKS2 device." +msgstr "Diese Operation wird nur für LUKS2-Geräte unterstützt." + +#: lib/setup.c:412 lib/luks2/luks2_reencrypt.c:2345 +msgid "All key slots full." +msgstr "Alle Schlüsselfächer sind voll." + +#: lib/setup.c:423 +#, c-format +msgid "Key slot %d is invalid, please select between 0 and %d." +msgstr "Schlüsselfach %d ist ungültig, bitte wählen Sie eins zwischen 0 und %d." + +#: lib/setup.c:429 +#, c-format +msgid "Key slot %d is full, please select another one." +msgstr "Schlüsselfach %d ist voll, bitte wählen Sie ein anderes." + +#: lib/setup.c:514 lib/setup.c:2759 +msgid "Device size is not aligned to device logical block size." +msgstr "Gerätegröße ist nicht an logischer Sektorgröße ausgerichtet." + +#: lib/setup.c:610 +#, c-format +msgid "Header detected but device %s is too small." +msgstr "Header gefunden, aber Gerät »%s« ist zu klein." + +#: lib/setup.c:647 +msgid "This operation is not supported for this device type." +msgstr "Diese Operation wird für diese Geräteart nicht unterstützt." + +#: lib/setup.c:652 +msgid "Illegal operation with reencryption in-progress." +msgstr "Ungültige Operation, während die Wiederverschlüsselung läuft." + +#: lib/setup.c:821 lib/luks1/keymanage.c:476 +#, c-format +msgid "Unsupported LUKS version %d." +msgstr "Nicht unterstützte LUKS-Version %d." + +#: lib/setup.c:838 lib/setup.c:1483 lib/setup.c:1903 +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:1373 lib/setup.c:2479 lib/setup.c:2551 lib/setup.c:2563 +#: lib/setup.c:2712 lib/setup.c:4310 +#, c-format +msgid "Device %s is not active." +msgstr "Gerät »%s« ist nicht aktiv." + +#: lib/setup.c:1390 +#, c-format +msgid "Underlying device for crypt device %s disappeared." +msgstr "Zugrundeliegendes Gerät für das Kryptogerät »%s« ist verschwunden." + +#: lib/setup.c:1468 +msgid "Invalid plain crypt parameters." +msgstr "Ungültige Parameter für Plain-Verschlüsselung." + +#: lib/setup.c:1473 lib/setup.c:1893 src/integritysetup.c:73 +msgid "Invalid key size." +msgstr "Ungültige Schlüsselgröße." + +#: lib/setup.c:1478 lib/setup.c:1898 lib/setup.c:2100 +msgid "UUID is not supported for this crypt type." +msgstr "UUID wird für diese Verschlüsselungsart nicht unterstützt." + +#: lib/setup.c:1493 lib/setup.c:1683 lib/luks2/luks2_reencrypt.c:2308 +#: src/cryptsetup.c:1169 +msgid "Unsupported encryption sector size." +msgstr "Nicht unterstützte Sektorengröße für Verschlüsselung." + +#: lib/setup.c:1501 lib/setup.c:1808 lib/setup.c:2753 +msgid "Device size is not aligned to requested sector size." +msgstr "Gerätegröße ist nicht an verlangter Sektorgröße ausgerichtet." + +#: lib/setup.c:1552 lib/setup.c:1671 +msgid "Can't format LUKS without device." +msgstr "Ohne Gerät kann LUKS nicht formatiert werden." + +#: lib/setup.c:1558 lib/setup.c:1677 +msgid "Requested data alignment is not compatible with data offset." +msgstr "Die angeforderte Datenausrichtung ist nicht mit dem Datenoffset kompatibel." + +#: lib/setup.c:1626 lib/setup.c:1795 +msgid "WARNING: Data offset is outside of currently available data device.\n" +msgstr "WARNING: Der Datenoffset ist außerhalb des derzeit verfügbaren Datengeräts.\n" + +#: lib/setup.c:1636 lib/setup.c:1823 lib/setup.c:1844 lib/setup.c:2112 +#, c-format +msgid "Cannot wipe header on device %s." +msgstr "Fehler beim Auslöschen des Headers auf Gerät »%s«." + +#: lib/setup.c:1688 +msgid "WARNING: The device activation will fail, dm-crypt is missing support for requested encryption sector size.\n" +msgstr "WARNUNG: Die Geräteaktivierung wird fehlschlagen, dm-crypt fehlt die Unterstützung für die angeforderte Verschlüsselungsgröße.\n" + +#: lib/setup.c:1710 +msgid "Volume key is too small for encryption with integrity extensions." +msgstr "Laufwerksschlüssel ist zu klein für die Verschlüsselung mit Integritätserweiterungen." + +#: lib/setup.c:1765 +#, c-format +msgid "Cipher %s-%s (key size %zd bits) is not available." +msgstr "Verschlüsselung »%s-%s« (Schlüsselgröße %zd Bits) ist nicht verfügbar." + +#: lib/setup.c:1798 +#, c-format +msgid "WARNING: LUKS2 metadata size changed to % bytes.\n" +msgstr "Warnung: Größe der LUKS2-Metadaten wurde auf % geändert.\n" + +#: lib/setup.c:1802 +#, c-format +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:1826 lib/utils_device.c:829 lib/luks1/keyencryption.c:256 +#: lib/luks2/luks2_reencrypt.c:2356 lib/luks2/luks2_reencrypt.c:3348 +#, c-format +msgid "Device %s is too small." +msgstr "Gerät »%s« ist zu klein." + +#: lib/setup.c:1837 lib/setup.c:1863 +#, c-format +msgid "Cannot format device %s in use." +msgstr "Gerät »%s« kann nicht formatiert werden, da es gerade benutzt wird." + +#: lib/setup.c:1840 lib/setup.c:1866 +#, c-format +msgid "Cannot format device %s, permission denied." +msgstr "Gerät »%s« kann nicht formatiert werden, Zugriff verweigert." + +#: lib/setup.c:1852 lib/setup.c:2164 +#, c-format +msgid "Cannot format integrity for device %s." +msgstr "Fehler beim Formatieren der Integrität auf Gerät »%s«." + +#: lib/setup.c:1870 +#, c-format +msgid "Cannot format device %s." +msgstr "Gerät »%s« kann nicht formatiert werden." + +#: lib/setup.c:1888 +msgid "Can't format LOOPAES without device." +msgstr "Ohne Gerät kann LOOPAES nicht formatiert werden." + +#: lib/setup.c:1933 +msgid "Can't format VERITY without device." +msgstr "Ohne Gerät kann VERITY nicht formatiert werden." + +#: lib/setup.c:1944 lib/verity/verity.c:103 +#, c-format +msgid "Unsupported VERITY hash type %d." +msgstr "Nicht unterstützte VERITY-Hash-Art %d." + +#: lib/setup.c:1950 lib/verity/verity.c:111 +msgid "Unsupported VERITY block size." +msgstr "Nicht unterstützte VERITY-Blockgröße." + +#: lib/setup.c:1955 lib/verity/verity.c:75 +msgid "Unsupported VERITY hash offset." +msgstr "Nicht unterstützter VERITY-Hash-Offset." + +#: lib/setup.c:1960 +msgid "Unsupported VERITY FEC offset." +msgstr "Nicht unterstützter VERITY-FEC-Offset." + +#: lib/setup.c:1984 +msgid "Data area overlaps with hash area." +msgstr "Datenbereich und Hashbereich überlappen sich." + +#: lib/setup.c:2009 +msgid "Hash area overlaps with FEC area." +msgstr "Hashbereich und FEC-Bereich überlappen sich." + +#: lib/setup.c:2016 +msgid "Data area overlaps with FEC area." +msgstr "Datenbereich und FEC-Bereich überlappen sich." + +#: lib/setup.c:2221 +#, c-format +msgid "Unknown crypt device type %s requested." +msgstr "Unbekannte Art des Verschlüsselungsgeräts »%s« verlangt." + +#: lib/setup.c:2485 lib/setup.c:2557 lib/setup.c:2570 +#, c-format +msgid "Unsupported parameters on device %s." +msgstr "Nicht unterstützte Parameter für Gerät %s." + +#: lib/setup.c:2491 lib/setup.c:2576 lib/luks2/luks2_reencrypt.c:2408 +#: lib/luks2/luks2_reencrypt.c:2718 +#, c-format +msgid "Mismatching parameters on device %s." +msgstr "Parameter für Gerät %s sind durcheinander." + +#: lib/setup.c:2596 +msgid "Crypt devices mismatch." +msgstr "Verschlüsselungsgeräte passen nicht zusammen." + +#: lib/setup.c:2633 lib/setup.c:2638 lib/luks2/luks2_reencrypt.c:2054 +#: lib/luks2/luks2_reencrypt.c:3126 +#, c-format +msgid "Failed to reload device %s." +msgstr "Gerät »%s« konnte nicht neugeladen werden." + +#: lib/setup.c:2643 lib/setup.c:2648 lib/luks2/luks2_reencrypt.c:2025 +#: lib/luks2/luks2_reencrypt.c:2032 +#, c-format +msgid "Failed to suspend device %s." +msgstr "Gerät »%s« konnte nicht stillgelegt werden." + +#: lib/setup.c:2653 lib/luks2/luks2_reencrypt.c:2039 +#: lib/luks2/luks2_reencrypt.c:3061 lib/luks2/luks2_reencrypt.c:3130 +#, c-format +msgid "Failed to resume device %s." +msgstr "Gerät »%s« konnte nicht fortgesetzt werden." + +#: lib/setup.c:2667 +#, c-format +msgid "Fatal error while reloading device %s (on top of device %s)." +msgstr "Schwerwiegender Fehler beim Neuladen von Gerät »%s« (über Gerät »%s«)." + +#: lib/setup.c:2670 lib/setup.c:2672 +#, c-format +msgid "Failed to switch device %s to dm-error." +msgstr "Gerät »%s« konnte nicht auf dm-error umgeschaltet werden." + +#: lib/setup.c:2744 +msgid "Cannot resize loop device." +msgstr "Fehler beim Ändern der Größe des Loopback-Geräts." + +#: lib/setup.c:2817 +msgid "Do you really want to change UUID of device?" +msgstr "Wollen Sie wirklich die UUID des Geräts ändern?" + +#: lib/setup.c:2893 +msgid "Header backup file does not contain compatible LUKS header." +msgstr "Header-Backupdatei enthält keinen kompatiblen LUKS-Header." + +#: lib/setup.c:2993 +#, c-format +msgid "Volume %s is not active." +msgstr "Laufwerk »%s« ist nicht aktiv." + +#: lib/setup.c:3004 +#, c-format +msgid "Volume %s is already suspended." +msgstr "Laufwerk »%s« ist bereits im Ruhezustand." + +#: lib/setup.c:3017 +#, c-format +msgid "Suspend is not supported for device %s." +msgstr "Das Gerät »%s« unterstützt keinen Ruhezustand." + +#: lib/setup.c:3019 +#, c-format +msgid "Error during suspending device %s." +msgstr "Das Gerät »%s« kann nicht in den Ruhezustand versetzt werden." + +#: lib/setup.c:3052 lib/setup.c:3119 +#, c-format +msgid "Volume %s is not suspended." +msgstr "Laufwerk »%s« ist nicht im Ruhezustand." + +#: lib/setup.c:3081 +#, c-format +msgid "Resume is not supported for device %s." +msgstr "Das Gerät »%s« kann nicht aus dem Ruhezustand aufgeweckt werden." + +#: lib/setup.c:3083 lib/setup.c:3151 +#, c-format +msgid "Error during resuming device %s." +msgstr "Fehler beim Aufwecken von Gerät »%s« aus dem Ruhezustand." + +#: lib/setup.c:3219 lib/setup.c:3407 +msgid "Cannot add key slot, all slots disabled and no volume key provided." +msgstr "Schlüsselfach kann nicht hinzugefügt werden, da alle Fächer deaktiviert sind und kein Laufwerksschlüssel angegeben wurde." + +#: lib/setup.c:3359 +msgid "Failed to swap new key slot." +msgstr "Neues Schlüsselfach konnte nicht ausgewechselt werden." + +#: lib/setup.c:3524 lib/setup.c:4161 lib/setup.c:4174 lib/setup.c:4182 +#: lib/setup.c:4195 lib/setup.c:4480 lib/setup.c:5593 +msgid "Volume key does not match the volume." +msgstr "Der Laufwerksschlüssel passt nicht zum Laufwerk." + +#: lib/setup.c:3545 +#, c-format +msgid "Key slot %d is invalid." +msgstr "Schlüsselfach %d ist ungültig." + +#: lib/setup.c:3551 src/cryptsetup.c:1511 src/cryptsetup.c:1856 +#, c-format +msgid "Keyslot %d is not active." +msgstr "Schlüsselfach %d ist nicht aktiv." + +#: lib/setup.c:3570 +msgid "Device header overlaps with data area." +msgstr "Geräteheader und Datenbereich überlappen sich." + +#: lib/setup.c:3836 +msgid "Reencryption in-progress. Cannot activate device." +msgstr "Wiederverschlüsselung läuft bereits. Das Gerät kann nicht aktiviert werden." + +#: lib/setup.c:3838 lib/luks2/luks2_json_metadata.c:2244 +#: lib/luks2/luks2_reencrypt.c:2817 +msgid "Failed to get reencryption lock." +msgstr "Fehler beim Zugriff auf die Sperre zur Wiederverschlüsselung." + +#: lib/setup.c:3851 lib/luks2/luks2_reencrypt.c:2836 +msgid "LUKS2 reencryption recovery failed." +msgstr "Fehler beim Wiederherstellen der LUKS2-Wiederverschlüsselung." + +#: lib/setup.c:3978 lib/setup.c:4248 +msgid "Device type is not properly initialised." +msgstr "Geräteart ist nicht richtig initialisiert." + +#: lib/setup.c:4022 +#, 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:4025 +#, c-format +msgid "Device %s already exists." +msgstr "Das Gerät »%s« existiert bereits." + +#: lib/setup.c:4148 +msgid "Incorrect volume key specified for plain device." +msgstr "Falscher Laufwerksschlüssel für Plain-Gerät angegeben." + +#: lib/setup.c:4214 +msgid "Incorrect root hash specified for verity device." +msgstr "Falscher Root-Hash-Schlüssel für VERITY-Gerät angegeben." + +#: lib/setup.c:4289 lib/setup.c:4305 lib/luks2/luks2_json_metadata.c:2297 +#: src/cryptsetup.c:2527 +#, c-format +msgid "Device %s is still in use." +msgstr "Gerät »%s« wird gerade benutzt." + +#: lib/setup.c:4314 +#, c-format +msgid "Invalid device %s." +msgstr "Ungültiges Gerät »%s«." + +#: lib/setup.c:4430 +msgid "Volume key buffer too small." +msgstr "Laufwerks-Schlüsselpuffer zu klein." + +#: lib/setup.c:4438 +msgid "Cannot retrieve volume key for plain device." +msgstr "Fehler beim Ermitteln des Laufwerksschlüssels für Plain-Gerät." + +#: lib/setup.c:4449 +#, 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:4636 +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:4947 +#, c-format +msgid "Data offset is not multiple of %u bytes." +msgstr "Datenoffset ist kein Vielfaches von %u Bytes." + +#: lib/setup.c:5229 +#, 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:5526 +#, 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:5599 +msgid "Failed to initialise default LUKS2 keyslot parameters." +msgstr "Fehler beim Initialisieren der LUKS2-Schlüsselfach-Parameter." + +#: lib/setup.c:5605 +#, c-format +msgid "Failed to assign keyslot %d to digest." +msgstr "Schlüsselfach %d konnte nicht dem Digest zugeordnet werden." + +#: lib/setup.c:5690 +msgid "Failed to load key in kernel keyring." +msgstr "Fehler beim Laden des Schlüssels im Kernel-Schlüsselbund." + +#: lib/setup.c:5757 +msgid "Kernel keyring is not supported by the kernel." +msgstr "Der Kernel-Schlüsselbund wird vom Kernel nicht unterstützt." + +#: lib/setup.c:5767 lib/luks2/luks2_reencrypt.c:2933 +#, 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:5791 +msgid "Failed to acquire global memory-hard access serialization lock." +msgstr "Globale Speicherzugriffsserialisierungssperre konnte nicht angefordert werden." + +#: lib/utils.c:81 +msgid "Cannot get process priority." +msgstr "Fehler beim Ermitteln der Prozesspriorität." + +#: lib/utils.c:95 +msgid "Cannot unlock memory." +msgstr "Fehler beim Entsperren des Speichers." + +#: lib/utils.c:169 lib/tcrypt/tcrypt.c:498 +msgid "Failed to open key file." +msgstr "Fehler beim Öffnen der Schlüsseldatei." + +#: lib/utils.c:174 +msgid "Cannot read keyfile from a terminal." +msgstr "Fehler beim Einlesen der Schlüsseldatei »%s« vom Terminal." + +#: lib/utils.c:191 +msgid "Failed to stat key file." +msgstr "Fehler beim Öffnen der Schlüsseldatei." + +#: lib/utils.c:199 lib/utils.c:220 +msgid "Cannot seek to requested keyfile offset." +msgstr "Fehler beim Zugriff auf die Schlüsseldatei." + +#: lib/utils.c:214 lib/utils.c:229 src/utils_password.c:188 +#: src/utils_password.c:201 +msgid "Out of memory while reading passphrase." +msgstr "Zu wenig Speicher zum Einlesen der Passphrase." + +#: lib/utils.c:249 +msgid "Error reading passphrase." +msgstr "Fehler beim Einlesen der Passphrase." + +#: lib/utils.c:266 +msgid "Nothing to read on input." +msgstr "Nichts zu lesen in der Eingabe." + +#: lib/utils.c:273 +msgid "Maximum keyfile size exceeded." +msgstr "Größenbegrenzung für die Schlüsseldatei überschritten." + +#: lib/utils.c:278 +msgid "Cannot read requested amount of data." +msgstr "Die gewünschte Menge an Daten kann nicht eingelesen werden." + +#: lib/utils_device.c:188 lib/utils_storage_wrappers.c:111 +#: lib/luks1/keyencryption.c:92 +#, c-format +msgid "Device %s doesn't exist or access denied." +msgstr "Gerät »%s« existiert nicht oder Zugriff verweigert." + +#: lib/utils_device.c:198 +#, c-format +msgid "Device %s is not compatible." +msgstr "Gerät »%s« ist nicht kompatibel." + +#: lib/utils_device.c:643 +#, 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:724 +#, 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:728 +#, c-format +msgid "Cannot use device %s, permission denied." +msgstr "Gerät »%s« kann nicht verwendet werden, Zugriff verweigert." + +#: lib/utils_device.c:731 +#, c-format +msgid "Cannot get info about device %s." +msgstr "Fehler beim Abrufen der Infos über Gerät »%s«." + +#: lib/utils_device.c:754 +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:764 +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:810 +#, 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:818 +#, c-format +msgid "Device %s has zero size." +msgstr "Gerät »%s« hat die Größe 0." + +#: lib/utils_pbkdf.c:100 +msgid "Requested PBKDF target time cannot be zero." +msgstr "Verlangte Vorgabezeit für PBKDF darf nicht 0 sein." + +#: lib/utils_pbkdf.c:106 +#, c-format +msgid "Unknown PBKDF type %s." +msgstr "Unbekannte PBKDF, Typ »%s«." + +#: lib/utils_pbkdf.c:111 +#, c-format +msgid "Requested hash %s is not supported." +msgstr "Verlangter Hash »%s« wird nicht unterstützt." + +#: lib/utils_pbkdf.c:122 +msgid "Requested PBKDF type is not supported for LUKS1." +msgstr "Verlangter PBKDF-Typ wird von LUKS1 nicht unterstützt." + +#: lib/utils_pbkdf.c:128 +msgid "PBKDF max memory or parallel threads must not be set with pbkdf2." +msgstr "Für pbkdf2 dürfen weder das Speichermaximum noch die Anzahl der Threads angegeben werden." + +#: lib/utils_pbkdf.c:133 lib/utils_pbkdf.c:143 +#, c-format +msgid "Forced iteration count is too low for %s (minimum is %u)." +msgstr "Anzahl der verlangten Durchläufe ist zu gering für %s (Minimum ist %u)." + +#: lib/utils_pbkdf.c:148 +#, c-format +msgid "Forced memory cost is too low for %s (minimum is %u kilobytes)." +msgstr "Verlangte Speicherkosten sind zu gering für %s (Minimum sind %u Kilobyte)." + +#: lib/utils_pbkdf.c:155 +#, c-format +msgid "Requested maximum PBKDF memory cost is too high (maximum is %d kilobytes)." +msgstr "Das verlangte Speicherkosten-Maximum ist zu hoch (maximal %d Kilobyte)." + +#: lib/utils_pbkdf.c:160 +msgid "Requested maximum PBKDF memory cannot be zero." +msgstr "Der verlangte PBKDF-Speicherbedarf darf nicht 0 sein." + +#: lib/utils_pbkdf.c:164 +msgid "Requested PBKDF parallel threads cannot be zero." +msgstr "Die Anzahl der verlangten parallelen Threads für PBKDF darf nicht 0 sein." + +#: lib/utils_pbkdf.c:184 +msgid "Only PBKDF2 is supported in FIPS mode." +msgstr "Im FIPS-Modus wird ausschließlich PBKDF2 unterstützt." + +#: lib/utils_benchmark.c:166 +msgid "PBKDF benchmark disabled but iterations not set." +msgstr "PBKDF-Benchmark deaktiviert, aber Anzahl der Iterationen nicht angegeben." + +#: lib/utils_benchmark.c:185 +#, c-format +msgid "Not compatible PBKDF2 options (using hash algorithm %s)." +msgstr "Inkompatible PBKDF2-Optionen (mit Hash-Algorithmus »%s«)." + +#: lib/utils_benchmark.c:205 +msgid "Not compatible PBKDF options." +msgstr "Inkompatible PBKDF2-Optionen." + +#: lib/utils_device_locking.c:103 +#, c-format +msgid "Locking aborted. The locking path %s/%s is unusable (not a directory or missing)." +msgstr "Sperren abgebrochen. Der Sperrpfad %s/%s ist unbenutzbar (kein Verzeichnis oder existiert nicht)." + +#: lib/utils_device_locking.c:110 +#, c-format +msgid "WARNING: Locking directory %s/%s is missing!\n" +msgstr "WARNUNG: Zugriffssperren-Verzeichnis %s/%s ist nicht vorhanden!\n" + +#: lib/utils_device_locking.c:120 +#, c-format +msgid "Locking aborted. The locking path %s/%s is unusable (%s is not a directory)." +msgstr "Sperren abgebrochen. Der Sperrpfad %s/%s ist unbenutzbar (%s ist kein Verzeichnis)." + +#: lib/utils_wipe.c:185 src/cryptsetup_reencrypt.c:933 +#: src/cryptsetup_reencrypt.c:1017 +msgid "Cannot seek to device offset." +msgstr "Fehler beim Springen zum Gerät-Offset." + +#: lib/utils_wipe.c:209 +#, c-format +msgid "Device wipe error, offset %." +msgstr "Fehler beim gründlichen Löschen des Geräts, an Offset %." + +#: lib/luks1/keyencryption.c:40 +#, c-format +msgid "" +"Failed to setup dm-crypt key mapping for device %s.\n" +"Check that kernel supports %s cipher (check syslog for more info)." +msgstr "" +"Einrichten der dm-crypt-Schlüsselzuordnung für Gerät »%s« fehlgeschlagen.\n" +"Stellen Sie sicher, dass der Kernel die Verschlüsselung »%s« unterstützt.\n" +"(Sehen Sie im System-Log nach, ob sich dort Hinweise finden.)" + +#: lib/luks1/keyencryption.c:45 +msgid "Key size in XTS mode must be 256 or 512 bits." +msgstr "Schlüsselgröße im XTS-Modus muss entweder 256 oder 512 Bits sein." + +#: lib/luks1/keyencryption.c:47 +msgid "Cipher specification should be in [cipher]-[mode]-[iv] format." +msgstr "Verschlüsselungsverfahren sollte im Format [Verfahren]-[Modus]-[IV] sein." + +#: lib/luks1/keyencryption.c:98 lib/luks1/keymanage.c:345 +#: lib/luks1/keymanage.c:636 lib/luks1/keymanage.c:1074 +#: lib/luks2/luks2_json_metadata.c:1253 lib/luks2/luks2_keyslot.c:739 +#, c-format +msgid "Cannot write to device %s, permission denied." +msgstr "Fehler beim Schreiben auf Gerät »%s«, Zugriff verweigert." + +#: lib/luks1/keyencryption.c:121 +msgid "Failed to open temporary keystore device." +msgstr "Fehler beim Öffnen des temporären Schlüsselspeichergeräts." + +#: lib/luks1/keyencryption.c:128 +msgid "Failed to access temporary keystore device." +msgstr "Fehler beim Zugriff auf das temporäre Schlüsselspeichergerät." + +#: lib/luks1/keyencryption.c:201 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 "E/A-Fehler beim Verschlüsseln des Schlüsselfachs." + +#: lib/luks1/keyencryption.c:247 lib/luks1/keymanage.c:348 +#: lib/luks1/keymanage.c:589 lib/luks1/keymanage.c:639 lib/tcrypt/tcrypt.c:661 +#: lib/verity/verity.c:81 lib/verity/verity.c:179 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:1256 +#: src/cryptsetup_reencrypt.c:205 +#, c-format +msgid "Cannot open device %s." +msgstr "Fehler beim Öffnen des Geräts »%s«." + +#: lib/luks1/keyencryption.c:258 lib/luks2/luks2_keyslot_luks2.c:137 +msgid "IO error while decrypting keyslot." +msgstr "E/A-Fehler beim Entschlüsseln des Schlüsselfachs." + +#: lib/luks1/keymanage.c:111 +#, c-format +msgid "Device %s is too small. (LUKS1 requires at least % bytes.)" +msgstr "Gerät »%s« ist zu klein. (LUKS1 benötigt mindestens % Bytes.)" + +#: 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 +#, c-format +msgid "LUKS keyslot %u is invalid." +msgstr "LUKS-Schlüsselfach %u ist ungültig." + +#: lib/luks1/keymanage.c:229 lib/luks1/keymanage.c:473 +#: lib/luks2/luks2_json_metadata.c:1084 src/cryptsetup.c:1372 +#: src/cryptsetup.c:1498 src/cryptsetup.c:1555 src/cryptsetup.c:1611 +#: src/cryptsetup.c:1678 src/cryptsetup.c:1781 src/cryptsetup.c:1845 +#: src/cryptsetup.c:2005 src/cryptsetup.c:2194 src/cryptsetup.c:2254 +#: src/cryptsetup.c:2320 src/cryptsetup.c:2484 src/cryptsetup.c:3137 +#: src/cryptsetup.c:3146 src/cryptsetup_reencrypt.c:1372 +#, 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:247 lib/luks2/luks2_json_metadata.c:1101 +#, c-format +msgid "Requested header backup file %s already exists." +msgstr "Angeforderte Header-Backupdatei »%s« existiert bereits." + +#: lib/luks1/keymanage.c:249 lib/luks2/luks2_json_metadata.c:1103 +#, c-format +msgid "Cannot create header backup file %s." +msgstr "Fehler beim Anlegen der Header-Backupdatei »%s«." + +#: lib/luks1/keymanage.c:256 lib/luks2/luks2_json_metadata.c:1110 +#, c-format +msgid "Cannot write header backup file %s." +msgstr "Fehler beim Speichern der Header-Backupdatei »%s«." + +#: lib/luks1/keymanage.c:287 lib/luks2/luks2_json_metadata.c:1162 +msgid "Backup file doesn't contain valid LUKS header." +msgstr "Backupdatei enthält keinen gültigen LUKS-Header." + +#: lib/luks1/keymanage.c:300 lib/luks1/keymanage.c:550 +#: lib/luks2/luks2_json_metadata.c:1183 +#, c-format +msgid "Cannot open header backup file %s." +msgstr "Fehler beim Öffnen der Header-Backupdatei »%s«." + +#: lib/luks1/keymanage.c:308 lib/luks2/luks2_json_metadata.c:1191 +#, c-format +msgid "Cannot read header backup file %s." +msgstr "Fehler beim Einlesen der Header-Backupdatei »%s«." + +#: lib/luks1/keymanage.c:318 +msgid "Data offset or key size differs on device and backup, restore failed." +msgstr "Unterschiedlicher Offset oder Schlüsselgröße zwischen Gerät und Backup. Wiederherstellung fehlgeschlagen." + +#: lib/luks1/keymanage.c:326 +#, c-format +msgid "Device %s %s%s" +msgstr "Gerät »%s« %s%s" + +#: lib/luks1/keymanage.c:327 +msgid "does not contain LUKS header. Replacing header can destroy data on that device." +msgstr "enthält keinen LUKS-Header. Das Ersetzen des Headers kann Daten auf dem Gerät zerstören." + +#: lib/luks1/keymanage.c:328 +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:329 lib/luks2/luks2_json_metadata.c:1225 +msgid "" +"\n" +"WARNING: real device header has different UUID than backup!" +msgstr "" +"\n" +"WARNUNG: Der Header des echten Geräts hat eine andere UUID als das Backup!" + +#: lib/luks1/keymanage.c:376 +msgid "Non standard key size, manual repair required." +msgstr "Ungewöhnliche Schlüsselgröße, manuelles Reparieren erforderlich." + +#: lib/luks1/keymanage.c:381 +msgid "Non standard keyslots alignment, manual repair required." +msgstr "Ungewöhnliche Ausrichtung der Schlüsselfächer, manuelles Reparieren erforderlich." + +#: lib/luks1/keymanage.c:391 +msgid "Repairing keyslots." +msgstr "Schlüsselfächer werden repariert." + +#: lib/luks1/keymanage.c:410 +#, c-format +msgid "Keyslot %i: offset repaired (%u -> %u)." +msgstr "Schlüsselfach %i: Offset repariert (%u -> %u)." + +#: lib/luks1/keymanage.c:418 +#, c-format +msgid "Keyslot %i: stripes repaired (%u -> %u)." +msgstr "Schlüsselfach %i: Streifen repariert (%u -> %u)." + +# XXX +#: lib/luks1/keymanage.c:427 +#, c-format +msgid "Keyslot %i: bogus partition signature." +msgstr "Schlüsselfach %i: schwindlerische Partitions-Signatur." + +#: lib/luks1/keymanage.c:432 +#, c-format +msgid "Keyslot %i: salt wiped." +msgstr "Schlüsselfach %i: Salt gelöscht." + +#: lib/luks1/keymanage.c:449 +msgid "Writing LUKS header to disk." +msgstr "LUKS-Header wird auf den Datenträger geschrieben." + +#: lib/luks1/keymanage.c:454 +msgid "Repair failed." +msgstr "Fehler beim Reparieren." + +#: lib/luks1/keymanage.c:482 lib/luks1/keymanage.c:751 +#, c-format +msgid "Requested LUKS hash %s is not supported." +msgstr "Verlangter LUKS-Hash »%s« wird nicht unterstützt." + +#: lib/luks1/keymanage.c:510 src/cryptsetup.c:1081 +msgid "No known problems detected for LUKS header." +msgstr "Keine bekannten Probleme im LUKS-Header erkannt." + +#: lib/luks1/keymanage.c:661 +#, c-format +msgid "Error during update of LUKS header on device %s." +msgstr "Fehler beim Aktualisieren des LUKS-Headers auf Gerät »%s«." + +#: lib/luks1/keymanage.c:669 +#, c-format +msgid "Error re-reading LUKS header after update on device %s." +msgstr "Fehler beim Neueinlesen des LUKS-Headers nach dem Aktualisieren auf Gerät »%s«." + +#: lib/luks1/keymanage.c:745 +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:756 lib/luks1/keymanage.c:821 +#: lib/luks2/luks2_json_format.c:283 lib/luks2/luks2_json_metadata.c:1002 +#: src/cryptsetup.c:2647 +msgid "Wrong LUKS UUID format provided." +msgstr "Falsches LUKS-UUID-Format angegeben." + +#: lib/luks1/keymanage.c:779 +msgid "Cannot create LUKS header: reading random salt failed." +msgstr "LUKS-Header kann nicht angelegt werden: Fehler beim Einlesen des zufälligen Salts." + +# XXX +#: lib/luks1/keymanage.c:800 +#, c-format +msgid "Cannot create LUKS header: header digest failed (using hash %s)." +msgstr "LUKS-Header kann nicht angelegt werden: Fehler beim Hashen des Headers (mit Hash-Algorithmus »%s«)." + +#: lib/luks1/keymanage.c:844 +#, c-format +msgid "Key slot %d active, purge first." +msgstr "Schlüsselfach %d aktiv, löschen Sie es erst." + +#: lib/luks1/keymanage.c:850 +#, c-format +msgid "Key slot %d material includes too few stripes. Header manipulation?" +msgstr "Material für Schlüsselfach %d enthält zu wenige Streifen. Manipulation des Headers?" + +#: lib/luks1/keymanage.c:1060 +#, c-format +msgid "Key slot %d is invalid, please select keyslot between 0 and %d." +msgstr "Schlüsselfach %d ist ungültig, bitte wählen Sie ein Schlüsselfach zwischen 0 und %d." + +#: lib/luks1/keymanage.c:1078 lib/luks2/luks2_keyslot.c:743 +#, c-format +msgid "Cannot wipe device %s." +msgstr "Gerät »%s« kann nicht ausgelöscht werden." + +#: lib/loopaes/loopaes.c:146 +msgid "Detected not yet supported GPG encrypted keyfile." +msgstr "Noch nicht unterstützte verschlüsselte GPG-Schlüsseldatei erkannt." + +#: lib/loopaes/loopaes.c:147 +msgid "Please use gpg --decrypt | cryptsetup --keyfile=- ...\n" +msgstr "Bitte benutzen Sie »gpg --decrypt | cryptsetup --keyfile=- …«\n" + +#: lib/loopaes/loopaes.c:168 lib/loopaes/loopaes.c:188 +msgid "Incompatible loop-AES keyfile detected." +msgstr "Inkompatible Loop-AES-Schlüsseldatei erkannt." + +#: lib/loopaes/loopaes.c:245 +msgid "Kernel doesn't support loop-AES compatible mapping." +msgstr "Kernel unterstützt Loop-AES-kompatibles Mapping nicht." + +#: lib/tcrypt/tcrypt.c:505 +#, c-format +msgid "Error reading keyfile %s." +msgstr "Fehler beim Einlesen der Schlüsseldatei »%s«." + +#: lib/tcrypt/tcrypt.c:545 +#, c-format +msgid "Maximum TCRYPT passphrase length (%d) exceeded." +msgstr "Maximale Länge der TCRYPT-Passphrase (%d) überschritten." + +#: lib/tcrypt/tcrypt.c:586 +#, c-format +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:602 src/cryptsetup.c:959 +msgid "Required kernel crypto interface not available." +msgstr "Die benötigte Crypto-Kernel-Schnittstelle ist nicht verfügbar." + +#: lib/tcrypt/tcrypt.c:604 src/cryptsetup.c:961 +msgid "Ensure you have algif_skcipher kernel module loaded." +msgstr "Stellen Sie sicher, dass das Kernelmodul »algif_skcipher« geladen ist." + +#: lib/tcrypt/tcrypt.c:744 +#, c-format +msgid "Activation is not supported for %d sector size." +msgstr "Aktivierung wird für die Sektorengröße %d nicht unterstützt." + +#: lib/tcrypt/tcrypt.c:750 +msgid "Kernel doesn't support activation for this TCRYPT legacy mode." +msgstr "Der Kernel unterstützt die Aktivierung für diesen TCRYPT-Legacymodus nicht." + +#: lib/tcrypt/tcrypt.c:784 +#, c-format +msgid "Activating TCRYPT system encryption for partition %s." +msgstr "TCRYPT-Systemverschlüsselung für Partition »%s« wird aktiviert." + +#: lib/tcrypt/tcrypt.c:862 +msgid "Kernel doesn't support TCRYPT compatible mapping." +msgstr "Kernel unterstützt TCRYPT-kompatibles Mapping nicht." + +#: lib/tcrypt/tcrypt.c:1084 +msgid "This function is not supported without TCRYPT header load." +msgstr "Diese Funktionalität braucht einen geladenen TCRYPT-Header." + +#: lib/verity/verity.c:69 lib/verity/verity.c:172 +#, c-format +msgid "Verity device %s doesn't use on-disk header." +msgstr "Verity-Gerät »%s« benutzt keinen Header auf dem Datenträger." + +#: lib/verity/verity.c:91 +#, c-format +msgid "Device %s is not a valid VERITY device." +msgstr "Gerät »%s« ist kein gültiges VERITY-Gerät." + +#: lib/verity/verity.c:98 +#, c-format +msgid "Unsupported VERITY version %d." +msgstr "Nicht unterstützte VERITY-Version %d." + +#: lib/verity/verity.c:129 +msgid "VERITY header corrupted." +msgstr "VERITY-Header verfälscht." + +#: lib/verity/verity.c:166 +#, c-format +msgid "Wrong VERITY UUID format provided on device %s." +msgstr "Falsches VERITY-UUID-Format über Gerät »%s« angegeben." + +#: lib/verity/verity.c:199 +#, c-format +msgid "Error during update of verity header on device %s." +msgstr "Fehler beim Aktualisieren des VERITY-Headers auf Gerät »%s«." + +#: lib/verity/verity.c:262 +msgid "Errors cannot be repaired with FEC device." +msgstr "Fehler können mit einem FEC-Gerät nicht repariert werden." + +#: lib/verity/verity.c:264 +#, c-format +msgid "Found %u repairable errors with FEC device." +msgstr "%u reparierbare Fehler mit FEC-Gerät gefunden." + +#: lib/verity/verity.c:302 +msgid "Kernel doesn't support dm-verity mapping." +msgstr "Kernel unterstützt dm-verity-Zuordnung nicht." + +#: lib/verity/verity.c:313 +msgid "Verity device detected corruption after activation." +msgstr "Verity-Gerät hat eine Verfälschung nach der Aktivierung festgestellt." + +#: lib/verity/verity_hash.c:59 +#, c-format +msgid "Spare area is not zeroed at position %." +msgstr "Zusätzlicher Platz an Position % ist nicht ausgenullt." + +#: lib/verity/verity_hash.c:160 lib/verity/verity_hash.c:287 +#: lib/verity/verity_hash.c:300 +msgid "Device offset overflow." +msgstr "Überlauf beim Geräte-Offset." + +#: lib/verity/verity_hash.c:200 +#, c-format +msgid "Verification failed at position %." +msgstr "Fehler beim Verifizieren an Position %." + +#: lib/verity/verity_hash.c:273 +msgid "Invalid size parameters for verity device." +msgstr "Ungültige Größenparameter für Verity-Gerät." + +#: lib/verity/verity_hash.c:293 +msgid "Hash area overflow." +msgstr "Überlauf des Hashbereichs." + +#: lib/verity/verity_hash.c:370 +msgid "Verification of data area failed." +msgstr "Fehler beim Verifizieren des Datenbereichs." + +#: lib/verity/verity_hash.c:375 +msgid "Verification of root hash failed." +msgstr "Fehler beim Verifizieren des Root-Hashes." + +#: lib/verity/verity_hash.c:381 +msgid "Input/output error while creating hash area." +msgstr "E/A-Fehler beim Anlegen des Hash-Bereiches." + +#: lib/verity/verity_hash.c:383 +msgid "Creation of hash area failed." +msgstr "Fehler beim Anlegen des Hash-Bereiches." + +#: lib/verity/verity_hash.c:430 +#, c-format +msgid "WARNING: Kernel cannot activate device if data block size exceeds page size (%u)." +msgstr "WARNUNG: Kernel kann das Gerät nicht aktivieren, wenn die Datenblockgröße die Seitengröße (%u) übersteigt." + +#: lib/verity/verity_fec.c:132 +msgid "Failed to allocate RS context." +msgstr "Fehler beim Reservieren des RS-Kontexts." + +#: lib/verity/verity_fec.c:147 +msgid "Failed to allocate buffer." +msgstr "Fehler beim Reservieren des Puffers." + +#: lib/verity/verity_fec.c:157 +#, c-format +msgid "Failed to read RS block % byte %d." +msgstr "Fehler beim Lesen des RS-Blocks %, Byte %d." + +#: lib/verity/verity_fec.c:170 +#, c-format +msgid "Failed to read parity for RS block %." +msgstr "Fehler beim Lesen der Parität für RS-Block %." + +#: lib/verity/verity_fec.c:178 +#, c-format +msgid "Failed to repair parity for block %." +msgstr "Fehler beim Reparieren der Parität für RS-Block %." + +#: lib/verity/verity_fec.c:189 +#, c-format +msgid "Failed to write parity for RS block %." +msgstr "Fehler beim Schreiben der Parität für RS-Block %." + +#: lib/verity/verity_fec.c:224 +msgid "Block sizes must match for FEC." +msgstr "Blockgrößen müssen für FEC zusammen passen." + +#: lib/verity/verity_fec.c:230 +msgid "Invalid number of parity bytes." +msgstr "Ungültige Anzahl von Paritätsbytes." + +#: lib/verity/verity_fec.c:266 +#, c-format +msgid "Failed to determine size for device %s." +msgstr "Fehler beim Ermitteln der Größe von Gerät »%s«." + +#: lib/integrity/integrity.c:241 lib/integrity/integrity.c:306 +msgid "Kernel doesn't support dm-integrity mapping." +msgstr "Kernel unterstützt dm-integrity-Zuordnung nicht." + +#: lib/luks2/luks2_disk_metadata.c:383 lib/luks2/luks2_json_metadata.c:959 +#: lib/luks2/luks2_json_metadata.c:1245 +#, c-format +msgid "Failed to acquire write lock on device %s." +msgstr "Fehler beim exklusiven Schreibzugriff auf Gerät »%s«." + +#: lib/luks2/luks2_disk_metadata.c:392 +msgid "Detected attempt for concurrent LUKS2 metadata update. Aborting operation." +msgstr "Es wurde ein Versuch erkannt, die LUKS2-Metadaten nebenläufig zu ändern. Die Operation wird abgebrochen." + +#: 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 "" +"Gerät enthält mehrdeutige Signaturen, LUKS2 kann nicht automatisch wiederhergestellt werden.\n" +"Bitte führen Sie \"cryptsetup repair\" zur Wiederherstellung aus." + +#: lib/luks2/luks2_json_format.c:227 +msgid "Requested data offset is too small." +msgstr "Verlangter Daten-Offset ist zu klein." + +#: 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 "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:1075 +#: lib/luks2/luks2_json_metadata.c:1151 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:1168 +#, c-format +msgid "Forbidden LUKS2 requirements detected in backup %s." +msgstr "Verbotene LUKS2-Anforderungen in Backup »%s« entdeckt." + +#: lib/luks2/luks2_json_metadata.c:1209 +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:1215 +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:1222 +#, c-format +msgid "Device %s %s%s%s%s" +msgstr "Gerät »%s« %s%s%s%s" + +#: lib/luks2/luks2_json_metadata.c:1223 +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:1224 +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:1226 +msgid "" +"\n" +"WARNING: unknown LUKS2 requirements detected in real device header!\n" +"Replacing header with backup may corrupt the data on that device!" +msgstr "" +"\n" +"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:1228 +msgid "" +"\n" +"WARNING: Unfinished offline reencryption detected on the device!\n" +"Replacing header with backup may corrupt data." +msgstr "" +"\n" +"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:1324 +#, c-format +msgid "Ignored unknown flag %s." +msgstr "Unbekannter Schalter »%s« wird ignoriert." + +#: lib/luks2/luks2_json_metadata.c:2011 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:2023 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:2029 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:2156 +msgid "Unsupported device integrity configuration." +msgstr "Nicht unterstützte Konfiguration für Geräteintegrität." + +#: lib/luks2/luks2_json_metadata.c:2242 +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:2253 lib/luks2/luks2_reencrypt.c:3171 +#, 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:2333 +msgid "Failed to read LUKS2 requirements." +msgstr "Fehler beim Lesen der LUKS2-Anforderungen." + +#: lib/luks2/luks2_json_metadata.c:2340 +msgid "Unmet LUKS2 requirements detected." +msgstr "Unerfüllte LUKS2-Anforderungen entdeckt." + +#: lib/luks2/luks2_json_metadata.c:2348 +msgid "Offline reencryption in progress. Aborting." +msgstr "Offline-Wiederverschlüsselung läuft gerade. Wird abgebrochen." + +#: lib/luks2/luks2_json_metadata.c:2350 +msgid "Online reencryption in progress. Aborting." +msgstr "Online-Wiederverschlüsselung läuft gerade. Wird abgebrochen." + +#: lib/luks2/luks2_keyslot.c:552 lib/luks2/luks2_keyslot.c:589 +msgid "Not enough available memory to open a keyslot." +msgstr "Nicht genügend Speicher, um ein Schlüsselfach zu öffnen." + +#: lib/luks2/luks2_keyslot.c:554 lib/luks2/luks2_keyslot.c:591 +msgid "Keyslot open failed." +msgstr "Fehler beim Öffnen des Schlüsselfachs." + +#: 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 "Der Algorithmus %s-%s kann nicht für Schlüsselfach-Verschlüsselung verwendet werden." + +#: lib/luks2/luks2_keyslot_luks2.c:480 +msgid "No space for new keyslot." +msgstr "Nicht genug Speicherplatz für neues Schlüsselfach." + +#: lib/luks2/luks2_luks1_convert.c:481 +#, c-format +msgid "Cannot check status of device with uuid: %s." +msgstr "Fehler beim Prüfen des Zustands von Gerät mit der UUID %s." + +#: lib/luks2/luks2_luks1_convert.c:507 +msgid "Unable to convert header with LUKSMETA additional metadata." +msgstr "Fehler beim Konvertieren des Headers mit zusätzlichen LUKSMETA-Metadaten." + +#: lib/luks2/luks2_luks1_convert.c:547 +msgid "Unable to move keyslot area. Not enough space." +msgstr "Fehler beim Verschieben des Schlüsselfach-Bereichs. Nicht genug Speicherplatz." + +#: lib/luks2/luks2_luks1_convert.c:590 lib/luks2/luks2_luks1_convert.c:872 +msgid "Unable to move keyslot area." +msgstr "Fehler beim Verschieben des Schlüsselfach-Bereichs." + +#: lib/luks2/luks2_luks1_convert.c:682 +msgid "Cannot convert to LUKS1 format - default segment encryption sector size is not 512 bytes." +msgstr "Fehler beim Konvertieren in LUKS1-Format: Standardgröße für Verschlüsselungssektoren ist nicht 512 Bytes." + +#: lib/luks2/luks2_luks1_convert.c:690 +msgid "Cannot convert to LUKS1 format - key slot digests are not LUKS1 compatible." +msgstr "Fehler beim Konvertieren in LUKS1-Format: Schlüsselfach-Digeste sind nicht zu LUKS1 kompatibel." + +#: lib/luks2/luks2_luks1_convert.c:702 +#, c-format +msgid "Cannot convert to LUKS1 format - device uses wrapped key cipher %s." +msgstr "Fehler beim Konvertieren in LUKS1-Format: Gerät verwendet eingepacktes Verschlüsselungsverfahren %s." + +#: lib/luks2/luks2_luks1_convert.c:710 +#, c-format +msgid "Cannot convert to LUKS1 format - LUKS2 header contains %u token(s)." +msgstr "Fehler beim Konvertieren in LUKS1-Format: LUKS2-Header enthält %u Token." + +#: lib/luks2/luks2_luks1_convert.c:724 +#, c-format +msgid "Cannot convert to LUKS1 format - keyslot %u is in invalid state." +msgstr "Fehler beim Konvertieren in LUKS1-Format: Schlüsselfach %u ist in ungültigem Zustand." + +#: lib/luks2/luks2_luks1_convert.c:729 +#, c-format +msgid "Cannot convert to LUKS1 format - slot %u (over maximum slots) is still active." +msgstr "Fehler beim Konvertieren in LUKS1-Format: Schlüsselfach %u (über Maximalfach) ist noch aktiv." + +#: lib/luks2/luks2_luks1_convert.c:734 +#, c-format +msgid "Cannot convert to LUKS1 format - keyslot %u is not LUKS1 compatible." +msgstr "Fehler beim Konvertieren in LUKS1-Format: Schlüsselfach %u ist nicht zu LUKS1 kompatibel." + +#: lib/luks2/luks2_reencrypt.c:892 +#, c-format +msgid "Hotzone size must be multiple of calculated zone alignment (%zu bytes)." +msgstr "Die Größe der Hotzone muss ein Vielfaches der berechneten Zonenausrichtung (%zu Bytes) sein." + +#: lib/luks2/luks2_reencrypt.c:897 +#, c-format +msgid "Device size must be multiple of calculated zone alignment (%zu bytes)." +msgstr "Gerätegröße muss ein Vielfaches der berechneten Zonenausrichtung (%zu Bytes) sein." + +#: lib/luks2/luks2_reencrypt.c:941 +#, c-format +msgid "Unsupported resilience mode %s" +msgstr "Nicht unterstützter Modus »%s« für Widerstandsfähigkeit" + +#: lib/luks2/luks2_reencrypt.c:1158 lib/luks2/luks2_reencrypt.c:1313 +#: lib/luks2/luks2_reencrypt.c:1396 lib/luks2/luks2_reencrypt.c:1430 +#: lib/luks2/luks2_reencrypt.c:3011 +msgid "Failed to initialize old segment storage wrapper." +msgstr "Fehler beim Initialisieren der Umverpackung für den Speicher alter Segmente." + +#: lib/luks2/luks2_reencrypt.c:1172 lib/luks2/luks2_reencrypt.c:1291 +msgid "Failed to initialize new segment storage wrapper." +msgstr "Fehler beim Initialisieren der Umverpackung für den Speicher neuer Segmente." + +#: lib/luks2/luks2_reencrypt.c:1340 +msgid "Failed to read checksums for current hotzone." +msgstr "Fehler beim Lesen der Prüfsummen für die aktuelle Hotzone." + +#: lib/luks2/luks2_reencrypt.c:1347 lib/luks2/luks2_reencrypt.c:3019 +#, c-format +msgid "Failed to read hotzone area starting at %." +msgstr "Fehler beim Lesen des Hotzone-Bereichs, der bei % beginnt." + +#: lib/luks2/luks2_reencrypt.c:1366 +#, c-format +msgid "Failed to decrypt sector %zu." +msgstr "Fehler beim Entschlüsseln von Sektor %zu." + +#: lib/luks2/luks2_reencrypt.c:1372 +#, c-format +msgid "Failed to recover sector %zu." +msgstr "Fehler beim Wiederherstellen von Sektor %zu." + +#: lib/luks2/luks2_reencrypt.c:1867 +#, c-format +msgid "Source and target device sizes don't match. Source %, target: %." +msgstr "Die Größe der Quell- und Zielgeräte stimmt nicht überein. Quelle %, Ziel: %." + +#: lib/luks2/luks2_reencrypt.c:1965 +#, c-format +msgid "Failed to activate hotzone device %s." +msgstr "Fehler beim Aktivieren des Hotzone-Geräts »%s«." + +#: lib/luks2/luks2_reencrypt.c:1982 +#, c-format +msgid "Failed to activate overlay device %s with actual origin table." +msgstr "Fehler beim Aktivieren des Überlagerungsgeräts »%s« mit der tatsächlichen Ursprungstabelle." + +#: lib/luks2/luks2_reencrypt.c:1989 +#, c-format +msgid "Failed to load new mapping for device %s." +msgstr "Fehler beim Laden der neuen Zuordnung für Gerät »%s«." + +#: lib/luks2/luks2_reencrypt.c:2060 +msgid "Failed to refresh reencryption devices stack." +msgstr "Fehler beim Auffrischen des Gerätestapels für Wiederverschlüsselung." + +#: lib/luks2/luks2_reencrypt.c:2216 +msgid "Failed to set new keyslots area size." +msgstr "Fehler beim Festlegen der neuen Bereichsgröße für Schlüsselfächer." + +#: lib/luks2/luks2_reencrypt.c:2318 +#, c-format +msgid "Data shift is not aligned to requested encryption sector size (% bytes)." +msgstr "Datenverschiebung ist nicht an der angeforderten Verschlüsselungs-Sektorgröße (% Bytes) ausgerichtet." + +#: lib/luks2/luks2_reencrypt.c:2339 +#, c-format +msgid "Data device is not aligned to requested encryption sector size (% bytes)." +msgstr "Datengerät ist nicht an der angeforderten Verschlüsselungs-Sektorgröße (% Bytes) ausgerichtet." + +#: lib/luks2/luks2_reencrypt.c:2360 +#, c-format +msgid "Data shift (% sectors) is less than future data offset (% sectors)." +msgstr "Datenverschiebung (% Sektoren) ist weniger als der zukünftige Datenoffset (% Sektoren)." + +#: lib/luks2/luks2_reencrypt.c:2366 lib/luks2/luks2_reencrypt.c:2760 +#: lib/luks2/luks2_reencrypt.c:2781 +#, c-format +msgid "Failed to open %s in exclusive mode (already mapped or mounted)." +msgstr "Fehler beim exklusiven Öffnen von »%s« (wird bereits anderweitig benutzt)." + +#: lib/luks2/luks2_reencrypt.c:2534 +msgid "No LUKS2 reencryption in progress." +msgstr "Derzeit läuft keine LUKS2-Wiederverschlüsselung." + +#: lib/luks2/luks2_reencrypt.c:2540 lib/luks2/luks2_reencrypt.c:3276 +msgid "Failed to load LUKS2 reencryption context." +msgstr "Fehler beim Laden des LUKS2-Wiederverschlüsselungs-Kontextes." + +#: lib/luks2/luks2_reencrypt.c:2600 +msgid "Failed to get reencryption state." +msgstr "Fehler beim Einlesen des Wiederverschlüsselungs-Zustands." + +#: lib/luks2/luks2_reencrypt.c:2604 +msgid "Device is not in reencryption." +msgstr "Das Gerät befindet sich nicht in der Wiederverschlüsselung." + +#: lib/luks2/luks2_reencrypt.c:2611 +msgid "Reencryption process is already running." +msgstr "Der Wiederverschlüsselungs-Vorgang läuft bereits." + +#: lib/luks2/luks2_reencrypt.c:2613 +msgid "Failed to acquire reencryption lock." +msgstr "Fehler beim Zugriff auf die Schreibsperre für die Wiederverschlüsselung." + +#: lib/luks2/luks2_reencrypt.c:2631 +msgid "Cannot proceed with reencryption. Run reencryption recovery first." +msgstr "Wiederverschlüsselung kann nicht fortgesetzt werden. Führen Sie zuerst die Wiederverschlüsselungs-Wiederherstellung durch." + +#: lib/luks2/luks2_reencrypt.c:2731 +msgid "Active device size and requested reencryption size don't match." +msgstr "Aktive Gerätegröße und angeforderte Wiederverschlüsselungsgröße passen nicht zusammen." + +#: lib/luks2/luks2_reencrypt.c:2745 +msgid "Illegal device size requested in reencryption parameters." +msgstr "Ungültige Gerätegröße wurde in den Wiederverschlüsselungsparametern angefordert." + +#: lib/luks2/luks2_reencrypt.c:2815 +msgid "Reencryption in-progress. Cannot perform recovery." +msgstr "Wiederverschlüsselung läuft bereits. Wiederherstellung ist nicht möglich." + +#: lib/luks2/luks2_reencrypt.c:2887 +msgid "LUKS2 reencryption already initialized in metadata." +msgstr "LUKS2-Wiederverschlüsselung ist in den Metadaten bereits initialisiert." + +#: lib/luks2/luks2_reencrypt.c:2894 +msgid "Failed to initialize LUKS2 reencryption in metadata." +msgstr "LUKS2-Wiederverschlüsselung konnte in den Metadaten nicht initialisiert werden." + +#: lib/luks2/luks2_reencrypt.c:2985 +msgid "Failed to set device segments for next reencryption hotzone." +msgstr "Fehler beim Festlegen der Gerätesegmente für die nächste Wiederverschlüsselungs-Hotzone." + +#: lib/luks2/luks2_reencrypt.c:3027 +msgid "Failed to write reencryption resilience metadata." +msgstr "Fehler beim Schreiben der Metadaten für robuste Wiederverschlüsselung." + +#: lib/luks2/luks2_reencrypt.c:3034 +msgid "Decryption failed." +msgstr "Fehler beim Entschlüsseln." + +#: lib/luks2/luks2_reencrypt.c:3039 +#, c-format +msgid "Failed to write hotzone area starting at %." +msgstr "Fehler beim Schreiben des Hotzone-Bereichs, der bei % beginnt." + +#: lib/luks2/luks2_reencrypt.c:3044 +msgid "Failed to sync data." +msgstr "Fehler beim Synchronisieren von Daten." + +#: lib/luks2/luks2_reencrypt.c:3052 +msgid "Failed to update metadata after current reencryption hotzone completed." +msgstr "Fehler beim Aktualisieren der Metadaten, nachdem die aktuelle Wiederverschlüsselungs-Hotzone beendet wurde." + +#: lib/luks2/luks2_reencrypt.c:3119 +msgid "Failed to write LUKS2 metadata." +msgstr "Fehler beim Schreiben der LUKS2-Metadaten." + +#: lib/luks2/luks2_reencrypt.c:3142 +msgid "Failed to wipe backup segment data." +msgstr "Fehler beim gründlichen Löschen der Backupsegmentdaten." + +#: lib/luks2/luks2_reencrypt.c:3155 +msgid "Failed to disable reencryption requirement flag." +msgstr "Fehler beim Deaktivieren der Wiederverschlüsselungsanforderung." + +#: lib/luks2/luks2_reencrypt.c:3163 +#, c-format +msgid "Fatal error while reencrypting chunk starting at %, % sectors long." +msgstr "Schwerwiegender Fehler beim Wiederverschlüsseln des Blocks bei %, % Sektoren lang." + +#: lib/luks2/luks2_reencrypt.c:3172 +msgid "Do not resume the device unless replaced with error target manually." +msgstr "Das Gerät nicht fortsetzen, außer es wird manuell durch das Fehlerziel ersetzt." + +#: lib/luks2/luks2_reencrypt.c:3221 +msgid "Cannot proceed with reencryption. Unexpected reencryption status." +msgstr "Wiederverschlüsselung kann nicht fortgesetzt werden. Unerwarteter Zustand der Wiederverschlüsselung." + +#: lib/luks2/luks2_reencrypt.c:3227 +msgid "Missing or invalid reencrypt context." +msgstr "Fehlender oder ungültiger Wiederverschlüsselungs-Kontext." + +#: lib/luks2/luks2_reencrypt.c:3234 +msgid "Failed to initialize reencryption device stack." +msgstr "Fehler beim Initialisieren des Gerätestapels für Wiederverschlüsselung." + +#: lib/luks2/luks2_reencrypt.c:3253 lib/luks2/luks2_reencrypt.c:3289 +msgid "Failed to update reencryption context." +msgstr "Fehler beim Aktualisieren des Wiederverschlüsselungskontexts." + +#: lib/luks2/luks2_token.c:262 +msgid "No free token slot." +msgstr "Kein freies Fach für Token." + +# upstream: period missing +#: lib/luks2/luks2_token.c:269 +#, c-format +msgid "Failed to create builtin token %s." +msgstr "Fehler beim Erzeugen des eingebauten Tokens »%s«." + +#: src/cryptsetup.c:162 +msgid "Can't do passphrase verification on non-tty inputs." +msgstr "Passphrase-Verifikation ist nur auf Terminal-Eingaben möglich." + +#: src/cryptsetup.c:215 +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:245 src/cryptsetup.c:893 src/cryptsetup.c:1212 +#: src/cryptsetup.c:3011 src/cryptsetup_reencrypt.c:715 +#: src/cryptsetup_reencrypt.c:785 +msgid "No known cipher specification pattern detected." +msgstr "Kein bekanntes Verschlüsselungsmuster entdeckt." + +#: src/cryptsetup.c:253 +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:261 +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:301 +#, 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:307 src/cryptsetup.c:1038 src/cryptsetup.c:1090 +#: src/cryptsetup.c:1189 src/cryptsetup.c:1262 src/cryptsetup.c:1913 +#: src/cryptsetup.c:2545 src/cryptsetup.c:2668 src/integritysetup.c:232 +msgid "Operation aborted.\n" +msgstr "Vorgang abgebrochen.\n" + +#: src/cryptsetup.c:375 +msgid "Option --key-file is required." +msgstr "Die Option »--key-file« muss angegeben werden." + +#: src/cryptsetup.c:428 +msgid "Enter VeraCrypt PIM: " +msgstr "VeraCrypt-PIM eingeben: " + +#: src/cryptsetup.c:437 +msgid "Invalid PIM value: parse error." +msgstr "Ungültiger PIM-Wert: Formatfehler." + +#: src/cryptsetup.c:440 +msgid "Invalid PIM value: 0." +msgstr "Ungültiger PIM-Wert: 0." + +#: src/cryptsetup.c:443 +msgid "Invalid PIM value: outside of range." +msgstr "Ungültiger PIM-Wert: außerhalb des gültigen Bereichs." + +#: src/cryptsetup.c:466 +msgid "No device header detected with this passphrase." +msgstr "Kein Geräte-Header mit dieser Passphrase gefunden." + +#: src/cryptsetup.c:528 src/cryptsetup.c:1940 +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 "" +"Der Headerdump zusammen mit dem Laufwerksschlüssel sind\n" +"sensible Daten, mit deren Hilfe man ohne Passphrase auf die\n" +"verschlüsselte Partition zugreifen kann. Dieser Dump sollte\n" +"daher ausschließlich an einem sicheren Ort und verschlüsselt\n" +"aufbewahrt werden." + +#: src/cryptsetup.c:607 +#, 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:635 +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:771 +msgid "Benchmark interrupted." +msgstr "Benchmark unterbrochen." + +#: src/cryptsetup.c:792 +#, c-format +msgid "PBKDF2-%-9s N/A\n" +msgstr "PBKDF2-%-9s (nicht zutreffend)\n" + +#: src/cryptsetup.c:794 +#, 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:808 +#, c-format +msgid "%-10s N/A\n" +msgstr "%-10s (nicht zutreffend)\n" + +#: src/cryptsetup.c:810 +#, 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:834 +msgid "Result of benchmark is not reliable." +msgstr "Das Ergebnis des Benchmarks ist nicht zuverlässig." + +#: src/cryptsetup.c:885 +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:919 +#, c-format +msgid "#%*s Algorithm | Key | Encryption | Decryption\n" +msgstr "#%*s Algorithmus | Schlüssel | Verschlüsselung | Entschlüsselung\n" + +#: src/cryptsetup.c:923 +#, c-format +msgid "Cipher %s is not available." +msgstr "Verschlüsselung »%s« ist nicht verfügbar." + +# 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:943 +msgid "# Algorithm | Key | Encryption | Decryption\n" +msgstr "# Algorithmus | Schlüssel | Verschlüsselung | Entschlüsselung\n" + +#: src/cryptsetup.c:952 +msgid "N/A" +msgstr "N/A" + +#: src/cryptsetup.c:1031 +msgid "" +"Seems device does not require reencryption recovery.\n" +"Do you want to proceed anyway?" +msgstr "" +"Es scheint, dass das Gerät keine Wiederherstellung der Wiederverschlüsselung braucht.\n" +"Trotzdem fortsetzen?" + +#: src/cryptsetup.c:1037 +msgid "Really proceed with LUKS2 reencryption recovery?" +msgstr "Wirklich mit der Wiederherstellung der LUKS2-Wiederverschlüsselung fortfahren?" + +#: src/cryptsetup.c:1046 +msgid "Enter passphrase for reencryption recovery: " +msgstr "Geben Sie die Passphrase für die Wiederherstellung der Wiederverschlüsselung ein: " + +#: src/cryptsetup.c:1089 +msgid "Really try to repair LUKS device header?" +msgstr "Wirklich versuchen, den LUKS-Geräteheader wiederherzustellen?" + +#: src/cryptsetup.c:1108 src/integritysetup.c:145 +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 "" +"Gerät wird gesäubert, um die Prüfsumme für die Integrität zu initialisieren.\n" +"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:1130 src/integritysetup.c:167 +#, c-format +msgid "Cannot deactivate temporary device %s." +msgstr "Fehler beim Deaktivieren des temporären Geräts »%s«." + +#: src/cryptsetup.c:1174 +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:1179 src/cryptsetup.c:1239 +msgid "Unsupported LUKS2 metadata size options." +msgstr "Nicht unterstützte Optionen für Größe der LUKS-Metadaten." + +#: src/cryptsetup.c:1196 +#, c-format +msgid "Cannot create header file %s." +msgstr "Fehler beim Anlegen der Headerdatei »%s«." + +#: src/cryptsetup.c:1219 src/integritysetup.c:194 src/integritysetup.c:203 +#: src/integritysetup.c:212 src/integritysetup.c:279 src/integritysetup.c:288 +#: src/integritysetup.c:298 +msgid "No known integrity specification pattern detected." +msgstr "Kein bekanntes Integritätsspezifikationsmuster entdeckt." + +#: src/cryptsetup.c:1232 +#, 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:1256 src/integritysetup.c:226 +#, c-format +msgid "This will overwrite data on %s irrevocably." +msgstr "Hiermit werden die Daten auf »%s« unwiderruflich überschrieben." + +#: src/cryptsetup.c:1297 src/cryptsetup.c:1627 src/cryptsetup.c:1694 +#: src/cryptsetup.c:1796 src/cryptsetup.c:1862 src/cryptsetup_reencrypt.c:545 +msgid "Failed to set pbkdf parameters." +msgstr "Fehler beim Festlegen der PBKDF-Parameter." + +#: src/cryptsetup.c:1378 +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:1389 src/cryptsetup.c:1700 +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:1427 +msgid "Device activated but cannot make flags persistent." +msgstr "Gerät aktiviert, aber die Schalter können nicht dauerhaft gespeichert werden." + +#: src/cryptsetup.c:1508 src/cryptsetup.c:1578 +#, c-format +msgid "Keyslot %d is selected for deletion." +msgstr "Schlüsselfach %d zum Löschen ausgewählt." + +#: src/cryptsetup.c:1520 src/cryptsetup.c:1581 +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:1521 +msgid "Enter any remaining passphrase: " +msgstr "Geben Sie irgendeine verbleibende Passphrase ein: " + +#: src/cryptsetup.c:1522 src/cryptsetup.c:1583 +msgid "Operation aborted, the keyslot was NOT wiped.\n" +msgstr "Vorgang abgebrochen, das Schlüsselfach wurde NICHT gesäubert.\n" + +#: src/cryptsetup.c:1560 +msgid "Enter passphrase to be deleted: " +msgstr "Geben Sie die zu löschende Passphrase ein: " + +#: src/cryptsetup.c:1641 src/cryptsetup.c:1715 src/cryptsetup.c:1749 +msgid "Enter new passphrase for key slot: " +msgstr "Geben Sie die neue Passphrase für das Schlüsselfach ein: " + +#: src/cryptsetup.c:1732 src/cryptsetup_reencrypt.c:1327 +#, c-format +msgid "Enter any existing passphrase: " +msgstr "Geben Sie irgendeine bestehende Passphrase ein: " + +#: src/cryptsetup.c:1800 +msgid "Enter passphrase to be changed: " +msgstr "Geben Sie die zu ändernde Passphrase ein: " + +#: src/cryptsetup.c:1816 src/cryptsetup_reencrypt.c:1313 +msgid "Enter new passphrase: " +msgstr "Geben Sie die neue Passphrase ein: " + +#: src/cryptsetup.c:1866 +msgid "Enter passphrase for keyslot to be converted: " +msgstr "Geben Sie die Passphrase für das umzuwandelnde Schlüsselfach ein: " + +#: src/cryptsetup.c:1890 +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:2074 src/cryptsetup.c:2095 +msgid "Option --header-backup-file is required." +msgstr "Option »--header-backup-file« muss angegeben werden." + +#: src/cryptsetup.c:2125 +#, c-format +msgid "%s is not cryptsetup managed device." +msgstr "%s ist kein von cryptsetup verwaltetes Gerät." + +#: src/cryptsetup.c:2136 +#, c-format +msgid "Refresh is not supported for device type %s" +msgstr "Die Geräteart »%s« kann nicht aufgefrischt werden" + +#: src/cryptsetup.c:2174 +#, c-format +msgid "Unrecognized metadata device type %s." +msgstr "Unbekannte Art »%s« des Metadaten-Geräts." + +#: src/cryptsetup.c:2177 +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:2199 +#, c-format +msgid "" +"This operation will erase all keyslots on device %s.\n" +"Device will become unusable after this operation." +msgstr "" +"Diese Operation wird alle Schlüsselfächer auf Gerät »%s« löschen.\n" +"Dadurch wird das Gerät unbrauchbar." + +#: src/cryptsetup.c:2206 +msgid "Operation aborted, keyslots were NOT wiped.\n" +msgstr "Vorgang abgebrochen, die Schlüsselfächer wurden NICHT gesäubert.\n" + +#: src/cryptsetup.c:2243 +msgid "Invalid LUKS type, only luks1 and luks2 are supported." +msgstr "Invalid LUKS type, only luks1 and luks2 are supported." + +#: src/cryptsetup.c:2261 +#, c-format +msgid "Device is already %s type." +msgstr "Das Gerät hat bereits den Typ »%s«." + +#: src/cryptsetup.c:2266 +#, 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:2272 +msgid "Operation aborted, device was NOT converted.\n" +msgstr "Vorgang abgebrochen, das Gerät wurde NICHT konvertiert.\n" + +#: src/cryptsetup.c:2312 +msgid "Option --priority, --label or --subsystem is missing." +msgstr "Die Option --priority, --label oder --subsystem fehlt." + +#: src/cryptsetup.c:2346 src/cryptsetup.c:2379 src/cryptsetup.c:2402 +#, c-format +msgid "Token %d is invalid." +msgstr "Token %d ist ungültig." + +#: src/cryptsetup.c:2349 src/cryptsetup.c:2405 +#, c-format +msgid "Token %d in use." +msgstr "Token %d ist in Benutzung." + +#: src/cryptsetup.c:2356 +#, c-format +msgid "Failed to add luks2-keyring token %d." +msgstr "Fehler beim Hinzufügen des LUKS2-Schlüsselring-Tokens %d." + +#: src/cryptsetup.c:2365 src/cryptsetup.c:2427 +#, 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:2382 +#, c-format +msgid "Token %d is not in use." +msgstr "Token %d wird gerade nicht verwendet." + +#: src/cryptsetup.c:2417 +msgid "Failed to import token from file." +msgstr "Token konnte nicht aus der Datei importiert werden." + +#: src/cryptsetup.c:2442 +#, 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:2457 +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:2463 src/cryptsetup.c:2471 +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:2476 +#, c-format +msgid "Invalid token operation %s." +msgstr "Ungültige Token-Operation »%s«." + +#: src/cryptsetup.c:2531 +#, 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:2535 +#, c-format +msgid "Device %s is not a block device.\n" +msgstr "Gerät »%s« ist kein Blockgerät.\n" + +#: src/cryptsetup.c:2537 +#, c-format +msgid "Failed to auto-detect device %s holders." +msgstr "Fehler bei der automatischen Erkennung von Gerät »%s«." + +#: src/cryptsetup.c:2539 +#, 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 "" +"Es ist unklar, ob das Gerät »%s« aktiviert ist oder nicht.\n" +"Möchten Sie wirklich mit der Wiederverschlüsselung im Offline-Modus fortfahren?\n" +"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:2619 +msgid "Invalid LUKS device type." +msgstr "Ungültige LUKS-Geräteart." + +#: src/cryptsetup.c:2624 +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:2629 +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:2638 +#, 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:2642 +msgid "Encryption is supported only for LUKS2 format." +msgstr "Verschlüsselung wird nur für das LUKS2-Format unterstützt." + +#: src/cryptsetup.c:2664 +#, 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:2679 +#, c-format +msgid "Temporary header file %s already exists. Aborting." +msgstr "Temporäre Headerdatei »%s« existiert bereits. Wird abgebrochen." + +#: src/cryptsetup.c:2681 src/cryptsetup.c:2688 +#, c-format +msgid "Cannot create temporary header file %s." +msgstr "Fehler beim Anlegen der temporären Headerdatei »%s«." + +#: src/cryptsetup.c:2752 +#, c-format +msgid "%s/%s is now active and ready for online encryption." +msgstr "%s/%s ist jetzt aktiv und bereit für die Onlineverschlüsselung." + +#: src/cryptsetup.c:2919 src/cryptsetup.c:2925 +msgid "Not enough free keyslots for reencryption." +msgstr "Nicht genügend freie Schlüsselfächer für Wiederverschlüsselung." + +#: src/cryptsetup.c:2945 src/cryptsetup_reencrypt.c:1284 +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:2954 src/cryptsetup_reencrypt.c:1325 +#: src/cryptsetup_reencrypt.c:1336 +#, c-format +msgid "Enter passphrase for key slot %d: " +msgstr "Geben Sie die Passphrase für Schlüsselfach %d ein: " + +#: src/cryptsetup.c:2962 +#, c-format +msgid "Enter passphrase for key slot %u: " +msgstr "Geben Sie die Passphrase für Schlüsselfach %u ein: " + +#: src/cryptsetup.c:3129 +msgid "Command requires device as argument." +msgstr "Dieser Befehl benötigt den Gerätenamen als Argument." + +#: src/cryptsetup.c:3151 +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:3163 +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:3173 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:3181 +msgid "LUKS2 reencryption already initialized. Aborting operation." +msgstr "Die LUKS2-Wiederverschlüsselung wurde bereits begonnen. Die Operation wird abgebrochen." + +#: src/cryptsetup.c:3185 +msgid "LUKS2 device is not in reencryption." +msgstr "LUKS2-Gerät wird derzeit nicht wiederverschlüsselt." + +#: src/cryptsetup.c:3212 +msgid " [--type ] []" +msgstr " [--type ] []" + +#: src/cryptsetup.c:3212 src/veritysetup.c:358 src/integritysetup.c:470 +msgid "open device as " +msgstr "Gerät als öffnen" + +#: src/cryptsetup.c:3213 src/cryptsetup.c:3214 src/cryptsetup.c:3215 +#: src/veritysetup.c:359 src/veritysetup.c:360 src/integritysetup.c:471 +#: src/integritysetup.c:472 +msgid "" +msgstr "" + +#: src/cryptsetup.c:3213 src/veritysetup.c:359 src/integritysetup.c:471 +msgid "close device (remove mapping)" +msgstr "Gerät schließen (Zuordnung entfernen)" + +#: src/cryptsetup.c:3214 +msgid "resize active device" +msgstr "Größe des aktiven Geräts ändern" + +#: src/cryptsetup.c:3215 +msgid "show device status" +msgstr "Gerätestatus anzeigen" + +#: src/cryptsetup.c:3216 +msgid "[--cipher ]" +msgstr "[--cipher ]" + +#: src/cryptsetup.c:3216 +msgid "benchmark cipher" +msgstr "Verschlüsselungsalgorithmus benchmarken" + +#: src/cryptsetup.c:3217 src/cryptsetup.c:3218 src/cryptsetup.c:3219 +#: src/cryptsetup.c:3220 src/cryptsetup.c:3221 src/cryptsetup.c:3228 +#: src/cryptsetup.c:3229 src/cryptsetup.c:3230 src/cryptsetup.c:3231 +#: src/cryptsetup.c:3232 src/cryptsetup.c:3233 src/cryptsetup.c:3234 +#: src/cryptsetup.c:3235 +msgid "" +msgstr "" + +#: src/cryptsetup.c:3217 +msgid "try to repair on-disk metadata" +msgstr "Versuchen, die Metadaten auf dem Datenträger zu reparieren" + +#: src/cryptsetup.c:3218 +msgid "reencrypt LUKS2 device" +msgstr "LUKS2-Gerät wiederverschlüsseln" + +#: src/cryptsetup.c:3219 +msgid "erase all keyslots (remove encryption key)" +msgstr "Alle Schlüsselfächer löschen (Verschlüsselungsschlüssel entfernen)" + +#: src/cryptsetup.c:3220 +msgid "convert LUKS from/to LUKS2 format" +msgstr "Zwischen den Formaten LUKS und LUKS2 umwandeln" + +#: src/cryptsetup.c:3221 +msgid "set permanent configuration options for LUKS2" +msgstr "Permanente Konfigurationsoptionen für LUKS2 festlegen" + +#: src/cryptsetup.c:3222 src/cryptsetup.c:3223 +msgid " []" +msgstr " []" + +#: src/cryptsetup.c:3222 +msgid "formats a LUKS device" +msgstr "Ein LUKS-Gerät formatieren" + +#: src/cryptsetup.c:3223 +msgid "add key to LUKS device" +msgstr "Schlüssel zu LUKS-Gerät hinzufügen" + +#: src/cryptsetup.c:3224 src/cryptsetup.c:3225 src/cryptsetup.c:3226 +msgid " []" +msgstr " []" + +#: src/cryptsetup.c:3224 +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:3225 +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:3226 +msgid "converts a key to new pbkdf parameters" +msgstr "Wandelt einen Schlüssel in neue PBKDF-Parameter um" + +#: src/cryptsetup.c:3227 +msgid " " +msgstr " " + +#: src/cryptsetup.c:3227 +msgid "wipes key with number from LUKS device" +msgstr "Löscht Schlüssel mit Nummer vom LUKS-Gerät" + +#: src/cryptsetup.c:3228 +msgid "print UUID of LUKS device" +msgstr "UUID des LUKS-Geräts ausgeben" + +#: src/cryptsetup.c:3229 +msgid "tests for LUKS partition header" +msgstr "Testet auf Header einer LUKS-Partition" + +#: src/cryptsetup.c:3230 +msgid "dump LUKS partition information" +msgstr "LUKS-Partitionsinformationen ausgeben" + +#: src/cryptsetup.c:3231 +msgid "dump TCRYPT device information" +msgstr "TCRYPT-Geräteinformationen ausgeben" + +#: src/cryptsetup.c:3232 +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:3233 +msgid "Resume suspended LUKS device" +msgstr "LUKS-Gerät aus dem Ruhezustand aufwecken" + +#: src/cryptsetup.c:3234 +msgid "Backup LUKS device header and keyslots" +msgstr "Header und Schlüsselfächer eines LUKS-Geräts sichern" + +#: src/cryptsetup.c:3235 +msgid "Restore LUKS device header and keyslots" +msgstr "Header und Schlüsselfächer eines LUKS-Geräts wiederherstellen" + +#: src/cryptsetup.c:3236 +msgid " " +msgstr " " + +#: src/cryptsetup.c:3236 +msgid "Manipulate LUKS2 tokens" +msgstr "LUKS2-Token manipulieren" + +#: src/cryptsetup.c:3254 src/veritysetup.c:376 src/integritysetup.c:488 +msgid "" +"\n" +" is one of:\n" +msgstr "" +"\n" +" ist eine von:\n" + +#: src/cryptsetup.c:3260 +msgid "" +"\n" +"You can also use old syntax aliases:\n" +"\topen: create (plainOpen), luksOpen, loopaesOpen, tcryptOpen\n" +"\tclose: remove (plainClose), luksClose, loopaesClose, tcryptClose\n" +msgstr "" +"\n" +"Sie können auch die alten -Aliase benutzen:\n" +"\topen: create (plainOpen), luksOpen, loopaesOpen, tcryptOpen\n" +"\tclose: remove (plainClose), luksClose, lookaesClose, tcryptClose\n" + +#: src/cryptsetup.c:3264 +#, c-format +msgid "" +"\n" +" is the device to create under %s\n" +" is the encrypted device\n" +" is the LUKS key slot number to modify\n" +" optional key file for the new key for luksAddKey action\n" +msgstr "" +"\n" +" ist das Gerät, das unter »%s« erzeugt wird\n" +" ist das verschlüsselte Gerät\n" +" 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:3271 +#, c-format +msgid "" +"\n" +"Default compiled-in metadata format is %s (for luksFormat action).\n" +msgstr "" +"\n" +"Vorgegebenes festeingebautes Metadatenformat ist %s (für luksFormat-Aktion).\n" + +#: src/cryptsetup.c:3276 +#, c-format +msgid "" +"\n" +"Default compiled-in key and passphrase parameters:\n" +"\tMaximum keyfile size: %dkB, Maximum interactive passphrase length %d (characters)\n" +"Default PBKDF for LUKS1: %s, iteration time: %d (ms)\n" +"Default PBKDF for LUKS2: %s\n" +"\tIteration time: %d, Memory required: %dkB, Parallel threads: %d\n" +msgstr "" +"\n" +"Werkseinstellungen für Schlüssel und Passphrasen:\n" +"\tMaximale Größe der Schlüsseldatei: %d kB, Maximale Länge der interaktiven Passphrase: %d Zeichen\n" +"Vorgabe-PBKDF für LUKS1: %s, Durchlaufzeit: %d Millisekunden\n" +"Vorgabe-PBKDF für LUKS2: %s\n" +"\tIterationszeit: %d, benötigter Speicher: %d kB, parallele Threads: %d\n" + +#: src/cryptsetup.c:3287 +#, c-format +msgid "" +"\n" +"Default compiled-in device cipher parameters:\n" +"\tloop-AES: %s, Key %d bits\n" +"\tplain: %s, Key: %d bits, Password hashing: %s\n" +"\tLUKS: %s, Key: %d bits, LUKS header hashing: %s, RNG: %s\n" +msgstr "" +"\n" +"Standard-Verschlüsselungsparameter:\n" +"\tLoop-AES: %s, Schlüssel %d Bits\n" +"\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:3296 +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:3312 src/veritysetup.c:532 src/integritysetup.c:630 +#, c-format +msgid "%s: requires %s as arguments" +msgstr "%s: Benötigt %s als Argumente" + +#: src/cryptsetup.c:3350 src/veritysetup.c:421 src/integritysetup.c:527 +#: src/cryptsetup_reencrypt.c:1591 +msgid "Show this help message" +msgstr "Diese Hilfe anzeigen" + +#: src/cryptsetup.c:3351 src/veritysetup.c:422 src/integritysetup.c:528 +#: src/cryptsetup_reencrypt.c:1592 +msgid "Display brief usage" +msgstr "Kurze Aufrufsyntax anzeigen" + +#: src/cryptsetup.c:3352 src/veritysetup.c:423 src/integritysetup.c:529 +#: src/cryptsetup_reencrypt.c:1593 +msgid "Print package version" +msgstr "Paketversion ausgeben" + +#: src/cryptsetup.c:3356 src/veritysetup.c:427 src/integritysetup.c:533 +#: src/cryptsetup_reencrypt.c:1597 +msgid "Help options:" +msgstr "Hilfe-Optionen:" + +#: src/cryptsetup.c:3357 src/veritysetup.c:428 src/integritysetup.c:534 +#: src/cryptsetup_reencrypt.c:1598 +msgid "Shows more detailed error messages" +msgstr "Zeigt detailliertere Fehlermeldungen an" + +#: src/cryptsetup.c:3358 src/veritysetup.c:429 src/integritysetup.c:535 +#: src/cryptsetup_reencrypt.c:1599 +msgid "Show debug messages" +msgstr "Zeigt Debugging-Meldungen an" + +#: src/cryptsetup.c:3359 +msgid "Show debug messages including JSON metadata" +msgstr "Debugging-Meldungen anzeigen, inclusive JSON-Metadaten" + +#: src/cryptsetup.c:3360 src/cryptsetup_reencrypt.c:1601 +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:3361 src/cryptsetup_reencrypt.c:1603 +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:3362 +msgid "Verifies the passphrase by asking for it twice" +msgstr "Verifiziert die Passphrase durch doppeltes Nachfragen" + +#: src/cryptsetup.c:3363 src/cryptsetup_reencrypt.c:1605 +msgid "Read the key from a file" +msgstr "Schlüssel aus einer Datei lesen" + +#: src/cryptsetup.c:3364 +msgid "Read the volume (master) key from file." +msgstr "Laufwerks-(Master-)Schlüssel aus Datei lesen." + +#: src/cryptsetup.c:3365 +msgid "Dump volume (master) key instead of keyslots info" +msgstr "Laufwerks-(Master-)schlüssel anstelle der Schlüsselfach-Informationen wegschreiben" + +#: src/cryptsetup.c:3366 src/cryptsetup_reencrypt.c:1602 +msgid "The size of the encryption key" +msgstr "Die Größe des Verschlüsselungsschlüssels" + +#: src/cryptsetup.c:3366 src/cryptsetup.c:3425 src/integritysetup.c:553 +#: src/integritysetup.c:557 src/integritysetup.c:561 +#: src/cryptsetup_reencrypt.c:1602 +msgid "BITS" +msgstr "BITS" + +#: src/cryptsetup.c:3367 src/cryptsetup_reencrypt.c:1618 +msgid "Limits the read from keyfile" +msgstr "Begrenzt das Lesen aus der Schlüsseldatei" + +#: src/cryptsetup.c:3367 src/cryptsetup.c:3368 src/cryptsetup.c:3369 +#: src/cryptsetup.c:3370 src/cryptsetup.c:3373 src/cryptsetup.c:3422 +#: src/cryptsetup.c:3423 src/cryptsetup.c:3431 src/cryptsetup.c:3432 +#: src/veritysetup.c:432 src/veritysetup.c:433 src/veritysetup.c:434 +#: src/veritysetup.c:437 src/veritysetup.c:438 src/integritysetup.c:542 +#: src/integritysetup.c:548 src/integritysetup.c:549 +#: src/cryptsetup_reencrypt.c:1617 src/cryptsetup_reencrypt.c:1618 +#: src/cryptsetup_reencrypt.c:1619 src/cryptsetup_reencrypt.c:1620 +msgid "bytes" +msgstr "Bytes" + +#: src/cryptsetup.c:3368 src/cryptsetup_reencrypt.c:1617 +msgid "Number of bytes to skip in keyfile" +msgstr "Anzahl der Bytes, die in der Schlüsseldatei übersprungen werden" + +#: src/cryptsetup.c:3369 +msgid "Limits the read from newly added keyfile" +msgstr "Begrenzt das Lesen aus der neu erzeugten Schlüsseldatei" + +#: src/cryptsetup.c:3370 +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:3371 +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:3372 +msgid "The size of the device" +msgstr "Die Größe des Geräts" + +#: src/cryptsetup.c:3372 src/cryptsetup.c:3374 src/cryptsetup.c:3375 +#: src/cryptsetup.c:3381 src/integritysetup.c:543 src/integritysetup.c:550 +msgid "SECTORS" +msgstr "SEKTOREN" + +#: src/cryptsetup.c:3373 src/cryptsetup_reencrypt.c:1620 +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:3374 +msgid "The start offset in the backend device" +msgstr "Der Startoffset im Backend-Gerät" + +#: src/cryptsetup.c:3375 +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:3376 +msgid "Create a readonly mapping" +msgstr "Eine schreibgeschützte Zuordnung erzeugen" + +#: src/cryptsetup.c:3377 src/integritysetup.c:536 +#: src/cryptsetup_reencrypt.c:1608 +msgid "Do not ask for confirmation" +msgstr "Nicht nach Bestätigung fragen" + +# XXX +#: src/cryptsetup.c:3378 +msgid "Timeout for interactive passphrase prompt (in seconds)" +msgstr "Frist für interaktive Eingabe der Passphrase (in Sekunden)" + +#: src/cryptsetup.c:3378 src/cryptsetup.c:3379 src/integritysetup.c:537 +#: src/cryptsetup_reencrypt.c:1609 +msgid "secs" +msgstr "sek" + +#: src/cryptsetup.c:3379 src/integritysetup.c:537 +#: src/cryptsetup_reencrypt.c:1609 +msgid "Progress line update (in seconds)" +msgstr "Aktualisierungsintervall für Fortschrittszeile (in Sekunden)" + +#: src/cryptsetup.c:3380 src/cryptsetup_reencrypt.c:1610 +msgid "How often the input of the passphrase can be retried" +msgstr "Wie oft die Eingabe der Passphrase wiederholt werden kann" + +#: src/cryptsetup.c:3381 +msgid "Align payload at sector boundaries - for luksFormat" +msgstr "Nutzdaten an Grenzen von Sektoren ausrichten - für luksFormat" + +#: src/cryptsetup.c:3382 +msgid "File with LUKS header and keyslots backup" +msgstr "Datei mit dem Backup der LUKS-Header und den Schlüsselfächern" + +#: src/cryptsetup.c:3383 src/cryptsetup_reencrypt.c:1611 +msgid "Use /dev/random for generating volume key" +msgstr "/dev/random zum Generieren des Laufwerksschlüssels benutzen" + +#: src/cryptsetup.c:3384 src/cryptsetup_reencrypt.c:1612 +msgid "Use /dev/urandom for generating volume key" +msgstr "/dev/urandom zum Generieren des Laufwerksschlüssels benutzen" + +#: src/cryptsetup.c:3385 +msgid "Share device with another non-overlapping crypt segment" +msgstr "Gerät mit einem anderen nicht-überlappenden Kryptosegment teilen" + +#: src/cryptsetup.c:3386 src/veritysetup.c:441 +msgid "UUID for device to use" +msgstr "UUID für das zu verwendende Gerät" + +#: src/cryptsetup.c:3387 +msgid "Allow discards (aka TRIM) requests for device" +msgstr "Auswurf-Anfragen (»TRIM«-Befehl) für das Gerät zulassen" + +#: src/cryptsetup.c:3388 src/cryptsetup_reencrypt.c:1629 +msgid "Device or file with separated LUKS header" +msgstr "Gerät oder Datei mit separatem LUKS-Header" + +#: src/cryptsetup.c:3389 +msgid "Do not activate device, just check passphrase" +msgstr "Gerät nicht aktivieren, nur Passphrase überprüfen" + +#: src/cryptsetup.c:3390 +msgid "Use hidden header (hidden TCRYPT device)" +msgstr "Versteckten Header benutzen (verstecktes TCRYPT-Gerät)" + +#: src/cryptsetup.c:3391 +msgid "Device is system TCRYPT drive (with bootloader)" +msgstr "Das Gerät ist das System-TCRYPT-Laufwerk (mit Bootlader)" + +#: src/cryptsetup.c:3392 +msgid "Use backup (secondary) TCRYPT header" +msgstr "Backup-(Zweit-)-TCRYPT-Header benutzen" + +#: src/cryptsetup.c:3393 +msgid "Scan also for VeraCrypt compatible device" +msgstr "Auch nach VeryCrypt-kompatiblen Geräten suchen" + +#: src/cryptsetup.c:3394 +msgid "Personal Iteration Multiplier for VeraCrypt compatible device" +msgstr "Persönlicher Interations-Multiplizierer (PIM) für VeryCrypt-kompatibles Gerät" + +#: src/cryptsetup.c:3395 +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:3396 +msgid "Type of device metadata: luks, luks1, luks2, plain, loopaes, tcrypt" +msgstr "Art der Geräte-Metadaten: luks, luks1, luks2, plain, loopaes, tcrypt" + +#: src/cryptsetup.c:3397 +msgid "Disable password quality check (if enabled)" +msgstr "Passwort-Qualitätsprüfung deaktivieren (wenn sie aktiviert ist)" + +#: src/cryptsetup.c:3398 +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:3399 +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:3400 +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:3401 +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:3402 +msgid "PBKDF iteration time for LUKS (in ms)" +msgstr "PBKDF-Iterationszeit for LUKS (in ms)" + +#: src/cryptsetup.c:3402 src/cryptsetup_reencrypt.c:1607 +msgid "msecs" +msgstr "msek" + +#: src/cryptsetup.c:3403 src/cryptsetup_reencrypt.c:1625 +msgid "PBKDF algorithm (for LUKS2): argon2i, argon2id, pbkdf2" +msgstr "PBKDF-Algorithmus (für LUKS2): argon2i, argon2id, pbkdf2" + +#: src/cryptsetup.c:3404 src/cryptsetup_reencrypt.c:1626 +msgid "PBKDF memory cost limit" +msgstr "PBKDF-Speicherkostengrenze" + +#: src/cryptsetup.c:3404 src/cryptsetup_reencrypt.c:1626 +msgid "kilobytes" +msgstr "Kilobytes" + +#: src/cryptsetup.c:3405 src/cryptsetup_reencrypt.c:1627 +msgid "PBKDF parallel cost" +msgstr "PBKDF-Parallelitätskosten" + +#: src/cryptsetup.c:3405 src/cryptsetup_reencrypt.c:1627 +msgid "threads" +msgstr "Threads" + +#: src/cryptsetup.c:3406 src/cryptsetup_reencrypt.c:1628 +msgid "PBKDF iterations cost (forced, disables benchmark)" +msgstr "PBKDF-Iterationskosten (erzwungen, deaktiviert Benchmark)" + +#: src/cryptsetup.c:3407 +msgid "Keyslot priority: ignore, normal, prefer" +msgstr "Schlüsselfach-Priorität: ignore (ignorieren), normal, prefer (bevorzugen)" + +#: src/cryptsetup.c:3408 +msgid "Disable locking of on-disk metadata" +msgstr "Dateisperrung von Metadaten auf der Platte deaktivieren" + +#: src/cryptsetup.c:3409 +msgid "Disable loading volume keys via kernel keyring" +msgstr "Deaktivieren, dass Laufwerksschlüssel über den Kernel-Schlüsselbund geladen werden" + +#: src/cryptsetup.c:3410 +msgid "Data integrity algorithm (LUKS2 only)" +msgstr "Datenintegritätsalgorithmus (nur LUKS2)" + +#: src/cryptsetup.c:3411 src/integritysetup.c:564 +msgid "Disable journal for integrity device" +msgstr "Aufzeichnung für Integritätsgerät deaktivieren" + +#: src/cryptsetup.c:3412 src/integritysetup.c:538 +msgid "Do not wipe device after format" +msgstr "Gerät nach dem Formatieren nicht säubern" + +#: src/cryptsetup.c:3413 +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:3414 +msgid "Token number (default: any)" +msgstr "Token-Nummer (Vorgabe: eine beliebige)" + +#: src/cryptsetup.c:3415 +msgid "Key description" +msgstr "Schlüsselbeschreibung" + +#: src/cryptsetup.c:3416 +msgid "Encryption sector size (default: 512 bytes)" +msgstr "Verschlüsselungs-Sektorgröße (Vorgabe: 512 Bytes)" + +#: src/cryptsetup.c:3417 +msgid "Set activation flags persistent for device" +msgstr "Aktivierungsschalter für Gerät permanent festlegen" + +#: src/cryptsetup.c:3418 +msgid "Set label for the LUKS2 device" +msgstr "Beschriftung für das LUKS2-Gerät festlegen" + +#: src/cryptsetup.c:3419 +msgid "Set subsystem label for the LUKS2 device" +msgstr "Teilsystem-Beschriftung für das LUKS2-Gerät festlegen" + +#: src/cryptsetup.c:3420 +msgid "Create unbound (no assigned data segment) LUKS2 keyslot" +msgstr "Unbeschränktes LUKS2-Schlüsselfach (ohne zugeordnetem Datensegment) anlegen" + +#: src/cryptsetup.c:3421 +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:3422 +msgid "LUKS2 header metadata area size" +msgstr "Größe des Bereichs für LUKS2-Header-Metadaten" + +#: src/cryptsetup.c:3423 +msgid "LUKS2 header keyslots area size" +msgstr "Größe des Bereichs für Schlüsselfächer im LUKS2-Header" + +#: src/cryptsetup.c:3424 +msgid "Refresh (reactivate) device with new parameters" +msgstr "Gerät mit neuen Parametern auffrischen (reaktivieren)" + +#: src/cryptsetup.c:3425 +msgid "LUKS2 keyslot: The size of the encryption key" +msgstr "LUKS2-Schlüsselfach: Die Größe des Verschlüsselungsschlüssels" + +#: src/cryptsetup.c:3426 +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:3427 +msgid "Encrypt LUKS2 device (in-place encryption)." +msgstr "LUKS2-Gerät verschlüsseln (direkt am Ort)." + +#: src/cryptsetup.c:3428 +msgid "Decrypt LUKS2 device (remove encryption)." +msgstr "LUKS2-Gerät entschlüsseln (Verschlüsselung entfernen)." + +#: src/cryptsetup.c:3429 +msgid "Initialize LUKS2 reencryption in metadata only." +msgstr "LUKS2-Wiederverschlüsselung nur in Metadaten beginnen." + +#: src/cryptsetup.c:3430 +msgid "Resume initialized LUKS2 reencryption only." +msgstr "Nur eine begonnene LUKS2-Wiederverschlüsselung fortsetzen." + +#: src/cryptsetup.c:3431 src/cryptsetup_reencrypt.c:1619 +msgid "Reduce data device size (move data offset). DANGEROUS!" +msgstr "Größe des Datengeräts reduzieren (Datenoffset verschieben). GEFÄHRLICH!" + +#: src/cryptsetup.c:3432 +msgid "Maximal reencryption hotzone size." +msgstr "Maximalgröße der Wiederverschlüsselungs-Hotzone." + +#: src/cryptsetup.c:3433 +msgid "Reencryption hotzone resilience type (checksum,journal,none)" +msgstr "Widerstandsfähigkeit der Hotzone für die Wiederverschlüsselung (checksum,journal,none)" + +#: src/cryptsetup.c:3434 +msgid "Reencryption hotzone checksums hash" +msgstr "Hash für Prüfsummen der Wiederverschlüsselungs-Hotzone" + +#: src/cryptsetup.c:3435 +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:3451 src/veritysetup.c:462 src/integritysetup.c:583 +msgid "[OPTION...] " +msgstr "[OPTION...] " + +#: src/cryptsetup.c:3502 src/veritysetup.c:496 src/integritysetup.c:594 +msgid "Argument missing." +msgstr "Argument fehlt." + +#: src/cryptsetup.c:3565 src/veritysetup.c:527 src/integritysetup.c:625 +msgid "Unknown action." +msgstr "Unbekannte Aktion." + +#: src/cryptsetup.c:3575 +msgid "Parameter --refresh is only allowed with open or refresh commands.\n" +msgstr "Die Option --refresh ist nur beim »open«- oder »refresh«-Befehl erlaubt.\n" + +#: src/cryptsetup.c:3580 +msgid "Options --refresh and --test-passphrase are mutually exclusive.\n" +msgstr "Die Optionen --refresh und --test-passphrase schließen sich gegenseitig aus.\n" + +#: src/cryptsetup.c:3585 +msgid "Option --deferred is allowed only for close command.\n" +msgstr "Die Option --deferred ist nur beim »close«-Befehl erlaubt.\n" + +#: src/cryptsetup.c:3590 +msgid "Option --shared is allowed only for open of plain device.\n" +msgstr "Die Option --shared ist nur beim beim »open«-Befehl eines Plain-Gerätes erlaubt.\n" + +#: src/cryptsetup.c:3595 +msgid "Option --allow-discards is allowed only for open operation.\n" +msgstr "Die Option --allow-discards ist nur beim »open«-Befehl erlaubt.\n" + +#: src/cryptsetup.c:3600 +msgid "Option --persistent is allowed only for open operation.\n" +msgstr "Die Option --persistent ist nur beim »open«-Befehl erlaubt.\n" + +#: src/cryptsetup.c:3605 +msgid "Option --serialize-memory-hard-pbkdf is allowed only for open operation.\n" +msgstr "Die Option --serialize-memory-hard-pbkdf ist nur beim »open«-Befehl erlaubt.\n" + +#: src/cryptsetup.c:3610 +msgid "Option --persistent is not allowed with --test-passphrase.\n" +msgstr "Die Option --persistent ist nicht mit --test-passphrase kombinierbar.\n" + +#: src/cryptsetup.c:3620 +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 "" +"Die Option --key-size ist nur für »luksFormat«, »luksAddKey«,\n" +"»open« und »benchmark« erlaubt. Benutzen Sie stattdessen »--keyfile-size=(Bytes)«,\n" +"um das Lesen aus der Schlüsseldatei zu begrenzen." + +#: src/cryptsetup.c:3626 +msgid "Option --integrity is allowed only for luksFormat (LUKS2).\n" +msgstr "Die Option --align-payload ist nur für luksFormat erlaubt.\n" + +#: src/cryptsetup.c:3631 +msgid "Option --integrity-no-wipe can be used only for format action with integrity extension.\n" +msgstr "Die Option --integrity-no-wipe ist nur für die »format«-Aktion mit Integritätserweiterung erlaubt.\n" + +#: src/cryptsetup.c:3637 +msgid "Options --label and --subsystem are allowed only for luksFormat and config LUKS2 operations.\n" +msgstr "Die Option --uuid ist nur für luksFormat und luksUUID erlaubt.\n" + +#: src/cryptsetup.c:3643 +msgid "Option --test-passphrase is allowed only for open of LUKS and TCRYPT devices.\n" +msgstr "Die Option --test-passphrase ist nur beim Öffnen von LUKS- und TCRYPT-Geräten erlaubt.\n" + +#: src/cryptsetup.c:3648 src/cryptsetup_reencrypt.c:1692 +msgid "Key size must be a multiple of 8 bits" +msgstr "Schlüsselgröße muss ein Vielfaches von 8 Bit sein" + +#: src/cryptsetup.c:3654 src/cryptsetup_reencrypt.c:1378 +#: src/cryptsetup_reencrypt.c:1697 +msgid "Key slot is invalid." +msgstr "Schlüsselfach ist ungültig." + +#: src/cryptsetup.c:3661 +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:3668 src/veritysetup.c:539 src/integritysetup.c:649 +#: src/cryptsetup_reencrypt.c:1671 +msgid "Negative number for option not permitted." +msgstr "Negative Zahl für die Option nicht erlaubt." + +#: src/cryptsetup.c:3672 +msgid "Only one --key-file argument is allowed." +msgstr "Die Option --key-file ist nur einmal erlaubt." + +#: src/cryptsetup.c:3676 src/cryptsetup_reencrypt.c:1663 +#: src/cryptsetup_reencrypt.c:1701 +msgid "Only one of --use-[u]random options is allowed." +msgstr "Nur eine der Optionen --use-[u]random ist erlaubt." + +#: src/cryptsetup.c:3680 +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:3684 +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:3688 +msgid "Option --align-payload is allowed only for luksFormat." +msgstr "Die Option --align-payload ist nur für luksFormat erlaubt." + +#: src/cryptsetup.c:3692 +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:3697 +msgid "Invalid LUKS2 metadata size specification." +msgstr "Ungültige Angabe für die Größe der LUKS2-Metadaten." + +#: src/cryptsetup.c:3701 +msgid "Invalid LUKS2 keyslots size specification." +msgstr "Ungültige Angabe für die Größe der LUKS2-Schlüsselfächer." + +#: src/cryptsetup.c:3705 +msgid "Options --align-payload and --offset cannot be combined." +msgstr "Die Optionen --align-payload und --offset können nicht kombiniert werden." + +#: src/cryptsetup.c:3711 +msgid "Option --skip is supported only for open of plain and loopaes devices.\n" +msgstr "Die Option --skip ist nur beim Öffnen von plain- und loopaes-Geräten erlaubt.\n" + +#: src/cryptsetup.c:3718 +msgid "Option --offset is supported only for open of plain and loopaes devices, luksFormat and device reencryption.\n" +msgstr "Die Option --offset ist nur beim Öffnen von plain- und loopaes-Geräten erlaubt, sowie für luksFormat und Wiederverschlüsselung.\n" + +#: src/cryptsetup.c:3724 +msgid "Option --tcrypt-hidden, --tcrypt-system or --tcrypt-backup is supported only for TCRYPT device.\n" +msgstr "Die Optionen --tcrypt-hidden, --tcrypt-system und --tcrypt-backup sind nur zusammen mit einem TCRYPT-Gerät erlaubt.\n" + +#: src/cryptsetup.c:3729 +msgid "Option --tcrypt-hidden cannot be combined with --allow-discards.\n" +msgstr "Die Option --tcrypt-hidden kann nicht mit --allow-discards kombiniert werden.\n" + +#: src/cryptsetup.c:3734 +msgid "Option --veracrypt is supported only for TCRYPT device type.\n" +msgstr "Die Option --veracrypt wird nur für TCRYPT-kompatible Geräte unterstützt.\n" + +#: src/cryptsetup.c:3740 +msgid "Invalid argument for parameter --veracrypt-pim supplied.\n" +msgstr "Ungültiges Argument für Parameter --veracrypt-pim angegeben.\n" + +#: src/cryptsetup.c:3744 +msgid "Option --veracrypt-pim is supported only for VeraCrypt compatible devices.\n" +msgstr "Die Option --veracrypt-pim wird nur für VeraCrypt-kompatible Geräte unterstützt.\n" + +#: src/cryptsetup.c:3752 +msgid "Option --veracrypt-query-pim is supported only for VeraCrypt compatible devices.\n" +msgstr "Die Option --veracrypt-query-pim wird nur für VeraCrypt-kompatible Geräte unterstützt.\n" + +#: src/cryptsetup.c:3756 +msgid "The options --veracrypt-pim and --veracrypt-query-pim are mutually exclusive.\n" +msgstr "Die Optionen --veracrypt-pim und --veracrypt-query-pim schließen sich gegenseitig aus.\n" + +#: src/cryptsetup.c:3763 +msgid "Option --priority can be only ignore/normal/prefer.\n" +msgstr "Die Option --priority kann nur »ignore/normal/prefer« sein.\n" + +#: src/cryptsetup.c:3768 +msgid "Keyslot specification is required.\n" +msgstr "Das Schlüsselfach muss angegeben werden.\n" + +#: src/cryptsetup.c:3773 src/cryptsetup_reencrypt.c:1677 +msgid "Password-based key derivation function (PBKDF) can be only pbkdf2 or argon2i/argon2id.\n" +msgstr "Passwortbasierte Schlüsselableitungsfunktion (PBKDF) kann nur »pbkdf2« oder »argon2i/argon2id« sein.\n" + +#: src/cryptsetup.c:3778 src/cryptsetup_reencrypt.c:1682 +msgid "PBKDF forced iterations cannot be combined with iteration time option.\n" +msgstr "Bei PBKDF darf nur entweder die Anzahl der Durchläufe oder die Zeitbegrenzung angegeben werden.\n" + +#: src/cryptsetup.c:3784 +msgid "Sector size option is not supported for this command.\n" +msgstr "Die Option Sektorgröße wird für diesen Befehl nicht unterstützt.\n" + +#: src/cryptsetup.c:3790 +msgid "Unsupported encryption sector size.\n" +msgstr "Nicht unterstützte Sektorengröße für Verschlüsselung.\n" + +#: src/cryptsetup.c:3795 +msgid "Key size is required with --unbound option.\n" +msgstr "Die Option »--unbound« erfordert die Schlüsselgröße.\n" + +#: src/cryptsetup.c:3800 +msgid "Option --unbound may be used only with luksAddKey action.\n" +msgstr "Die Option »--unbound« kann nur zusammen mit der Aktion »luksAddKey« benutzt werden.\n" + +#: src/cryptsetup.c:3805 +msgid "Option --refresh may be used only with open action.\n" +msgstr "Die Option --refresh kann nur zusammen mit der Aktion »open« benutzt werden.\n" + +#: src/cryptsetup.c:3816 +msgid "Cannot disable metadata locking.\n" +msgstr "Fehler beim Deaktivieren der Metadaten-Dateisperre.\n" + +#: src/cryptsetup.c:3826 +msgid "Invalid max reencryption hotzone size specification." +msgstr "Ungültige Angabe der Maximalgröße für die Wiederverschlüsselungs-Hotzone." + +#: src/cryptsetup.c:3834 src/cryptsetup_reencrypt.c:1706 +#: src/cryptsetup_reencrypt.c:1711 +msgid "Invalid device size specification." +msgstr "Ungültige Angabe der Gerätegröße." + +#: src/cryptsetup.c:3837 +msgid "Maximum device reduce size is 1 GiB." +msgstr "Die maximale Verkleinerungsgröße ist 1 GiB." + +#: src/cryptsetup.c:3840 src/cryptsetup_reencrypt.c:1717 +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:3845 +msgid "Invalid data size specification." +msgstr "Ungültige Angabe der Datengröße." + +#: src/cryptsetup.c:3850 +msgid "Reduce size overflow." +msgstr "Überlauf bei der Verringerungsgröße." + +#: src/cryptsetup.c:3854 +msgid "LUKS2 decryption requires option --header." +msgstr "LUKS2-Entschlüsselung erfordert die Option --header." + +#: src/cryptsetup.c:3858 +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:3862 +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:3866 +msgid "Options --device-size and --size cannot be combined." +msgstr "Die Optionen --device-size und --size können nicht kombiniert werden." + +#: src/veritysetup.c:65 +msgid "Invalid salt string specified." +msgstr "Ungültiger Salt-String angegeben." + +#: src/veritysetup.c:96 +#, c-format +msgid "Cannot create hash image %s for writing." +msgstr "Fehler beim Schreiben des Hash-Abbilds »%s«." + +#: src/veritysetup.c:106 +#, c-format +msgid "Cannot create FEC image %s for writing." +msgstr "Fehler beim Schreiben des FEC-Abbilds »%s«." + +#: src/veritysetup.c:176 +msgid "Invalid root hash string specified." +msgstr "Ungültiger Root-Hash-String angegeben." + +#: src/veritysetup.c:356 +msgid " " +msgstr " " + +#: src/veritysetup.c:356 src/integritysetup.c:469 +msgid "format device" +msgstr "Gerät formatieren" + +#: src/veritysetup.c:357 +msgid " " +msgstr " " + +#: src/veritysetup.c:357 +msgid "verify device" +msgstr "Gerät verifizieren" + +#: src/veritysetup.c:358 +msgid " " +msgstr " " + +#: src/veritysetup.c:360 src/integritysetup.c:472 +msgid "show active device status" +msgstr "Status der aktiven Geräte anzeigen" + +#: src/veritysetup.c:361 +msgid "" +msgstr "" + +#: src/veritysetup.c:361 src/integritysetup.c:473 +msgid "show on-disk information" +msgstr "Auf dem Datenträger gespeicherte Informationen anzeigen" + +#: src/veritysetup.c:380 +#, c-format +msgid "" +"\n" +" is the device to create under %s\n" +" is the data device\n" +" is the device containing verification data\n" +" hash of the root node on \n" +msgstr "" +"\n" +" ist das Gerät, das unter »%s« angelegt werden soll\n" +" ist das Datengerät\n" +" ist das Gerät, das die Verifikationsdaten enthält\n" +" ist der Hash des Rootknotens auf \n" + +#: src/veritysetup.c:387 +#, c-format +msgid "" +"\n" +"Default compiled-in dm-verity parameters:\n" +"\tHash: %s, Data block (bytes): %u, Hash block (bytes): %u, Salt size: %u, Hash format: %u\n" +msgstr "" +"\n" +"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:430 +msgid "Do not use verity superblock" +msgstr "Verity-Superblock nicht benutzen" + +#: src/veritysetup.c:431 +msgid "Format type (1 - normal, 0 - original Chrome OS)" +msgstr "Format-Art (1 - normal, 0 - originales Chrome-OS)" + +#: src/veritysetup.c:431 +msgid "number" +msgstr "Zahl" + +#: src/veritysetup.c:432 +msgid "Block size on the data device" +msgstr "Blockgröße auf dem Datengerät" + +#: src/veritysetup.c:433 +msgid "Block size on the hash device" +msgstr "Blockgröße auf dem Hash-Gerät" + +#: src/veritysetup.c:434 +msgid "FEC parity bytes" +msgstr "FEC-Paritätsbytes" + +#: src/veritysetup.c:435 +msgid "The number of blocks in the data file" +msgstr "Die Anzahl der Blöcke in der Datendatei" + +#: src/veritysetup.c:435 +msgid "blocks" +msgstr "Blöcke" + +#: src/veritysetup.c:436 +msgid "Path to device with error correction data" +msgstr "Pfad zum Gerät mit Fehlerkorrekturdaten" + +#: src/veritysetup.c:436 src/integritysetup.c:540 +msgid "path" +msgstr "Pfad" + +#: src/veritysetup.c:437 +msgid "Starting offset on the hash device" +msgstr "Start-Offset auf dem Hash-Gerät" + +#: src/veritysetup.c:438 +msgid "Starting offset on the FEC device" +msgstr "Start-Offset auf dem FEC-Gerät" + +#: src/veritysetup.c:439 +msgid "Hash algorithm" +msgstr "Hash-Algorithmus" + +#: src/veritysetup.c:439 +msgid "string" +msgstr "Zeichenkette" + +#: src/veritysetup.c:440 +msgid "Salt" +msgstr "Salt" + +#: src/veritysetup.c:440 +msgid "hex string" +msgstr "Hex-Zeichenkette" + +#: src/veritysetup.c:442 +msgid "Restart kernel if corruption is detected" +msgstr "Kernel neustarten wenn Beschädigung festgestellt wird" + +#: src/veritysetup.c:443 +msgid "Ignore corruption, log it only" +msgstr "Beschädigung ignorieren, nur mitloggen" + +#: src/veritysetup.c:444 +msgid "Do not verify zeroed blocks" +msgstr "Ausgenullte Blöcke nicht überprüfen" + +#: src/veritysetup.c:445 +msgid "Verify data block only the first time it is read" +msgstr "Datenblock nur beim erstmaligen Lesen verifizieren" + +#: src/veritysetup.c:545 +msgid "Option --ignore-corruption, --restart-on-corruption or --ignore-zero-blocks is allowed only for open operation.\n" +msgstr "Die Optionen --ignore-corruption, --restart-on-corruption und --ignore-zero-blocks sind nur für die »open«-Aktion erlaubt.\n" + +#: src/veritysetup.c:550 +msgid "Option --ignore-corruption and --restart-on-corruption cannot be used together.\n" +msgstr "Die Optionen --ignore-corruption und --restart-on-corruption können nicht zusammen benutzt werden.\n" + +#: src/integritysetup.c:83 src/utils_password.c:305 +#, c-format +msgid "Cannot read keyfile %s." +msgstr "Fehler beim Einlesen der Schlüsseldatei »%s«." + +#: src/integritysetup.c:87 src/utils_password.c:310 +#, c-format +msgid "Cannot read %d bytes from keyfile %s." +msgstr "Fehler beim Einlesen von %d Bytes aus der Schlüsseldatei »%s«." + +#: src/integritysetup.c:250 +#, c-format +msgid "Formatted with tag size %u, internal integrity %s.\n" +msgstr "Formatiert mit Etikettgröße %u und interner Integrität %s.\n" + +#: src/integritysetup.c:469 src/integritysetup.c:473 +msgid "" +msgstr "" + +#: src/integritysetup.c:470 +msgid " " +msgstr " " + +#: src/integritysetup.c:492 +#, c-format +msgid "" +"\n" +" is the device to create under %s\n" +" is the device containing data with integrity tags\n" +msgstr "" +"\n" +" ist das Gerät, das unter »%s« angelegt werden soll\n" +" ist das Gerät, das die Daten mit Integritätsangaben enthält\n" + +#: src/integritysetup.c:497 +#, c-format +msgid "" +"\n" +"Default compiled-in dm-integrity parameters:\n" +"\tTag size: %u bytes, Checksum algorithm: %s\n" +msgstr "" +"\n" +"Einkompilierte Vorgabewerte für dm-integrity:\n" +"\tEtikettgröße: %u Bytes, Prüfalgorithmus: %s\n" + +#: src/integritysetup.c:540 +msgid "Path to data device (if separated)" +msgstr "Pfad zum Datengerät (wenn getrennt)" + +#: src/integritysetup.c:542 +msgid "Journal size" +msgstr "Journalgröße" + +#: src/integritysetup.c:543 +msgid "Interleave sectors" +msgstr "Sektoren verschränken" + +#: src/integritysetup.c:544 +msgid "Journal watermark" +msgstr "Jornal-Wasserzeichen" + +#: src/integritysetup.c:544 +msgid "percent" +msgstr "Prozent" + +#: src/integritysetup.c:545 +msgid "Journal commit time" +msgstr "Journal-Commitzeit" + +#: src/integritysetup.c:545 src/integritysetup.c:547 +msgid "ms" +msgstr "ms" + +#: src/integritysetup.c:546 +msgid "Number of 512-byte sectors per bit (bitmap mode)." +msgstr "Anzahl der 512-Byte-Sektoren pro Bit (Bitmap-Modus)." + +#: src/integritysetup.c:547 +msgid "Bitmap mode flush time" +msgstr "Zeit für sicheres Speichern im Bitmap-Modus" + +#: src/integritysetup.c:548 +msgid "Tag size (per-sector)" +msgstr "Etikettgröße pro Sektor" + +#: src/integritysetup.c:549 +msgid "Sector size" +msgstr "Sektorengröße" + +#: src/integritysetup.c:550 +msgid "Buffers size" +msgstr "Puffergröße" + +#: src/integritysetup.c:552 +msgid "Data integrity algorithm" +msgstr "Datenintegritäts-Algorithmus" + +#: src/integritysetup.c:553 +msgid "The size of the data integrity key" +msgstr "Die Größe des Datenintegritätsschlüssels" + +#: src/integritysetup.c:554 +msgid "Read the integrity key from a file" +msgstr "Integritätsschlüssel aus einer Datei lesen" + +#: src/integritysetup.c:556 +msgid "Journal integrity algorithm" +msgstr "Integritätsalgorithmus für Journal" + +#: src/integritysetup.c:557 +msgid "The size of the journal integrity key" +msgstr "Die Größe des Integritätsschlüssels für das Journal" + +#: src/integritysetup.c:558 +msgid "Read the journal integrity key from a file" +msgstr "Integritätsschlüssel für das Journal aus einer Datei lesen" + +#: src/integritysetup.c:560 +msgid "Journal encryption algorithm" +msgstr "Algorithmus für Journalverschlüsselung" + +#: src/integritysetup.c:561 +msgid "The size of the journal encryption key" +msgstr "Die Größe des Journal-Verschlüsselungsschlüssels" + +#: src/integritysetup.c:562 +msgid "Read the journal encryption key from a file" +msgstr "Journal-Verschlüsselungsschlüssel aus einer Datei lesen" + +#: src/integritysetup.c:565 +msgid "Recovery mode (no journal, no tag checking)" +msgstr "Wiederherstellungsmodus (kein Journal, keine Etikettprüfung)" + +#: src/integritysetup.c:566 +msgid "Use bitmap to track changes and disable journal for integrity device" +msgstr "Bitmap verwenden, um Änderungen nachzuverfolgen und Journal für Integritätsgerät deaktivieren" + +#: src/integritysetup.c:567 +msgid "Recalculate initial tags automatically." +msgstr "Initiale Integritätsangaben automatisch neu berechnen." + +#: src/integritysetup.c:640 +msgid "Option --integrity-recalculate can be used only for open action." +msgstr "Die Option --integrity-recalculate kann nur zusammen mit der Aktion »open« benutzt werden." + +#: src/integritysetup.c:655 +msgid "Options --journal-size, --interleave-sectors, --sector-size, --tag-size and --no-wipe can be used only for format action.\n" +msgstr "Die Optionen --journal-size, --interleave-sectors, --sector-size, --tag-size und --no-wipe können nur bei der Aktion »format« verwendet werden.\n" + +#: src/integritysetup.c:661 +msgid "Invalid journal size specification." +msgstr "Ungültige Angabe der Journalgröße." + +#: src/integritysetup.c:666 +msgid "Both key file and key size options must be specified." +msgstr "Sowohl die Schlüsseldatei als auch die Schlüsselgröße müssen angegeben werden." + +#: src/integritysetup.c:669 +msgid "Integrity algorithm must be specified if integrity key is used." +msgstr "Wenn ein Integritätsschlüssel verwendet wird, muss auch der Integritätsalgorithmus angegeben werden." + +#: src/integritysetup.c:674 +msgid "Both journal integrity key file and key size options must be specified." +msgstr "Sowohl die Schlüsseldatei als auch die Schlüsselgröße müssen für die Journalintegrität angegeben werden." + +#: src/integritysetup.c:677 +msgid "Journal integrity algorithm must be specified if journal integrity key is used." +msgstr "Wenn ein Integritätsschlüssel für das Journal verwendet wird, muss auch der Integritätsalgorithmus angegeben werden." + +#: src/integritysetup.c:682 +msgid "Both journal encryption key file and key size options must be specified." +msgstr "Sowohl der Verschlüsselungsschlüssel als auch die Schlüsselgröße müssen für die Journalverschlüsselung angegeben werden." + +#: src/integritysetup.c:685 +msgid "Journal encryption algorithm must be specified if journal encryption key is used." +msgstr "Wenn ein Verschlüsselungsschlüssel für das Journal verwendet wird, muss auch der Verschlüsselungsalgorithmus angegeben werden." + +#: src/integritysetup.c:689 +msgid "Recovery and bitmap mode options are mutually exclusive." +msgstr "Die Modi Wiederherstellung und Bitmap schließen sich gegenseitig aus." + +#: src/integritysetup.c:693 +msgid "Journal options cannot be used in bitmap mode." +msgstr "Die Journal-Optionen können nicht im Bitmap-Modus verwendet werden." + +#: src/integritysetup.c:697 +msgid "Bitmap options can be used only in bitmap mode." +msgstr "Die Bitmapoptionen können nur im Bitmapmodus verwendet werden." + +#: src/cryptsetup_reencrypt.c:172 +msgid "Reencryption already in-progress." +msgstr "Wiederverschlüsselung läuft bereits." + +#: src/cryptsetup_reencrypt.c:201 +#, c-format +msgid "Cannot exclusively open %s, device in use." +msgstr "Gerät »%s« kann nicht exklusiv geöffnet werden, da es bereits benutzt wird." + +#: src/cryptsetup_reencrypt.c:215 src/cryptsetup_reencrypt.c:1127 +msgid "Allocation of aligned memory failed." +msgstr "Belegen des ausgerichteten Speichers fehlgeschlagen." + +#: src/cryptsetup_reencrypt.c:222 +#, c-format +msgid "Cannot read device %s." +msgstr "Fehler beim Lesen von Gerät »%s«." + +#: src/cryptsetup_reencrypt.c:233 +#, c-format +msgid "Marking LUKS1 device %s unusable." +msgstr "LUKS1-Gerät »%s« wird als unbenutzbar markiert." + +#: src/cryptsetup_reencrypt.c:237 +#, c-format +msgid "Setting LUKS2 offline reencrypt flag on device %s." +msgstr "LUKS2-Offline-Wiederverschlüsselungs-Kennzeichen wird auf Gerät »%s« festgelegt." + +#: src/cryptsetup_reencrypt.c:254 +#, c-format +msgid "Cannot write device %s." +msgstr "Fehler beim Schreiben auf Gerät »%s«." + +#: src/cryptsetup_reencrypt.c:302 +msgid "Cannot write reencryption log file." +msgstr "Fehler beim Speichern der Wiederverschlüsselungs-Logdatei." + +#: src/cryptsetup_reencrypt.c:358 +msgid "Cannot read reencryption log file." +msgstr "Fehler beim Einlesen der Wiederverschlüsselungs-Logdatei." + +#: src/cryptsetup_reencrypt.c:396 +#, c-format +msgid "Log file %s exists, resuming reencryption.\n" +msgstr "Logdatei »%s« existiert, Wiederverschlüsselung wird fortgesetzt.\n" + +#: src/cryptsetup_reencrypt.c:445 +msgid "Activating temporary device using old LUKS header." +msgstr "Temporäres Gerät mit dem alten LUKS-Header wird aktiviert." + +#: src/cryptsetup_reencrypt.c:455 +msgid "Activating temporary device using new LUKS header." +msgstr "Temporäres Gerät mit dem neuen LUKS-Header wird aktiviert." + +#: src/cryptsetup_reencrypt.c:465 +msgid "Activation of temporary devices failed." +msgstr "Fehler beim Aktivieren der temporären Geräte." + +#: src/cryptsetup_reencrypt.c:551 +msgid "Failed to set data offset." +msgstr "Fehler beim Festlegen des Daten-Offsets." + +#: src/cryptsetup_reencrypt.c:557 +msgid "Failed to set metadata size." +msgstr "Fehler beim Festlegen der Metadatengröße." + +#: src/cryptsetup_reencrypt.c:565 +#, c-format +msgid "New LUKS header for device %s created." +msgstr "Neuer LUKS-Header für Gerät »%s« angelegt." + +#: src/cryptsetup_reencrypt.c:625 +#, c-format +msgid "This version of cryptsetup-reencrypt can't handle new internal token type %s." +msgstr "Diese Version von cryptsetup-reencrypt kann internen Tokentyp %s nicht verarbeiten." + +#: src/cryptsetup_reencrypt.c:647 +msgid "Failed to read activation flags from backup header." +msgstr "Fehler beim Lesen der Aktivierungsschalter aus dem Backup-Header." + +#: src/cryptsetup_reencrypt.c:651 +msgid "Failed to write activation flags to new header." +msgstr "Fehler beim Schreiben der Aktivierungsschalter in den neuen Header." + +#: src/cryptsetup_reencrypt.c:655 src/cryptsetup_reencrypt.c:659 +msgid "Failed to read requirements from backup header." +msgstr "Fehler beim Lesen der Anforderungen aus dem Backup-Header." + +#: src/cryptsetup_reencrypt.c:697 +#, c-format +msgid "%s header backup of device %s created." +msgstr "%s-Backup-Header von Gerät »%s« angelegt." + +#: src/cryptsetup_reencrypt.c:760 +msgid "Creation of LUKS backup headers failed." +msgstr "Fehler beim Anlegen des LUKS-Backup-Headers." + +#: src/cryptsetup_reencrypt.c:893 +#, c-format +msgid "Cannot restore %s header on device %s." +msgstr "Fehler beim Wiederherstellen des %s-Headers auf Gerät »%s«." + +#: src/cryptsetup_reencrypt.c:895 +#, c-format +msgid "%s header on device %s restored." +msgstr "%s-Header auf Gerät »%s« wiederhergestellt." + +#: src/cryptsetup_reencrypt.c:1099 src/cryptsetup_reencrypt.c:1105 +msgid "Cannot open temporary LUKS device." +msgstr "Fehler beim Öffnen des temporären LUKS-Geräts." + +#: src/cryptsetup_reencrypt.c:1110 src/cryptsetup_reencrypt.c:1115 +msgid "Cannot get device size." +msgstr "Fehler beim Ermitteln der Gerätegröße." + +#: src/cryptsetup_reencrypt.c:1150 +msgid "IO error during reencryption." +msgstr "E/A-Fehler während der Wiederverschlüsselung." + +#: src/cryptsetup_reencrypt.c:1181 +msgid "Provided UUID is invalid." +msgstr "Die angegebene UUID ist ungültig." + +#: src/cryptsetup_reencrypt.c:1407 +msgid "Cannot open reencryption log file." +msgstr "Fehler beim Öffnen der Wiederverschlüsselungs-Logdatei." + +#: src/cryptsetup_reencrypt.c:1413 +msgid "No decryption in progress, provided UUID can be used only to resume suspended decryption process." +msgstr "Derzeit ist keine Entschlüsselung im Gange, die angegebene UUID kann nur benutzt werden, um einen unterbrochenen Entschlüsselungsvorgang fortzusetzen." + +#: src/cryptsetup_reencrypt.c:1488 +#, c-format +msgid "Changed pbkdf parameters in keyslot %i." +msgstr "PBKDF-Parameter in Schlüsselfach %i wurden geändert." + +#: src/cryptsetup_reencrypt.c:1600 +msgid "Reencryption block size" +msgstr "Wiederverschlüsselungs-Blockgröße" + +#: src/cryptsetup_reencrypt.c:1600 +msgid "MiB" +msgstr "MiB" + +#: src/cryptsetup_reencrypt.c:1604 +msgid "Do not change key, no data area reencryption" +msgstr "Schlüssel nicht ändern, Datenbereich nicht neu verschlüsseln" + +#: src/cryptsetup_reencrypt.c:1606 +msgid "Read new volume (master) key from file" +msgstr "Laufwerks-(Master-)Schlüssel aus Datei lesen" + +#: src/cryptsetup_reencrypt.c:1607 +msgid "PBKDF2 iteration time for LUKS (in ms)" +msgstr "PBKDF2 Iterationszeit for LUKS (in ms)" + +#: src/cryptsetup_reencrypt.c:1613 +msgid "Use direct-io when accessing devices" +msgstr "Beim Zugriff auf die Geräte direct-io benutzen" + +#: src/cryptsetup_reencrypt.c:1614 +msgid "Use fsync after each block" +msgstr "Nach jedem Block fsync aufrufen" + +#: src/cryptsetup_reencrypt.c:1615 +msgid "Update log file after every block" +msgstr "Logdatei nach jedem Block aktualisieren" + +#: src/cryptsetup_reencrypt.c:1616 +msgid "Use only this slot (others will be disabled)" +msgstr "Nur dieses Schlüsselfach benutzen (alle anderen werden deaktiviert)" + +#: src/cryptsetup_reencrypt.c:1621 +msgid "Create new header on not encrypted device" +msgstr "Neuen Header auf unverschlüsseltem Gerät anlegen" + +#: src/cryptsetup_reencrypt.c:1622 +msgid "Permanently decrypt device (remove encryption)" +msgstr "Gerät dauerhaft entschlüsseln (Verschlüsselung entfernen)" + +#: src/cryptsetup_reencrypt.c:1623 +msgid "The UUID used to resume decryption" +msgstr "Die UUID, um das Entschlüsseln fortzusetzen" + +#: src/cryptsetup_reencrypt.c:1624 +msgid "Type of LUKS metadata: luks1, luks2" +msgstr "Art der LUKS-Metadaten: luks1, luks2" + +#: src/cryptsetup_reencrypt.c:1643 +msgid "[OPTION...] " +msgstr "[OPTION...] " + +#: src/cryptsetup_reencrypt.c:1651 +#, c-format +msgid "Reencryption will change: %s%s%s%s%s%s." +msgstr "Wiederverschlüsselung ändert: %s%s%s%s%s%s." + +#: src/cryptsetup_reencrypt.c:1652 +msgid "volume key" +msgstr "Laufwerksschlüssel" + +#: src/cryptsetup_reencrypt.c:1654 +msgid "set hash to " +msgstr ", Hash auf " + +#: src/cryptsetup_reencrypt.c:1655 +msgid ", set cipher to " +msgstr ", Verschlüsselung auf " + +#: src/cryptsetup_reencrypt.c:1659 +msgid "Argument required." +msgstr "Argument muss angegeben werden." + +#: src/cryptsetup_reencrypt.c:1687 +msgid "Only values between 1 MiB and 64 MiB allowed for reencryption block size." +msgstr "Für die Wiederverschlüsselungs-Blockgröße sind nur Werte zwischen 1 MiB und 64 MiB erlaubt." + +#: src/cryptsetup_reencrypt.c:1714 +msgid "Maximum device reduce size is 64 MiB." +msgstr "Die maximale Verkleinerungsgröße ist 64 MiB." + +#: src/cryptsetup_reencrypt.c:1721 +msgid "Option --new must be used together with --reduce-device-size or --header." +msgstr "Die Option »--new« muss zusammen mit »--reduce-device-size« oder »--header« benutzt werden." + +#: src/cryptsetup_reencrypt.c:1725 +msgid "Option --keep-key can be used only with --hash, --iter-time or --pbkdf-force-iterations." +msgstr "Die Option »--keep-new« kann nur zusammen mit »--hash«, »--iter-time« oder »--pbkdf-force-iterations« benutzt werden." + +#: src/cryptsetup_reencrypt.c:1729 +msgid "Option --new cannot be used together with --decrypt." +msgstr "Die Option »--new« kann nicht zusammen mit »--decrypt« benutzt werden." + +#: src/cryptsetup_reencrypt.c:1733 +msgid "Option --decrypt is incompatible with specified parameters." +msgstr "Die Option --decrypt verträgt sich nicht mit den angegebenen Parametern." + +#: src/cryptsetup_reencrypt.c:1737 +msgid "Option --uuid is allowed only together with --decrypt." +msgstr "Die Option »--uuid« kann nur zusammen mit »--decrypt« benutzt werden." + +#: src/cryptsetup_reencrypt.c:1741 +msgid "Invalid luks type. Use one of these: 'luks', 'luks1' or 'luks2'." +msgstr "Ungültiger LUKS-Typ. Verwenden Sie einen von diesen: luks, luks1, luks2." + +#: src/utils_tools.c:151 +msgid "Error reading response from terminal." +msgstr "Fehler beim Lesen der Antwort vom Terminal." + +#: src/utils_tools.c:186 +msgid "Command successful.\n" +msgstr "Befehl erfolgreich.\n" + +#: src/utils_tools.c:194 +msgid "wrong or missing parameters" +msgstr "Falsche oder fehlende Parameter" + +#: src/utils_tools.c:196 +msgid "no permission or bad passphrase" +msgstr "Kein Zugriff, oder falsche Passphrase" + +#: src/utils_tools.c:198 +msgid "out of memory" +msgstr "Nicht genug Speicher" + +#: src/utils_tools.c:200 +msgid "wrong device or file specified" +msgstr "Falsches Gerät oder falsche Datei angegeben" + +#: src/utils_tools.c:202 +msgid "device already exists or device is busy" +msgstr "Das Gerät existiert bereits oder wird bereits benutzt" + +#: src/utils_tools.c:204 +msgid "unknown error" +msgstr "Unbekannter Fehler" + +#: src/utils_tools.c:206 +#, c-format +msgid "Command failed with code %i (%s).\n" +msgstr "Fehler %i beim Ausführen eines Befehls »%s«.\n" + +#: src/utils_tools.c:283 +#, c-format +msgid "Key slot %i created." +msgstr "Schlüsselfach %i erstellt." + +#: src/utils_tools.c:285 +#, c-format +msgid "Key slot %i unlocked." +msgstr "Schlüsselfach %i entsperrt." + +#: src/utils_tools.c:287 +#, c-format +msgid "Key slot %i removed." +msgstr "Schlüsselfach %i entfernt." + +#: src/utils_tools.c:296 +#, c-format +msgid "Token %i created." +msgstr "Token %i erstellt." + +#: src/utils_tools.c:298 +#, c-format +msgid "Token %i removed." +msgstr "Token %i entfernt." + +#: src/utils_tools.c:464 +msgid "" +"\n" +"Wipe interrupted." +msgstr "" +"\n" +"Gründlich löschen unterbrochen." + +#: src/utils_tools.c:475 +#, c-format +msgid "WARNING: Device %s already contains a '%s' partition signature.\n" +msgstr "WARNUNG: Gerät %s enthält bereits eine '%s'-Partitionssignatur.\n" + +#: src/utils_tools.c:483 +#, c-format +msgid "WARNING: Device %s already contains a '%s' superblock signature.\n" +msgstr "WARNUNG: Gerät %s enthält bereits eine '%s'-Superblock-Signatur.\n" + +#: src/utils_tools.c:504 src/utils_tools.c:568 +msgid "Failed to initialize device signature probes." +msgstr "Fehler beim Initialisieren der Gerätesignatursonden." + +#: src/utils_tools.c:548 +#, c-format +msgid "Failed to stat device %s." +msgstr "Gerät %s konnte nicht gefunden werden." + +#: src/utils_tools.c:561 +#, c-format +msgid "Device %s is in use. Can not proceed with format operation." +msgstr "Gerät %s wird gerade benutzt. Das Formatieren ist gerade nicht möglich." + +#: src/utils_tools.c:563 +#, c-format +msgid "Failed to open file %s in read/write mode." +msgstr "Datei %s konnte nicht im Lese-/Schreibmodus geöffnet werden." + +#: src/utils_tools.c:577 +#, c-format +msgid "Existing '%s' partition signature (offset: % bytes) on device %s will be wiped." +msgstr "Die bestehende Partitionssignatur »%s« (Offset: % Bytes) auf Gerät %s wird dadurch gelöscht." + +#: src/utils_tools.c:580 +#, c-format +msgid "Existing '%s' superblock signature (offset: % bytes) on device %s will be wiped." +msgstr "Die bestehende Superblocksignatur »%s« (Offset: % Bytes) auf Gerät %s wird dadurch gelöscht." + +#: src/utils_tools.c:583 +msgid "Failed to wipe device signature." +msgstr "Fehler beim Löschen der Gerätesignatur." + +#: src/utils_tools.c:590 +#, c-format +msgid "Failed to probe device %s for a signature." +msgstr "Gerät %s konnte nicht auf eine Signatur geprüft werden." + +#: src/utils_tools.c:629 +msgid "" +"\n" +"Reencryption interrupted." +msgstr "" +"\n" +"Wiederverschlüsselung unterbrochen." + +#: src/utils_password.c:43 src/utils_password.c:75 +#, c-format +msgid "Cannot check password quality: %s" +msgstr "Fehler beim Prüfen der Passwortqualität: %s" + +#: src/utils_password.c:51 +#, c-format +msgid "" +"Password quality check failed:\n" +" %s" +msgstr "" +"Passwort-Qualitätsüberprüfung fehlgeschlagen:\n" +" %s" + +#: src/utils_password.c:83 +#, c-format +msgid "Password quality check failed: Bad passphrase (%s)" +msgstr "Passwort-Qualitätsüberprüfung fehlgeschlagen: Falsche Passphrase (%s)" + +#: src/utils_password.c:193 src/utils_password.c:208 +msgid "Error reading passphrase from terminal." +msgstr "Fehler beim Lesen der Passphrase vom Terminal." + +#: src/utils_password.c:206 +msgid "Verify passphrase: " +msgstr "Passphrase bestätigen: " + +#: src/utils_password.c:213 +msgid "Passphrases do not match." +msgstr "Passphrasen stimmen nicht überein." + +#: src/utils_password.c:250 +msgid "Cannot use offset with terminal input." +msgstr "Offset kann nicht zusammen mit Terminaleingabe benutzt werden." + +#: src/utils_password.c:253 +#, c-format +msgid "Enter passphrase: " +msgstr "Passphrase eingeben: " + +#: src/utils_password.c:256 +#, c-format +msgid "Enter passphrase for %s: " +msgstr "Geben Sie die Passphrase für »%s« ein: " + +#: src/utils_password.c:287 +msgid "No key available with this passphrase." +msgstr "Kein Schlüssel mit dieser Passphrase verfügbar." + +#: src/utils_password.c:289 +msgid "No usable keyslot is available." +msgstr "Es ist kein nutzbares Schlüsselfach verfügbar." + +#: src/utils_password.c:328 +#, c-format +msgid "Cannot open keyfile %s for write." +msgstr "Fehler beim Schreiben der Schlüsseldatei »%s«." + +#: src/utils_password.c:335 +#, c-format +msgid "Cannot write to keyfile %s." +msgstr "Fehler beim Schreiben der Schlüsseldatei »%s«." + +#: src/utils_luks2.c:47 +#, c-format +msgid "Failed to open file %s in read-only mode." +msgstr "Datei %s konnte nicht im Nur-Lese-Modus geöffnet werden." + +#: src/utils_luks2.c:60 +msgid "Provide valid LUKS2 token JSON:\n" +msgstr "Geben Sie gültiges LUKS2-Token-JSON an:\n" + +#: src/utils_luks2.c:67 +msgid "Failed to read JSON file." +msgstr "JSON-Datei konnte nicht gelesen werden." + +#: src/utils_luks2.c:72 +msgid "" +"\n" +"Read interrupted." +msgstr "" +"\n" +"Lesen unterbrochen." + +#: src/utils_luks2.c:113 +#, c-format +msgid "Failed to open file %s in write mode." +msgstr "Datei %s konnte nicht im Schreibmodus geöffnet werden." + +#: src/utils_luks2.c:122 +msgid "" +"\n" +"Write interrupted." +msgstr "" +"\n" +"Schreiben unterbrochen." + +#: src/utils_luks2.c:126 +msgid "Failed to write JSON file." +msgstr "JSON-Datei konnte nicht geschrieben werden." + +#~ msgid "Interrupted by a signal." +#~ msgstr "Durch ein Signal unterbrochen." + +#~ msgid "Function not available in FIPS mode." +#~ msgstr "Diese Funktion ist im FIPS-Modus nicht verfügbar." + +#~ msgid "Failed to write hash." +#~ msgstr "Fehler beim Schreiben des Hashes." + +#~ msgid "Failed to finalize hash." +#~ msgstr "Fehler beim Berechnen des Hashes." + +#~ msgid "Invalid resilience parameters (internal error)." +#~ msgstr "Interner Fehler: ungültige Parameter für Widerstandsfähigkeit." + +#~ msgid "Failed to assign new enc segments." +#~ msgstr "Fehler beim Zuweisen neuer Verschlüsselungssegmente." + +#~ msgid "Failed to assign digest %u to segment %u." +#~ msgstr "Digest %u konnte dem Segment %u nicht zugewiesen werden." + +#~ msgid "Failed to set segments." +#~ msgstr "Fehler beim Festlegen der Segmente." + +#~ msgid "Failed to assign reencrypt previous backup segment." +#~ msgstr "Fehler beim Wiederverschlüsseln des vorigen Backupsegments." + +#~ msgid "Failed to assign reencrypt final backup segment." +#~ msgstr "Fehler beim Wiederverschlüsseln des letzten Backupsegments." + +#~ msgid "Failed generate 2nd segment." +#~ msgstr "Fehler beim Generieren des 2. Segments." + +#~ msgid "Failed generate 1st segment." +#~ msgstr "Fehler beim Generieren des 1. Segments." + +#~ msgid "Failed to allocate device %s." +#~ msgstr "Fehler beim Öffnen des Geräts »%s«." + +#~ msgid "Failed to allocate dm segments." +#~ msgstr "Fehler beim Reservieren der dm-Segmente." + +#~ msgid "Failed to create dm segments." +#~ msgstr "Fehler beim Anlegen der dm-Segmente." + +#~ msgid "Failed to allocate device for new backing device." +#~ msgstr "Fehler beim Reservieren des Geräts für das neue Hintergrundgerät." + +#~ msgid "Failed to reload overlay device %s." +#~ msgstr "Fehler beim Neuladen des Überlagerungsgeräts »%s«." + +#~ msgid "Failed to refresh helper devices." +#~ msgstr "Fehler beim Auffrischen der Hilfsgeräte." + +#~ msgid "Failed to create reencryption backup segments." +#~ msgstr "Fehler beim Erzeugen der Backupsegmente für die Wiederverschlüsselung." + +#~ msgid "Failed to set online-reencryption requirement." +#~ msgstr "Fehler beim Festlegen der Anforderungen für Online-Wiederverschlüsselung." + +#~ msgid "Failed to hash sector at offset %zu." +#~ msgstr "Fehler beim Hashen des Sektors an Offset %zu." + +#~ msgid "Failed to read sector hash." +#~ msgstr "Fehler beim Lesen des Hashes des Sektors." + +#~ msgid "Error: Calculated reencryption offset % is beyond device size %." +#~ msgstr "Fehler: Der berechnete Offset für die Wiederverschlüsselung % liegt jenseits der Gerätegröße %." + +#~ msgid "Device is not in clean reencryption state." +#~ msgstr "Das Gerät ist nicht in einem sauberen Wiederverschlüsselungszustand." + +#~ msgid "Failed to read device info from %s." +#~ msgstr "Fehler beim Lesen der Geräteinfos von »%s«." + +#~ msgid "Failed to calculate new segments." +#~ msgstr "Fehler beim Berechnen der neuen Segmente." + +#~ msgid "Failed to assign pre reenc segments." +#~ msgstr "Fehler beim Zuweisen der Segmente vor der Wiederverschlüsselung." + +#~ msgid "Failed finalize hotzone resilience, retval = %d" +#~ msgstr "Interner Fehler beim Finalisieren der Hotzonen-Widerstandsfähigkeit, retval = %d" + +#~ msgid "Failed to write data." +#~ msgstr "Fehler beim Schreiben von Daten." + +#~ msgid "Failed to update metadata or reassign device segments." +#~ msgstr "Fehler beim Aktualisieren der Metadaten oder bei der Zuordnung von Gerätesegmenten." + +#~ msgid "Failed to reload %s device." +#~ msgstr "Fehler beim Neuladen des Geräts »%s«." + +#~ msgid "Failed to erase backup segments" +#~ msgstr "Fehler beim Löschen der Backupsegmente." + +#~ msgid "Requested dmcrypt performance options are not supported." +#~ msgstr "Die verlangten dmcrypt-Performance-Optionen werden nicht unterstützt." + +#~ msgid "Cannot format device %s which is still in use." +#~ msgstr "Gerät »%s« kann nicht formatiert werden, da es gerade benutzt wird." + +#~ msgid "Key slot %d is not used." +#~ msgstr "Schlüsselfach %d ist unbenutzt." + +#~ msgid "Key slot %d selected for deletion." +#~ msgstr "Schlüsselfach %d zum Löschen ausgewählt." + +#~ msgid "open device as mapping " +#~ msgstr "Gerät als Zuordnung öffnen" + +#~ msgid "close device (deactivate and remove mapping)" +#~ msgstr "Gerät schließen (deaktivieren und Zuordnung entfernen)" + +#~ msgid "Failed to set PBKDF parameters." +#~ msgstr "Fehler beim Festlegen der PBKDF-Parameter." + +#~ msgid "Cannot seek to device offset.\n" +#~ msgstr "Fehler beim Springen zum Gerät-Offset.\n" + +#~ msgid "Device %s is too small. (LUKS2 requires at least % bytes.)" +#~ msgstr "Gerät »%s« ist zu klein. (LUKS2 benötigt mindestens % Bytes.)" + +#~ msgid "Replaced with key slot %d." +#~ msgstr "Ersetzt durch Schlüsselfach %d." + +#~ msgid "Missing LUKS target type, option --type is required." +#~ msgstr "Fehlender LUKS-Zieltyp, die Option --type ist Pflicht." + +#~ msgid "Missing --token option specifying token for removal." +#~ msgstr "Um ein Token zu löschen, muss die Option --token angegeben werden." + +#~ msgid "Add or remove keyring token" +#~ msgstr "Schlüsselring-Token hinzufügen oder entfernen" + +#~ msgid "Activated keyslot %i." +#~ msgstr "Schlüsselfach %i aktiviert." + +#~ msgid "memory allocation error in action_luksFormat" +#~ msgstr "Speicherproblem in action_luksFormat" + +#~ msgid "Key slot is invalid.\n" +#~ msgstr "Schlüsselfach ist ungültig.\n" + +#~ msgid "Using default pbkdf parameters for new LUKS2 header.\n" +#~ msgstr "Für den neuen LUKS2-Header werden die vorgegebenen PBKDF-Parameter verwendet.\n" diff --git a/po/en@boldquot.header b/po/en@boldquot.header new file mode 100644 index 0000000..fedb6a0 --- /dev/null +++ b/po/en@boldquot.header @@ -0,0 +1,25 @@ +# All this catalog "translates" are quotation characters. +# The msgids must be ASCII and therefore cannot contain real quotation +# characters, only substitutes like grave accent (0x60), apostrophe (0x27) +# and double quote (0x22). These substitutes look strange; see +# http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html +# +# This catalog translates grave accent (0x60) and apostrophe (0x27) to +# left single quotation mark (U+2018) and right single quotation mark (U+2019). +# It also translates pairs of apostrophe (0x27) to +# left single quotation mark (U+2018) and right single quotation mark (U+2019) +# and pairs of quotation mark (0x22) to +# left double quotation mark (U+201C) and right double quotation mark (U+201D). +# +# When output to an UTF-8 terminal, the quotation characters appear perfectly. +# When output to an ISO-8859-1 terminal, the single quotation marks are +# transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to +# grave/acute accent (by libiconv), and the double quotation marks are +# transliterated to 0x22. +# When output to an ASCII terminal, the single quotation marks are +# transliterated to apostrophes, and the double quotation marks are +# transliterated to 0x22. +# +# This catalog furthermore displays the text between the quotation marks in +# bold face, assuming the VT100/XTerm escape sequences. +# diff --git a/po/en@quot.header b/po/en@quot.header new file mode 100644 index 0000000..a9647fc --- /dev/null +++ b/po/en@quot.header @@ -0,0 +1,22 @@ +# All this catalog "translates" are quotation characters. +# The msgids must be ASCII and therefore cannot contain real quotation +# characters, only substitutes like grave accent (0x60), apostrophe (0x27) +# and double quote (0x22). These substitutes look strange; see +# http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html +# +# This catalog translates grave accent (0x60) and apostrophe (0x27) to +# left single quotation mark (U+2018) and right single quotation mark (U+2019). +# It also translates pairs of apostrophe (0x27) to +# left single quotation mark (U+2018) and right single quotation mark (U+2019) +# and pairs of quotation mark (0x22) to +# left double quotation mark (U+201C) and right double quotation mark (U+201D). +# +# When output to an UTF-8 terminal, the quotation characters appear perfectly. +# When output to an ISO-8859-1 terminal, the single quotation marks are +# transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to +# grave/acute accent (by libiconv), and the double quotation marks are +# transliterated to 0x22. +# When output to an ASCII terminal, the single quotation marks are +# transliterated to apostrophes, and the double quotation marks are +# transliterated to 0x22. +# diff --git a/po/es.gmo b/po/es.gmo new file mode 100644 index 0000000000000000000000000000000000000000..8a4742aa78500ddd22343f765581a6e3f47a3462 GIT binary patch literal 105186 zcmbrH2Y_5v_5UYQgr!OieL`5Wft^jEhY(T;fizNRA%xl8+0BsMon>d2kO)#lL4GRT z0*W9uKtV)NK}CsJu%W1^UYCr_hxo>6Z|i{eBZtA)^pE2_uO;K{AjnW zZyuA&<#yaEmzxY;H#V0mY@N&f9tU2z_sq)W_5wcz?lGGe{&qYmmpcXA3EUGr6MPWt z13v>c&*vR{7JL9)esV5%Hu%Z~x!mi(c5ojueF2<{`xU3=a=U@^!F|EA!G3TEoDMz@ zz8)OE(8Jvg?vDG@;Jx5C!I|J?i*mW+!Owvwg8uB@0v*5P4{|g=mZgW~LcNBOcI29ZU_yKSd?x#WJzr!-G=MmsBxT~P@ zzXw#k9svvBv!Lj@+j7sh08;eaOz>FnI*=yMeHj#ez7DEhe*x9@hpfouNFsMUDEFH| zmE*nO0pNE6{s}w?_p4Usax{5v3J442HiD|pqu`F<-@zlmZBF-c9tVnE=Ypd1W#Am} zJ;DD4uoZXH8J_PkpuTs5XMy(w_cmwda@E`w>`lJ0F}0-T)pA zJ_)vfO)#nGb_A$;oe3)Zg`nti8#ohu3?xc!+f`of^T5M!UjeHA9|8{tzXpy4{{brg zZs+83dxOV;dGIt){5AkKgV%zh!^gmB;8WmCaJSV?_vPThxX%X_?oGjcU%+pHv+@56 zI14=XTu*l+xEJo*LB;<#sB-)ORDJ&#{P$kt;irN7;(s2fa=#iB{of590Dc1$y(dH~FBXBvfR}(O$Hzd?`EQ`&wG}Hu58Tfn*C7eUo?$371?5j+U@JW%0E;8EZWpvv_nQ2G56Yy%IixO*jd5$?;uBlR5= z-%sif>4ACNB~aylJt)4u8&o@e4ivvU9q_-P(jRw$mt!fI$9+k_+d#GRBf@ORJ;5Gl)M-_}7A)ZI1*d?w2K*X03HM8&>N|Grf_uIjJaeoY)4n6^jUw69L=~4j2&x=9TXC0{T*MpEIcR#3d zwOr!mpAGJhdsV=TK=H-R;2z+o!TI2~K=to^U*r5c3(Vs#fhy1ILFID?sQP>k6utid zD&F`@y}YM@qSsa65#ascao}^{iQqw(c{{HG_5C_f{P%fK<@`OkGq}^`p8x*f?zm3? z$APDT$AeW+@$Lif1)m0Y0+?2H`TYbu63oBW>Awh)T1H}K=2+T(FheETdYKHBf~jwgY8 z;=TYp1iT772>c+Za(orcgWF!^=}iDt{%PQNa5eZU@N#e_cq6F#ej8Le+h6TC5mfjE zpz7NTsvK_w_X9r;iq21hYKLEdr-56)!M~plF2OwjN^U(0?g;(?RQ~@3#Sgn)@_pWp;=+?zeU1z-#ABB*?> z0hR9K!T-mg=(^ptPN!DzFx)4DO1BEC9o`o36W~#}zXuk;ov(AcOb5l+{h-qOAh-;C z0#tj9zuwC+6I_V944wu)2p$e@cY~MrNN^nPg`oJP51a&E52`$$14ZZOLGi(kH~Jj! za8TbTfy#dcsBjmB@3(hMz9V1Ab2eJGfw$AMVAgx z;jabH0v`fZu07u7^gJFE-8(_i>2`1d_ynl-+4t?vhbM!|e+X3l-UA*Degd2h{ti?+ zt+#mlt_8(6w}DH+FM|Ex*jqi^8^AMhKL*YO4}6Ea*MMr5Pk?j5r$AUBxBol6Uw;Tx z`F;lWf~~hXeQp7j|C8X6;4bg-a?Azg-Uuq*ec&|kAK-lO$lF~%zZg6Z_h-Px;6ZnI zxIR$zyeqhW65RW}8<~v%GVoOJI#B%h40tTqcBkjt4Q|B!4sbQN_j}Ooz#(uZ_``q) zzSsNR8gM%PSAoj+^WbFgU!cm{`ab8&K~Vg33pfk>8n`#O%lo~3CV=9Le2de&G1XZqofGY1UAM)}o0!6P1I3BzT6y5Iu74HS`2yowfogRz96LDV- zD*w-cD%Y<-^_$)9^ZaLnJLB#H)lV(~75;iq<$nlNIe#78dwL6!S4Q0?~zaDQ;@$DF=Lfv?1UD!4Vc9GnQA3GM)10jgcz z3@!&B0}liDdC>d&Tu}LTfK$OYg2#Z5fV+c#1C{>{AEyrBF`)QnF{tui0E+MK2>zSE zqi{bDs-5=#1Y;LC7u*y42B>_V1C`F$PkQ-|2WQ|O0Gq-4!NuTHpu!#ckmtVuJP`MJ zpy+WasPOL#?yrK=aQ_Kh1hzfw?R7Dza@`M30e=Ci9Q%CA*t4{&yrO`dtKy{?~%XgAajQk6}Ix z?vMLlk2rsf{j8U7KB#yb!2`kT!Ck-)gQD+eL6zeLP;|Z%BDlW@ zPRIS5;6L&6uHW~8>fdhwRn9Miv%x=tt>96QxjbqImEWraz7teGdIX#d{uUI!9`pr| zcLaC@?(;y^^CoaC_)$>p^EFWP`6bv4Zu>=-=dIve+7zv}7j2p)iYIw<;_4JzG>!3p4l@uQO)`cLA0EZlLHo7F4;81r_f^Q0c4$w+1`FSAuK7eZYQD z{Co|les~9{`acOO{0rcY;EP}Z{3ob*E#L5Y$ZSyUxDr&peW3Ve2vk0|fvVU0K$YXM zfKP&|&rd<+`x{W<4t&D-;RNumG4MNhF8*76%gfmgzJz-N*u?h@Pa@-SU-@nNJ?^pJ z$>lD?eb{%gfq?gb9r&O7l=H`<-}7|Fe&5SI34ABvP6oTc=RrhaZqX0CA8-4#hdU7b zCjQ5OGr{ej@p7F4s=wR?R={6^s@GXRbUmvRJPP-{p!ok;@C0z|kG#E32UYJ2!4=@m zU>o==Q1ssC$1aEGgY$8}9uytF4(7pUK=IXo!0}-7PrUyx0M)KlQ2px~@DT8Q;CA3w zz$M_fL6zr_pL#y+;7r_ifRfuk1CId@_?ee)B`E*9LGkHx0eAhm%jx4mmH!Q(`0o?o zYrwCA=Yfl!b-ub6JOlRwpz5{5bIw=G!FS^B1t-e?d7tMT1-9b8BH(@CWZchy=Yu=_ z!to+-8SbBh`+`Tm;P%(kK$Ytj@Nn?Upy>M-@KSL6FMV9O6BIpu0L})-{>sPcRp14< z?*rSxaldBn1zriR27e2l4KDl*eG7a)D8AnHMVBA5!IN=c4;~HvAmFQh>-9Pr6rT)% zQ^9+{^S~d08^IHQ7xX4j<@zA1j|aa5P6D_7gO9gIf(6`VP;`GQ zsC<4G+z0h~5X=m>s=dxn*}ZaMaTaGCx9OXmESV~_ua+obtX6u|GU7W zz~6yKg3Y^*$&CZg2Gt)g234MW!D--+!I|K`46cj7RiMgo7kDW6Ls02$y_>i5G*I+8 z7gYMUf_s2ZfTH(v;Mw5R-MxNq0+sK#!MWhJdw9O5f~#@A9u!@k1tpgb*wgcw4IYoX z3skw@4T?X14@wRkv6s{TwV>$p5m0n_8dN^}?Co?s7gT+(2PG#S4gUWG&%j+6>-B#f zsPw-8s{e1#riG>8nV{O?E>Q7*4T^5#_YHIa#oxDr>KD&}D#!l&IUUaiH6Fbg6n{Si z9tUo-zw^h5p!mN6icfC_Rlm=IqUWv$c)P9!PsDvEsQUgqxOY6z(_aXlhW|yu{Wz#{ z{uL~NQx5X-ycJZteFao~a(VAZ$AaR!%fJtV4}gl_InL|zF0d8%4?(q8)4^WfIiUD* zBX|z@ZcypJ1d30N9PjOa0Vp|oXK;TFRJ*$qWCX6w=`~pyXbq;ticsZ!{cn^3M_yjl;Jgj9*?kR8` zxEnZUqRY$ELG|kgLGi^u!2-D8FfaFdQ2g;JQ0e{`6u%#KxXa^nK!yJ>sC0e=icb!1 zbvm8}svT|s)$bk$B|rWPiXYD|xSW0`sCs-16n%dHia&N~^KzU6?uYvhQ2g;}Q0?_R zsC0Ip;)`|QdEh(2@!)?!mG9tb z{=EoF4%`^rp8>^JzXv4`_dnjteI}^!{7sb_OWZgV`p zQ$dYW8^Ke-4}+`0e}e~tXU}zh+W=~ud>B-@$ISEgISv$GoePT2?*P@mz6Yv&%_n(z zmV%;gs(!to^oDnXlB0hICBKh2+0(Crd*Z$i)c40g@nLR()AJiQ-*=i@%`RF_Y009C&4f#R$m9Z+=GeTnnI5^yf=*MgG2UjkL$gO<9yDubfyV_*f`;WU>YuLdQ@ zp8!?Qy_Y#I1Lxp=6DYp=CU`Em&vGBHE&^4KAAuS#_g^u_)<;eUJ8=I3RJ~7K>G?hg zDxH6WGr_s1`}qAjQ0@F(P~+;(XL!Fk7ZhKA22{LXgR0jNXL`TB22{WQ5O^~9Wl-&~ z+gYyf%mme*D?yD{H-nN3FMw*drn7xKTmbgqejlj*xce%XTXR9he>JFaq+t9{>*lzYCrX{tHxpKYg|H=hdM4%LAbNe+Y^XcRAPP`dm=sdl6JS-UNys z-vToS3KYNH28s{90;=5q237xK*LgjQ;C8rQ6Ywffbh!?E z75D_G^85@`KX2&?dN!#3{%uh0|95aXcv!F3|25!2xE~Jgr@;eokL`25IU1CFJrA4! z-UF(dPhgYJJ0DEi(Gz7hN;sB)Y; zKf47~K3@;G z)oZ+891E&F-U>>7JO!QsPPo*^!%M*xxZejV{=Y!U>B*NlAKnV?gZq1+%KJxf5}3c- z>9`b>+_(zNgO7lcA3p(?g8Nt-+hXCh+Z``2Rhi@_8Iw06qt*{FB}^CN~B=3sifr0@Xf4pz$p@4)@cb==2|O zTX5W)JzNVYx|BeDUk6J5T?LRds_?)&(C#lA471QD0Hzk%-ze)Z6Yhx)7jN<8a% z&fxh5X+F=hEAMKzeR&t3KEQJm@4JBOcu>!*AHNU3_;+!5`91iVjDH92c|0%Tr!ylB#3V|YJ@XBzL4Ej#fn z#=R$x{!R$^R&Y>mp3jlSwmhfsem~FcJo=l!GaLVjguRvL0G)~B;G5+mD*l*(hE}og0G=4*X&t}{Te^ZPEel7E@J>##} z{Yh(Q9{v3r{4q}l;r{^s!M$@+c>fpA-|)W+d_T`qyk84`jxdtZ@edJ_doPav^6fs} z58=HCPQtCfxx636JE~j`ahUu`4}A~*4+kHHirnjPF9a8Y-wpm3^RBF+H({|)|^fKzdQm}hnH<2Bbr*nb9hvpo1ajx>(I z?+~6I-WT!c?+swLznXsWao$(q_aUBpLK>)Gxz~p9zvq33_w5Py8lG>5xW5eeLB1cx z`=7u!fKL;4DbFq8`}qOK@cl7;1DkoiiT`@sTT}J|?k=7yaKFTJHQ)B&xf(zHO$Be@ zIfdsL+`EFGAl!5I)&F4{kh==Mzwmq%uRC~-!tZ#VSMg|$au;|ucp70)`^;Xj7w%;| zpW)Hp^?aKG{+sXLP5l_e6-ZCg8E* z+jwve&p!C0{+eDFk}&uh-@18DTeDH@$VSke}@0Hcs#)SSs~2fyr0eU z9sJ)2PUq3zPx=0_@a{hJcigWFj$3(O9o}aX_FuezB&7KmxEA+n!mQ(cd!7Sv|0bkY z0?*><$N!H!Tl4+_o_%>gnCG#OZiF3q`B`vG=KH(C`>%+z2)F*u2KT{z6Zk0j6YxVk z%XqKy{UF|%mgWxQ(O((=HXi+*hu>v96L|hF`2CXiKZWuI z@!N%O=kvUh_c!z0!~5I#{smBfy9WFe_-ouZm~Z;e-$PpRd1H8gFns=Ea9<9-o%oM} zU+3F|CZ;l%(ol)b|UW2>mz?pJLImy|7!flg5!Ap z%=<4xygdT0A?#DU{~YWHeu`e^c^l7co@w~s%(EkD{2lkZc|Ql#-yeD3N{qePGiwD3&lS<2JNa}m!Qd2Z+VD9@L8 zp5ggD&(`zcJDyganLOw4^z&TFb34yRd7j{Tmgnz0ucpis$x46Q^Ss30hwy7NpVaSJ z{3ZlHjTZ{H`*ptdBJWoOzsdMbl?Q(@y><9S`5D9Ah~GF5mc)G!zkPyV6R14CkKZA6 z;aLY;^yY{3?!hnCHeVr(q@16KX z*|TF^UjN{mWN)@TizpD1t69G<;CDcXdqO~^r94~T?lyRN$Fg(zRuD>zPZ{oy|Xx2T;t!< z;P{0&P1DyFt80e^@bo$=eS^hvU%9V4e_?5$+*R%*w8;%>P(6aP4m^B%3u;iBo`IUH{UnZ+YSYw2(&JD zZD^XVPhI66h*s%WEu7}&mG7z$l(P4g)>{&C_YAG8&g$$um1y1qFQ@ow*6xAw;D*gp zR>XA9NFwD2i``YSi~Q43>FuZForN;A4^30NM<{bIB@YCtE%J(DcV1nC$V2(|4TB{LK4)#IV_kKqH(%`Ou0X@Jy`v{B z)*ReWo9@XJPO)0^b4A|vo=V5Me2Zl;QF*oI6{3;<@**8J7AXXS9eRs{iZ?=|h_{M; zos^+k?O!`ktd?qvv#5AcxtAIdPAnMH?_4*#H6Op3BoL=vsK`k=J*B>Gqy`Pv(y^A- z?oeY-Oju*->{I8SWc;hPnc{UW6UKY$V7XVcC35eGk)|qA)AkF7MWSq_-pas+{6Oh~ zq4GefQz@y)ODRWBPpOAKgShFe%6|mPz??d*HUH{?4i1Io>09%V@~q~blXGp0QvkF4n`4V3x@^D9>_ zm`hg0zPzV4E)#jEZ(UzyeP3Q}HZ_vBmsnMj3lMb=}J#$J{gUw8yFid;$s+0dq9v#^?1nD~gQ# z#pceN7!2?8d=L>A1)sSkD+4}CU`44)0~7~J`C@R|Wo{_87q-qqK(Z1y~dQyEj*WqfCstfK~ z5b=UKWLk`=J*nTSLSb+NJ$kzSov}K<%5}rlnGmV+Q{$VcJ5r1Iq9HvhEV=2)kUff5 z-t)=@m}RPJ+HTeUQis$=^e{-?mS2e!p|o-o${H?%_R^M9%nKQ_=xQtGEIVuIihOkg z9Ne4X3F8!^43)GzLU$Hl$P zov>pE>}BJ6ng!vd6W0~2n(rz~nG4|(<=tio-YsJ9tr@}WduOF@!XWHC*s+%QJ>~8` zh`6Dr!kCGKpUx~Hl%&1F6reazE>-gdE2Pv}A8mT=4b@5OQA136sStO>H9^ItPPDjMxtj+f?9iiWyof~spR+hmz3l{X|H`OvZX|sgJe-Rs!1pjTK{7@ z5Z- zGdPR^;d$GNc5 z!+2{!QHL%pcZ%8+*M@sd(yW>`d%R!>ZXevBnM7@f>R@qj2*X99URci^8Y*it;kCEq zDt*u?)|W5&^=r!=Yt^T#gR+UhnXqY^eF)FkuRc0OY$f^?f=V6wQs|2)5JNr$wNw!e zu?i!m(HZPE)l#?gjqDhd5%h5|IBLpNpSo^Q%4VpcD%5ZQH4|#9DS|4~fFi?d7@H13 z+-)*f8moxtl#sCiK~6(%L3v0^Tp;>DYKUC!bGfB6EZg!6`cmF(nTE%cvw-Gsa2R&HG>@S^GZ3Su zXk;_%FHJbms0cMt;U}yey=%}>5P<`In3H%NV&IoLTk1@h$r>?fqaeA3=x%&Qd87K`hEy4tm z5l!lnX0ZxgFiEpoDy`EZLZBF?MGOzazNYq;NQb(BLw%-5`*bRaE=fmW={a;91lzh$ z?z#X4!UX+5z|qTwPeD*(OlFaCK0}$+6Na z+gntzOh9&MQrcY3w@Ari*bYGwV_#@LMGG8f?36VCrU?&=m6{3DK-HlR4UbqllpoAY zV;2$2Ma(H^3CaZ(B7Tv{C}kGWBXl*W?`4Z2hx*LSVg_L*d~P!_gF=`&ObpYJ&_Etf z$^-Ku8%Tn-=h>x}AuD4DX9}e30I7nhrO;3m=GNtEum{auRIo*d8U-W29>NVWN@LxT zx-wTw0+yVHp`Kzt6A>*-OOKZK$RUz~gdnL#lPuJE>J2{RTU6btW@VV@p+a}|1(Pi_ zYgpk!MAg!07}_dY21?Y1S;XW#-`AGA^=_*$A($&y*@Qwr>1Cz9j1H={iHnh;rXfcX zO!|x$Tar7<8}aK%=9sX~5V#>QIA(fV?MMYV@-$tMNSb>ts&0oCwi2B;BoGQ-Ym6LR zi?``|dDGfSG1$N|nv05!P|44&M36q>6)5h?w#~ z66V+)Lj$(t7ZOP_Y zT|)!bs#=ljEZTIhbWxcxg;dEzTpJTqhuwhEoRVe!()qD!P?08-KByQr7e^E}S20`E zI_tdR5NMfVwnzg8FsWP6i)zwCdLq%5PCsw?$g0lG- z6su#X$LO(98?&tNW-n}EHP+{0Cef|I)Ot}Rqj$rCXdZFmjRBtg-29r@#3fwQq13x# z5=iYQ;g?Qgs`(4cMWma}q!DrhQfXqE!AhdBEzUKfm`=jTW}P+W=INl?HB;_FdYWMv zcJZ~JNm})ZwMhi6Re@>LhI~6StS;Icvs{ib#^jGL@I@`VHGjU=1U!q>TAqYvG86_E z=E+Dul%e`>X{V0;NVYSKc7(&i*+R2ncIjvw`*Yl964 zq-LLzqGqQt#V+PLL7!G!jn}AY!IHMbkG>qT1H>f7M!)Bd{L~x zRV}@A+tR>9Q+vvNyklY@2WV)@zHg>%+<1FDe1a3}TcBL5z$NWuOFi`k0Uz zo%1d}V$Kb+ijmB6hjBPoEBe#U$!ddFIDW}8gshFxCR3k68m|5eMD4HiAtf#Iy7;y{ zt&s!9aAhh=T}@S;#%(#hqm@X;n&C5dl5MWgY$hn;sp(c?%PfRRAcTkGz#RFpv|Ob8)r)S zwUt3rLo(c#%{7GbNq@3Q2DQ=#GDc6vE~YQ#ZdA%aHy351vtq0bBvZ96WBtMRP&K2r zWJ38Kl2U%za@z$_x(NNc!RK~cGOzh$#*;X%$cilu(3Uqx3pOO%sm5ptvs4pm5G58@ z>52_(&9k=f>3)$Y{~^v=HUlwP$fg)}IJOU!u@^uq+e}v5#+|;cFz&@c8_XuqiOBKQ zH5*_w>NRXLEW&CBm_NfQ!QN$RrY1Algr$Vk1g_`OVFAJ_Z`wu*kyh%wzONd>#%QcndGMOLK-%vtr?1GfbTzy#6iWNTUS5ov3dG`}lGKO}+q~7F!kUrR^&krh5oIo@RrIq( zwos~Guxr}*-;l#>^$RX1xn$MU_Y93{^G~T`354N6sYv`4+@^|=H(RJiAt$+bli7H* zpreEmE$X??a@r!HZ~T$=J)=`Go%UzT#Hy5b7WT?;9(W-8*~I=S%a<%3RvP;fTi3=I z+rc_4a%TGCHVW%mHRj=AacuI0TH^a2q7g2P1H(e6!*H@VXp+3eCo#=h%}HC<%AFB5 zd>Gl?UhSY#_!gp)f7ly8ujha>LbKj&yL4H4V&xKB#D~CezK(P zr3ge;sR_5CuOnELQ!)qjIcWx0s$++%k@8UslO5FN7TLr@IyDg*hVorXspCXt|+sOxi(;o)m)MQ<ZvWwoz2bceC;b~P4{H&15Q^3Yn`Hx=5>knr!9n+?9%+iEzlk*`ZZdpJQ-~RBT8r= zQ$w^GV~GcQJ`EIiLuQTEa^U+VOnT&jYfv=Ei_}F40B`Q#EN7`9c)Xlre0}*=ekxtPCg+fd(CptRm`N4oFP>C7!yQY$X9GNvv4>QW-i zx+Eq-Umq4EPNZsrbkmh&d$MzW5KYI-I8DHU8=C`i3+!_zC#wC(o*gxiELgx%tZw>H z;F@48jN6w?8IIY}K-nozjESZij%gZKWh)0O6;MyRk)z5gyYVuf@>M0B=Yy>Ba4e#A zpqA(mHVckx(~a^bnt~lEc48&$5i%^DY^}E#Fco!4BP9C?qf(oxBmv`iV#HI4*q$>9 z<_1DjdSlrvT1{nz^o<7#k~6}I=qKA%xrJc!q8sE7;a+AJVd8|TS zZttibXMhzvdT(HClJQMTHh_fI^|iN}FY;>jWMvweV!P(eNFpsPE8ViurbgbRA8S`; z&BhuPC(V0mO3cxMVma2*?hwZ(C#MNye4&1oz5D8IY*+3^Ld0A$f#6T1NHOcV8v zRtnWka;&Z{GT7Kf#2HT3Y%V6tWglo2vy zl9SeVb9oUsj1Zd(nT$fC)CB4p<07DI^gUakW!(2Eq$)0ZbaHgp+%~e&0rWjXE? zw`4*9NUC$2$)SlV3t0^NMd+*zZ_pu>F%4gKxl$jcy)?KU12gjoO_F5LughnIc9bDIjuqC+XSjhHd&-ue~GPUedf8C?S90fuFIPnj~&%hU4hm2P$pA#%eZ z<;>I^vU*ws3)^jyWvv$GT!k4vQ_O}l`L3zHS15@eh!o~&l&Dbx8JU_H145sY<*07a zJ?eO|0B*9iC9brR@r22=JRA1Vo3)q1C!+lr`AP$7AuDE$Vk5c+W1_SK)2!A-dW55A zHV(Dfx2aIq21e)`<1yjzgZ*(0KMgwShA3C}*7|fWd zxfSeOCYHnsu_h_O8^tnl5oSDTNJS2zYxMuP?<*QdHqyu$^*UC5b8#APzI2+@#EpyT z$*$9dKDNNA!!J`w3ztq(OtrE`gSCeGS&R;q%nz{%%+4e&ETcyFf*oC#Zj?Erl56-8 zdlOQf^QzPyLTOOQE%XClIuE6-0&UhLTIrH-=j0=I<;43YhWgloq$M=AnkQYGbwy2) zxC{cb%Kwy@Nr*HVjSS&ryQS#ohh*jO-J*6n+cys+M3LZV$}NhrEv|T(7FNZ7z-ps* zniA$-N-x%@jS#w>q=(LtVWq5A8iH`=P|y`Jlk9M%5GI?6TK8d#t>jC*hbXAwzSSiR ziPij+{QUCl%>_F8$o!&gsL*7dNG7N9?A)TTYuy_yUSfqvN~=q5eqVqM=_Yfdi8@+E zn}?DxG(r&QDN)i@Xf8d;Erz4bOcOM7r5I$2T9nB+>}dnaV#XnpQ9&%Yyf-mJD_YNa5z%!7X=Mdbugqb`PU}2>{3S}6@x<4ma`nJXrZu) zNy{`NQy0^=xA3gR=&m?jf+A6Eel%5jQY4rRWrC`U>Nb!d0Bc1&T~Ag;>g%RcPu8wE zN)^y8jzazDxGZhOzY-8iLc7j^fYl2(LhY!Apm1SKEYFBU=^J%Z24usnQ ztHpkw9^)5Ea6wk-XfIL6kp|24YU$MxDrFMGPb5amAf12`m?$45NF&L=q|sQE=~L-o z*Opu2HwtB|r|~oCnaQC93%Vh6WIDR6>~Kq1++p-d&D8m@)tiCePgvBCbSwh&Bz!t0 zq-?D|RcR(EsU#;YSnBschG3ey_{_$pK8fi?oGT-;L^PH1IZlw#NgxTRa&@8X9O)E3 zn`0&}O~@RjS}Lp>S{;tBN1hv&m)Vu7%)xw)Fh%0s<_Rw8W67+}HKfjN*ItsCIm3{h z9LLttq{T~CNK7;Bl;~~BH3*$B?0Rlivk0ydHw-L;a)@9@pOpTH!7V>&@sPy&b0OZQ zlaeA;lVvG7$v6aZMrG6*N2fRaPMk*ZtV1U4lFc)26e1QAp;S_s=uYfC852$><7Ah8 zqbzNgy<|@>QZAdL4-y4mGbtFW5kHl6NxfXXFQjI1YjzCBufDD;K2QAQ?iI_flvmo{cNo2GTEwD!>yUFfS6 zY^`E02C-N8<&&yODq{l$w+fFen>tK7T1+@(?E%pP}Clhr|+i5 zNgGdVL|9!O(QGoTCDRu1D+6cQ<*ThtP6vz=?PTZICplFx60Bg=RkI2>xNbrrs}a?v z*eZZkj%=R zvoRmr3XH5XGP-enVo;GemXwmrdS{}#r|M{ysgc9s*wf4GNwpDe`r|`VtT1cTgNV*} z=TS|j;Yy0guU0+p+mqaMFv%?kjUtJUIlIi&5XQsRq4sd935ta&SB9E#myr$$4mTTS zyHlp8$9=t}LT1yi_m-DQr7GKnHA^2+NX4cMhL&t0v}F1}azU1Eej{dKt?z3{8JmHi zogGGDFM!56G>T-<8ZiZtKO`CGZp{$9!n%9oV#i}=wr{E?gIZP@m0UIl6XVyUrkx6j z)QZN|#%-?t;bO#0dbOgsRtIX-Y-#t(aGCC|YFO$tv~@-~btGqVQR{`raCwugwvE6d zHPrEit_+2e*tS;JxV27C&Y@(K5NFdGYNu)0hRFZl6uFzQPVG`-7Yacv4(H!UOGWhJ z`6WRf%|@2dBZc)Qi)DkPcEZ^5Zy_xI%GY0$K?wZYH*#j@N0y{~=)?kB)0HSz0bzh~In&9LJ9+&@4 ztPe#t+I^A z3x!G2(iiue8g_yt7dT^SGfg8}IJondQBoImgw&Z+(|P?oj_J9LYd*EmTsW?3w?W(0 z$37o-&*o#YH!hncgT7xu2q~@1oyyQUv;86RFv8T-nb?7i0^xk?g+>7KU0Xx6}nIlE_<&d|l3 zAU1DlF_KKI(a^jdrFI2&pA^~N>VcJ=?qj<=LPygv;pBig93(@$g80U1ql~Y-h8;)h zj*6dKss-~t>}d4(I3JE_`f6U>V@4DbMv1i_Z&;8t{vuyYEi(;KvyC#C0V9n@b#@)Ohz!{ zgl)d+f6h(ngl_H4T*5Flm|(R1<8(>->6k=Q_(fJ zUl84Z(T8^~WiF`6c}-y%bEgHbSzs2v}6>rkMrooLqB4CS9rbEBk8 zCb^8wez}biG)|D0WfxQ$tu~TtI>*gi4pHkL7sS$oGBS=d4ud5s?pXIt)-h6Rq%qeU zmPFS~#@St(y1T^&tlEnXM4-*Y$lS{59JK{;&;pTly$PGvMUkSDk-TYlg6*TxPlZj) z4t4RZcW~W-&58yP9{dQ1U-VcP(0;JUFCfr`zUhAo=K~=39NB&fHfv0*DV5|=x-%gO zPo6bJGoc=8V@<r;tx5`Ntz zV<3_-a(IMr|AXlusq#BQ*vvH`3GuClDkWKj{pfYF4w$S} z#p-9Kc{Vg>x@oou=ACB7RDuFv-#|XqG|{j)X^+p`&XZOxlU=e^&#u?7o4OcjXggN7 z5w~lLJzQC$C5r|#kA!(@@{czO*-q`znmal16gpGUteIO>$LyxMtOVaoc8Evq1l6JS zEu&?!AI~V3F~)PVK_|+F?$p|XHnC0Cn_+&Jy)~yPh!KTvy!a|@LuLnd!o@pH)bw2j zG9##G|Hi>H=U{YK8|P+1st~dnjWu%uCe1lzuJ+OfDeDLr?l9M8*HrFl18W+^XY^}4 zj4$0ZZYurE5kkZ+(J?(R{6t%q7Me}G$N7kok9nGWOXi#d@n=gio9fX85ltqdbkqd% zg-^SZ1NGjHX5rBkk+ikU5{rUzooRfE9+$-}pw2H0S4hlu5apr5>8I!*P%_Vp!hrLZ zWk2z+Kr9$!HytV6x*ZN0ysd;5b`)vtZBVy~Ayd#Cx8vI7!L{q5%jeBmv1HluoPLTc zw;YKI7xEKCo73%=+pZqtgIwl4^pIHDTA^#(Bf<;~?S6U5w;b4hisUR&XiwNIGmuC9 zu&pUv$`dcqi;5*@WjL;LB58*Ggg#UC)4fQXXo^?0d~~y*ZYGka)N7}H=5uNSA3dPm zjOVfGF11^@{O2+>|8f;U&9q#`>*!%aLJ@A)UQ*raEWM5sSektM>ZJOCb&O#>6kimWIfbg9A@?A4{5xwzg)r z@<^M|oFHBfqz1P;mYJ25P~4WQKbgd|OMJDrK@?6e6B#Ll3D4LBe(boWx5<)aON5p? z8g72U5+5U(;%wv>uyV^ota_1?)oiR0{3mY+rsH6ARc6Ip6~;|Zb_}vRJ#v>ymgE9D z)9bmImt`+8kMxYH4g=~E0mzRu@b+9^=F0l@8e7>8r3SW8VJ86hBJ(3;^n?}hykHBg z8VsTnb1RbHvI(Pw>5{{TiOlYb70}pjrV1-%^rCPIJMLx5DM)rtB}EGz%~}Xa$t`5u z#GGfPsM0aX#WIBhkXZDO>~t> z9AfLwy|@XJt`W|{q&9K&r3Mo?$Vzf?&`^2m6fDX*JcxDDVcr>0)F@WtN%yc+Vz5-l zOA@o;Cl0kv7OnVj$59XyB&IGFtw_U|TT(=P9F`{n$LJ()n@1&vXkd2(lCAW1=Av=h zLO*I}q6`PeZI9tHBW;RTKQ^gBypURA7;h};VNzq9Q1~s2WLX3$sUFoRRyv?0liJJ> z_cCH=*RuwmVNraJ6@IORdeA@kSJS`Zpt`D>A+5cIh9{8&l0|{AvQ&ojiOit2Su$JQ zlVn4oV0QcQ1A2^6vwjB@gEc>ZW6G)D$|J_IqsG49FwEaVYF1Q@EpBh}S%Ge*&6hcq zcp*PX)hs$CMB=!^N}_NWHMfe!`(Dnv7h1#_fwNFfx~J;d7v0p$2N*( zJDX~I09y0D3Y)9H@fqfz{O&!hOS)Qtw|50+>6Lc5qqr*U!-}WoO$|`_7tLESOS`Z+ z`)Q`vSkSgy8W+>8mR(R(Lv7TG41>WM!d^nD67cIRWTP%IOfJoO;HlpS^e106^DX&DSSyODGn#BvE|kOID<0sjf2XkHS8gAb}QH| z3}H_Yzz)PPP1h0B_8c#elZLec5>QQRt3jG-?KsTEfimEmX%!U9-2IG z7e6^5OIL=I$vzQFdRX+<6$|0#nHYP6O(cz_%IOqK3|^B}NUTvj*3qKf!vy0>_QDPZ zeKjb|cGC^ji2H$8_DN~(?qi}h{4(oIxl@U1ohQniW~*!M$NDp}VW?Jh(tzPIW1Dq{ zA8=^!IlE=C!DrJnd^l{Fx_$Rb)Ri-2KTV+)#4*AMfZC;r{-)FR@Ol(mY zv1v+@gpKRQg_=NUYSAQW250PUEA2{eJ0NeWpWlRn)`&IR2$);RxHE}5O$r*N*tenL znuesR_A5%G2MyazPz1F=#}DRBtkoMaz;U zi}EZzt}71c_K%4cKWrchDqBl%*6cI!fTr@K8&v}@n}*xso4lm&+g!%K)vh*(kd}lg z8&Uwd*9D!B-_tYQ06S7>H3}B`Q7BXp_Y#1oV^vFjo1P)p^ax4c7;UeqKh+|_HPC>6nMe{6KuhhWff+JKToYwS(diEtU_)w6}7$HrW3r3YE z*1$kCiFIx-k^aO04q0k{5~enA6sp-#&--E+;Y_BV?mys1${GX1uec<~Ng!PIyObXv z=^A_(9*I$o+tu~khj3VO0eeVM9~1LQua>xtu0Cr`l2<4SmP9uaXGEMS0%;FT_S0gn zI3xb<_gu9=oTb>jIo@@U?%+=kNmzS1y&1RDL|hq$PLW867_1I5b?5DuLXnrlPISJk z1Q5O90%$~b_^E?z5yI*1uzV02QN|B5MMCTI^@!P0%4!*z@Yg(dVpKw(#(dJd0#5 zCe;n?yh3dIIQtVnl8H@Qe4Q6NiZ-pEffP|AnX(k5BSn+hgpM*$iJ#(3f&QrZQusYj z4-jN)qad{t#~i;l9c(qz9r@wtRZEtxSg>R<8zfezKlU4bDZUVoe9fp0<}{pQT9mG-VkiMmhQLKV!8)94QEOA~KD(j~;0$0VKh3R#B>%?4~l^F%3DNG8qnku%X zHDd@#D`mlFTUxFArKnuUAkxB@bTlsuAJpB4svB~NMj`&@6V$y}Mvhc2XYSt0*}Yjc+6o=VX~nphYhWCSM6Z=G6LTIZ)Fik><}9nO zEnQ@{7I4W`vR;+zt@3}VqnhjE$AERRl->?qAa;ArMy;G%4|29^EH+Rz{;Ya11N-7y zPKTRwB-VkAHpfAHHX>Pvt>dO->TIQqR;8TprSg*o4Vlu6q}hr||7T6jm4ZkEtCY6; z`GlvE&&i=G+9oa(lFaNSF`Y_zQqog%TxYhvHc1`De8mXmz0T353nFc^TQ ztM5tPP!OGL&ysSziQ!N=Xi+<4=KM4Maa>C0XWAHcJ}X;=1)T+SKylHujO{HywT=G@ z109o_5Q?0LFD$Bdmpcoyhq|kU6_shps5i4(gqzwrOHE6c6qcb@D5V1G6L%m@ojm2Z z!j#E{DaYog95ZdoQHM{SI(c%_LVotP+x0R}CsA>69wQ13U zMf1|yO=+9lG)K1|_mMxwg=w~iG08NK<29w@s;a>gR<1ayaBLb*^_7qM+(DG9Vef{RFo-p-z z>~Z>XLQ7wM+zI(96OV7oZLb!emY>JQg<@}U)BW20$nV`0xm%3kp7VNW3vBzOhv>?l zid{3)(g__cjBJu-E9D2UF64)RG;8AqKn9SGVrPYMz6o-7ls7%lHv^Jk6xZ)muyL?y zdLO4d21@43Ng2j{e$_%35>~MLphB@tQORj_MAGMcS&y5hXM(NiEUiIsSE`MY&{k@F ztBvvKJ?j3CKHMmVGS$ez^`H7JSEeTKrs*+}H3P*>AKEx0AKe7)!Bz-` z>;vi;pEBkB*=0Aypfg@>{Yk5?_Km90QSKUm=uOjM7g{-K$Am(Cn;z=bPkB+P9)3x% zE>sQOX=w3$Ip}7l(FM}NDg(PVTlxb;kVACB)*a3JT(+w01*XiRepwu!gU!B&pefv-c=lN#Mqo?U-H0N0VYG$)NcZ)P_&lOLsC0grc zzVqq<2oGm!ab(l|#lUa~i$@<;;HJ=llVmf|oZ&2JXml1QI08u%d9PO_zZ10+IZm+y zi)c>CJw?>4f&d|tT8c0!3Dm+8FcNvF^@>!YL{gJl_?4;F{H%m_k!zS7IN!1`!d(j9 z=NcD4-E#EY)8u2vQ%bG***z8UgBr>DcsO9Gk|iHw4DJW8yKMbqraq6}qic?=35X?0 zOInFAQ1CjMjYKAu!@G$FZ3bbjfk_gD_Rf&8chep0UJ|EqV86asl4a+*V_WkJnL3pR zhp<&!Xd~yaL|tn8j8hTwEgS^L$x-#{#HO&LFeCk~eZ(?T2n`7llfC`M@^+fRM5Cv} z*^SZSPgQ&vV}$sv`9-=Bf}aGlc`avRib{6f>{fmiQ&Jg8sIv5M*}6VJ<9T*@fl(jw z1*NFA*BV`8r)3nvWYQ8jF3P0z9GqsSO$$+8Btva<8$ffXByBmgmC#MIAJ|;kH0$&Q z%a=^cKYGVipZY=SaqAj`H6Pe-(u-o7j$z{{-HLgO=PcNC<6@OCo18c) zlQE^$21XkLS!FUkozG0v;cfL91-HRtcmb464G}cIN~yrLBn!-!1>%j7}9xyGr#T-rFSx##J6zeaq3AZRadx=TkTobar_ z>cS{%E^5TqRU1@9O!`Tx13C5hhRAl>^-xkvvm*6$g7gY7i zo1dh1hp(jSy=i-!ich2UY$?xU&(Tj7hUoU5#1Ae{z#L7v@pjZGm6#Ws+lMKCm&cqi zz6GDTG-A*>NC3^7v0w<@n&}#BTCMbO@&YlgOP@ONA83boCF4I-4V))|(nM;b)W|}HV8BvPR>Zq^-mkm1X^q8gHz*2@7U0rQ2 z()KgByL15AAORXmUI+q#!{e@%=T=lS`mkXyOnEJ|NpnP|gc~*FcEKV=hj$RKr2(d{ zq-YjQMk)p-@@8y8v+IH=2tN+L%04=XkO@V$`(TMANd*gV(hVZGl0Xa}0rdm4VKjjN z8HNze5&@Y}7oY(e2H7%6Glzd%AjtWG93C{Hml(S}f~W zkC3^7dN2T+y~jIV_M>ZkHWx`%VwloZlVNGK7Jj!{1yO1NN)0>>eRTT&5A zp1RR5B+s^g3KJv?-PdFwyR7&DWcy;HgWJ9+HzZS4CCx>Q42Ou<%!&iw#VMXM77Z&A zM*z8Nn%1Md+^mv((t*#C?xb)3k6C3}kSisb-BF87<$`oH#Vu0-^R8(#iQ`A_@huhA zM<3R31J!&kDv>f!Yd*DX>Mb0`96kv!RdsNX?XwFQAbreY*HlHK5RHT>my~yB)zs)NL8ME9WS^8!D?->pJQ!mg^_99fKYTb z#J6nt%w1KPfg*c>eVhm#mhx-rEk0ocLgUlq%YQ43Q@UG9KANPS!)3MgiJ;mS3GG}& zem?NMyasQSx|2RF`Tt+RDQ-)(!U7ZgmFj)LB+87wj%mG%)=`Kt*g6{K3-*HMwG$VX zcb!?Y(e^Swx>`fi7^8-vrYWs_!4Q$>|3aWT$-e z9%$Oh`mI}~M<`dQNhZt9R|gi(4h+N8is3wLRH%yEvP%R` zweiV2L`Ka!-bDynKGCBF5`IHOTgd9N4r7ef&Gj4`(GzPp%5#=ci>zPSFaE*S@xCgJ zCCAt6-)Wbx7wOqinR#r6Eb1hU27ysyure*`abT9&9#@`gl9Mg*sF6nrD)J4}n$l6P zo*gUgtly)wWCoDBfwDHQ7(VRsXvikRxHm?kX#T?#K8j<2u-|*Bt2xW>%;DU$OtDb5 z{5)Gw&wZEr$g6i6C&Ca^Tl7)W-NGngYlt>|l?EPtxHVs5)5nnRDA(M*SBH9rOhrYw z%bLrU3fX!qb#il9Q9Rv3OxL@ntdPvC#T#m$-c1j54q=~A`><-s@+$AWYnWox_Dkn= z0@bo;EisZnql-Gx(j^(jfO_6(n1(vOEjXpahUE3;b06S02(>ZL#`(C0G(xm&&1^Cn zrC@D%V=w*oWSDd&R+qN?JZm@Y_~6tUnZlZU)$U(kf*qw4qoo>EO(hnrWmr-$zljNI z3dfwaM9El*gu%7q3VTa9)eb(9nl({9=4Kk$Qm;#G_)s=#`!-5q^a5p>$wM-5kq7!y z7%O@j*CZ2h3;4haMvJin5nGPW2;6FtSkn@Q)69dd9qOO5PKD7h8LVo12}LzKQEefk z2_Z~E!hQl5`kQHm$WtCwBnkRQZN5m0tjMAR#kn9W3J4UpCrErUMQkW@t;AarFQt$P zk__Qpqpqzw&F7=5D~7>7SQ{o;2ZSOf0~3u8ex|2lbgmiMlJL;3(SitaM!(>oA>5rK=3cbhDv$5}0o(+OYw+4HFWxI(mJbj+?E0R*W@Q zO&4+FewdbpnFeXqY444+jnNVwUDdEE+G0H$_7FoRE!{i;kEs8S(0OGEZA6{gb}@sg z^H0JVbvnkdp~V)zm~I4-SWBqd&tp+|=mr68>)1_7NJER&i2@J>W@*%)GH_8l&6?I%`j=AOJ6 z^-*tp4{D~>2n!=;YUK04pfIU+mA($H)9fr_4xHDMpS!5wJ9FyV43?zCoFvmZQZBeK z9Sfe@$RfWKxS$hY1gmf@j+(-HihVW%_!fqZRnVeb-27<66Wy+6uH`vqLQ#kY0c5E` zk+(*gs8y2eu%21)GfIR7!3L6Ww3QF&5*F@UwWUL#gdSguR~9<5w90jkT+ zw5k7@L|T&Y%{;?~cketcVdF#;R};mFR4eNBDTTel*>%3`wmiRW7Z$au*9zRAcTl%i|e~uZ8rj**l{1oEX-(FjBm+!4{$$R@?GYmoua0$Uztx;`%|OYSwAr zo|x?nbMB#Y+i<|v4BLgkNdjaf`a`4oCyBw(-Yh|L$A;7>bHrt5sTW;AW}trE48oC> zTCV(mwVm5;TvvMM>sn7y2_T5Vh*GR%dS(>IhFYdO0(2Tl@l4QY7-h0VmPN7%7HL~X z-Xc%XmqDYiayOUOi_P!<9oAv*T@+w6zoc44@5#I8GU{k`ss3OzI})2@`3srQIskp&GZwF{#2qEWBC#us%<} z*mC~2)@}j2;_?iih}ysYt-~q@SCN$RgX8x2%c2tkTr5P{?4tviO(x_upSLvr!3hgi zz+2dcs~w}SfSg3(CB;B^7{oU+6)N(dcJ#OK&v|+Xw|~n0+?Hrjn$Dt1KPamex!nQ# z%cO&1WV-wOP5A=g7oHs~q%(wgs_IrtgN|5%hf3p-LL5BLWba9JRicUPlQVX{6r7Tg z4DX=8EK-9^M-$Jg1A^-3$M661kW91TH5!2H*Bu0^Y}`IQsc5LtU|8{BIJs<_vS=-x zvf*lp-oNCQ zUBC*NoWR{=G54~un|3D9y(*f`5Yx+WA&VYNX-~IYjm(@ZNvnu#B@(wtkn+0=A9FJq z*F6<$k!s3b_Sf}O_jg6`K2cPfC=g1Io&Hy?`jClYLDugw1a+`5LQ-zo;{2X6$%H0$ z=&)9w(wCNy@SLdU53Y{Pu?0bGI0jA)88r?$$g@giY7Skls)I=u{@|giaD`S}D`9eBrr3qcZa(Q_Iil|M2GT+Jf+QXA$(n<-m`kcC`%SbR5khXK&(9W66 zhAi9HpE&PBuKoT0LnlFW>()&Lp9*WqXZ7aW&D&^U;nFNbEvZlVCf5g-KU0wS0;a%J z-+&j7&flF~kWAnF3Ku;#+!_~|`RdZWski!=G3=Up-foE01b5hs*-5$yh8~)0&(MDe z+K$%%04hLePcix3w!IL9`lQj9pE6ol06uu_vp3INQN(`z!wjN!dTc#V{Tj1qbunN4 zH`vcdjxwG98XIQXJ?o5ofFDNEmMaR5o@}LO>!!F4M|gv$O-aveSeyCKeF+RmL{Kr~ zC3RaZ66QAGP<5^CL#s@fa7A?!)bL!pYAX`z?tsEo+c{poqm!-cBOeOArXb`2$A z>;xK7wOlj*wZ>jbnMVg~nlChZ+!eEpfMJ9>ilI>zl$S*zwkHyVKNEV=gHdh0hg>f> z)Tj?Z-=>oQgxQna6yA8&W49lfa_6UQwrr(8IETqML$uHWF*fTy+ii~X^R7!oEaM1k z>lA;Ioye-pRNO4all!UpEp@NpzBK(2v$%p3Ggl0Fh+_utpBj+((TwQO+fVuv1{jwy z22a#O+VSc*U06tsI;7luHPb<5-E|v_t=$8RA&c)1(J9pU#HhTfc3RdihYg>*j1d+q zuJ~(gjGX9$rQsi^!RJ0i#5%>)9@zTw6!XehpOe;o|nK8bJdZ$>6EggO7Ksd z@N8w=uct2NEU+7I$?ONaZqU;CnQps`aAXt#7Upfin4mEN-OXQ^C==~|U$o8qxm zQ)Y*u{w5jinC6QvFiu7AS$b$(=Sa!fAaKj;{Gh<}r(nZ7^eY$)3n^RI)@hM)3K7Cf zr}i13L;H2~@KsU+2q^8557ys(Pd_0#2+)YgAT`E>ZSKLT)g@VR?xx$1%ha2AqaN!Z5F(E^}s5v8gErf(;b)SBd zCDmdZ!8vy=pA|JwT@uA0@b=5x7&7ISz_y!))lI~0aFW!EriiobJU#w}O^7g)NKIzQ zK?qV2aJ>!63v^*LNX0uEdjHm0G0MNHWK(5YW}*7 zMo%UKCO{0xq(unx%<^&dK`w^K(!qgMa)BD%29xWW9R7RR?|Uq>n|$p;>5 zZ$wPC7PS6-Vq1sq`*XK}73%1bL_B~f50v*=E;s4~6|M4+a$NT+mU7uv|1h`WA5;`( zRZYOb#mdgjgPS*L#l3%I{i$juWM)S;X^;6QA=oKrFVQ*6y6aOThIyiv256c>nFVL2 z!m?8toLpHe2*$_)+;xO>fU_IHBO1OnKM3cHnR*#9Z7p(0qAc!Ig~q{~7F?VVc#aXx zP&7l7gH5ml+mr<$r8Y(FyJl)->5a|u)LQ~5KEdimMn|HUWvGCJ*?-3aA5yvW8vMeY z#u5|iqj~qno^ZSFDYCEA2P_}+Mr{hIAaZaQHs-Vu?0&?k6CPuSG(XZP=4D3Nr5Fy8?ekz|3F{K?1LoDBawGg>$PTCJ!16zBa$R z#5g-iM;ZwbvN*?zhf9j9CoxcLo#F8zY=^`7t1Kp1?oeAoj~mF8@B~Sa*}KO12c-tk z4(Sc+C{;ZMLXlc#8;+KS5V|3J!=zdwfqJuFoVdF4`BKHei3+I1E}(*v3fP4FMK$$1 z=HclOcE$kznv$8Bmg_f@xC@z#~XOEk5S8+K@&1eql!cZKf)oGeo(*UJF`r=XUGw|(( zs(Nq23*2r5h~+w=x<$o?a|Ge0g=b5uNZ1)|%8_yHEZb(Y&7|gJax%*qM0fHdq(ltu z?3E>W89OyXS*jiA!FrYgw1vI#>vH$7CHrXb*MF4Uuwasr*{cwR3dkPPq%eHw7pu6mbz z&F^>z)JOW3zPokD|NGf3vb^mt_iud=S-f$F&DDENt~~U!=yzVXtj$<;h5o^1Dn@*F z_M+UXtLRaAV>D^5W=@W(Q>Ot<04V8Jbd7^wMnzBbeJ?mqT$>>+Fxx@isG}i~@#lkm zB^g${upJKa&08+qhzrhJ!#d?8Ud8^pbYm{gXc&&GcEX89m1UY#hTOqrzkekcN+otN zN{FTM*2z(5S3M(T)G<&^$uVB1EjVJzhN*tsUM2^AXgiaGga=J4EjATBxqz_ocofFy z3oMw#6ABjh;9GT5Ybi{~Z18-lE_=q8JT_E**elT$p;maQTDO<{AFi@Xv5&U~P12=n zi*Y76c;D5}jTz~$>G)m##1&+2b5Uud+@|KC6vCKp8^jiqJ8)ztp~SZT`}!3(9Y)9f z|Nc96W~q>deEq<(3QS852`k&MgYiqMGrPN&r{C$-MX%==ty|WDF|{_%{C^t4i*pW@ zc_lr>;_{}AVYQY5_#ll}f zOVj!PzFhrmDaJAf@#65V&6zhJ(`|=Ue|PqB7@VhkSc#0)I6JN!dw-E zvxrqU@N*K9PuXhC&DhQbKOXe52fhg2&SZ}>O)68NTX1-n-8F%JVy8n4Z03Jm zm3(b0&lT7t&ySjoXu%V^X4OQP+KU z_OB}JdM77GxkQMtzPZ68MoV)abImSaoA%!v+kk1sZAzWD8a?v%@r>zz!l0~qfKVax zJ-|J{JW>s|e#y>8AKPB_kc77u#k&8!6_ucV!OE2Ib$2dE5K-g4YKo~h=!YIgo`jv7 zW{SblSTCPZU8(QNC(mpq&~ReZ36Z7M?Xn0I)*Q054PjGC(y_1pkwb&(v@;OyG?;=y z@ifF!sS;8nD5C;?LMe_RLn8i6u61-@y=@vqVGTSQ#P03J21mlSOm~@{sI>-3y6NFt zI(Yr9TASZSKG0TCPNk@^TL)Dm?Fj%Wi1gX~53AoB0DsNs-~Ge3TGI}f->@1auX1eayO4-sbq}e(#PIt zZR@+Udpw&F8Fb;~FX|YmO>;n{ene~xmQwh99^TXze`=!-Q5qr@RyjP*Gk=ccl;^Tk z{a%@f3zmj!XmesU`Dt(yU1B4T7;pm09xbesk(F@qA@RlN;_lA45&aq%OZEyhJUx5O zi>ZNER?pS~+L~;SBA2wc#xAkM!fEU2KVqtC+Fv~zFOnS-LKQg(>oX!I{3yU+rzHG` zK<29}(k2|rc1T$sGT?925!xl1g6V443A}f4 zY>bBL)2?cF+PnL!W-nnee@u)ys%rw?(f@p3BBc3!o>ngGt13Rl(UzTZ1;C6-8*+Qe zW3_^u)?K^paXH!EGpFP_WFk$eaE!td%5C#Tk=YSa3Y0x&h#^DI%${fUy~Q?CR|*la zD<~peUCejP;nKQ=ls8mIyUVhz&Wey83j(4MJO7li#`rpo*oh+CZ>+bvlRE$0wqbrDEwC zI9E2y-9KLb365~EJ{b)<#mprlVlr8diO(eUaZb4SFPPde2{*&VL>u&N9K)e!x|C`~ z#Ixt(C<~&eaAJIO@|mHbO%9!A9AyT`!kXi$1*$v%wS-H0RYvQ%WxBP zED&mnDJ$;Txnzgo-YVKi_!;bo*LOkp<(6}>6>F}>E=XM^kj*ysq#;pdh8x*bv!MyR ztM0*d6VxWB)IEOp6GdYm3jd}r&t zS}{IXN&PP9yPrhn0xm8DpG4?@*SnJt@;n)OHB!uXjOpmnxel?)_}$a>uHMq_^fz|_ zCyM0zQ`}6(bWP#rj$y+o3LQUCz<5-}&3+@@&_h`7ZJF zk=Cj0QS(lyUst09vfT?>0i&7k?w%>}c9( z_hI&rP~G3&oxi{>C-y_zKudh7rvHT0y;EX60FB*<#%xFb6pzRbHhjALQF_nRT^J#` zaP*rAjxsTWx!Xfsj4;G#wAr3r`vJSy^on(0#9@N(!?Dc>u2Dc+eX0=^=5PpoT#uZ1 zIEF?NY6;H&C=3@{zU}P64L7q4sQ|tkZJ9|@UP9~cchKeG;VOA zUUPBO(Rz&^YRfRYhPzBkpDa9H?wWG^4zfN!a4P;3NN$*BLKN9uxQg9eW``0(sBYe_ z&VDNd8_w;on(iL04%92JkQYMOp4 z%!G8;+3LF2x}_978aj}Q00&>@B}GfFl33*}ok;kMgFlTI+ZTuA%tD`S5-(&T12TJ% zAiPFybCP;aQE*MYQU?KZ2$le0N1dMKQ(tf40ZI8p;OQ3o4g2=INmp{`lRx(EYW)M5 z_UqI8t2_CRgFAE6aPQB4zra|NrJT=L`*3`^o+hI>n{wWT7Hy3M@HKuQm#SA1$~bWf zYQIB;_F4>rrFZd0tc^cAUOAk9wGMBaXSUblsy>7{80-rT!(^ z;h+ar@BfOHEeCp2b&?a>Eae22hN&s6E3E&vx5ZItu_;UYF-$TCA@_~n4JIDQgBRNL zIR)FUfa(3}TB2OWfohB2-@Uo}zc%(@x;^;a{_*Dj=w2MRl~p;QIF{W}IL+&;;?^XU zpK6|IQs#g~1fFc>@BdS70DKMLhwBJlbhIS3U%m`uPGiDzpR4Kt4sdOGE&#{k9wk%o zb=Sr<`Wwy)sX3&XOrvT{hM3d9{2Yr@3y@{^ZE6)fIraAJDaEI&GYSdV zgk?xKJU~Vd#l=o2gPnEGsG^h1{w3bQzIAwZDB%$vtk1uG{OF(eUOwObYH#<^lZW5z zz4~JQZ;j)XPs7svr``G8yLWHh(94}9Z&4_MUX#ua?F4EgA;kT@ly4S*fKJC$o-K`E zfOm&Lhn^1HWDp7%@S+CJFesyaq>J7xj?mSsf4~DHpowssaq0Y8@AP`F0=b({ep^^R zQ7k}IVu=*fEfwLix@dQB%xr|Dh(9Z+J$)~s%P0KRs*bu(%jA4eqgVPI5A@bA19$jL z=&elC4~^*NzV4v91=#w>f`W>ZQBzEdfab$h934U5Jx$f55I9bJIWdWteMH1`DywRW zZen&<8O<9i84{vjDzM>>I9)8Ewu_a}S$critH6DS?T-c;GMpz^VCfEH24y%+jE;y;YY<&LA9bew5e6lTDd*_s7@B4QXWGZ-y>g0D_Sk0o4haLMDx=tsjOwT@zxV>6oI!U~DV8ZaHRwN+rwU8KSG z+EmHLV-WR_lSDBF6#2vlsFetACz6w0kFj14SSDuyaGPTx7SUF#eB7333=k6_BysT9 z(c5qB2|txkzwPF9`Mn*-BdbLx_M7zmea!SI$5D({!LpUuL4!8HHrXtoBsrD&tPfMk zY>6LNq<=YH62E7(?ZK&0TiOkR6EPfWsR5@3xxw6_O zN(PmUUg_OP$Xf9juH-g{J2cUx#`vM;7S}@Qr(o-M)kj2LaAv{Y77mGq}2%85?IdNt)ZN& zy|5iARM_2QfM#*!o0ayg?O9H-J%|xXUR5bH-TlV*0|g|KmIuFn%paEiQG0L#)PtAz$o zD{l&RN}XM4xq-Vk%Bx)JH$n!Y`7ChvBJaeUH(!!ZP};B+dEw@PD_wp~@@?n=DS4l# z?q~J_Js2Df3vKAiF-#bK17sAD)wJmC1Lu#A$ju>uKt`^;Y*8d#&dD8f8TwQBG#vA| z`~jwjojfvRzQ7!7Au26`x;5$S-cGbI3}6ilTbvpC=4&5F=gs1Khtt85Iyv{OfO-BJ z$d=#P|Nb%IIlwQqwU(yHhf)SZ!+N~UR?wlW!3nM>{>~}esm-nB3>9twPi2$5hf#AF zBgNGWF9vSuZqp_|G_}3*@{*t=FUE(M+3i;y@{ys6m55beGGHiqs3pK zBD@uSA6J7FuBeZVR$ZUH|7#Ox;W89t@pf3k&azuch+zKRb5tkRADSQGq)N4xY(8c! za&46+OAN>Q!e8y?u&#bst0yF%D#MzWW~7kejYo6Ep`@rpEhZ{NXl=Ee zBiZX4t=^HMAs;Q5zEbszS|DUn(ENIl?ZQcIPr=3g4#TTTASSm(W^xjCV@bO|xY72zt z9XSykO<#*QP;0x_uWxj#oah~9aH$^Qr^?yuZGw)95eZI6y@6ZU;grX4K0&Gn3d^F z+Wj$0()oL%choKUi%_mlJiw_NuOacSS~_1-3$iEz_2Oh-eC8>l_eb9dxE;Cs_x^c~ zx--WUv^wRFwA5NGNp$h7v6;!S!2}tPHeaM(p%={T!|hC6AKJ;qH+WzV?=5>=n5& zk{2I6Ku&cPJ=Jn0?!fBJjJ_HsEPLi1uilAc)3A;{t6b2)u&E-$3-LBs76OThWf3NeF3jQXVzq1qx>e`zj`jM(TR zvrEvVkHG}6xpr8%jo3L7(^>0k9wa5|uIkbi0yDEkC|<;)?t2r% zM^Z=yabKlM0XUxXNEaWLb1jN`5iblp?{hC&!0by zD-?{2sk5fg2;lCtEG`hie!>{Gd)J^wnXi6xwyz+rr6h?Y+lh8O#m>}QD8_;~okB6p zCYV}E3U)|Q(6JzwB(f6M1YEiFNp?&`4(1buYsi{5&kfbwcANaC5!a?#T>Z5Orm#Wl z{bx+iX4G#ZYhV5>{3|F&&?X;Fs+nQXbCjwuyQ~vNn`5D|BxH6_ntj^{QlpcS??e5g)IT) zfKYm!`|B17T0j{9V(qy7-pJ@1vxnb2e)ZhfsQgp7!S%33!uhlbluIz5%@V^&^YGTq z%`LRv>&=0-Rpw~lR?bQ4fgyp6E&+T`+H^!ZAI3r4Dyh2Dn0Txa3OamcQUK-b{h!rV zUd^`f)HbmG<zfW zRVcCN*_{?ZDni$61GuiCTr%GDYk_%Y|Jz5{!A7hWe|-MJcoXTqf8r}Q-o7aR+BM95 z|5xb&UkpBOF7S()x4eR2EV80D?;WUh=vm8$I+)#^zx0>grHyd)8nsSF)cIySWM96FIU7q%qdX;2%w@<(Qfm-?K9uh08-C&6f~q`0v{xs3 zoy&FA*=FWG{K^1|sW5{8W^?i_+d^WtPe0W4`OIY|FMG) zemKi7CXm-JYkv(xQjc>u0GGf+X^7a>{PUKJt2PZCv5>A|Kv5CxYAm62CV|@}-B&+X z8XYrFB7n4kh4ucLrHR(v>nw4-sN7B}^@bU*O9~8}e;!7os6)c$ixJRlqv&ziHm%|{ zlu6)uw4|uQcUJYhRwmPb(Vq#~%wD{FeEGY7u>bu1ef?*}|N1`<;+;IC*dCMWrZ=ode;AC&`caCQaIJ42_SN!-6>e-q{c6L6sH;%tF$vmB7Fb-M z3@$boWf>fd_PKR9vHQ3)k22w#@;*+_Wj#|q!xcvA8G6%r+S{{NfC>9adu1QIuQFGE z7vF-*3GR#~(iXPYyOEf9gtcQIxA(T_|b1~)lZxt;!AcH;hS>(pQ~&U=BM>eC-sTznu9Aci3gaS@b{ zt@p@Mb!qKhIrP!`g4%!pD2xD-BV&*21ca|BxaP)DXwmA=59#KCA5l0UBtaEgpWeEF zMPKY6-JQp`H}Ax!B)@ab3mh$*qtzSRi0%sa(&4Eiq@^kncOt;&y;0#{m_RD#a4alG zj)`LNxb;t&$+yJ(zTC!uO6Ur_mOK9qCCcC!HZRJOw=rqH9pB_tF#MWHV6iIJoBs$0 zlb<)w3!wLpE>GXiJGkEg|6*S#C8vj2mIvQoZtPyvMQNBAtxjHeZa}_^A9XnwM@!N; zlGe=M3P{N%!g7%Ar2Cb%ECjqjeHYZZl!cvn$H#Gd&Mt1x`8fa&<^Q-k#x`DhH)QN@8X7Cc?yHUC%{$5wtc?B7kvD zywZ#^j}bQHdx92GQsP-Wpk~MbR%BL~OUYDn?=WxYr-6{Jy?ijx+=6y+@s6!_JFwKL z5>bTDF3&v;He@jT)bfXT&=4UXqkD=1t5EepFcB?2H%{my%DapHY~ms z*sa6I813Z8uKSvk9b`qMc7v^ZqRZM?p{c_Yca?K~Fpg6USIV@9(6pyUX{()shmBc9 z6^g*vFf4paIC66N4iya7Do@3k`y_RV$)S$erWaX!&(KU$82?5~gNTRwKaSGKw!}-W zT&`RRO+d}$;S=sO2+FKjOYx{C4q0J5lE|kPYk^6)cWI4&LS6Ui-T8C>83r$tiQkRG z3o(0a|M0>mLk74IlzdVHU+v>vY`ud&7)JmnTltfv*ugV56X0kyOg3 cIR%4r(rBw)hkRGn^SUd, 2013, 2014, 2015, 2016, 2017, 2018, 2019 +# +# ###################################################################### +# Traducciones dudosas: +# ###################################################################### +# +# initialize = inicializar +# kernel = núcleo +#  imperativo - usted +# % done = % hecho +# fatal error = error fatal +#  RNG = generador de números aleatorios +# not supported = no disponible +# key slot = ranura de claves +# passphrase = frase contraseña +# offset = desplazamiento +# offset = posición +# suspended = suspendido +# plain device = dispositivo no cifrado (dispositivo en claro) +# crypt device = dispositivo cifrado +# error reading = error al leer +# keyfile = fichero de claves (¿fichero de la clave?) +#  checksum = suma de comprobación +# loopback device = dispositivo de bucle invertido (Santiago: dispositivo de bucle) +# backup file = fichero de copia de seguridad +# please - omitido, porque ya es suficiente cortesía tratar de usted al usuario +#  wipe = limpiar, borrar +# interface = (la) interfaz +# cipher = algoritmo de cifrado +# default = predefinido +# default compiled-in = predefinido de fábrica +# debug = depuración +# bootloader = cargador de arranque +# verify = verificar +# verification = verificación +# log file = fichero de registro +# temporary = temporal +# reencryption = recifrado +# invalid = no válido, -a +# lock = bloqueo +# hotzone = zona activa +# +# ####################################################################### +# Términos no traducidos +# ####################################################################### +# +# device mapper +# backend +# hash +# buffer +# offset +# bit(s) +# byte(s) +# loopaes +# luks +# tcrypt +# salt +# verity +# +# ####################################################################### +# Otras dudas +# ####################################################################### +# +# invalid = inválido, -a -> barbarismo -> mejor: no válido +# on-disk +# +# ####################################################################### +# +msgid "" +msgstr "" +"Project-Id-Version: cryptsetup 2.2.2-rc0\n" +"Report-Msgid-Bugs-To: dm-crypt@saout.de\n" +"POT-Creation-Date: 2019-11-01 09:04+0100\n" +"PO-Revision-Date: 2019-10-18 17:15+0200\n" +"Last-Translator: Antonio Ceballos \n" +"Language-Team: Spanish \n" +"Language: es\n" +"MIME-Version: 1.0\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" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: lib/libdevmapper.c:384 +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:387 +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:1082 +msgid "Requested deferred flag is not supported." +msgstr "El indicador diferido solicitado no está disponible." + +#: lib/libdevmapper.c:1149 +#, c-format +msgid "DM-UUID for device %s was truncated." +msgstr "El DM-UUID del dispositivo %s ha sido truncado." + +#: lib/libdevmapper.c:1463 +msgid "Unknown dm target type." +msgstr "Tipo de objetivo dm desconocido." + +#: lib/libdevmapper.c:1565 lib/libdevmapper.c:1617 +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:1572 +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:1576 +msgid "Requested dm-verity FEC options are not supported." +msgstr "Las opciones FEC de dm-verity solicitadas no están disponibles." + +#: lib/libdevmapper.c:1580 +msgid "Requested data integrity options are not supported." +msgstr "Las opciones de integridad de datos solicitadas no están disponibles." + +#: lib/libdevmapper.c:1582 +msgid "Requested sector_size option is not supported." +msgstr "La opción sector_size solicitada no está disponible." + +#: lib/libdevmapper.c:1587 +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:1591 +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:1620 +msgid "Discard/TRIM is not supported." +msgstr "Descartar/TRIM no disponible." + +#: lib/libdevmapper.c:2511 +#, c-format +msgid "Failed to query dm-%s segment." +msgstr "No se ha podido consultar el segmento de dm-%s." + +#: lib/random.c:80 +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" +msgstr "" +"El sistema se ha quedado sin entropía mientras estaba generando la clave del volumen.\n" +"Por favor, mueva el ratón o pulse alguna tecla en otra ventana para provocar algún evento aleatorio.\n" + +#: lib/random.c:84 +#, c-format +msgid "Generating key (%d%% done).\n" +msgstr "Generando la clave (%d%% hecho).\n" + +#: lib/random.c:170 +msgid "Running in FIPS mode." +msgstr "Modo FIPS en funcionamiento." + +#: lib/random.c:176 +msgid "Fatal error during RNG initialisation." +msgstr "Error fatal durante la inicialización del generador de números aleatorios." + +#: lib/random.c:213 +msgid "Unknown RNG quality requested." +msgstr "La calidad solicitada para el generador de números aleatorios es desconocida." + +#: lib/random.c:218 +msgid "Error reading from RNG." +msgstr "Error leyendo del generador de números aleatorios." + +#: lib/setup.c:223 +msgid "Cannot initialize crypto RNG backend." +msgstr "No se puede inicializar el «backend» del generador de números aleatorios de cifrado." + +#: lib/setup.c:229 +msgid "Cannot initialize crypto backend." +msgstr "No se puede inicializar el «backend» de cifrado." + +#: lib/setup.c:260 lib/setup.c:1990 lib/verity/verity.c:120 +#, c-format +msgid "Hash algorithm %s not supported." +msgstr "Algoritmo «hash» %s no disponible." + +#: lib/setup.c:263 lib/loopaes/loopaes.c:90 +#, c-format +msgid "Key processing error (using hash %s)." +msgstr "Error de procesamiento de la clave (usando «hash» %s)." + +#: lib/setup.c:324 lib/setup.c:351 +msgid "Cannot determine device type. Incompatible activation of device?" +msgstr "No se puede determinar el tipo de dispositivo. ¿Es incompatible la activación del dispositivo?" + +#: lib/setup.c:330 lib/setup.c:2985 +msgid "This operation is supported only for LUKS device." +msgstr "Esta operación solamente está disponible para dispositivos LUKS." + +#: lib/setup.c:357 +msgid "This operation is supported only for LUKS2 device." +msgstr "Esta operación solamente está disponible para dispositivos LUKS2." + +#: lib/setup.c:412 lib/luks2/luks2_reencrypt.c:2345 +msgid "All key slots full." +msgstr "Todas las ranuras de claves están llenas." + +#: lib/setup.c:423 +#, c-format +msgid "Key slot %d is invalid, please select between 0 and %d." +msgstr "La ranura de claves %d no es válida; seleccione un número entre 0 y %d." + +#: lib/setup.c:429 +#, c-format +msgid "Key slot %d is full, please select another one." +msgstr "La ranura de claves %d está llena; seleccione otra." + +#: lib/setup.c:514 lib/setup.c:2759 +msgid "Device size is not aligned to device logical block size." +msgstr "El tamaño del dispositivo no está alineado con el tamaño de bloque lógico del dispositivo." + +#: lib/setup.c:610 +#, c-format +msgid "Header detected but device %s is too small." +msgstr "Cabecera detectada pero el dispositivo %s es demasiado pequeño." + +#: lib/setup.c:647 +msgid "This operation is not supported for this device type." +msgstr "Esta operación no está disponible para este tipo de dispositivo." + +#: lib/setup.c:652 +msgid "Illegal operation with reencryption in-progress." +msgstr "Operación con recifrado en curso no válida." + +#: lib/setup.c:821 lib/luks1/keymanage.c:476 +#, c-format +msgid "Unsupported LUKS version %d." +msgstr "Versión LUKS no disponible %d." + +#: lib/setup.c:838 lib/setup.c:1483 lib/setup.c:1903 +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:1373 lib/setup.c:2479 lib/setup.c:2551 lib/setup.c:2563 +#: lib/setup.c:2712 lib/setup.c:4310 +#, c-format +msgid "Device %s is not active." +msgstr "El dispositivo %s no está activo." + +#: lib/setup.c:1390 +#, c-format +msgid "Underlying device for crypt device %s disappeared." +msgstr "El dispositivo subyacente asociado al dispositivo cifrado %s ha desaparecido." + +#: lib/setup.c:1468 +msgid "Invalid plain crypt parameters." +msgstr "Parámetros de cifrado para modo claro no válidos." + +#: lib/setup.c:1473 lib/setup.c:1893 src/integritysetup.c:73 +msgid "Invalid key size." +msgstr "Tamaño de clave no válido." + +#: lib/setup.c:1478 lib/setup.c:1898 lib/setup.c:2100 +msgid "UUID is not supported for this crypt type." +msgstr "El UUID no está disponible para este tipo de cifrado." + +#: lib/setup.c:1493 lib/setup.c:1683 lib/luks2/luks2_reencrypt.c:2308 +#: src/cryptsetup.c:1169 +msgid "Unsupported encryption sector size." +msgstr "Tamaño de sector de cifrado no admitido." + +#: lib/setup.c:1501 lib/setup.c:1808 lib/setup.c:2753 +msgid "Device size is not aligned to requested sector size." +msgstr "El tamaño del dispositivo no está alineado con el tamaño del sector solicitado." + +#: lib/setup.c:1552 lib/setup.c:1671 +msgid "Can't format LUKS without device." +msgstr "Imposible dar formato LUKS sin dispositivo." + +#: lib/setup.c:1558 lib/setup.c:1677 +msgid "Requested data alignment is not compatible with data offset." +msgstr "El alineamiento de datos solicitado no es compatible con el desplazamiento de los datos." + +#: lib/setup.c:1626 lib/setup.c:1795 +msgid "WARNING: Data offset is outside of currently available data device.\n" +msgstr "ATENCIÓN: El desplazamiento de los datos está fuera del dispositivo de datos actualmente disponible.\n" + +#: lib/setup.c:1636 lib/setup.c:1823 lib/setup.c:1844 lib/setup.c:2112 +#, c-format +msgid "Cannot wipe header on device %s." +msgstr "No se puede limpiar la cabecera del dispositivo %s." + +#: lib/setup.c:1688 +msgid "WARNING: The device activation will fail, dm-crypt is missing support for requested encryption sector size.\n" +msgstr "ATENCIÓN: La activación del dispositivo va a fallar; dm-crypt no admite el tamaño de sector de cifrado solicitado.\n" + +#: lib/setup.c:1710 +msgid "Volume key is too small for encryption with integrity extensions." +msgstr "La clave del volumen es demasiado pequeña para cifrado con extensiones de integridad." + +#: lib/setup.c:1765 +#, c-format +msgid "Cipher %s-%s (key size %zd bits) is not available." +msgstr "El algoritmo de cifrado %s-%s (tamaño de clave %zd bits) no está disponible." + +#: lib/setup.c:1798 +#, c-format +msgid "WARNING: LUKS2 metadata size changed to % bytes.\n" +msgstr "ATENCIÓN: el tamaño de los metadatos LUKS2 ha cambiado a % bytes.\n" + +#: lib/setup.c:1802 +#, c-format +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:1826 lib/utils_device.c:829 lib/luks1/keyencryption.c:256 +#: lib/luks2/luks2_reencrypt.c:2356 lib/luks2/luks2_reencrypt.c:3348 +#, c-format +msgid "Device %s is too small." +msgstr "El dispositivo %s es demasiado pequeño." + +#: lib/setup.c:1837 lib/setup.c:1863 +#, c-format +msgid "Cannot format device %s in use." +msgstr "No se puede dar formato al dispositivo %s en uso." + +#: lib/setup.c:1840 lib/setup.c:1866 +#, c-format +msgid "Cannot format device %s, permission denied." +msgstr "No se puede dar formato al dispositivo %s; permiso denegado." + +#: lib/setup.c:1852 lib/setup.c:2164 +#, c-format +msgid "Cannot format integrity for device %s." +msgstr "No se puede dar formato a la integridad del dispositivo %s." + +#: lib/setup.c:1870 +#, c-format +msgid "Cannot format device %s." +msgstr "No se puede dar formato al dispositivo %s." + +#: lib/setup.c:1888 +msgid "Can't format LOOPAES without device." +msgstr "Imposible dar formato LOOPAES sin dispositivo." + +#: lib/setup.c:1933 +msgid "Can't format VERITY without device." +msgstr "Imposible dar formato VERITY sin dispositivo." + +#: lib/setup.c:1944 lib/verity/verity.c:103 +#, c-format +msgid "Unsupported VERITY hash type %d." +msgstr "Tipo de «hash» VERITY %d no disponible." + +#: lib/setup.c:1950 lib/verity/verity.c:111 +msgid "Unsupported VERITY block size." +msgstr "Tamaño de bloque VERITY no disponible." + +#: lib/setup.c:1955 lib/verity/verity.c:75 +msgid "Unsupported VERITY hash offset." +msgstr "Desplazamiento «hash» VERITY no disponible." + +#: lib/setup.c:1960 +msgid "Unsupported VERITY FEC offset." +msgstr "Desplazamiento FEC VERITY no disponible." + +#: lib/setup.c:1984 +msgid "Data area overlaps with hash area." +msgstr "La zona de datos se solapa con la zona «hash»." + +#: lib/setup.c:2009 +msgid "Hash area overlaps with FEC area." +msgstr "La zona «hash» se solapa con la zona FEC." + +#: lib/setup.c:2016 +msgid "Data area overlaps with FEC area." +msgstr "La zona de datos se solapa con la zona FEC." + +#: lib/setup.c:2221 +#, c-format +msgid "Unknown crypt device type %s requested." +msgstr "El tipo de dispositivo cifrado % solicitado es desconocido." + +#: lib/setup.c:2485 lib/setup.c:2557 lib/setup.c:2570 +#, c-format +msgid "Unsupported parameters on device %s." +msgstr "Parámetros no admitidos para el dispositivo %s." + +#: lib/setup.c:2491 lib/setup.c:2576 lib/luks2/luks2_reencrypt.c:2408 +#: lib/luks2/luks2_reencrypt.c:2718 +#, c-format +msgid "Mismatching parameters on device %s." +msgstr "Parámetros discordantes en el dispositivo %s." + +#: lib/setup.c:2596 +msgid "Crypt devices mismatch." +msgstr "Los dispositivos de cifrado no concuerdan." + +#: lib/setup.c:2633 lib/setup.c:2638 lib/luks2/luks2_reencrypt.c:2054 +#: lib/luks2/luks2_reencrypt.c:3126 +#, c-format +msgid "Failed to reload device %s." +msgstr "No se ha podido recargar el dispositivo %s." + +#: lib/setup.c:2643 lib/setup.c:2648 lib/luks2/luks2_reencrypt.c:2025 +#: lib/luks2/luks2_reencrypt.c:2032 +#, c-format +msgid "Failed to suspend device %s." +msgstr "No se ha podido suspender el dispositivo %s." + +#: lib/setup.c:2653 lib/luks2/luks2_reencrypt.c:2039 +#: lib/luks2/luks2_reencrypt.c:3061 lib/luks2/luks2_reencrypt.c:3130 +#, c-format +msgid "Failed to resume device %s." +msgstr "No se ha podido reanudar el dispositivo %s." + +#: lib/setup.c:2667 +#, c-format +msgid "Fatal error while reloading device %s (on top of device %s)." +msgstr "Error grave durante la recarga del dispositivo %s (por encima del dispositivo %s)." + +#: lib/setup.c:2670 lib/setup.c:2672 +#, c-format +msgid "Failed to switch device %s to dm-error." +msgstr "No se ha podido conmutar el dispositivo %s a dm-error." + +#: lib/setup.c:2744 +msgid "Cannot resize loop device." +msgstr "No se ha podido cambiar el tamaño del dispositivo de bucle." + +#: lib/setup.c:2817 +msgid "Do you really want to change UUID of device?" +msgstr "¿Está seguro de que quiere cambiar el UUID del dispositivo?" + +#: lib/setup.c:2893 +msgid "Header backup file does not contain compatible LUKS header." +msgstr "El fichero de copia de seguridad de la cabecera no contiene una cabecera LUKS compatible." + +#: lib/setup.c:2993 +#, c-format +msgid "Volume %s is not active." +msgstr "El volumen %s no está activo." + +#: lib/setup.c:3004 +#, c-format +msgid "Volume %s is already suspended." +msgstr "El volumen %s ya está suspendido." + +#: lib/setup.c:3017 +#, c-format +msgid "Suspend is not supported for device %s." +msgstr "La suspensión no está disponible para el dispositivo %s." + +#: lib/setup.c:3019 +#, c-format +msgid "Error during suspending device %s." +msgstr "Error durante la suspensión del dispositivo %s." + +#: lib/setup.c:3052 lib/setup.c:3119 +#, c-format +msgid "Volume %s is not suspended." +msgstr "EL volumen %s no está suspendido." + +#: lib/setup.c:3081 +#, c-format +msgid "Resume is not supported for device %s." +msgstr "La reanudación no está disponible para el dispositivo %s." + +#: lib/setup.c:3083 lib/setup.c:3151 +#, c-format +msgid "Error during resuming device %s." +msgstr "Error durante la reanudación del dispositivo %s." + +#: lib/setup.c:3219 lib/setup.c:3407 +msgid "Cannot add key slot, all slots disabled and no volume key provided." +msgstr "No se puede añadir ranura de claves; todas las ranuras están desactivadas y no se ha proporcionado una clave para el volumen." + +#: lib/setup.c:3359 +msgid "Failed to swap new key slot." +msgstr "No se ha logrado intercambiar la nueva ranura de claves." + +#: lib/setup.c:3524 lib/setup.c:4161 lib/setup.c:4174 lib/setup.c:4182 +#: lib/setup.c:4195 lib/setup.c:4480 lib/setup.c:5593 +msgid "Volume key does not match the volume." +msgstr "La clave de volumen no corresponde a este volumen." + +#: lib/setup.c:3545 +#, c-format +msgid "Key slot %d is invalid." +msgstr "La ranura de claves %d no es válida." + +#: lib/setup.c:3551 src/cryptsetup.c:1511 src/cryptsetup.c:1856 +#, c-format +msgid "Keyslot %d is not active." +msgstr "La ranura de claves %d no está activa." + +#: lib/setup.c:3570 +msgid "Device header overlaps with data area." +msgstr "La cabecera del dispositivo se solapa con la zona de datos." + +#: lib/setup.c:3836 +msgid "Reencryption in-progress. Cannot activate device." +msgstr "Recifrado en curso. No se puede activar el dispositivo." + +#: lib/setup.c:3838 lib/luks2/luks2_json_metadata.c:2244 +#: lib/luks2/luks2_reencrypt.c:2817 +msgid "Failed to get reencryption lock." +msgstr "No se ha podido conseguir el bloqueo de recifrado." + +#: lib/setup.c:3851 lib/luks2/luks2_reencrypt.c:2836 +msgid "LUKS2 reencryption recovery failed." +msgstr "La recuperación del recifrado LUKS2 ha fallado." + +#: lib/setup.c:3978 lib/setup.c:4248 +msgid "Device type is not properly initialised." +msgstr "Este tipo de dispositivo no se ha inicializado adecuadamente." + +#: lib/setup.c:4022 +#, 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:4025 +#, c-format +msgid "Device %s already exists." +msgstr "El dispositivo %s ya existe." + +#: lib/setup.c:4148 +msgid "Incorrect volume key specified for plain device." +msgstr "Clave de volumen incorrecta para dispositivo no cifrado." + +#: lib/setup.c:4214 +msgid "Incorrect root hash specified for verity device." +msgstr "«Hash» raíz incorrecta para dispositivo «verity»." + +#: lib/setup.c:4289 lib/setup.c:4305 lib/luks2/luks2_json_metadata.c:2297 +#: src/cryptsetup.c:2527 +#, c-format +msgid "Device %s is still in use." +msgstr "El dispositivo %s todavía se está utilizando." + +#: lib/setup.c:4314 +#, c-format +msgid "Invalid device %s." +msgstr "Dispositivo inválido %s." + +#: lib/setup.c:4430 +msgid "Volume key buffer too small." +msgstr "El «buffer» de la clave del volumen es demasiado pequeño." + +#: lib/setup.c:4438 +msgid "Cannot retrieve volume key for plain device." +msgstr "No se puede recuperar la clave para el dispositivo no cifrado." + +#: lib/setup.c:4449 +#, 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:4636 +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:4947 +#, 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:5229 +#, 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:5526 +#, 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:5599 +msgid "Failed to initialise default LUKS2 keyslot parameters." +msgstr "No se han podido inicializar los parámetros predefinidos de la ranura de claves LUKS2." + +#: lib/setup.c:5605 +#, 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:5690 +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:5757 +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:5767 lib/luks2/luks2_reencrypt.c:2933 +#, 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:5791 +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." + +#: lib/utils.c:81 +msgid "Cannot get process priority." +msgstr "No se puede obtener la prioridad del proceso." + +#: lib/utils.c:95 +msgid "Cannot unlock memory." +msgstr "No se puede desbloquear la memoria." + +#: lib/utils.c:169 lib/tcrypt/tcrypt.c:498 +msgid "Failed to open key file." +msgstr "No se ha podido abrir el fichero de claves." + +#: lib/utils.c:174 +msgid "Cannot read keyfile from a terminal." +msgstr "No se puede leer el fichero de claves desde un terminal." + +#: lib/utils.c:191 +msgid "Failed to stat key file." +msgstr "No se ha podido efectuar «stat» sobre el fichero de claves." + +#: lib/utils.c:199 lib/utils.c:220 +msgid "Cannot seek to requested keyfile offset." +msgstr "No es posible situarse en la posición solicitada del fichero de claves." + +#: lib/utils.c:214 lib/utils.c:229 src/utils_password.c:188 +#: src/utils_password.c:201 +msgid "Out of memory while reading passphrase." +msgstr "Memoria agotada mientras se estaba leyendo la frase contraseña." + +#: lib/utils.c:249 +msgid "Error reading passphrase." +msgstr "Error al leer la frase contraseña." + +#: lib/utils.c:266 +msgid "Nothing to read on input." +msgstr "No hay nada para leer en la entrada." + +#: lib/utils.c:273 +msgid "Maximum keyfile size exceeded." +msgstr "Se ha excedido el tamaño máximo de fichero de claves." + +#: lib/utils.c:278 +msgid "Cannot read requested amount of data." +msgstr "No se puede leer la cantidad de datos solicitada." + +#: lib/utils_device.c:188 lib/utils_storage_wrappers.c:111 +#: lib/luks1/keyencryption.c:92 +#, c-format +msgid "Device %s doesn't exist or access denied." +msgstr "El dispositivo %s no existe o el acceso al mismo ha sido denegado." + +#: lib/utils_device.c:198 +#, c-format +msgid "Device %s is not compatible." +msgstr "El dispositivo %s no es compatible." + +#: lib/utils_device.c:643 +#, 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:724 +#, 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:728 +#, c-format +msgid "Cannot use device %s, permission denied." +msgstr "No se puede utilizar el dispositivo %s; permiso denegado." + +#: lib/utils_device.c:731 +#, c-format +msgid "Cannot get info about device %s." +msgstr "No se puede obtener información del dispositivo %s." + +#: lib/utils_device.c:754 +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:764 +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:810 +#, 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:818 +#, c-format +msgid "Device %s has zero size." +msgstr "El dispositivo %s tiene tamaño cero." + +#: lib/utils_pbkdf.c:100 +msgid "Requested PBKDF target time cannot be zero." +msgstr "El tiempo objetivo máximo de PBKDF no puede ser cero." + +#: lib/utils_pbkdf.c:106 +#, c-format +msgid "Unknown PBKDF type %s." +msgstr "Tipo de PBKDF %s desconocido." + +#: lib/utils_pbkdf.c:111 +#, c-format +msgid "Requested hash %s is not supported." +msgstr "La «hash» solicitada %s no está disponible." + +#: lib/utils_pbkdf.c:122 +msgid "Requested PBKDF type is not supported for LUKS1." +msgstr "El tipo de PBKDF solicitado no está disponible para LUKS1." + +#: lib/utils_pbkdf.c:128 +msgid "PBKDF max memory or parallel threads must not be set with pbkdf2." +msgstr "No se pueden establecer la memoria máxima de PBKDF ni los hilos paralelos con pbkdf2." + +#: lib/utils_pbkdf.c:133 lib/utils_pbkdf.c:143 +#, c-format +msgid "Forced iteration count is too low for %s (minimum is %u)." +msgstr "El número de iteraciones forzadas es demasiado pequeño para %s (el mínimo es %u)." + +#: lib/utils_pbkdf.c:148 +#, c-format +msgid "Forced memory cost is too low for %s (minimum is %u kilobytes)." +msgstr "El coste de la memoria forzada es demasiado bajo para %s (el mínimo es %u kilobytes)." + +#: lib/utils_pbkdf.c:155 +#, c-format +msgid "Requested maximum PBKDF memory cost is too high (maximum is %d kilobytes)." +msgstr "El coste de la memoria máxima solicitada de PBKDF es demasiado alto (el máximo es %d kilobytes)." + +#: lib/utils_pbkdf.c:160 +msgid "Requested maximum PBKDF memory cannot be zero." +msgstr "La memoria máxima solicitada de PBKDF no puede ser cero." + +#: lib/utils_pbkdf.c:164 +msgid "Requested PBKDF parallel threads cannot be zero." +msgstr "Los hilos paralelos solicitados de PBKDF no pueden ser cero." + +#: lib/utils_pbkdf.c:184 +msgid "Only PBKDF2 is supported in FIPS mode." +msgstr "Solo se admite PBKDF2 en el modo FIPS." + +#: lib/utils_benchmark.c:166 +msgid "PBKDF benchmark disabled but iterations not set." +msgstr "Banco de pruebas PBKDF desactivado pero las iteraciones no están establecidas." + +#: lib/utils_benchmark.c:185 +#, c-format +msgid "Not compatible PBKDF2 options (using hash algorithm %s)." +msgstr "Opciones PBKDF2 no compatibles (usando el algoritmo «hash» %s)." + +#: lib/utils_benchmark.c:205 +msgid "Not compatible PBKDF options." +msgstr "Opciones PBKDF no compatibles." + +#: lib/utils_device_locking.c:103 +#, c-format +msgid "Locking aborted. The locking path %s/%s is unusable (not a directory or missing)." +msgstr "Bloqueo abortado. La ruta del bloqueo %s/%s no puede utilizarse (o no es un directorio o no existe)." + +#: lib/utils_device_locking.c:110 +#, c-format +msgid "WARNING: Locking directory %s/%s is missing!\n" +msgstr "ATENCIÓN: ¡Falta el directorio de bloqueo %s/%s!\n" + +#: lib/utils_device_locking.c:120 +#, c-format +msgid "Locking aborted. The locking path %s/%s is unusable (%s is not a directory)." +msgstr "Bloqueo abortado. La ruta del bloqueo %s/%s no puede utilizarse (%s no es un directorio)." + +#: lib/utils_wipe.c:185 src/cryptsetup_reencrypt.c:933 +#: src/cryptsetup_reencrypt.c:1017 +msgid "Cannot seek to device offset." +msgstr "No es posible situarse en la posición del dispositivo." + +#: lib/utils_wipe.c:209 +#, c-format +msgid "Device wipe error, offset %." +msgstr "Error al limpiar el dispositivo, desplazamiento %." + +#: lib/luks1/keyencryption.c:40 +#, c-format +msgid "" +"Failed to setup dm-crypt key mapping for device %s.\n" +"Check that kernel supports %s cipher (check syslog for more info)." +msgstr "" +"No se ha podido establecer asignación de clave dm-crypt al dispositivo %s.\n" +"Compruebe que el núcleo admite el algoritmo de cifrado %s (consulte syslog para más información)." + +#: lib/luks1/keyencryption.c:45 +msgid "Key size in XTS mode must be 256 or 512 bits." +msgstr "El tamaño de clave en modo XTS debe ser 256 o 512 bits." + +# TODO +#: lib/luks1/keyencryption.c:47 +msgid "Cipher specification should be in [cipher]-[mode]-[iv] format." +msgstr "La especificación de cifrado debería estar en formato [cipher]-[mode]-[iv]." + +#: lib/luks1/keyencryption.c:98 lib/luks1/keymanage.c:345 +#: lib/luks1/keymanage.c:636 lib/luks1/keymanage.c:1074 +#: lib/luks2/luks2_json_metadata.c:1253 lib/luks2/luks2_keyslot.c:739 +#, c-format +msgid "Cannot write to device %s, permission denied." +msgstr "No se puede escribir en el dispositivo %s; permiso denegado." + +#: lib/luks1/keyencryption.c:121 +msgid "Failed to open temporary keystore device." +msgstr "No se ha podido abrir el dispositivo de almacenamiento de claves temporal." + +#: lib/luks1/keyencryption.c:128 +msgid "Failed to access temporary keystore device." +msgstr "No se ha podido acceder al dispositivo de almacenamiento de claves temporal." + +#: lib/luks1/keyencryption.c:201 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 "Error de entrada/salida mientras se cifraba una ranura de claves." + +#: lib/luks1/keyencryption.c:247 lib/luks1/keymanage.c:348 +#: lib/luks1/keymanage.c:589 lib/luks1/keymanage.c:639 lib/tcrypt/tcrypt.c:661 +#: lib/verity/verity.c:81 lib/verity/verity.c:179 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:1256 +#: src/cryptsetup_reencrypt.c:205 +#, c-format +msgid "Cannot open device %s." +msgstr "No se puede abrir el dispositivo %s." + +#: lib/luks1/keyencryption.c:258 lib/luks2/luks2_keyslot_luks2.c:137 +msgid "IO error while decrypting keyslot." +msgstr "Error de entrada/salida mientras se descifraba una ranura de claves." + +#: lib/luks1/keymanage.c:111 +#, c-format +msgid "Device %s is too small. (LUKS1 requires at least % bytes.)" +msgstr "El dispositivo %s es demasiado pequeño. (LUKS1 necesita % btyes como mínimo.)" + +#: 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 +#, c-format +msgid "LUKS keyslot %u is invalid." +msgstr "La ranura de claves LUKS %u no es válida." + +#: lib/luks1/keymanage.c:229 lib/luks1/keymanage.c:473 +#: lib/luks2/luks2_json_metadata.c:1084 src/cryptsetup.c:1372 +#: src/cryptsetup.c:1498 src/cryptsetup.c:1555 src/cryptsetup.c:1611 +#: src/cryptsetup.c:1678 src/cryptsetup.c:1781 src/cryptsetup.c:1845 +#: src/cryptsetup.c:2005 src/cryptsetup.c:2194 src/cryptsetup.c:2254 +#: src/cryptsetup.c:2320 src/cryptsetup.c:2484 src/cryptsetup.c:3137 +#: src/cryptsetup.c:3146 src/cryptsetup_reencrypt.c:1372 +#, 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:247 lib/luks2/luks2_json_metadata.c:1101 +#, 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:249 lib/luks2/luks2_json_metadata.c:1103 +#, 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:256 lib/luks2/luks2_json_metadata.c:1110 +#, 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:287 lib/luks2/luks2_json_metadata.c:1162 +msgid "Backup file doesn't contain valid LUKS header." +msgstr "El fichero de copia de seguridad no contiene una cabecera LUKS válida." + +#: lib/luks1/keymanage.c:300 lib/luks1/keymanage.c:550 +#: lib/luks2/luks2_json_metadata.c:1183 +#, 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:308 lib/luks2/luks2_json_metadata.c:1191 +#, c-format +msgid "Cannot read header backup file %s." +msgstr "No se puede leer el fichero de copia de seguridad de cabecerda %s." + +#: lib/luks1/keymanage.c:318 +msgid "Data offset or key size differs on device and backup, restore failed." +msgstr "La posición de los datos o el tamaño de la clave no coinciden en el dispositivo y en la copia de seguridad." + +#: lib/luks1/keymanage.c:326 +#, c-format +msgid "Device %s %s%s" +msgstr "Dispositivo %s %s%s" + +#: lib/luks1/keymanage.c:327 +msgid "does not contain LUKS header. Replacing header can destroy data on that device." +msgstr "no contiene cabecera LUKS. Reemplazar la cabecera puede destruir los datos en ese dispositivo." + +#: lib/luks1/keymanage.c:328 +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:329 lib/luks2/luks2_json_metadata.c:1225 +msgid "" +"\n" +"WARNING: real device header has different UUID than backup!" +msgstr "" +"\n" +"ATENCIÓN: ¡la cabecera del dispositivo real tiene un UUID distinto que el de la copia de seguridad!" + +#: lib/luks1/keymanage.c:376 +msgid "Non standard key size, manual repair required." +msgstr "El tamaño de la clave no es estándar; se requiere una reparación manual." + +#: lib/luks1/keymanage.c:381 +msgid "Non standard keyslots alignment, manual repair required." +msgstr "El alineamiento de las ranuras de claves no es estándar; se requiere una reparación manual." + +#: lib/luks1/keymanage.c:391 +msgid "Repairing keyslots." +msgstr "Reparando ranuras de claves." + +#: lib/luks1/keymanage.c:410 +#, c-format +msgid "Keyslot %i: offset repaired (%u -> %u)." +msgstr "Ranura de claves %i: posición reparada (%u -> %u)." + +#: lib/luks1/keymanage.c:418 +#, c-format +msgid "Keyslot %i: stripes repaired (%u -> %u)." +msgstr "Ranura de claves %i: bandas reparadas (%u -> %u)." + +#: lib/luks1/keymanage.c:427 +#, c-format +msgid "Keyslot %i: bogus partition signature." +msgstr "Ranura de claves %i: la firma de la partición es falsa." + +#: lib/luks1/keymanage.c:432 +#, c-format +msgid "Keyslot %i: salt wiped." +msgstr "Ranura de claves %i: «salt wiped»." + +#: lib/luks1/keymanage.c:449 +msgid "Writing LUKS header to disk." +msgstr "Escribiendo cabecera LUKS en el disco." + +#: lib/luks1/keymanage.c:454 +msgid "Repair failed." +msgstr "La reparación ha fallado." + +#: lib/luks1/keymanage.c:482 lib/luks1/keymanage.c:751 +#, c-format +msgid "Requested LUKS hash %s is not supported." +msgstr "La «hash» LUKS solicitada %s no está disponible." + +#: lib/luks1/keymanage.c:510 src/cryptsetup.c:1081 +msgid "No known problems detected for LUKS header." +msgstr "No se ha detectado ningún problema en la cabecera LUKS." + +#: lib/luks1/keymanage.c:661 +#, c-format +msgid "Error during update of LUKS header on device %s." +msgstr "Error al actualizar la cabecera LUKS en el dispositivo %s." + +#: lib/luks1/keymanage.c:669 +#, c-format +msgid "Error re-reading LUKS header after update on device %s." +msgstr "Error al leer la cabecera LUKS después de actualizarla en el dispositivo %s." + +#: lib/luks1/keymanage.c:745 +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:756 lib/luks1/keymanage.c:821 +#: lib/luks2/luks2_json_format.c:283 lib/luks2/luks2_json_metadata.c:1002 +#: src/cryptsetup.c:2647 +msgid "Wrong LUKS UUID format provided." +msgstr "El formato de UUID LUKS proporcionado es incorrecto." + +#: lib/luks1/keymanage.c:779 +msgid "Cannot create LUKS header: reading random salt failed." +msgstr "No se puede crear la cabecera LUKS: fallo en la lectura «random salt»." + +#: lib/luks1/keymanage.c:800 +#, c-format +msgid "Cannot create LUKS header: header digest failed (using hash %s)." +msgstr "No se puede crear la cabecera LUKS: fallo en la cabecera (usando «hash» %s)." + +#: lib/luks1/keymanage.c:844 +#, c-format +msgid "Key slot %d active, purge first." +msgstr "La ranura de claves %d está activa; primero hay que purgar." + +#: lib/luks1/keymanage.c:850 +#, c-format +msgid "Key slot %d material includes too few stripes. Header manipulation?" +msgstr "El material de la ranura de claves %d no tiene suficientes bandas. Quizá se haya manipulado la cabecera." + +#: lib/luks1/keymanage.c:1060 +#, c-format +msgid "Key slot %d is invalid, please select keyslot between 0 and %d." +msgstr "La ranura %d no es válida; seleccione una ranura de claves entre 0 y %d." + +#: lib/luks1/keymanage.c:1078 lib/luks2/luks2_keyslot.c:743 +#, c-format +msgid "Cannot wipe device %s." +msgstr "No se puede limpiar el dispositivo %s." + +#: lib/loopaes/loopaes.c:146 +msgid "Detected not yet supported GPG encrypted keyfile." +msgstr "Se ha detectado un fichero de claves cifrado con GPG que el programa aún no no puede procesar." + +#: lib/loopaes/loopaes.c:147 +msgid "Please use gpg --decrypt | cryptsetup --keyfile=- ...\n" +msgstr "Utilice 'gpg --decrypt | cryptsetup --keyfile=- ...'\n" + +#: lib/loopaes/loopaes.c:168 lib/loopaes/loopaes.c:188 +msgid "Incompatible loop-AES keyfile detected." +msgstr "Se ha detectado un fichero de claves incompatible con «loop-AES»." + +#: lib/loopaes/loopaes.c:245 +msgid "Kernel doesn't support loop-AES compatible mapping." +msgstr "El núcleo no admite asignación compatible con «loop-AES»." + +#: lib/tcrypt/tcrypt.c:505 +#, c-format +msgid "Error reading keyfile %s." +msgstr "Error leyendo el fichero de claves %s." + +#: lib/tcrypt/tcrypt.c:545 +#, c-format +msgid "Maximum TCRYPT passphrase length (%d) exceeded." +msgstr "Se ha excedido la longitud máxima (%d) de la frase contraseña TCRYPT." + +#: lib/tcrypt/tcrypt.c:586 +#, c-format +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:602 src/cryptsetup.c:959 +msgid "Required kernel crypto interface not available." +msgstr "La interfaz de cifrado del núcleo requerida no está disponible." + +#: lib/tcrypt/tcrypt.c:604 src/cryptsetup.c:961 +msgid "Ensure you have algif_skcipher kernel module loaded." +msgstr "Asegúrese de que el módulo del núcleo algof_skcipher está cargado." + +#: lib/tcrypt/tcrypt.c:744 +#, c-format +msgid "Activation is not supported for %d sector size." +msgstr "No es posible la activación para el tamaño de sector %d." + +#: lib/tcrypt/tcrypt.c:750 +msgid "Kernel doesn't 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:784 +#, 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:862 +msgid "Kernel doesn't support TCRYPT compatible mapping." +msgstr "El núcleo no admite asignación compatible con TCRYPT." + +#: lib/tcrypt/tcrypt.c:1084 +msgid "This function is not supported without TCRYPT header load." +msgstr "Esta función no está disponible sin carga de cabecera TCRYPT." + +#: lib/verity/verity.c:69 lib/verity/verity.c:172 +#, c-format +msgid "Verity device %s doesn't use on-disk header." +msgstr "El dispositivo «verity» %s no utiliza cabecera en disco." + +#: lib/verity/verity.c:91 +#, c-format +msgid "Device %s is not a valid VERITY device." +msgstr "El dispositivo %s no es un dispositivo VERITY válido." + +#: lib/verity/verity.c:98 +#, c-format +msgid "Unsupported VERITY version %d." +msgstr "Versión VERITY %d no disponible." + +#: lib/verity/verity.c:129 +msgid "VERITY header corrupted." +msgstr "Cabecera VERITY corrupta." + +#: lib/verity/verity.c:166 +#, c-format +msgid "Wrong VERITY UUID format provided on device %s." +msgstr "El formato UUID VERITY proporcionado en el dispositivo %s es incorrecto." + +#: lib/verity/verity.c:199 +#, c-format +msgid "Error during update of verity header on device %s." +msgstr "Error al actualizar la cabecera «verity» en el dispositivo %s." + +#: lib/verity/verity.c:262 +msgid "Errors cannot be repaired with FEC device." +msgstr "Los errores no pueden repararse con dispositivo FEC." + +#: lib/verity/verity.c:264 +#, c-format +msgid "Found %u repairable errors with FEC device." +msgstr "Se han encontrado %u errores reparables con dispositivo FEC." + +#: lib/verity/verity.c:302 +msgid "Kernel doesn't support dm-verity mapping." +msgstr "El núcleo no dispone de asignación «dm-verity»." + +#: lib/verity/verity.c:313 +msgid "Verity device detected corruption after activation." +msgstr "El dispositivo «verity» ha detectado algo corrupto después de la activación." + +#: lib/verity/verity_hash.c:59 +#, c-format +msgid "Spare area is not zeroed at position %." +msgstr "El área de reserva no tiene ceros en la posición %." + +#: lib/verity/verity_hash.c:160 lib/verity/verity_hash.c:287 +#: lib/verity/verity_hash.c:300 +msgid "Device offset overflow." +msgstr "Desbordamiento de la posición del dispositivo." + +#: lib/verity/verity_hash.c:200 +#, c-format +msgid "Verification failed at position %." +msgstr "La verificación ha fallado en la posición %." + +#: lib/verity/verity_hash.c:273 +msgid "Invalid size parameters for verity device." +msgstr "Parámetros de tamaño inválido para un dispositivo «verity»." + +#: lib/verity/verity_hash.c:293 +msgid "Hash area overflow." +msgstr "Desbordamiento del área «hash»." + +#: lib/verity/verity_hash.c:370 +msgid "Verification of data area failed." +msgstr "Fallo en la verificación del área de datos." + +#: lib/verity/verity_hash.c:375 +msgid "Verification of root hash failed." +msgstr "Fallo en la verificación de la «hash» raíz." + +#: lib/verity/verity_hash.c:381 +msgid "Input/output error while creating hash area." +msgstr "Error de entrada/salida al crear el área «hash»." + +#: lib/verity/verity_hash.c:383 +msgid "Creation of hash area failed." +msgstr "La creación del área «hash» ha fallado." + +#: lib/verity/verity_hash.c:430 +#, c-format +msgid "WARNING: Kernel cannot activate device if data block size exceeds page size (%u)." +msgstr "ATENCIÓN: el núcleo no puede activar un dispositivo si el tamaño del bloque de datos excede el tamaño de página (%u)." + +#: lib/verity/verity_fec.c:132 +msgid "Failed to allocate RS context." +msgstr "No se ha podido asignar contexto RS." + +#: lib/verity/verity_fec.c:147 +msgid "Failed to allocate buffer." +msgstr "No se ha podido asignar «buffer»." + +#: lib/verity/verity_fec.c:157 +#, c-format +msgid "Failed to read RS block % byte %d." +msgstr "No se ha podido leer el bloque RS % byte %d." + +#: lib/verity/verity_fec.c:170 +#, c-format +msgid "Failed to read parity for RS block %." +msgstr "No se ha podido leer la paridad para el bloque RS %." + +#: lib/verity/verity_fec.c:178 +#, c-format +msgid "Failed to repair parity for block %." +msgstr "No se ha podido reparar la paridad para el bloque %." + +#: lib/verity/verity_fec.c:189 +#, c-format +msgid "Failed to write parity for RS block %." +msgstr "No se ha podido escribir la paridad para el bloque RS %." + +#: lib/verity/verity_fec.c:224 +msgid "Block sizes must match for FEC." +msgstr "Los tamaños de bloque deben coincidir para FEC." + +#: lib/verity/verity_fec.c:230 +msgid "Invalid number of parity bytes." +msgstr "Número no válido de bytes de paridad." + +#: lib/verity/verity_fec.c:266 +#, c-format +msgid "Failed to determine size for device %s." +msgstr "No se ha podido determinar el tamaño para el dispositivo %s." + +#: lib/integrity/integrity.c:241 lib/integrity/integrity.c:306 +msgid "Kernel doesn't support dm-integrity mapping." +msgstr "El núcleo no dispone de asociación «dm-integrity»." + +#: lib/luks2/luks2_disk_metadata.c:383 lib/luks2/luks2_json_metadata.c:959 +#: lib/luks2/luks2_json_metadata.c:1245 +#, c-format +msgid "Failed to acquire write lock on device %s." +msgstr "No se ha podido adquirir el bloqueo de escritura del dispositivo %s." + +#: lib/luks2/luks2_disk_metadata.c:392 +msgid "Detected attempt for concurrent LUKS2 metadata update. Aborting operation." +msgstr "Se ha detectado un intento de actualizar los metadatos LUKS2 concurrentemente. Se aborta la operación." + +#: 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 "" +"El dispositivo contiene firmas ambiguas; no se puede autorecuperar LUKS2.\n" +"Por favor, ejecute \"cryptsetup repair\" para recuperación." + +#: lib/luks2/luks2_json_format.c:227 +msgid "Requested data offset is too small." +msgstr "El desplazamiento de datos solicitado es demasiado pequeño." + +#: 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 "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:1075 +#: lib/luks2/luks2_json_metadata.c:1151 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:1168 +#, 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:1209 +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:1215 +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:1222 +#, c-format +msgid "Device %s %s%s%s%s" +msgstr "Dispositivo %s %s%s%s%s" + +#: lib/luks2/luks2_json_metadata.c:1223 +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:1224 +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:1226 +msgid "" +"\n" +"WARNING: unknown LUKS2 requirements detected in real device header!\n" +"Replacing header with backup may corrupt the data on that device!" +msgstr "" +"\n" +"AVISO: ¡Se han detectado requisitos LUKS2 desconocidos en cabecera de\n" +"dispositivo real! Reemplazar la cabecera con la copia de seguridad puede\n" +"corromper los datos en ese dispositivo!" + +#: lib/luks2/luks2_json_metadata.c:1228 +msgid "" +"\n" +"WARNING: Unfinished offline reencryption detected on the device!\n" +"Replacing header with backup may corrupt data." +msgstr "" +"\n" +"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:1324 +#, c-format +msgid "Ignored unknown flag %s." +msgstr "Se hará caso omiso del indicador desconocido %s." + +#: lib/luks2/luks2_json_metadata.c:2011 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:2023 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:2029 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:2156 +msgid "Unsupported device integrity configuration." +msgstr "Configuración de integridad de dispositivo no admitida." + +#: lib/luks2/luks2_json_metadata.c:2242 +msgid "Reencryption in-progress. Cannot deactivate device." +msgstr "Recifrado en curso. No se puede desactivar el dispositivo." + +#: lib/luks2/luks2_json_metadata.c:2253 lib/luks2/luks2_reencrypt.c:3171 +#, 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:2333 +msgid "Failed to read LUKS2 requirements." +msgstr "No se ha podido leer los requisitos LUKS2." + +#: lib/luks2/luks2_json_metadata.c:2340 +msgid "Unmet LUKS2 requirements detected." +msgstr "Se han detectado requisitos LUKS2 no satisfechos." + +#: lib/luks2/luks2_json_metadata.c:2348 +msgid "Offline reencryption in progress. Aborting." +msgstr "Recifrado «offline» en curso. Se aborta." + +#: lib/luks2/luks2_json_metadata.c:2350 +msgid "Online reencryption in progress. Aborting." +msgstr "Recifrado «online» en curso. Se aborta." + +#: lib/luks2/luks2_keyslot.c:552 lib/luks2/luks2_keyslot.c:589 +msgid "Not enough available memory to open a keyslot." +msgstr "No hay memoria disponible suficiente para abrir una ranura de claves." + +#: lib/luks2/luks2_keyslot.c:554 lib/luks2/luks2_keyslot.c:591 +msgid "Keyslot open failed." +msgstr "Fallo al abrir la ranura de claves." + +#: 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 "No se puede utilizar el algoritmo de cifrado %s-%s para el cifrado de ranuras de clave." + +#: lib/luks2/luks2_keyslot_luks2.c:480 +msgid "No space for new keyslot." +msgstr "No hay espacio para la nueva ranura de claves." + +#: lib/luks2/luks2_luks1_convert.c:481 +#, c-format +msgid "Cannot check status of device with uuid: %s." +msgstr "No se puede comprobar el estado del dispositivo con uuid: %s." + +#: lib/luks2/luks2_luks1_convert.c:507 +msgid "Unable to convert header with LUKSMETA additional metadata." +msgstr "Imposible convertir cabecera con metadatos adicionales LUKSMETA." + +#: lib/luks2/luks2_luks1_convert.c:547 +msgid "Unable to move keyslot area. Not enough space." +msgstr "Imposible mover el área de la ranura de claves. No hay suficiente espacio." + +#: lib/luks2/luks2_luks1_convert.c:590 lib/luks2/luks2_luks1_convert.c:872 +msgid "Unable to move keyslot area." +msgstr "Imposible mover el área de la ranura de claves." + +#: lib/luks2/luks2_luks1_convert.c:682 +msgid "Cannot convert to LUKS1 format - default segment encryption sector size is not 512 bytes." +msgstr "No se puede convertir a formato LUKS1 - el tamaño predefinido de sector de cifrado del segmento no es 512 bytes." + +#: lib/luks2/luks2_luks1_convert.c:690 +msgid "Cannot convert to LUKS1 format - key slot digests are not LUKS1 compatible." +msgstr "No se puede convertir a formato LUKS1 - los resúmenes de rarunas de claves no son compatibles con LUKS1." + +#: lib/luks2/luks2_luks1_convert.c:702 +#, c-format +msgid "Cannot convert to LUKS1 format - device uses wrapped key cipher %s." +msgstr "No se puede convertir a formato LUKS1 - el dispositivo utiliza el cifrado de clave encapsulado %s." + +#: lib/luks2/luks2_luks1_convert.c:710 +#, c-format +msgid "Cannot convert to LUKS1 format - LUKS2 header contains %u token(s)." +msgstr "No se puede convertir a formato LUKS1 - la cabecera LUKS2 contiene %u «token(s)»." + +#: lib/luks2/luks2_luks1_convert.c:724 +#, c-format +msgid "Cannot convert to LUKS1 format - keyslot %u is in invalid state." +msgstr "No se puede convertir a formato LUKS1 - la ranura de claves %u está en un estado no válido." + +#: lib/luks2/luks2_luks1_convert.c:729 +#, c-format +msgid "Cannot convert to LUKS1 format - slot %u (over maximum slots) is still active." +msgstr "No se puede convertir a formato LUKS1 - la ranura %u (sobre las ranuras máximas) todavía está activa." + +#: lib/luks2/luks2_luks1_convert.c:734 +#, c-format +msgid "Cannot convert to LUKS1 format - keyslot %u is not LUKS1 compatible." +msgstr "No se puede convertir a formato LUKS1 - la ranura de claves %u no es compatible con LUKS1." + +#: lib/luks2/luks2_reencrypt.c:892 +#, c-format +msgid "Hotzone size must be multiple of calculated zone alignment (%zu bytes)." +msgstr "El tamaño de la zona activa debe ser múltiplo del alineamiento de zona calculado (%zu bytes)." + +#: lib/luks2/luks2_reencrypt.c:897 +#, c-format +msgid "Device size must be multiple of calculated zone alignment (%zu bytes)." +msgstr "El tamaño del dispositivo debe ser múltiplo del alineamiento de zona calculado (%zu bytes)." + +#: lib/luks2/luks2_reencrypt.c:941 +#, c-format +msgid "Unsupported resilience mode %s" +msgstr "Modo de resiliencia %s no admitido." + +#: lib/luks2/luks2_reencrypt.c:1158 lib/luks2/luks2_reencrypt.c:1313 +#: lib/luks2/luks2_reencrypt.c:1396 lib/luks2/luks2_reencrypt.c:1430 +#: lib/luks2/luks2_reencrypt.c:3011 +msgid "Failed to initialize old segment storage wrapper." +msgstr "No se ha podido inicializar la envoltura antigua de almacenamiento del segmento." + +#: lib/luks2/luks2_reencrypt.c:1172 lib/luks2/luks2_reencrypt.c:1291 +msgid "Failed to initialize new segment storage wrapper." +msgstr "No se ha podido inicializar la envoltura nueva de almacenamiento del segmento." + +#: lib/luks2/luks2_reencrypt.c:1340 +msgid "Failed to read checksums for current hotzone." +msgstr "No se han podido leer las sumas de comprobación para la zona activa actual." + +#: lib/luks2/luks2_reencrypt.c:1347 lib/luks2/luks2_reencrypt.c:3019 +#, c-format +msgid "Failed to read hotzone area starting at %." +msgstr "No se ha podido leer la zona activa que comienza en %." + +#: lib/luks2/luks2_reencrypt.c:1366 +#, c-format +msgid "Failed to decrypt sector %zu." +msgstr "No se ha podido descifrar el sector %zu." + +#: lib/luks2/luks2_reencrypt.c:1372 +#, c-format +msgid "Failed to recover sector %zu." +msgstr "No se ha podido recuperar el sector %zu." + +#: lib/luks2/luks2_reencrypt.c:1867 +#, c-format +msgid "Source and target device sizes don't match. Source %, target: %." +msgstr "Los tamaños de los dispositivos origen y destino no coinciden. Origen %, destino: %." + +#: lib/luks2/luks2_reencrypt.c:1965 +#, c-format +msgid "Failed to activate hotzone device %s." +msgstr "No se ha podido activar el dispositivo con zona activa %s." + +#: lib/luks2/luks2_reencrypt.c:1982 +#, c-format +msgid "Failed to activate overlay device %s with actual origin table." +msgstr "No se ha podido activar el dispositivo de superposición %s con la tabla de orígenes actual." + +#: lib/luks2/luks2_reencrypt.c:1989 +#, c-format +msgid "Failed to load new mapping for device %s." +msgstr "No se ha podido cargar el nuevo mapa para el dispositivo %s." + +#: lib/luks2/luks2_reencrypt.c:2060 +msgid "Failed to refresh reencryption devices stack." +msgstr "No se ha podido refrescar la pila del dispositivo de recifrado." + +#: lib/luks2/luks2_reencrypt.c:2216 +msgid "Failed to set new keyslots area size." +msgstr "No se ha logrado establecer el tamaño de las nuevas ranuras de claves." + +#: lib/luks2/luks2_reencrypt.c:2318 +#, c-format +msgid "Data shift is not aligned to requested encryption sector size (% bytes)." +msgstr "El desplazamiento de datos no está alineado con el tamaño del sector de cifrado solicitado (% bytes)." + +#: lib/luks2/luks2_reencrypt.c:2339 +#, c-format +msgid "Data device is not aligned to requested encryption sector size (% bytes)." +msgstr "El dispositivo de datos no está alineado con el tamaño del sector de cifrado solicitado (% bytes)." + +#: lib/luks2/luks2_reencrypt.c:2360 +#, c-format +msgid "Data shift (% sectors) is less than future data offset (% sectors)." +msgstr "El desplazamiento de datos (% sectores) es menor que el desplazamiento de datos futuros (% sectores)." + +#: lib/luks2/luks2_reencrypt.c:2366 lib/luks2/luks2_reencrypt.c:2760 +#: lib/luks2/luks2_reencrypt.c:2781 +#, c-format +msgid "Failed to open %s in exclusive mode (already mapped or mounted)." +msgstr "No se ha podido abrir %s en modo exclusivo (ya está asignado o montado)." + +#: lib/luks2/luks2_reencrypt.c:2534 +msgid "No LUKS2 reencryption in progress." +msgstr "No hay ningún recifrado LUKS2 en proceso." + +#: lib/luks2/luks2_reencrypt.c:2540 lib/luks2/luks2_reencrypt.c:3276 +msgid "Failed to load LUKS2 reencryption context." +msgstr "No se ha podido cargar el contexto del recifrado LUKS2." + +#: lib/luks2/luks2_reencrypt.c:2600 +msgid "Failed to get reencryption state." +msgstr "No se ha podido obtener el estado del recifrado." + +#: lib/luks2/luks2_reencrypt.c:2604 +msgid "Device is not in reencryption." +msgstr "El dispositivo no está en recifrado." + +#: lib/luks2/luks2_reencrypt.c:2611 +msgid "Reencryption process is already running." +msgstr "El proceso de recifrado ya está en marcha." + +#: lib/luks2/luks2_reencrypt.c:2613 +msgid "Failed to acquire reencryption lock." +msgstr "No se ha podido adquirir el bloqueo de recifrado." + +#: lib/luks2/luks2_reencrypt.c:2631 +msgid "Cannot proceed with reencryption. Run reencryption recovery first." +msgstr "No se puede proceder con el recifrado. Ejecute primero la recuperación de recifrado." + +#: lib/luks2/luks2_reencrypt.c:2731 +msgid "Active device size and requested reencryption size don't match." +msgstr "El tamaño del dispositivo activo y el tamaño de recifrado solicitado no coinciden." + +#: lib/luks2/luks2_reencrypt.c:2745 +msgid "Illegal device size requested in reencryption parameters." +msgstr "El tamaño de dispositivo solicitado en los parámetros de recifrado no es válido." + +#: lib/luks2/luks2_reencrypt.c:2815 +msgid "Reencryption in-progress. Cannot perform recovery." +msgstr "Recifrado en proceso. No se puede llevar a cabo una recuperación." + +#: lib/luks2/luks2_reencrypt.c:2887 +msgid "LUKS2 reencryption already initialized in metadata." +msgstr "Recifrado LUKS2 ya inicializado en los metadatos." + +#: lib/luks2/luks2_reencrypt.c:2894 +msgid "Failed to initialize LUKS2 reencryption in metadata." +msgstr "No se ha podido inicializar el recifrado LUKS2 en los metadatos." + +#: lib/luks2/luks2_reencrypt.c:2985 +msgid "Failed to set device segments for next reencryption hotzone." +msgstr "No se han podido establecer los segmentos del dispositivo para la siguiente zona activa de recifrado." + +#: lib/luks2/luks2_reencrypt.c:3027 +msgid "Failed to write reencryption resilience metadata." +msgstr "No se han podido escribir los metadatos de resiliencia de recifrado." + +#: lib/luks2/luks2_reencrypt.c:3034 +msgid "Decryption failed." +msgstr "El descifrado ha fallado." + +#: lib/luks2/luks2_reencrypt.c:3039 +#, c-format +msgid "Failed to write hotzone area starting at %." +msgstr "No se ha podido escribir la zona activa que comienza en %." + +#: lib/luks2/luks2_reencrypt.c:3044 +msgid "Failed to sync data." +msgstr "No se han podido sincronizar los datos." + +#: lib/luks2/luks2_reencrypt.c:3052 +msgid "Failed to update metadata after current reencryption hotzone completed." +msgstr "No se han podido actualizar los metadatos tras completar la zona activa de recifrado actual." + +#: lib/luks2/luks2_reencrypt.c:3119 +msgid "Failed to write LUKS2 metadata." +msgstr "No se han podido escribir los metadatos de LUKS2." + +#: lib/luks2/luks2_reencrypt.c:3142 +msgid "Failed to wipe backup segment data." +msgstr "No se han podido limpiar los datos de segmentos de respaldo." + +#: lib/luks2/luks2_reencrypt.c:3155 +msgid "Failed to disable reencryption requirement flag." +msgstr "No se ha podido desactivar el indicador del requisito de descifrado." + +#: lib/luks2/luks2_reencrypt.c:3163 +#, c-format +msgid "Fatal error while reencrypting chunk starting at %, % sectors long." +msgstr "Error fatal mientras se recifraba una porción que comienza en %, de % sectores de longitud." + +# No sé cómo traducir 'error target'. +#: lib/luks2/luks2_reencrypt.c:3172 +msgid "Do not resume the device unless replaced with error target manually." +msgstr "No reanudar el dispositivo a menos que se reemplace con «error target» manualmente." + +#: lib/luks2/luks2_reencrypt.c:3221 +msgid "Cannot proceed with reencryption. Unexpected reencryption status." +msgstr "No se puede proceder con el recifrado. Estado de recifrado inesperado." + +#: lib/luks2/luks2_reencrypt.c:3227 +msgid "Missing or invalid reencrypt context." +msgstr "Contexto de recifrado ausente o no válido." + +#: lib/luks2/luks2_reencrypt.c:3234 +msgid "Failed to initialize reencryption device stack." +msgstr "No se ha podido inicializar la pila del dispositivo de recifrado." + +#: lib/luks2/luks2_reencrypt.c:3253 lib/luks2/luks2_reencrypt.c:3289 +msgid "Failed to update reencryption context." +msgstr "No se ha podido actualizar el contexto de recifrado." + +#: lib/luks2/luks2_token.c:262 +msgid "No free token slot." +msgstr "No hay ninguna ranura de «token» libre." + +#: lib/luks2/luks2_token.c:269 +#, c-format +msgid "Failed to create builtin token %s." +msgstr "No se ha podido crear el «token» interno %s." + +#: src/cryptsetup.c:162 +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:215 +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:245 src/cryptsetup.c:893 src/cryptsetup.c:1212 +#: src/cryptsetup.c:3011 src/cryptsetup_reencrypt.c:715 +#: src/cryptsetup_reencrypt.c:785 +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:253 +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:261 +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:301 +#, 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:307 src/cryptsetup.c:1038 src/cryptsetup.c:1090 +#: src/cryptsetup.c:1189 src/cryptsetup.c:1262 src/cryptsetup.c:1913 +#: src/cryptsetup.c:2545 src/cryptsetup.c:2668 src/integritysetup.c:232 +msgid "Operation aborted.\n" +msgstr "Operación abortada.\n" + +#: src/cryptsetup.c:375 +msgid "Option --key-file is required." +msgstr "Es necesaria la opción --key-file." + +#: src/cryptsetup.c:428 +msgid "Enter VeraCrypt PIM: " +msgstr "Introduzca PIM de VeraCrypt: " + +#: src/cryptsetup.c:437 +msgid "Invalid PIM value: parse error." +msgstr "Valor de PIM no válido: error de análisis." + +#: src/cryptsetup.c:440 +msgid "Invalid PIM value: 0." +msgstr "Valor de PIM no válido: 0." + +#: src/cryptsetup.c:443 +msgid "Invalid PIM value: outside of range." +msgstr "Valor de PIM no válido: fuera de rango." + +#: src/cryptsetup.c:466 +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:528 src/cryptsetup.c:1940 +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 "" +"El volcado de la cabecera con la clave del volumen es información\n" +"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:607 +#, 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:635 +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:771 +msgid "Benchmark interrupted." +msgstr "Comparativa interrumpida." + +#: src/cryptsetup.c:792 +#, c-format +msgid "PBKDF2-%-9s N/A\n" +msgstr "PBKDF2-%-9s N/A\n" + +#: src/cryptsetup.c:794 +#, 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:808 +#, c-format +msgid "%-10s N/A\n" +msgstr "%-10s N/A\n" + +#: src/cryptsetup.c:810 +#, 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:834 +msgid "Result of benchmark is not reliable." +msgstr "El resultado de la comparativa no es fiable." + +#: src/cryptsetup.c:885 +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:919 +#, c-format +msgid "#%*s Algorithm | Key | Encryption | Decryption\n" +msgstr "#%*s Algoritmo | Clave | Cifrado | Descifrado\n" + +#: src/cryptsetup.c:923 +#, c-format +msgid "Cipher %s is not available." +msgstr "El algoritmo de cifrado %s no está disponible." + +#. TRANSLATORS: The string is header of a table and must be exactly (right side) aligned. +#: src/cryptsetup.c:943 +msgid "# Algorithm | Key | Encryption | Decryption\n" +msgstr "# Algoritmo | Clave | Cifrado | Descifrado\n" + +#: src/cryptsetup.c:952 +msgid "N/A" +msgstr "/N/A" + +#: src/cryptsetup.c:1031 +msgid "" +"Seems device does not require reencryption recovery.\n" +"Do you want to proceed anyway?" +msgstr "" +"Parece que el dispositivo no necesita recuperación del recifrado.\n" +"¿Desea continuar de todos modos?" + +#: src/cryptsetup.c:1037 +msgid "Really proceed with LUKS2 reencryption recovery?" +msgstr "¿Está seguro de proceder con la recuperación del recifrado LUKS2?" + +#: src/cryptsetup.c:1046 +msgid "Enter passphrase for reencryption recovery: " +msgstr "Introduzca la frase contraseña para la recuperación del recifrado: " + +#: src/cryptsetup.c:1089 +msgid "Really try to repair LUKS device header?" +msgstr "¿Está seguro de que quiere intentar reparar la cabecera del dispositivo LUKS?" + +#: src/cryptsetup.c:1108 src/integritysetup.c:145 +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 "" +"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:1130 src/integritysetup.c:167 +#, c-format +msgid "Cannot deactivate temporary device %s." +msgstr "No se puede desactivar el dispositivo temporal %s." + +#: src/cryptsetup.c:1174 +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:1179 src/cryptsetup.c:1239 +msgid "Unsupported LUKS2 metadata size options." +msgstr "Opciones de tamaño de metadatos LUKS2 no admitidas." + +#: src/cryptsetup.c:1196 +#, c-format +msgid "Cannot create header file %s." +msgstr "No se puede crear el fichero de cabecera %s." + +#: src/cryptsetup.c:1219 src/integritysetup.c:194 src/integritysetup.c:203 +#: src/integritysetup.c:212 src/integritysetup.c:279 src/integritysetup.c:288 +#: src/integritysetup.c:298 +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:1232 +#, c-format +msgid "Cannot use %s as on-disk header." +msgstr "No se puede utilizar %s como cabecera en disco." + +#: src/cryptsetup.c:1256 src/integritysetup.c:226 +#, c-format +msgid "This will overwrite data on %s irrevocably." +msgstr "Esto sobreescribirá los datos en %s de forma irrevocable." + +#: src/cryptsetup.c:1297 src/cryptsetup.c:1627 src/cryptsetup.c:1694 +#: src/cryptsetup.c:1796 src/cryptsetup.c:1862 src/cryptsetup_reencrypt.c:545 +msgid "Failed to set pbkdf parameters." +msgstr "No se han podido establecer los parámetros pbkdf." + +#: src/cryptsetup.c:1378 +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:1389 src/cryptsetup.c:1700 +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:1427 +msgid "Device activated but cannot make flags persistent." +msgstr "Dispositivo activado pero los indicadores no pueden hacerse persistentes." + +#: src/cryptsetup.c:1508 src/cryptsetup.c:1578 +#, c-format +msgid "Keyslot %d is selected for deletion." +msgstr "La ranura de claves %d se va a borrar." + +#: src/cryptsetup.c:1520 src/cryptsetup.c:1581 +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:1521 +msgid "Enter any remaining passphrase: " +msgstr "Introduzca cualquier frase contraseña que quede: " + +#: src/cryptsetup.c:1522 src/cryptsetup.c:1583 +msgid "Operation aborted, the keyslot was NOT wiped.\n" +msgstr "Operación abortada; la ranura de claves NO estaba limpia.\n" + +#: src/cryptsetup.c:1560 +msgid "Enter passphrase to be deleted: " +msgstr "Introduzca la frase contraseña que hay que borrar: " + +#: src/cryptsetup.c:1641 src/cryptsetup.c:1715 src/cryptsetup.c:1749 +msgid "Enter new passphrase for key slot: " +msgstr "Introduzca una nueva frase contraseña para la ranura de claves: " + +#: src/cryptsetup.c:1732 src/cryptsetup_reencrypt.c:1327 +#, c-format +msgid "Enter any existing passphrase: " +msgstr "Introduzca cualquier frase contraseña que exista: " + +#: src/cryptsetup.c:1800 +msgid "Enter passphrase to be changed: " +msgstr "Introduzca la frase contraseña que hay que cambiar: " + +#: src/cryptsetup.c:1816 src/cryptsetup_reencrypt.c:1313 +msgid "Enter new passphrase: " +msgstr "Introduzca una nueva frase contraseña: " + +#: src/cryptsetup.c:1866 +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:1890 +msgid "Only one device argument for isLuks operation is supported." +msgstr "La operación isLuks solo admite un argumento de dispositivo." + +#: src/cryptsetup.c:2074 src/cryptsetup.c:2095 +msgid "Option --header-backup-file is required." +msgstr "Es necesaria la opción --header-backup-file." + +#: src/cryptsetup.c:2125 +#, c-format +msgid "%s is not cryptsetup managed device." +msgstr "%s no es un dispositivo gestionable por cryptsetup." + +#: src/cryptsetup.c:2136 +#, 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:2174 +#, c-format +msgid "Unrecognized metadata device type %s." +msgstr "Tipo de dispositivo de metadatos %s no reconocido." + +#: src/cryptsetup.c:2177 +msgid "Command requires device and mapped name as arguments." +msgstr "Esta orden necesita como argumentos el dispositivo y el nombre asociado." + +#: src/cryptsetup.c:2199 +#, c-format +msgid "" +"This operation will erase all keyslots on device %s.\n" +"Device will become unusable after this operation." +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:2206 +msgid "Operation aborted, keyslots were NOT wiped.\n" +msgstr "Operación abortada; las ranuras de claves NO estaban limpias.\n" + +#: src/cryptsetup.c:2243 +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:2261 +#, c-format +msgid "Device is already %s type." +msgstr "El dispositivo ya es de tipo %s." + +#: src/cryptsetup.c:2266 +#, 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:2272 +msgid "Operation aborted, device was NOT converted.\n" +msgstr "Operación abortada; el dispositivo NO estaba convertido.\n" + +#: src/cryptsetup.c:2312 +msgid "Option --priority, --label or --subsystem is missing." +msgstr "Falta la opción --priority, --label o --subsystem." + +#: src/cryptsetup.c:2346 src/cryptsetup.c:2379 src/cryptsetup.c:2402 +#, c-format +msgid "Token %d is invalid." +msgstr "El «token» %d no es válido." + +#: src/cryptsetup.c:2349 src/cryptsetup.c:2405 +#, c-format +msgid "Token %d in use." +msgstr "El «token» %d está en uso." + +#: src/cryptsetup.c:2356 +#, 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:2365 src/cryptsetup.c:2427 +#, 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:2382 +#, c-format +msgid "Token %d is not in use." +msgstr "El «token» %d no está en uso." + +#: src/cryptsetup.c:2417 +msgid "Failed to import token from file." +msgstr "No se ha podido importar el «token» del fichero." + +#: src/cryptsetup.c:2442 +#, c-format +msgid "Failed to get token %d for export." +msgstr "No se ha logrado obtener el «token» %d para exportar." + +#: src/cryptsetup.c:2457 +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:2463 src/cryptsetup.c:2471 +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:2476 +#, c-format +msgid "Invalid token operation %s." +msgstr "Operación de «token» no válida %s." + +#: src/cryptsetup.c:2531 +#, 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:2535 +#, 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:2537 +#, 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:2539 +#, 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 "" +"Imposible decidir si el dispositivo %s está activado o no.\n" +"¿Está seguro de que desea proceder con el recifrado en modo «offline»?\n" +"Puede provocarse corrupción de datos si el dispositivo está realmente\n" +"activado. Para realizar recifrado en modo «online», utilice en su lugar\n" +"el parámetro --active-name.\n" + +#: src/cryptsetup.c:2619 +msgid "Invalid LUKS device type." +msgstr "Tipo de dispositivo LUKS no válido." + +#: src/cryptsetup.c:2624 +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:2629 +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:2638 +#, 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:2642 +msgid "Encryption is supported only for LUKS2 format." +msgstr "El cifrado solo puede hacerse con formato LUKS2." + +#: src/cryptsetup.c:2664 +#, 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:2679 +#, c-format +msgid "Temporary header file %s already exists. Aborting." +msgstr "El fichero de cabecera temporal %s ya existe. Se aborta." + +#: src/cryptsetup.c:2681 src/cryptsetup.c:2688 +#, c-format +msgid "Cannot create temporary header file %s." +msgstr "No se puede crear el fichero de cabecera temporal %s." + +#: src/cryptsetup.c:2752 +#, c-format +msgid "%s/%s is now active and ready for online encryption." +msgstr "%s/%s ahora está activo y preparado para cifrado «online»." + +#: src/cryptsetup.c:2919 src/cryptsetup.c:2925 +msgid "Not enough free keyslots for reencryption." +msgstr "No hay suficientes ranuras de claves para el recifrado." + +#: src/cryptsetup.c:2945 src/cryptsetup_reencrypt.c:1284 +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:2954 src/cryptsetup_reencrypt.c:1325 +#: src/cryptsetup_reencrypt.c:1336 +#, c-format +msgid "Enter passphrase for key slot %d: " +msgstr "Introduzca la frase contraseña para la ranura de claves %d: " + +#: src/cryptsetup.c:2962 +#, c-format +msgid "Enter passphrase for key slot %u: " +msgstr "Introduzca la frase contraseña para la ranura de claves %u: " + +#: src/cryptsetup.c:3129 +msgid "Command requires device as argument." +msgstr "Esta orden necesita un dispositivo como argumento." + +#: src/cryptsetup.c:3151 +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:3163 +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:3173 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:3181 +msgid "LUKS2 reencryption already initialized. Aborting operation." +msgstr "El recifrado LUKS2 ya está inicializado. Se aborta la operación." + +#: src/cryptsetup.c:3185 +msgid "LUKS2 device is not in reencryption." +msgstr "El dispositivo LUKS2 no está en recifrado." + +#: src/cryptsetup.c:3212 +msgid " [--type ] []" +msgstr " [--type []" + +#: src/cryptsetup.c:3212 src/veritysetup.c:358 src/integritysetup.c:470 +msgid "open device as " +msgstr "abrir el dispositivo como " + +#: src/cryptsetup.c:3213 src/cryptsetup.c:3214 src/cryptsetup.c:3215 +#: src/veritysetup.c:359 src/veritysetup.c:360 src/integritysetup.c:471 +#: src/integritysetup.c:472 +msgid "" +msgstr "" + +#: src/cryptsetup.c:3213 src/veritysetup.c:359 src/integritysetup.c:471 +msgid "close device (remove mapping)" +msgstr "cerrar dispositivo (eliminar asociación)" + +#: src/cryptsetup.c:3214 +msgid "resize active device" +msgstr "cambiar el tamaño del dispositivo activo" + +#: src/cryptsetup.c:3215 +msgid "show device status" +msgstr "mostrar el estado del dispositivo" + +#: src/cryptsetup.c:3216 +msgid "[--cipher ]" +msgstr "[--cypher ]" + +#: src/cryptsetup.c:3216 +msgid "benchmark cipher" +msgstr "algoritmo de cifrado para pruebas" + +#: src/cryptsetup.c:3217 src/cryptsetup.c:3218 src/cryptsetup.c:3219 +#: src/cryptsetup.c:3220 src/cryptsetup.c:3221 src/cryptsetup.c:3228 +#: src/cryptsetup.c:3229 src/cryptsetup.c:3230 src/cryptsetup.c:3231 +#: src/cryptsetup.c:3232 src/cryptsetup.c:3233 src/cryptsetup.c:3234 +#: src/cryptsetup.c:3235 +msgid "" +msgstr "" + +#: src/cryptsetup.c:3217 +msgid "try to repair on-disk metadata" +msgstr "intentar reparar metadatos en disco" + +#: src/cryptsetup.c:3218 +msgid "reencrypt LUKS2 device" +msgstr "recifrar dispositivo LUKS2" + +#: src/cryptsetup.c:3219 +msgid "erase all keyslots (remove encryption key)" +msgstr "borrar todas las ranuras de claves (eliminar clave de cifrado)" + +#: src/cryptsetup.c:3220 +msgid "convert LUKS from/to LUKS2 format" +msgstr "convertir formato LUKS de/en LUKS2" + +#: src/cryptsetup.c:3221 +msgid "set permanent configuration options for LUKS2" +msgstr "establecer opciones de configuración permanentes para LUKS2" + +#: src/cryptsetup.c:3222 src/cryptsetup.c:3223 +msgid " []" +msgstr " []" + +#: src/cryptsetup.c:3222 +msgid "formats a LUKS device" +msgstr "da formato a un dispositivo LUKS" + +#: src/cryptsetup.c:3223 +msgid "add key to LUKS device" +msgstr "añadir clave a un dispositivo LUKS" + +#: src/cryptsetup.c:3224 src/cryptsetup.c:3225 src/cryptsetup.c:3226 +msgid " []" +msgstr " []" + +#: src/cryptsetup.c:3224 +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:3225 +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:3226 +msgid "converts a key to new pbkdf parameters" +msgstr "convierte una clave a los nuevos parámetros pbkdf" + +#: src/cryptsetup.c:3227 +msgid " " +msgstr " " + +#: src/cryptsetup.c:3227 +msgid "wipes key with number from LUKS device" +msgstr "borra la clave con el número del dispositivo LUKS" + +#: src/cryptsetup.c:3228 +msgid "print UUID of LUKS device" +msgstr "imprimir el UUID del dispositivo LUKS" + +#: src/cryptsetup.c:3229 +msgid "tests for LUKS partition header" +msgstr "comprueba si tiene cabecera de partición LUKS" + +#: src/cryptsetup.c:3230 +msgid "dump LUKS partition information" +msgstr "volcar información sobre la partición LUKS" + +#: src/cryptsetup.c:3231 +msgid "dump TCRYPT device information" +msgstr "volcar información sobre el dispositivo TCRYPT" + +#: src/cryptsetup.c:3232 +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:3233 +msgid "Resume suspended LUKS device" +msgstr "Reanudar el dispositivo LUKS suspendido." + +#: src/cryptsetup.c:3234 +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:3235 +msgid "Restore LUKS device header and keyslots" +msgstr "Restaurar la cabecera y las ranuras de claves del dispositivo LUKS" + +#: src/cryptsetup.c:3236 +msgid " " +msgstr " " + +#: src/cryptsetup.c:3236 +msgid "Manipulate LUKS2 tokens" +msgstr "Manipular «tokens» LUKS2" + +#: src/cryptsetup.c:3254 src/veritysetup.c:376 src/integritysetup.c:488 +msgid "" +"\n" +" is one of:\n" +msgstr "" +"\n" +" es una de:\n" + +#: src/cryptsetup.c:3260 +msgid "" +"\n" +"You can also use old syntax aliases:\n" +"\topen: create (plainOpen), luksOpen, loopaesOpen, tcryptOpen\n" +"\tclose: remove (plainClose), luksClose, loopaesClose, tcryptClose\n" +msgstr "" +"\n" +"También se pueden utilizar los alias del tipo de la antigua sintaxis:\n" +"\topen: create (plainOpen), luksOpen, loopaesOpen, tcryptOpen\n" +"\tclose: remove (plainClose), luksClose, loopaesClose, tcryptClose\n" + +#: src/cryptsetup.c:3264 +#, c-format +msgid "" +"\n" +" is the device to create under %s\n" +" is the encrypted device\n" +" is the LUKS key slot number to modify\n" +" optional key file for the new key for luksAddKey action\n" +msgstr "" +"\n" +" es el dispositivo que se va a crear en %s\n" +" es el dispositivo cifrado\n" +" 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:3271 +#, c-format +msgid "" +"\n" +"Default compiled-in metadata format is %s (for luksFormat action).\n" +msgstr "" +"\n" +"El formato de metadatos predefinido de fábrica es %s (para la acción luksFormat).\n" + +#: src/cryptsetup.c:3276 +#, c-format +msgid "" +"\n" +"Default compiled-in key and passphrase parameters:\n" +"\tMaximum keyfile size: %dkB, Maximum interactive passphrase length %d (characters)\n" +"Default PBKDF for LUKS1: %s, iteration time: %d (ms)\n" +"Default PBKDF for LUKS2: %s\n" +"\tIteration time: %d, Memory required: %dkB, Parallel threads: %d\n" +msgstr "" +"\n" +"Parámetros predefinidos de fábrica de clave y de frase contraseña:\n" +"\tTamaño máximo del fichero de claves: %dk8, Longitud máxima de frase contraseña interactiva: %d (caracteres)\n" +"PBKDF predefinido para LUKS1: %s, tiempo de iteración: %d (ms)\n" +"PBKDF predefinido para LUKS2: %s\n" +"\tTiempo de iteración: %d, Memoria requerida: %dkB, hilos en paralelo: %d\n" + +#: src/cryptsetup.c:3287 +#, c-format +msgid "" +"\n" +"Default compiled-in device cipher parameters:\n" +"\tloop-AES: %s, Key %d bits\n" +"\tplain: %s, Key: %d bits, Password hashing: %s\n" +"\tLUKS: %s, Key: %d bits, LUKS header hashing: %s, RNG: %s\n" +msgstr "" +"\n" +"Parámetros predefinidos de fábrica del algoritmo de cifrado de dispositivos:\n" +"\tbucle-AES: %s, Clave %d bits\n" +"\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:3296 +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:3312 src/veritysetup.c:532 src/integritysetup.c:630 +#, c-format +msgid "%s: requires %s as arguments" +msgstr "%s: necesita %s como argumentos" + +#: src/cryptsetup.c:3350 src/veritysetup.c:421 src/integritysetup.c:527 +#: src/cryptsetup_reencrypt.c:1591 +msgid "Show this help message" +msgstr "Mostrar este mensaje de ayuda" + +#: src/cryptsetup.c:3351 src/veritysetup.c:422 src/integritysetup.c:528 +#: src/cryptsetup_reencrypt.c:1592 +msgid "Display brief usage" +msgstr "Mostrar brevemente cómo se usa" + +#: src/cryptsetup.c:3352 src/veritysetup.c:423 src/integritysetup.c:529 +#: src/cryptsetup_reencrypt.c:1593 +msgid "Print package version" +msgstr "Imprimir versión del paquete" + +#: src/cryptsetup.c:3356 src/veritysetup.c:427 src/integritysetup.c:533 +#: src/cryptsetup_reencrypt.c:1597 +msgid "Help options:" +msgstr "Opciones de ayuda:" + +#: src/cryptsetup.c:3357 src/veritysetup.c:428 src/integritysetup.c:534 +#: src/cryptsetup_reencrypt.c:1598 +msgid "Shows more detailed error messages" +msgstr "Muestra mensajes de error más detallados" + +#: src/cryptsetup.c:3358 src/veritysetup.c:429 src/integritysetup.c:535 +#: src/cryptsetup_reencrypt.c:1599 +msgid "Show debug messages" +msgstr "Mostrar mensajes de depuración" + +#: src/cryptsetup.c:3359 +msgid "Show debug messages including JSON metadata" +msgstr "Mostrar mensajes de depuración incluidos los metadatos JSON" + +#: src/cryptsetup.c:3360 src/cryptsetup_reencrypt.c:1601 +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:3361 src/cryptsetup_reencrypt.c:1603 +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:3362 +msgid "Verifies the passphrase by asking for it twice" +msgstr "Verifica la frase contraseña preguntándola dos veces" + +#: src/cryptsetup.c:3363 src/cryptsetup_reencrypt.c:1605 +msgid "Read the key from a file" +msgstr "Leer la clave de un fichero." + +#: src/cryptsetup.c:3364 +msgid "Read the volume (master) key from file." +msgstr "Leer la clave (maestra) del volumen desde fichero." + +#: src/cryptsetup.c:3365 +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:3366 src/cryptsetup_reencrypt.c:1602 +msgid "The size of the encryption key" +msgstr "Tamaño de la clave de cifrado" + +#: src/cryptsetup.c:3366 src/cryptsetup.c:3425 src/integritysetup.c:553 +#: src/integritysetup.c:557 src/integritysetup.c:561 +#: src/cryptsetup_reencrypt.c:1602 +msgid "BITS" +msgstr "BITS" + +#: src/cryptsetup.c:3367 src/cryptsetup_reencrypt.c:1618 +msgid "Limits the read from keyfile" +msgstr "Limita la lectura desde fichero de claves" + +#: src/cryptsetup.c:3367 src/cryptsetup.c:3368 src/cryptsetup.c:3369 +#: src/cryptsetup.c:3370 src/cryptsetup.c:3373 src/cryptsetup.c:3422 +#: src/cryptsetup.c:3423 src/cryptsetup.c:3431 src/cryptsetup.c:3432 +#: src/veritysetup.c:432 src/veritysetup.c:433 src/veritysetup.c:434 +#: src/veritysetup.c:437 src/veritysetup.c:438 src/integritysetup.c:542 +#: src/integritysetup.c:548 src/integritysetup.c:549 +#: src/cryptsetup_reencrypt.c:1617 src/cryptsetup_reencrypt.c:1618 +#: src/cryptsetup_reencrypt.c:1619 src/cryptsetup_reencrypt.c:1620 +msgid "bytes" +msgstr "bytes" + +#: src/cryptsetup.c:3368 src/cryptsetup_reencrypt.c:1617 +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:3369 +msgid "Limits the read from newly added keyfile" +msgstr "Limita la lectura desde un fichero de claves recién añadido" + +#: src/cryptsetup.c:3370 +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:3371 +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:3372 +msgid "The size of the device" +msgstr "Tamaño del dispositivo" + +#: src/cryptsetup.c:3372 src/cryptsetup.c:3374 src/cryptsetup.c:3375 +#: src/cryptsetup.c:3381 src/integritysetup.c:543 src/integritysetup.c:550 +msgid "SECTORS" +msgstr "SECTORES" + +#: src/cryptsetup.c:3373 src/cryptsetup_reencrypt.c:1620 +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:3374 +msgid "The start offset in the backend device" +msgstr "iPosición de comienzo en el dispositivo «backend»" + +#: src/cryptsetup.c:3375 +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:3376 +msgid "Create a readonly mapping" +msgstr "Crear una asignación alatoria" + +#: src/cryptsetup.c:3377 src/integritysetup.c:536 +#: src/cryptsetup_reencrypt.c:1608 +msgid "Do not ask for confirmation" +msgstr "No pedir confirmación" + +#: src/cryptsetup.c:3378 +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:3378 src/cryptsetup.c:3379 src/integritysetup.c:537 +#: src/cryptsetup_reencrypt.c:1609 +msgid "secs" +msgstr "s" + +#: src/cryptsetup.c:3379 src/integritysetup.c:537 +#: src/cryptsetup_reencrypt.c:1609 +msgid "Progress line update (in seconds)" +msgstr "Actualización de la línea de progreso (en segundos)" + +#: src/cryptsetup.c:3380 src/cryptsetup_reencrypt.c:1610 +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:3381 +msgid "Align payload at sector boundaries - for luksFormat" +msgstr "Alinear los datos a bordes de sector - para luksFormat" + +#: src/cryptsetup.c:3382 +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:3383 src/cryptsetup_reencrypt.c:1611 +msgid "Use /dev/random for generating volume key" +msgstr "Usar /dev/random para generar la clave del volumen." + +#: src/cryptsetup.c:3384 src/cryptsetup_reencrypt.c:1612 +msgid "Use /dev/urandom for generating volume key" +msgstr "Usar /dev/urandom para generar la clave del volumen." + +#: src/cryptsetup.c:3385 +msgid "Share device with another non-overlapping crypt segment" +msgstr "Compartir dispositivo con otro segmento cifrado no solapado." + +#: src/cryptsetup.c:3386 src/veritysetup.c:441 +msgid "UUID for device to use" +msgstr "UUID del dispositivo que se va a usar" + +#: src/cryptsetup.c:3387 +msgid "Allow discards (aka TRIM) requests for device" +msgstr "Permitir solicitudes de descarte (también llamadas TRIM) para el dispositivo" + +#: src/cryptsetup.c:3388 src/cryptsetup_reencrypt.c:1629 +msgid "Device or file with separated LUKS header" +msgstr "Dispositivo o fichero con cabecera LUKS separada" + +#: src/cryptsetup.c:3389 +msgid "Do not activate device, just check passphrase" +msgstr "No activar dispositivo; comprobar frase contraseña solamente" + +#: src/cryptsetup.c:3390 +msgid "Use hidden header (hidden TCRYPT device)" +msgstr "Utilizar cabecera oculta (dispositivo TCRYPT oculto)" + +#: src/cryptsetup.c:3391 +msgid "Device is system TCRYPT drive (with bootloader)" +msgstr "El dispositivo es una unidad con sistema TCRYPT (con cargador de arranque)" + +#: src/cryptsetup.c:3392 +msgid "Use backup (secondary) TCRYPT header" +msgstr "Utilizar la cabecera TCRYPT de respaldo (secundaria)" + +#: src/cryptsetup.c:3393 +msgid "Scan also for VeraCrypt compatible device" +msgstr "Explorar también si es un dispositivo compatible con VeraCrypt" + +#: src/cryptsetup.c:3394 +msgid "Personal Iteration Multiplier for VeraCrypt compatible device" +msgstr "Multiplicador de iteración personal para dispositivo compatible con VeraCrypt" + +#: src/cryptsetup.c:3395 +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:3396 +msgid "Type of device metadata: luks, luks1, luks2, plain, loopaes, tcrypt" +msgstr "Tipo de metadatos del dispositivo: luks, luks1, luks2, plain, loopaes, tcrypt" + +#: src/cryptsetup.c:3397 +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:3398 +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:3399 +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:3400 +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:3401 +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:3402 +msgid "PBKDF iteration time for LUKS (in ms)" +msgstr "Tiempo de iteración PBKDF para LUKS (en ms)" + +#: src/cryptsetup.c:3402 src/cryptsetup_reencrypt.c:1607 +msgid "msecs" +msgstr "ms" + +#: src/cryptsetup.c:3403 src/cryptsetup_reencrypt.c:1625 +msgid "PBKDF algorithm (for LUKS2): argon2i, argon2id, pbkdf2" +msgstr "Algoritmo PBKDF (para LUKS2): argon2i, argon2id, pbkdf2" + +#: src/cryptsetup.c:3404 src/cryptsetup_reencrypt.c:1626 +msgid "PBKDF memory cost limit" +msgstr "Límite del coste de memoria PBKDF" + +#: src/cryptsetup.c:3404 src/cryptsetup_reencrypt.c:1626 +msgid "kilobytes" +msgstr "kilobytes" + +#: src/cryptsetup.c:3405 src/cryptsetup_reencrypt.c:1627 +msgid "PBKDF parallel cost" +msgstr "Coste del paralelismo PBKDF" + +#: src/cryptsetup.c:3405 src/cryptsetup_reencrypt.c:1627 +msgid "threads" +msgstr "hilos" + +#: src/cryptsetup.c:3406 src/cryptsetup_reencrypt.c:1628 +msgid "PBKDF iterations cost (forced, disables benchmark)" +msgstr "Coste de las iteraciones PBKDF (forzado, desactiva el banco de pruebas)" + +#: src/cryptsetup.c:3407 +msgid "Keyslot priority: ignore, normal, prefer" +msgstr "Prioridad de la ranura de claves: ignorada, normal, preferente" + +#: src/cryptsetup.c:3408 +msgid "Disable locking of on-disk metadata" +msgstr "Desactiva el bloqueo de metadatos en disco" + +#: src/cryptsetup.c:3409 +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:3410 +msgid "Data integrity algorithm (LUKS2 only)" +msgstr "Algoritmo de integridad de datos (solo LUKS2)" + +#: src/cryptsetup.c:3411 src/integritysetup.c:564 +msgid "Disable journal for integrity device" +msgstr "Desactiva el diario para dispositivo de integridad" + +#: src/cryptsetup.c:3412 src/integritysetup.c:538 +msgid "Do not wipe device after format" +msgstr "No limpiar dispositivo después de dar formato" + +#: src/cryptsetup.c:3413 +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:3414 +msgid "Token number (default: any)" +msgstr "Número de «token» (predefinido: cualquiera)" + +#: src/cryptsetup.c:3415 +msgid "Key description" +msgstr "Descripción de la clave" + +#: src/cryptsetup.c:3416 +msgid "Encryption sector size (default: 512 bytes)" +msgstr "Tamaño de sector de cifrado (predeterminado: 512 bytes)" + +#: src/cryptsetup.c:3417 +msgid "Set activation flags persistent for device" +msgstr "Establecer indicadores de activación persistentes para el dispositivo" + +#: src/cryptsetup.c:3418 +msgid "Set label for the LUKS2 device" +msgstr "Poner etiqueta al dispositivo LUKS2" + +#: src/cryptsetup.c:3419 +msgid "Set subsystem label for the LUKS2 device" +msgstr "Poner etiqueta de subsistema al dispositivo LUKS2" + +#: src/cryptsetup.c:3420 +msgid "Create unbound (no assigned data segment) LUKS2 keyslot" +msgstr "Crear ranura de claves LUKS2 ilimitada (sin segmento de datos asignado)" + +#: src/cryptsetup.c:3421 +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:3422 +msgid "LUKS2 header metadata area size" +msgstr "Tamaño de la zona de metadatos de la cabecera LUKS2" + +#: src/cryptsetup.c:3423 +msgid "LUKS2 header keyslots area size" +msgstr "Tamaño de la zona de ranuras de clave de la cabecera LUKS2" + +#: src/cryptsetup.c:3424 +msgid "Refresh (reactivate) device with new parameters" +msgstr "Refrescar (reactivar) el dispositivo con los nuevos parámetros" + +#: src/cryptsetup.c:3425 +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:3426 +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:3427 +msgid "Encrypt LUKS2 device (in-place encryption)." +msgstr "Crifrar el dispositivo LUKS2 (cifrado in situ)." + +#: src/cryptsetup.c:3428 +msgid "Decrypt LUKS2 device (remove encryption)." +msgstr "Descifrar el dispositivo LUKS2 (elimina cifrado)" + +#: src/cryptsetup.c:3429 +msgid "Initialize LUKS2 reencryption in metadata only." +msgstr "Inicializar solamente recifrado LUKS2 de los metadatos." + +#: src/cryptsetup.c:3430 +msgid "Resume initialized LUKS2 reencryption only." +msgstr "Reanudar solamente recifrado LUKS2 inicializado." + +#: src/cryptsetup.c:3431 src/cryptsetup_reencrypt.c:1619 +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:3432 +msgid "Maximal reencryption hotzone size." +msgstr "Tamaño de zona activa de recifrado máximo." + +#: src/cryptsetup.c:3433 +msgid "Reencryption hotzone resilience type (checksum,journal,none)" +msgstr "Tipo de resiliencia de zona activa de recifrado (checksum,journal,none)" + +#: src/cryptsetup.c:3434 +msgid "Reencryption hotzone checksums hash" +msgstr "«Hash» de suma de comprobación de zona activa de recifrado" + +#: src/cryptsetup.c:3435 +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:3451 src/veritysetup.c:462 src/integritysetup.c:583 +msgid "[OPTION...] " +msgstr "[OPCIÓN...] " + +#: src/cryptsetup.c:3502 src/veritysetup.c:496 src/integritysetup.c:594 +msgid "Argument missing." +msgstr "El argumento no se ha proporcionado." + +#: src/cryptsetup.c:3565 src/veritysetup.c:527 src/integritysetup.c:625 +msgid "Unknown action." +msgstr "Acción desconocida." + +#: src/cryptsetup.c:3575 +msgid "Parameter --refresh is only allowed with open or refresh commands.\n" +msgstr "El parámetro --refresh solo se permite con las órdenes de abrir y de refrescar.\n" + +#: src/cryptsetup.c:3580 +msgid "Options --refresh and --test-passphrase are mutually exclusive.\n" +msgstr "Las opciones --refresh y --test-passphrase son mutuamente excluyentes.\n" + +#: src/cryptsetup.c:3585 +msgid "Option --deferred is allowed only for close command.\n" +msgstr "La opción --deferred solo se permite con la orden de cerrar.\n" + +#: src/cryptsetup.c:3590 +msgid "Option --shared is allowed only for open of plain device.\n" +msgstr "La opción --shared solo se permite para abrir dispositivos no cifrados.\n" + +#: src/cryptsetup.c:3595 +msgid "Option --allow-discards is allowed only for open operation.\n" +msgstr "La opción --allow-discards solo se permite para la operación de abrir.\n" + +#: src/cryptsetup.c:3600 +msgid "Option --persistent is allowed only for open operation.\n" +msgstr "La opción --persistent solo se permite para la operación de abrir.\n" + +#: src/cryptsetup.c:3605 +msgid "Option --serialize-memory-hard-pbkdf is allowed only for open operation.\n" +msgstr "La opción --serialize-memory-hard-pbkdf solo se permite para la operación de abrir.\n" + +#: src/cryptsetup.c:3610 +msgid "Option --persistent is not allowed with --test-passphrase.\n" +msgstr "La opción --persistent no se permite con --test-passphrase.\n" + +#: src/cryptsetup.c:3620 +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 "" +"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:3626 +msgid "Option --integrity is allowed only for luksFormat (LUKS2).\n" +msgstr "La opción --integrity solo se permite con luksFormat (LUKS2).\n" + +#: src/cryptsetup.c:3631 +msgid "Option --integrity-no-wipe can be used only for format action with integrity extension.\n" +msgstr "La opción --integrity-no-wipe solo puede usarse para la acción de formato con extensión de integridad.\n" + +#: src/cryptsetup.c:3637 +msgid "Options --label and --subsystem are allowed only for luksFormat and config LUKS2 operations.\n" +msgstr "Las opciones --label y --subsystem solo se permiten con las operaciones luksFormat y config LUKS2.\n" + +#: src/cryptsetup.c:3643 +msgid "Option --test-passphrase is allowed only for open of LUKS and TCRYPT devices.\n" +msgstr "La opción --test-passphrase solo se permite para abrir dispositivos LUKS y TCRYPT.\n" + +#: src/cryptsetup.c:3648 src/cryptsetup_reencrypt.c:1692 +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:3654 src/cryptsetup_reencrypt.c:1378 +#: src/cryptsetup_reencrypt.c:1697 +msgid "Key slot is invalid." +msgstr "La ranura de claves no es válida." + +#: src/cryptsetup.c:3661 +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:3668 src/veritysetup.c:539 src/integritysetup.c:649 +#: src/cryptsetup_reencrypt.c:1671 +msgid "Negative number for option not permitted." +msgstr "No se permiten números negativos para esta opción." + +#: src/cryptsetup.c:3672 +msgid "Only one --key-file argument is allowed." +msgstr "Solo se permite un argumento --key-file." + +#: src/cryptsetup.c:3676 src/cryptsetup_reencrypt.c:1663 +#: src/cryptsetup_reencrypt.c:1701 +msgid "Only one of --use-[u]random options is allowed." +msgstr "Solo se permite una de las opciones --use-[u]random." + +#: src/cryptsetup.c:3680 +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:3684 +msgid "Option --uuid is allowed only for luksFormat and luksUUID." +msgstr "La opción --uuid solo se permite con luksFormat luksUUID." + +#: src/cryptsetup.c:3688 +msgid "Option --align-payload is allowed only for luksFormat." +msgstr "La opción --align-payload solo se permite con luksFormat." + +#: src/cryptsetup.c:3692 +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:3697 +msgid "Invalid LUKS2 metadata size specification." +msgstr "La especificación del tamaño de los metadatos LUKS2 no es válida." + +#: src/cryptsetup.c:3701 +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:3705 +msgid "Options --align-payload and --offset cannot be combined." +msgstr "Las opciones --align-payload y --offset no pueden combinarse." + +#: src/cryptsetup.c:3711 +msgid "Option --skip is supported only for open of plain and loopaes devices.\n" +msgstr "La opción --skip solo está disponible para abrir dispositivos no cifrados y «loopaes».\n" + +#: src/cryptsetup.c:3718 +msgid "Option --offset is supported only for open of plain and loopaes devices, luksFormat and device reencryption.\n" +msgstr "La opción --offset solo está disponible para abrir dispositivos no cifrados y «loopaes», «luksFormat» y recifrado de dispositivo.\n" + +#: src/cryptsetup.c:3724 +msgid "Option --tcrypt-hidden, --tcrypt-system or --tcrypt-backup is supported only for TCRYPT device.\n" +msgstr "La opción --tcrypt-hidden o --tcrypt-system o --tcrypt-backup solo está disponible para dispositivos TCRYPT.\n" + +#: src/cryptsetup.c:3729 +msgid "Option --tcrypt-hidden cannot be combined with --allow-discards.\n" +msgstr "La opción --tcrypt-hidden no puede combinarse con --allow-discards.\n" + +#: src/cryptsetup.c:3734 +msgid "Option --veracrypt is supported only for TCRYPT device type.\n" +msgstr "La opción --veracrypt solo está disponible para dispositivos TCRYPT.\n" + +#: src/cryptsetup.c:3740 +msgid "Invalid argument for parameter --veracrypt-pim supplied.\n" +msgstr "Argumento no válido para el parámetro --veracrypt-pim supplied.\n" + +#: src/cryptsetup.c:3744 +msgid "Option --veracrypt-pim is supported only for VeraCrypt compatible devices.\n" +msgstr "La opción --veracrypt-pim solo está disponible para dispositivos compatibles con VeraCrypt.\n" + +#: src/cryptsetup.c:3752 +msgid "Option --veracrypt-query-pim is supported only for VeraCrypt compatible devices.\n" +msgstr "La opción --veracrypt-query-pim solo está disponible para dispositivos compatibles con VeraCrypt.\n" + +#: src/cryptsetup.c:3756 +msgid "The options --veracrypt-pim and --veracrypt-query-pim are mutually exclusive.\n" +msgstr "Las opciones --veracrypt-pim y --veracrypt-query-pim son mutuamente excluyentes.\n" + +# TODO +#: src/cryptsetup.c:3763 +msgid "Option --priority can be only ignore/normal/prefer.\n" +msgstr "La opción --priority solo puede ser ignore/normal/prefer.\n" + +#: src/cryptsetup.c:3768 +msgid "Keyslot specification is required.\n" +msgstr "Se requiere especificación de ranura de claves.\n" + +#: src/cryptsetup.c:3773 src/cryptsetup_reencrypt.c:1677 +msgid "Password-based key derivation function (PBKDF) can be only pbkdf2 or argon2i/argon2id.\n" +msgstr "La función de derivación de clave basada en contraseña (PBKDF) solo puede ser pbkdf2 o argon2i/argon2id.\n" + +#: src/cryptsetup.c:3778 src/cryptsetup_reencrypt.c:1682 +msgid "PBKDF forced iterations cannot be combined with iteration time option.\n" +msgstr "Las iteraciones forzadas de PBKDF no pueden combinarse con la opción de tiempo de iteración.\n" + +#: src/cryptsetup.c:3784 +msgid "Sector size option is not supported for this command.\n" +msgstr "La opción de tamaño de sector no está disponible para esta orden.\n" + +#: src/cryptsetup.c:3790 +msgid "Unsupported encryption sector size.\n" +msgstr "Tamaño de sector de cifrado no admitido.\n" + +#: src/cryptsetup.c:3795 +msgid "Key size is required with --unbound option.\n" +msgstr "El tamaño de la clave es requerido con la opción --unbound.\n" + +#: src/cryptsetup.c:3800 +msgid "Option --unbound may be used only with luksAddKey action.\n" +msgstr "La opción --unbound solo puede utilizarse con la acción luksAddKey.\n" + +#: src/cryptsetup.c:3805 +msgid "Option --refresh may be used only with open action.\n" +msgstr "La opción --refresh solo puede utilizarse con la acción de abrir.\n" + +#: src/cryptsetup.c:3816 +msgid "Cannot disable metadata locking.\n" +msgstr "No se puede desactivar el bloqueo de metadatos.\n" + +#: src/cryptsetup.c:3826 +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:3834 src/cryptsetup_reencrypt.c:1706 +#: src/cryptsetup_reencrypt.c:1711 +msgid "Invalid device size specification." +msgstr "La especificación del tamaño del dispositivo no es válida." + +#: src/cryptsetup.c:3837 +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:3840 src/cryptsetup_reencrypt.c:1717 +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:3845 +msgid "Invalid data size specification." +msgstr "La especificación del tamaño de los datos no es válida." + +#: src/cryptsetup.c:3850 +msgid "Reduce size overflow." +msgstr "Desbordamiento del tamaño de la reducción." + +#: src/cryptsetup.c:3854 +msgid "LUKS2 decryption requires option --header." +msgstr "El descifrado LUKS2 requiere la opción --header." + +#: src/cryptsetup.c:3858 +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:3862 +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:3866 +msgid "Options --device-size and --size cannot be combined." +msgstr "Las opciones --device-size y --size no pueden combinarse." + +#: src/veritysetup.c:65 +msgid "Invalid salt string specified." +msgstr "La cadena «salt» especificada no es válida." + +#: src/veritysetup.c:96 +#, c-format +msgid "Cannot create hash image %s for writing." +msgstr "No se puede crear la imagen «hash» %s para escribir." + +#: src/veritysetup.c:106 +#, c-format +msgid "Cannot create FEC image %s for writing." +msgstr "No se puede crear la imagen FEC %s para escribir." + +#: src/veritysetup.c:176 +msgid "Invalid root hash string specified." +msgstr "La cadena «hash» raíz especificada no es válida." + +#: src/veritysetup.c:356 +msgid " " +msgstr " " + +#: src/veritysetup.c:356 src/integritysetup.c:469 +msgid "format device" +msgstr "dar formato al dispositivo" + +#: src/veritysetup.c:357 +msgid " " +msgstr " <«hash»_raíz>" + +#: src/veritysetup.c:357 +msgid "verify device" +msgstr "verificar dispositivo" + +#: src/veritysetup.c:358 +msgid " " +msgstr " <«hash»_raíz>" + +#: src/veritysetup.c:360 src/integritysetup.c:472 +msgid "show active device status" +msgstr "mostrar el estado del dispositivo activo" + +#: src/veritysetup.c:361 +msgid "" +msgstr "" + +#: src/veritysetup.c:361 src/integritysetup.c:473 +msgid "show on-disk information" +msgstr "mostrar información sobre el disco" + +#: src/veritysetup.c:380 +#, c-format +msgid "" +"\n" +" is the device to create under %s\n" +" is the data device\n" +" is the device containing verification data\n" +" hash of the root node on \n" +msgstr "" +"\n" +" es el dispositivo que se va a crear bajo %s\n" +" es el dispositivo de datos\n" +" 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:387 +#, c-format +msgid "" +"\n" +"Default compiled-in dm-verity parameters:\n" +"\tHash: %s, Data block (bytes): %u, Hash block (bytes): %u, Salt size: %u, Hash format: %u\n" +msgstr "" +"\n" +"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:430 +msgid "Do not use verity superblock" +msgstr "No utilizar superbloque «verity»" + +#: src/veritysetup.c:431 +msgid "Format type (1 - normal, 0 - original Chrome OS)" +msgstr "Tipo de formato (1 - normal, 0 - Chrome OS original)" + +#: src/veritysetup.c:431 +msgid "number" +msgstr "número" + +#: src/veritysetup.c:432 +msgid "Block size on the data device" +msgstr "Tamaño de bloque en el dispositivo de datos" + +#: src/veritysetup.c:433 +msgid "Block size on the hash device" +msgstr "Tamaño de bloque en el dispositivo «hash»" + +#: src/veritysetup.c:434 +msgid "FEC parity bytes" +msgstr "Bytes de paridad FEC" + +#: src/veritysetup.c:435 +msgid "The number of blocks in the data file" +msgstr "Número de bloques en el fichero de datos" + +#: src/veritysetup.c:435 +msgid "blocks" +msgstr "bloques" + +#: src/veritysetup.c:436 +msgid "Path to device with error correction data" +msgstr "Ruta a dispositivo con datos de corrección de errores" + +#: src/veritysetup.c:436 src/integritysetup.c:540 +msgid "path" +msgstr "ruta" + +#: src/veritysetup.c:437 +msgid "Starting offset on the hash device" +msgstr "Posición inicial en el dispositivo «hash»" + +#: src/veritysetup.c:438 +msgid "Starting offset on the FEC device" +msgstr "Posición inicial en el dispositivo FEC" + +#: src/veritysetup.c:439 +msgid "Hash algorithm" +msgstr "Algoritmo «hash»" + +#: src/veritysetup.c:439 +msgid "string" +msgstr "cadena" + +#: src/veritysetup.c:440 +msgid "Salt" +msgstr "«Salt»" + +#: src/veritysetup.c:440 +msgid "hex string" +msgstr "cadena hexadecimal" + +#: src/veritysetup.c:442 +msgid "Restart kernel if corruption is detected" +msgstr "Reiniciar el núcleo si se detecta corrupción" + +#: src/veritysetup.c:443 +msgid "Ignore corruption, log it only" +msgstr "Ignorar corrupción, tomar nota únicamente" + +#: src/veritysetup.c:444 +msgid "Do not verify zeroed blocks" +msgstr "No verificar bloques con zeros" + +#: src/veritysetup.c:445 +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:545 +msgid "Option --ignore-corruption, --restart-on-corruption or --ignore-zero-blocks is allowed only for open operation.\n" +msgstr "Las opciones --ignore-corruption, --restart-on-corruption y --ignore-zero-blocks solo están permitidas para la operación de abrir.\n" + +#: src/veritysetup.c:550 +msgid "Option --ignore-corruption and --restart-on-corruption cannot be used together.\n" +msgstr "Las opciones --ignore-corruption y --restart-on-corruption no pueden utilizarse juntas.\n" + +#: src/integritysetup.c:83 src/utils_password.c:305 +#, c-format +msgid "Cannot read keyfile %s." +msgstr "No se puede leer el fichero de claves %s." + +#: src/integritysetup.c:87 src/utils_password.c:310 +#, c-format +msgid "Cannot read %d bytes from keyfile %s." +msgstr "No se pueden leer %d «bytes» en el fichero de claves %s." + +#: src/integritysetup.c:250 +#, c-format +msgid "Formatted with tag size %u, internal integrity %s.\n" +msgstr "Formato dado con tamaño de etiqueta %u, integridad interna %s.\n" + +#: src/integritysetup.c:469 src/integritysetup.c:473 +msgid "" +msgstr "" + +#: src/integritysetup.c:470 +msgid " " +msgstr " " + +#: src/integritysetup.c:492 +#, c-format +msgid "" +"\n" +" is the device to create under %s\n" +" is the device containing data with integrity tags\n" +msgstr "" +"\n" +" es el dispositivo que se va a crear bajo %s\n" +" es el dispositivo que contiene datos con etiquetas de integridad\n" + +#: src/integritysetup.c:497 +#, c-format +msgid "" +"\n" +"Default compiled-in dm-integrity parameters:\n" +"\tTag size: %u bytes, Checksum algorithm: %s\n" +msgstr "" +"\n" +"Parámetros dm-integrity predefinidos de fábrica:\n" +"\tTamaño de etiqueta: %u bytes, Algoritmo para la suma de comprobación: %s\n" + +#: src/integritysetup.c:540 +msgid "Path to data device (if separated)" +msgstr "Ruta al dispositivo de datos (si está separado)" + +#: src/integritysetup.c:542 +msgid "Journal size" +msgstr "Tamaño del diario" + +#: src/integritysetup.c:543 +msgid "Interleave sectors" +msgstr "Sectores de entrelazado" + +#: src/integritysetup.c:544 +msgid "Journal watermark" +msgstr "Marca de agua del diario" + +#: src/integritysetup.c:544 +msgid "percent" +msgstr "por ciento" + +#: src/integritysetup.c:545 +msgid "Journal commit time" +msgstr "Tiempo de escritura en el diario" + +#: src/integritysetup.c:545 src/integritysetup.c:547 +msgid "ms" +msgstr "ms" + +#: src/integritysetup.c:546 +msgid "Number of 512-byte sectors per bit (bitmap mode)." +msgstr "Número de sectores de 512 bytes por bit (modo mapa de bits)." + +#: src/integritysetup.c:547 +msgid "Bitmap mode flush time" +msgstr "Tiempo de «flush» del modo mapa de bits" + +#: src/integritysetup.c:548 +msgid "Tag size (per-sector)" +msgstr "Tamaño de etiqueta (por sector)" + +#: src/integritysetup.c:549 +msgid "Sector size" +msgstr "Tamaño de sector" + +#: src/integritysetup.c:550 +msgid "Buffers size" +msgstr "Tamaño de los «buffers»" + +#: src/integritysetup.c:552 +msgid "Data integrity algorithm" +msgstr "Algoritmo para la integridad de datos" + +#: src/integritysetup.c:553 +msgid "The size of the data integrity key" +msgstr "Tamaño de la clave de integridad de datos" + +#: src/integritysetup.c:554 +msgid "Read the integrity key from a file" +msgstr "Leer la clave de integridad de un fichero" + +#: src/integritysetup.c:556 +msgid "Journal integrity algorithm" +msgstr "Algoritmo de integridad del diario" + +#: src/integritysetup.c:557 +msgid "The size of the journal integrity key" +msgstr "Tamaño de la clave de integridad del diario" + +#: src/integritysetup.c:558 +msgid "Read the journal integrity key from a file" +msgstr "Leer la clave de integridad del diario de un fichero" + +#: src/integritysetup.c:560 +msgid "Journal encryption algorithm" +msgstr "Algoritmo de cifrado del diario" + +#: src/integritysetup.c:561 +msgid "The size of the journal encryption key" +msgstr "Tamaño de la clave de cifrado del diario" + +#: src/integritysetup.c:562 +msgid "Read the journal encryption key from a file" +msgstr "Leer la clave de cifrado del diario de un fichero" + +#: src/integritysetup.c:565 +msgid "Recovery mode (no journal, no tag checking)" +msgstr "Modo de recuperación (sin diario, sin comprobación de etiqueta)" + +#: src/integritysetup.c:566 +msgid "Use bitmap to track changes and disable journal for integrity device" +msgstr "Utilice bitmap para seguir los cambios y desactive el diario para el dispositivo de integridad" + +#: src/integritysetup.c:567 +msgid "Recalculate initial tags automatically." +msgstr "Recalcular las etiquetas iniciales automáticamente." + +#: src/integritysetup.c:640 +msgid "Option --integrity-recalculate can be used only for open action." +msgstr "La opción --integrity-recalculate solo puede usarse para la acción de abrir." + +#: src/integritysetup.c:655 +msgid "Options --journal-size, --interleave-sectors, --sector-size, --tag-size and --no-wipe can be used only for format action.\n" +msgstr "Las opciones --journal-size, --interleave-sectors, --sector-size, --tag-size y --no-wipe solo pueden utilizarse para la acción de dar formato.\n" + +#: src/integritysetup.c:661 +msgid "Invalid journal size specification." +msgstr "La especificación del tamaño del diario no es válida." + +#: src/integritysetup.c:666 +msgid "Both key file and key size options must be specified." +msgstr "Deben especificarse las opciones tanto de fichero de claves como tamaño de clave." + +#: src/integritysetup.c:669 +msgid "Integrity algorithm must be specified if integrity key is used." +msgstr "El algoritmo para la integridad debe especificarse si se va a utilizar clave de integridad." + +#: src/integritysetup.c:674 +msgid "Both journal integrity key file and key size options must be specified." +msgstr "Deben especificarse la opción del fichero de clave de integridad del diario y la del tamaño de la clave." + +#: src/integritysetup.c:677 +msgid "Journal integrity algorithm must be specified if journal integrity key is used." +msgstr "Debe especificarse el algoritmo de integridad del diario si va a utilizarse la clave de integridad del diario." + +#: src/integritysetup.c:682 +msgid "Both journal encryption key file and key size options must be specified." +msgstr "Deben especificarse la opción del fichero de la clave de cifrado del diario y la del tamaño de la clave." + +#: src/integritysetup.c:685 +msgid "Journal encryption algorithm must be specified if journal encryption key is used." +msgstr "Debe especificarse el algoritmo de cifrado del diario si va a utilizarse la clave de cifrado del diario." + +#: src/integritysetup.c:689 +msgid "Recovery and bitmap mode options are mutually exclusive." +msgstr "Las opciones de recuperación y de modo mapa de bits son mutuamente excluyentes." + +#: src/integritysetup.c:693 +msgid "Journal options cannot be used in bitmap mode." +msgstr "Las opciones de diario no pueden utilizarse en modo mapa de bits." + +#: src/integritysetup.c:697 +msgid "Bitmap options can be used only in bitmap mode." +msgstr "Las opciones de mapa de bits solo pueden utilizarse en el modo mapa de bits." + +#: src/cryptsetup_reencrypt.c:172 +msgid "Reencryption already in-progress." +msgstr "Recifrado ya en curso." + +#: src/cryptsetup_reencrypt.c:201 +#, c-format +msgid "Cannot exclusively open %s, device in use." +msgstr "No se puede abrir %s en exclusividad; el dispositivo está en uso." + +#: src/cryptsetup_reencrypt.c:215 src/cryptsetup_reencrypt.c:1127 +msgid "Allocation of aligned memory failed." +msgstr "La reserva de memoria alineada ha fallado." + +#: src/cryptsetup_reencrypt.c:222 +#, c-format +msgid "Cannot read device %s." +msgstr "No se puede leer el dispositivo %s." + +#: src/cryptsetup_reencrypt.c:233 +#, c-format +msgid "Marking LUKS1 device %s unusable." +msgstr "Marcando el dispositivo LUKS1 %s como inutilizable." + +#: src/cryptsetup_reencrypt.c:237 +#, c-format +msgid "Setting LUKS2 offline reencrypt flag on device %s." +msgstr "Estableciendo el indicador de recifrado fuera de línea LUKS2 en el dispositivo %s." + +#: src/cryptsetup_reencrypt.c:254 +#, c-format +msgid "Cannot write device %s." +msgstr "No se puede escribir en el dispositivo %s." + +#: src/cryptsetup_reencrypt.c:302 +msgid "Cannot write reencryption log file." +msgstr "No se puede escribir en el fichero de registro de recifrado." + +#: src/cryptsetup_reencrypt.c:358 +msgid "Cannot read reencryption log file." +msgstr "No se puede leer el fichero de registro de recifrado." + +#: src/cryptsetup_reencrypt.c:396 +#, c-format +msgid "Log file %s exists, resuming reencryption.\n" +msgstr "El fichero de registro %s ya existe; reanudando el recifrado.\n" + +#: src/cryptsetup_reencrypt.c:445 +msgid "Activating temporary device using old LUKS header." +msgstr "Activando dispositivo temporal utilizando cabecera LUKS antigua." + +#: src/cryptsetup_reencrypt.c:455 +msgid "Activating temporary device using new LUKS header." +msgstr "Activando dispositivo temporal utilizando cabecera LUKS nueva." + +#: src/cryptsetup_reencrypt.c:465 +msgid "Activation of temporary devices failed." +msgstr "Fallo en la activación de los dispositivos temporales." + +#: src/cryptsetup_reencrypt.c:551 +msgid "Failed to set data offset." +msgstr "No se ha podido establecer el desplazamiento de los datos." + +#: src/cryptsetup_reencrypt.c:557 +msgid "Failed to set metadata size." +msgstr "No se ha podido establecer el tamaño de los metadatos." + +#: src/cryptsetup_reencrypt.c:565 +#, c-format +msgid "New LUKS header for device %s created." +msgstr "Se ha creado una nueva cabecera LUKS para el dispositivo %s." + +#: src/cryptsetup_reencrypt.c:625 +#, c-format +msgid "This version of cryptsetup-reencrypt can't handle new internal token type %s." +msgstr "Esta versión de cryptsetup-reencrypt no sabe manejar el nuevo tipo de «token» interno %s." + +#: src/cryptsetup_reencrypt.c:647 +msgid "Failed to read activation flags from backup header." +msgstr "No se ha podido leer los indicadores de activación en la cabecera de respaldo." + +#: src/cryptsetup_reencrypt.c:651 +msgid "Failed to write activation flags to new header." +msgstr "No se ha podido escribir los indicadores de activación en la nueva cabecera." + +#: src/cryptsetup_reencrypt.c:655 src/cryptsetup_reencrypt.c:659 +msgid "Failed to read requirements from backup header." +msgstr "No se ha podido leer los requisitos en la cabecera de respaldo." + +#: src/cryptsetup_reencrypt.c:697 +#, c-format +msgid "%s header backup of device %s created." +msgstr "Se ha creado una copia de seguridad de la cabecera %s del dispositivo %s." + +#: src/cryptsetup_reencrypt.c:760 +msgid "Creation of LUKS backup headers failed." +msgstr "No se ha podido crear la copia de seguridad de las cabeceras LUKS." + +#: src/cryptsetup_reencrypt.c:893 +#, c-format +msgid "Cannot restore %s header on device %s." +msgstr "No se puede restaurar la cabecera %s en el dispositivo %s." + +#: src/cryptsetup_reencrypt.c:895 +#, c-format +msgid "%s header on device %s restored." +msgstr "Se ha restaurado la cabecera %s en el dispositivo %s." + +#: src/cryptsetup_reencrypt.c:1099 src/cryptsetup_reencrypt.c:1105 +msgid "Cannot open temporary LUKS device." +msgstr "No se puede abrir el dispositivo LUKS temporal." + +#: src/cryptsetup_reencrypt.c:1110 src/cryptsetup_reencrypt.c:1115 +msgid "Cannot get device size." +msgstr "No se puede obtener el tamaño del dispositivo." + +#: src/cryptsetup_reencrypt.c:1150 +msgid "IO error during reencryption." +msgstr "Error de entrada/salida durante el recifrado." + +#: src/cryptsetup_reencrypt.c:1181 +msgid "Provided UUID is invalid." +msgstr "El UUID proporcionado no es válido." + +#: src/cryptsetup_reencrypt.c:1407 +msgid "Cannot open reencryption log file." +msgstr "No se puede abrir el fichero de registro de recifrado." + +#: src/cryptsetup_reencrypt.c:1413 +msgid "No decryption in progress, provided UUID can be used only to resume suspended decryption process." +msgstr "No hay ningún proceso de descifrado en marcha; el UUID proporcionado solo puede utilizarse para reanudar un proceso de descifrado suspendido." + +#: src/cryptsetup_reencrypt.c:1488 +#, c-format +msgid "Changed pbkdf parameters in keyslot %i." +msgstr "Se han cambiado los parámetros pbkdf en la ranura de claves %i." + +#: src/cryptsetup_reencrypt.c:1600 +msgid "Reencryption block size" +msgstr "Tamaño de bloque de recifrado" + +#: src/cryptsetup_reencrypt.c:1600 +msgid "MiB" +msgstr "MiB" + +#: src/cryptsetup_reencrypt.c:1604 +msgid "Do not change key, no data area reencryption" +msgstr "No cambie la clave; no hay recifrado en la zona de datos" + +#: src/cryptsetup_reencrypt.c:1606 +msgid "Read new volume (master) key from file" +msgstr "Leer la clave (maestra) del volumen desde fichero" + +#: src/cryptsetup_reencrypt.c:1607 +msgid "PBKDF2 iteration time for LUKS (in ms)" +msgstr "Tiempo de iteración PBKDF2 para LUKS (en ms)" + +#: src/cryptsetup_reencrypt.c:1613 +msgid "Use direct-io when accessing devices" +msgstr "Utilizar entrada/salida directa para acceder a los dispositivos" + +#: src/cryptsetup_reencrypt.c:1614 +msgid "Use fsync after each block" +msgstr "Utilizar fsync después de cada bloque" + +#: src/cryptsetup_reencrypt.c:1615 +msgid "Update log file after every block" +msgstr "Actualizar el fichero de registro después de cada bloque" + +#: src/cryptsetup_reencrypt.c:1616 +msgid "Use only this slot (others will be disabled)" +msgstr "Utilizar solamente esta ranura (se desactivarán las demás)" + +#: src/cryptsetup_reencrypt.c:1621 +msgid "Create new header on not encrypted device" +msgstr "Crear nueva cabecera en dispositivo no cifrado" + +#: src/cryptsetup_reencrypt.c:1622 +msgid "Permanently decrypt device (remove encryption)" +msgstr "Descifrar el dispositivo de forma permanente (eliminar cifrado)" + +#: src/cryptsetup_reencrypt.c:1623 +msgid "The UUID used to resume decryption" +msgstr "El UUID utilizado para reanudar el descifrado" + +#: src/cryptsetup_reencrypt.c:1624 +msgid "Type of LUKS metadata: luks1, luks2" +msgstr "Tipo de metadato LUKS: luks1, luks2" + +#: src/cryptsetup_reencrypt.c:1643 +msgid "[OPTION...] " +msgstr "[OPCIÓN...] " + +#: src/cryptsetup_reencrypt.c:1651 +#, c-format +msgid "Reencryption will change: %s%s%s%s%s%s." +msgstr "El recifrado va a cambiar: %s%s%s%s%s%s." + +#: src/cryptsetup_reencrypt.c:1652 +msgid "volume key" +msgstr "clave del volumen" + +#: src/cryptsetup_reencrypt.c:1654 +msgid "set hash to " +msgstr "nuevo algoritmo «hash» " + +#: src/cryptsetup_reencrypt.c:1655 +msgid ", set cipher to " +msgstr ", nuevo algoritmo de cifrado: " + +#: src/cryptsetup_reencrypt.c:1659 +msgid "Argument required." +msgstr "Hace falta argumento." + +#: src/cryptsetup_reencrypt.c:1687 +msgid "Only values between 1 MiB and 64 MiB allowed for reencryption block size." +msgstr "Solo se permiten valores entre 1 MiB y 64 MiB para el tamaño de bloque de recifrado." + +#: src/cryptsetup_reencrypt.c:1714 +msgid "Maximum device reduce size is 64 MiB." +msgstr "El tamaño máximo de reducción del dispositivo es de 64 MiB." + +#: src/cryptsetup_reencrypt.c:1721 +msgid "Option --new must be used together with --reduce-device-size or --header." +msgstr "La opción --new debe utilizarse conjuntamente con --reduce-device-size o --header." + +#: src/cryptsetup_reencrypt.c:1725 +msgid "Option --keep-key can be used only with --hash, --iter-time or --pbkdf-force-iterations." +msgstr "La opción --keep-key solamente puede utilizarse con --hash, --iter-time o --pbkdf-force-iterations." + +#: src/cryptsetup_reencrypt.c:1729 +msgid "Option --new cannot be used together with --decrypt." +msgstr "La opción --new no puede utilizarse conjuntamente con --decrypt." + +#: src/cryptsetup_reencrypt.c:1733 +msgid "Option --decrypt is incompatible with specified parameters." +msgstr "La opción --decrypt es incompatible con los parámetros especificados." + +#: src/cryptsetup_reencrypt.c:1737 +msgid "Option --uuid is allowed only together with --decrypt." +msgstr "La opción --uuid solo está permitida conjuntamente con --decrypt." + +#: src/cryptsetup_reencrypt.c:1741 +msgid "Invalid luks type. Use one of these: 'luks', 'luks1' or 'luks2'." +msgstr "Tipo de luks no válido. Utilice uno de estos: 'luks', 'luks1' o 'luks2'." + +#: src/utils_tools.c:151 +msgid "Error reading response from terminal." +msgstr "Error de lectura de la respuesta recibida desde el terminal." + +#: src/utils_tools.c:186 +msgid "Command successful.\n" +msgstr "Orden ejecutada correctamente.\n" + +#: src/utils_tools.c:194 +msgid "wrong or missing parameters" +msgstr "parámetros incorrectos u omisos" + +#: src/utils_tools.c:196 +msgid "no permission or bad passphrase" +msgstr "sin permiso o frase de paso mala" + +#: src/utils_tools.c:198 +msgid "out of memory" +msgstr "sin memoria" + +#: src/utils_tools.c:200 +msgid "wrong device or file specified" +msgstr "se ha especificado un dispositivo o fichero incorrecto" + +#: src/utils_tools.c:202 +msgid "device already exists or device is busy" +msgstr "el dispositivo ya existe o está ocupado" + +#: src/utils_tools.c:204 +msgid "unknown error" +msgstr "error desconocido" + +#: src/utils_tools.c:206 +#, c-format +msgid "Command failed with code %i (%s).\n" +msgstr "La orden ha fallado con código %i (%s).\n" + +#: src/utils_tools.c:283 +#, c-format +msgid "Key slot %i created." +msgstr "Ranura de claves %i creada." + +#: src/utils_tools.c:285 +#, c-format +msgid "Key slot %i unlocked." +msgstr "Ranura de claves %i desbloqueada." + +#: src/utils_tools.c:287 +#, c-format +msgid "Key slot %i removed." +msgstr "Ranura de claves %i eliminada." + +#: src/utils_tools.c:296 +#, c-format +msgid "Token %i created." +msgstr "«Token» %i creado." + +#: src/utils_tools.c:298 +#, c-format +msgid "Token %i removed." +msgstr "«Token» %i eliminado." + +#: src/utils_tools.c:464 +msgid "" +"\n" +"Wipe interrupted." +msgstr "" +"\n" +"Limpieza interrumpida." + +#: src/utils_tools.c:475 +#, c-format +msgid "WARNING: Device %s already contains a '%s' partition signature.\n" +msgstr "AVISO: El dispositivo %s ya contiene una firma de partición '%s'.\n" + +#: src/utils_tools.c:483 +#, 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" + +#: src/utils_tools.c:504 src/utils_tools.c:568 +msgid "Failed to initialize device signature probes." +msgstr "No se han podido inicializar los sondeos de firma del dispositivo." + +#: src/utils_tools.c:548 +#, c-format +msgid "Failed to stat device %s." +msgstr "No se ha podido efectuar «stat» sobre el dispositivo %s." + +#: src/utils_tools.c:561 +#, c-format +msgid "Device %s is in use. Can not proceed with format operation." +msgstr "El dispositivo %s está en uso. No se puede proceder con la operación de dar formato." + +#: src/utils_tools.c:563 +#, c-format +msgid "Failed to open file %s in read/write mode." +msgstr "No se ha podido abrir el fichero %s para lectura y escritura." + +#: src/utils_tools.c:577 +#, c-format +msgid "Existing '%s' partition signature (offset: % bytes) on device %s will be wiped." +msgstr "La firma de la partición '%s' existente (desplazamiento: % bytes) en el dispositivo %s va a limpiarse." + +#: src/utils_tools.c:580 +#, c-format +msgid "Existing '%s' superblock signature (offset: % bytes) on device %s will be wiped." +msgstr "La firma del superbloque '%s' existente (desplazamiento: % bytes) en el dispositivo %s va a limpiarse." + +#: src/utils_tools.c:583 +msgid "Failed to wipe device signature." +msgstr "No se ha podido limpiar la firma del dispositivo." + +#: src/utils_tools.c:590 +#, c-format +msgid "Failed to probe device %s for a signature." +msgstr "No se ha podido sondear el dispositivo %s para una firma." + +#: src/utils_tools.c:629 +msgid "" +"\n" +"Reencryption interrupted." +msgstr "" +"\n" +"Recifrado interrumpido." + +#: src/utils_password.c:43 src/utils_password.c:75 +#, c-format +msgid "Cannot check password quality: %s" +msgstr "No se puede comprobar la calidad de la contraseña: %s" + +#: src/utils_password.c:51 +#, c-format +msgid "" +"Password quality check failed:\n" +" %s" +msgstr "" +"Fallo en la comprobación de la calidad de la contraseña:\n" +" %s" + +#: src/utils_password.c:83 +#, c-format +msgid "Password quality check failed: Bad passphrase (%s)" +msgstr "Fallo en la comprobación de la calidad de la contraseña: frase contraseña incorrecta (%s)" + +#: src/utils_password.c:193 src/utils_password.c:208 +msgid "Error reading passphrase from terminal." +msgstr "Error al leer la frase contraseña desde el terminal." + +#: src/utils_password.c:206 +msgid "Verify passphrase: " +msgstr "Verifique la frase contraseña: " + +#: src/utils_password.c:213 +msgid "Passphrases do not match." +msgstr "La frase contraseña no coincide." + +#: src/utils_password.c:250 +msgid "Cannot use offset with terminal input." +msgstr "No se puede usar «offset» con entrada desde terminal." + +#: src/utils_password.c:253 +#, c-format +msgid "Enter passphrase: " +msgstr "Introduzca la frase contraseña: " + +#: src/utils_password.c:256 +#, c-format +msgid "Enter passphrase for %s: " +msgstr "Introduzca la frase contraseña de %s: " + +#: src/utils_password.c:287 +msgid "No key available with this passphrase." +msgstr "No hay ninguna clave disponible con esa frase contraseña." + +#: src/utils_password.c:289 +msgid "No usable keyslot is available." +msgstr "No hay niguna ranura de claves utilizable disponible." + +#: src/utils_password.c:328 +#, c-format +msgid "Cannot open keyfile %s for write." +msgstr "No se puede abrir el fichero de claves %s para escritura." + +#: src/utils_password.c:335 +#, c-format +msgid "Cannot write to keyfile %s." +msgstr "No se puede escribir en el fichero de claves %s." + +#: src/utils_luks2.c:47 +#, c-format +msgid "Failed to open file %s in read-only mode." +msgstr "No se ha podido abrir el fichero %s para solo lectura." + +#: src/utils_luks2.c:60 +msgid "Provide valid LUKS2 token JSON:\n" +msgstr "Proporciona «token» LUKS2 válido en JSON:\n" + +#: src/utils_luks2.c:67 +msgid "Failed to read JSON file." +msgstr "No se ha podido leer el fichero JSON." + +#: src/utils_luks2.c:72 +msgid "" +"\n" +"Read interrupted." +msgstr "" +"\n" +"Lectura interrumpida." + +#: src/utils_luks2.c:113 +#, c-format +msgid "Failed to open file %s in write mode." +msgstr "No se ha podido abrir el fichero %s para escritura." + +#: src/utils_luks2.c:122 +msgid "" +"\n" +"Write interrupted." +msgstr "" +"\n" +"Escritura interrumpida." + +#: src/utils_luks2.c:126 +msgid "Failed to write JSON file." +msgstr "No se ha podido escribir el fichero JSON." + +#~ msgid "Interrupted by a signal." +#~ msgstr "Interrumpido por una señal." + +#~ msgid "Function not available in FIPS mode." +#~ msgstr "Función no disponible en modo FIPS." + +#~ msgid "Failed to write hash." +#~ msgstr "No se ha podido escribir el «hash»." + +#~ msgid "Failed to finalize hash." +#~ msgstr "No se ha podido finalizar el «hash»." + +#~ msgid "Invalid resilience parameters (internal error)." +#~ msgstr "Parámetros de resiliencia no válidos (error interno)." + +#~ msgid "Failed to assign new enc segments." +#~ msgstr "No se han logrado asignar los nuevos segmentos enc." + +#~ msgid "Failed to assign digest %u to segment %u." +#~ msgstr "No se ha logrado asignar el resumen %u al segmento %u." + +#~ msgid "Failed to set segments." +#~ msgstr "No se han podido poner los segmentos." + +#~ msgid "Failed to assign reencrypt previous backup segment." +#~ msgstr "No se ha podido asignar recifrado al segmento de respaldo anterior." + +#~ msgid "Failed to assign reencrypt final backup segment." +#~ msgstr "No se ha podido asignar recifrado al segmento de respaldo final." + +#~ msgid "Failed generate 2nd segment." +#~ msgstr "No se ha podido generar el segundo segmento." + +#~ msgid "Failed generate 1st segment." +#~ msgstr "No se ha podido generar el primer segmento." + +#~ msgid "Failed to allocate device %s." +#~ msgstr "No se ha podido asignar el dispositivo %s." + +#~ msgid "Failed to allocate dm segments." +#~ msgstr "No se han podido asignar los segmentos dm." + +#~ msgid "Failed to create dm segments." +#~ msgstr "No se han podido crear los segmentos dm." + +#~ msgid "Failed to allocate device for new backing device." +#~ msgstr "No se ha podido asignar el dispositivo para el nuevo dispositivo de respaldo." + +#~ msgid "Failed to reload overlay device %s." +#~ msgstr "No se ha podido recargar el dispositivo de superposición %s." + +#~ msgid "Failed to refresh helper devices." +#~ msgstr "No se han podido actualizar los dispositivos de ayuda." + +#~ msgid "Failed to create reencryption backup segments." +#~ msgstr "No se ha podido crear los segmentos de respaldo de recifrado." + +#~ msgid "Failed to set online-reencryption requirement." +#~ msgstr "No se ha podido establecer el requisito de recifrado «online»." + +#~ msgid "Failed to hash sector at offset %zu." +#~ msgstr "No se ha podido hacer «hash» del sector en el desplazamiento %zu." + +#~ msgid "Failed to read sector hash." +#~ msgstr "No se ha podido leer el «hash« del sector." + +#~ msgid "Error: Calculated reencryption offset % is beyond device size %." +#~ msgstr "Error: El desplazamiento % de recifrado calculado sobrepasa el tamaño % del dispositivo." + +#~ msgid "Device is not in clean reencryption state." +#~ msgstr "El dispositivo no está en un estado de recifrado limpio." + +#~ msgid "Failed to read device info from %s." +#~ msgstr "No se ha podido leer la información del dispositivo en %s." + +#~ msgid "Failed to calculate new segments." +#~ msgstr "No se ha podido calcular los nuevos segmentos." + +#~ msgid "Failed to assign pre reenc segments." +#~ msgstr "No se han podido asignar los segmentos pre reenc." + +#~ msgid "Failed finalize hotzone resilience, retval = %d" +#~ msgstr "No se ha podido finalizar la resiliencia de zona caliente, retval = %d" + +#~ msgid "Failed to write data." +#~ msgstr "No se han podido escribir los datos." + +#~ msgid "Failed to update metadata or reassign device segments." +#~ msgstr "No se han podido actualizar los metadatos o reasignar los segmentos del dispositivo." + +#~ msgid "Failed to reload %s device." +#~ msgstr "No se ha podido recargar el dispositivo %s." + +#~ msgid "Failed to erase backup segments" +#~ msgstr "No se han podido borrar los segmentos de respaldo." + +#~ msgid "Requested dmcrypt performance options are not supported." +#~ msgstr "Las opciones de rendimiento de dmcrypt solicitadas no están disponibles." + +#~ msgid "Cannot format device %s which is still in use." +#~ msgstr "No se puede dar formato al dispositivo %s que todavía está en uso." + +#~ msgid "Key slot %d is not used." +#~ msgstr "La ranura de claves %d no se está utilizando." + +#~ msgid "Key slot %d selected for deletion." +#~ msgstr "La ranura de claves %d se va a borrar." + +#~ msgid "open device as mapping " +#~ msgstr "abrir el dispositivo como asociado a " + +#~ msgid "close device (deactivate and remove mapping)" +#~ msgstr "cerrar dispositivo (desactivar y eliminar la asociación)" + +#~ msgid "Failed to set PBKDF parameters." +#~ msgstr "No se han podido establecer los parámetros PBKDF." + +#~ msgid "Cannot seek to device offset.\n" +#~ msgstr "No es posible situarse en la posición del dispositivo.\n" + +#~ msgid "Device %s is too small. (LUKS2 requires at least % bytes.)" +#~ msgstr "El dispositivo %s es demasiado pequeño. (LUKS3 necesita % btyes como mínimo.)" + +#~ msgid "Replaced with key slot %d." +#~ msgstr "Reemplazado con ranura de claves %d." + +#~ msgid "Missing LUKS target type, option --type is required." +#~ msgstr "Falta el tipo de objetivo LUKS, se requiere la opción --type." + +#~ msgid "Missing --token option specifying token for removal." +#~ msgstr "Falta la opción --token que especifica el «token» que se va a borrar." + +#~ msgid "Add or remove keyring token" +#~ msgstr "Añadir o eliminar «token» de llavero" + +#~ msgid "Activated keyslot %i." +#~ msgstr "Se ha activado la ranura de claves %i." + +#~ msgid "memory allocation error in action_luksFormat" +#~ msgstr "error de reserva de memoria en action_luksFormat" + +#~ msgid "Key slot is invalid.\n" +#~ msgstr "La ranura de claves no es válida.\n" + +#~ msgid "Using default pbkdf parameters for new LUKS2 header.\n" +#~ msgstr "Se está utilizando los parámetros pbkdf predeterminados para la nueva cabecera LUKS2.\n" + +#~ msgid "Too many tree levels for verity volume.\n" +#~ msgstr "Demasiados niveles de arborescencia en el volumen «verity».\n" + +#~ msgid "Key %d not active. Can't wipe.\n" +#~ msgstr "La clave %d no está activa. No se puede limpiar.\n" + +#~ msgid " " +#~ msgstr " <«hash»_raíz>" + +#~ msgid "create active device" +#~ msgstr "crear dispositivo activo" + +#~ msgid "remove (deactivate) device" +#~ msgstr "eliminar (desactivar) dispositivo" + +#~ msgid "Progress: %5.1f%%, ETA %02llu:%02llu, %4llu MiB written, speed %5.1f MiB/s%s" +#~ msgstr "Progreso: %5.1f%%, ETA %02llu:%02llu, %4llu MiB escritos, velocidad %5.1f MiB/s%s" + +#~ msgid "Cannot find a free loopback device.\n" +#~ msgstr "No se ha encontrado ningún dispositivo de bucle invertido libre.\n" + +#~ msgid "Cannot open device %s\n" +#~ msgstr "No se puede abrir el dispositivo %s\n" + +#~ msgid "Cannot use passed UUID unless decryption in progress.\n" +#~ msgstr "No se puede utilizar el UUID pasado a menos que haya descifrado en curso.\n" + +#~ msgid "Marking LUKS device %s usable.\n" +#~ msgstr "Marcando el dispositivo LUKS %s como utilizable.\n" + +#~ msgid "WARNING: this is experimental code, it can completely break your data.\n" +#~ msgstr "ATENCIÓN: este código es experimental; puede ser que sus datos queden deteriorados por completo.\n" + +#~ msgid "FIPS checksum verification failed.\n" +#~ msgstr "La verificación de suma («checksum») FIPS ha fallado.\n" + +#~ msgid "WARNING: device %s is a partition, for TCRYPT system encryption you usually need to use whole block device path.\n" +#~ msgstr "ATENCIÓN: el dispositivo %s es una partición; para el sistema de cifrado TCRYPT normalmente se necesita usar la ruta de un dispositivo de bloque entero.\n" diff --git a/po/fi.gmo b/po/fi.gmo new file mode 100644 index 0000000000000000000000000000000000000000..e6d4ea46bebdda100e6a50ed23ac09c4759bbc57 GIT binary patch literal 16072 zcmbuGdyr&TUB^$5L^6c%2;mLh1r}$L?auBJl6A7#WOjFwO!hI$&g_O5VsdBt&h(vr z+@|lnGwFz+NH7EhMJcQTs?^#-sIm|&vqDLM<*KDbsR)*cQk2Rc77wv3DIb&;e!jnR zZa*fI4U}Cu`|ZB>Jbvf*KEE^h+Vh_Ne#htCw3pG|{B-9&2Y&S#{KMyOpXuDy;8(!& z;J<>O1wV3ya}R;Zvz$8!ehd6KIDMsaH-TRUHQ!awcJ4XgUht*h9Qfnly`YwO2)qh> z54a2bO;GFoG5BKe??9$@-vuuNpT=Z2f|r9Y0q4Nyfo}vM-DTiwzyf?Z_`!gm2A|LG zFN2!*+aM&m%bx4kzZw*MGoa|62ls$0;E#dt1taixz*m8fgD(KT3u?Y+Lc}Y<-CzXX z5ikY$&ppCFd%+Kbn*R%+*8djxaqxSf_W3cGaSQnS;Pv2tf|_>^#P0?dLG7dDAII0Ie-YQAN#4sLz)Tw5v|(|YWyKka-0XXeizibzX)o+4}yPkiF1DmGKKq${-nx)P%hUu&Sz4Zfb=^Pt{;0Mz{FLCyCVsQJGHN*^zQsi>BFF(^J<5270Gc2N6m zgx`Ho{CO`Jfgc553;sFyI`DtN8^PD2MAD-c|7brS0AYoD6l6*F_aH2Cm*Sj+*MORL z5!Co5D1QDr_+0Rhz(>Kq4!<9Pc&+y#@Fwt!p#0gDD5uuh4~nmE03)yf)&KpV^!_mr z65M4d-R0nZ@JjF?$W-naNEbH%4}l*A<@f#>d?WZGejEf#Q0xCLxBz}9-~p85W`4g7 zyaW70@C11Ie(zuI0$w(=PDMLo}B_e3FhEQ za5u!=2^L@kehz#V_z$4;<~yLqT>>$p|JC3+cn`P*UI1Cb-SiXA9R=S6J|8>}9s?f( z#s3!~q!)to;Jx6z;2Xd{08s(=e3*VUI0s6mXCRZ-6fa zU&SUh-z}il`8Dt*;3q)I{V`Db@V)Tni(_%C1tejl6yBa}<}e=R7xI0cIS2fd=txFYv3O?r{i^wAzrA>-}4z}sm0yqNY5`-aYg+9Rf5 zJdhnpw&Ne^@+wWdmcHoI^Dy!6E5ff+;70f^JCZJ5LlbZHnWxFV6$>Pv>LcD_8ZNFL zfRd{|(!Ucl>6t!P&{{NDZ@w6C57M4P`+5D~Q_v!P;d9c1`AdDxX!p}zPCHGTqREDT zn)W7|KJWD4-U^-x-(LWtMsArV9le|OZrTb>pSRK0Xam|=+PyS=-c0*R+RxCWd&g+f z)ei0Hv>Dp7X*bejbF#A`EW$>s9uRJObRL{Q~Vi+O4#QXa{INOOp@KC->l*0a17R$S2I{ z+tk5$wMet>p(xFxteZsH+UyihyKyJ6XGJrK8p&q5nnXnwt@e|+NTRaaNcz$4eCl8$ zF5>(A`%!nEg)vhHn{nQJLI*$JYSt~{w3~L4=_%RP~L z?DTvoW`#U`Fd6Fxft|R}1E{!b?)1rplef=C$huw0zL~@lIg*Ij?^@DNxsLYX4yAcg_EFU282Y8vrd7^D(y`(!^Y1MSEjXEsy zXl9S`M_>7tWxY7b{g1)~rSDUhueP(CUG$SqwwXkJ^btJ^!|nTUeE8)jupd+IRnc;i z7kL!-lPK=>`q=|1d_cc*DP@O=`vdf>J&2~eS(F!9KVDCwg~gfrl-r$a={J>WKgkh9 z1ZU#@df9<7x!V)v335z(O|KitzJ*CFHk=a$I>-;QkuAQ!TQN=+!iyKi~LmrwM!L{Rb8)#odKI|YsJp`p%S-OC=~QHf7d%kV!noUz9ckma zJ8Y^ig_cJ!cQx`qJG|Adf>ygDS*N4P@^W=G$@8_cjbM*>9~Vpi8z%e?x&f)~sP|h4 zdw0G&cSqA4jU7ZQY<%3y z@X=!!ld^>euj90P9w0?RY zy4RJ?wf97O`JVOD^;F*YNVA`Hl4x;h#@(KDlRh$mZ6a@acVqYN2vH}pYxA3Nd!2zr zv*YgYj;~R6deIh7qRp(0k=sB*W}bBOv`FzkY1eyEBt5m&Ojnz@xpuaNS1{d@G)G|u zUtTZ_h1Hx{S&Ye{KDFFrW?M1m9S#&0#qF(lzpzHm=kp z^^?}!@wCG`qf_=7tszwjLxFbZmuN5+6*n62ZP+new`eWLZ6-t@#gCUA=|n#X{6Rh_ z#EF=wPVNtAtN8cZn!==kshu){&6R-n{y|Vbu z`W%A&TG$>+fuLWJd66zV?P^hx$|rGAt%jee-BaG%$HBoOpOwH!6jFLA3amfED)HDW zNwLMgqkY;AuB8!nR`oXTFwU8fTZj+LWH}FuBKh@ht%?t$#e5VMGe$vSVi+XV8fm^7 z_Z#Cxj>cuge0E`mYjPQ`*+?uY@M@ym2?4C2NoKA=^N{^0e;Qj@?hXBw&qjq|Spzw& zCzwIskFV9j^kakaCJ94hjFsD|T$4E}d9#3l4h?BFJA*BF{$AEs#%U48Yl${k4V45! z<`bsL$LH~BOs$!s*4?oku>F;^%e1z6$zzH#a2YHd8Fa6OYpWSJ{JCMD6 z_7@ zjf>`-nI}nf9ml2B>r6$n85?Fhss@Ehfpl?9u;P=cp`MR?gAETXRXkKmubA(bRElEZ zU9_1>(MJ<_g|xxrk0;mjuO)*@0AXHvwFH+loJDdgyH*a7$52cdS$&nK1qT&QB02@t zS%L2SCz{$AoYX;w6HLON7`D=OoA`orR_%n7g2GcwV%3j&WuI(oov}>7xG>u=(Ba4# zi!(vI*labmiZy|9a+o@$11r&7WFcE%IBi(Q`g3~jZ;|c7P_dec$%@i`KiSMyp;RQ{ z!=#yVW4ImpMaywU5{%G>POpgM-!SQ{+rY`4>9)Gr78+x z!%0;(HnG+{i>HOJ95KI0l0>L6ncv_A#uI;~WcSNcv3s|fSgogKVv`OztD z>~QDbPvj}+2wK;%c<**F)r#avY0fx5C@dU)k)BWNy_r0~p^sp{?m8G&?!23HJ&XTU zVPKqFouzp=h|3Y8~6ubs%((?;!Zxt`aSvsqPRt>>+Ij6bY5lBrXRwbS@s z%~Cr`?Qk~Qzjxp3YWw!p_8y4#?Vr8=z_ok#@7+6foVZY1Cferhm^1urbf+{XIu`dg zIk8d7ZiR344ZXN^ow`lCPQ*CG(C&Ik(o$Pa;?8Vzn-1sHunrbsHZ5K7s}%@8!io9O&iAp|BUnB0zqU-taMlus>&)lfq{>X6?C$0> z%eU1IjQVM1iomt`?ke@~?)q$WfFt|V8;n!4@)t0V^wMt^0(}yNQ_IY+O>9YLb9_Eg z>{Pq#$L-o}aDakRw`V`|oA=*@3)Y*Pr@PUvo1=X*H>ucPWYhw>MMlZJ8x2}{O5~we zj5Lba-(t|g-nO!4q0=o9G*NVGmst^S#zbqvUbw}u@77yd7Ty$Ts_ByZMsEw^K$jq{ zUNJ5?zi_TyTsXIR;aoMHU0qZo580JPEzjDWl7uGA7kP@>?HD;uu3`5W72&q*o@gU$ zL2Q{dV!T(i8TKJEDM4{vGNLc%VVUP;whpONkL1fHOH-1!X7O}!UtJdwx(62AyKO& zRbZo?vdmjqFU{!5jmX(7Euzlg!g-w3g>!=fRY6lW<8Bk}8R>A%?nYoftj1NKzu|HO zsfW9b#UJ)&q?gGO{vS6ZP+rlD>J(7T7CR-grg1cAb6L`ENh7C|G{R)sW*2#y_KPg9 z?npLc;$kYJtFA{1@~fCD5>i^IGj(m{iR_m<3XH0PFjQpRy2f-aCf2^-Ey2Ga;ysO1g~*E z%5wAr-^8&r+@-V#4{1N%$kHaetftArBp+shV8ew zW1iwT>ZHt!qH`&Ov~XHfSNs=3iS#&+xoKc8x`TO=Q5(464OV6%Cb-x*)2)eF$0UNS zjj!>UzPM#f?xQ%xS zaEbmh2X`Y`UN~owXzWI3PNt2C6pY8I$R*jO4uOk%M!BL&QNztnCv}T*=+r%kadKYV z#%Rw9V&>pEyr3&ejLeCe*~WXOED}R@8=uybE5~n}?2A&2!m{!E+y=F|cNywL%$?4K za~)GjE!Rs?ZF0s4sv+7urzI0;4@RnIWgptf=FBlr0&Agad93QBEIz3G2z9tsc@s9&#JG$xY>J7hQRpg8rV>L=n4+8PZZk_Q*%%Ox`OT9M z>XWWJoA#RugeC=Z8uA5f@4`9tPE;~5iL^2@GyT^#H8@ZsNmK;Mx`fs~_G-P%#i-ln z*t}teDhE*<RiG8%+RjKk!m8c6lRk2;>UAi`%h@-{}E zw`4+68`tFdB%YM{XxHe_2_;9J)TdOvRLMklK&;1|Fbg+9orDc4J>fp6`s(IW@4m43&^)tQ=u4vV_6}ddAl0mOQjiX zCK$DLTrIqPCSHZ>r)^y5C2gV;+^8aPOjISWN_2-gL5JNz6&REJq;b#=do>9wTsehM zpXzdnd19RC4iimYLiw#VNDP})0Q}yDTVkFaE~6&Mnwag07g7}CnId!wH&PRu@Ff|a z#K=1(WBb-fst@DWQQO#O2O@D`Y#LnulQMuA@ttEAtlQ=rC2Kn?rQJ(C^%#>$xSHBw zBGW6G3wQ#E{CKa-DCTp1ok6JL0m?qJ5qyT!qV*q6sM?pR31wp~@tot;}a zxx6rcba82U@u@DXmP@L5(A(n_g=2+iLM0g?7ZnzK3E37;XV5o{dg${C%;;`ar%j`} ztqbRexmzpi69;^~Y&?0r#hvob8KWAW<>jV13+Z%10%6bXI|;Z_aD^61&1dK4PR|`b zzHoB>TA1TrE1YgeCtIC!U6nR(rg7I&P5yEa5q2|t*6<~q#CdU< zu2jOm^zVX0BFYs5ig*-FR9@h3q;T(w&15x7-SH}gJ1c+h<5cCvjZ|L+nD$3{F-?CV z(_uZ!7B=Hvj6zk}*vMIt*-ePU-AOXBfz2ju#+rY`!7wZSJ8WIY9Lt_U>NZLM3;tdZ z_dB%|gx%DUlpV{5g!4yCO@*H*8Yj;p)k{vxsu86vG+(ZfV+!WarNU^*0`i*$em)f?!vLrG9##UPxj7U2xQ)giSP{$6t1m0CDjnf#w@ z67G^P7Zy`>$a`sCp0sS>wW@49PoW2OR(nYjy<5d}2vRzf+%(jif4MICO> z@nM14GBG()n{wz>TwYSw@ESxU_mxLq*_m;80>2lPJ#1?41@PZbwhd*;+KN29oo00= z&Ls3e6<_OI1*t+EG60>ujhTMic{TDOfH6_FKIyDXq`gTmTVvV2luaPw52 zA=I3tKWzFE)7Y87Y@7cpq#K+-+_GBbNYEJ8@TDoKOl|nY>JXM3`oM)E=pZOfjhMLQ3r>X*~P$h5*g4mnR@VGb1<(y5z%>K4z$o|2g$^PiXpO3&PQ$i`E O=dm2>c$xPJ9Qr@#mC!Q) literal 0 HcmV?d00001 diff --git a/po/fi.po b/po/fi.po new file mode 100644 index 0000000..630c4de --- /dev/null +++ b/po/fi.po @@ -0,0 +1,4093 @@ +# Finnish messages for cryptsetup. +# Copyright © 2011, 2012, 2013, 2014, 2015 Free Software Foundation, Inc. +# This file is put in the public domain. +# This file is distributed under the same license as the cryptsetup package. +# Jorma Karvonen , 2011-2015. +# +msgid "" +msgstr "" +"Project-Id-Version: cryptsetup 1.7.0\n" +"Report-Msgid-Bugs-To: dm-crypt@saout.de\n" +"POT-Creation-Date: 2019-11-01 09:04+0100\n" +"PO-Revision-Date: 2015-11-08 12:48+0200\n" +"Last-Translator: Jorma Karvonen \n" +"Language-Team: Finnish \n" +"Language: fi\n" +"MIME-Version: 1.0\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" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: lib/libdevmapper.c:384 +#, fuzzy +msgid "Cannot initialize device-mapper, running as non-root user." +msgstr "Laitekuvaimen alustus epäonnistui, suoritetaan ei-root-käyttäjänä.\n" + +#: lib/libdevmapper.c:387 +#, fuzzy +msgid "Cannot initialize device-mapper. Is dm_mod kernel module loaded?" +msgstr "Laitekuvaimen alustus epäonnistui. Onko dm_mod-käyttöjärjestelmäydinmoduuli ladattu?\n" + +#: lib/libdevmapper.c:1082 +#, fuzzy +msgid "Requested deferred flag is not supported." +msgstr "Pyydetty LUKS-tiiviste %s ei ole tuettu.\n" + +#: lib/libdevmapper.c:1149 +#, fuzzy, c-format +msgid "DM-UUID for device %s was truncated." +msgstr "DM-UUID laitteelle %s typistettiin.\n" + +#: lib/libdevmapper.c:1463 +msgid "Unknown dm target type." +msgstr "" + +#: lib/libdevmapper.c:1565 lib/libdevmapper.c:1617 +#, fuzzy +msgid "Requested dm-crypt performance options are not supported." +msgstr "Pyydetyt dmcrypt-suorituskykyvalitsimet eivät ole tuettuja.\n" + +#: lib/libdevmapper.c:1572 +#, fuzzy +msgid "Requested dm-verity data corruption handling options are not supported." +msgstr "Pyydetyt dmcrypt-suorituskykyvalitsimet eivät ole tuettuja.\n" + +#: lib/libdevmapper.c:1576 +#, fuzzy +msgid "Requested dm-verity FEC options are not supported." +msgstr "Pyydetyt dmcrypt-suorituskykyvalitsimet eivät ole tuettuja.\n" + +#: lib/libdevmapper.c:1580 +#, fuzzy +msgid "Requested data integrity options are not supported." +msgstr "Pyydetyt dmcrypt-suorituskykyvalitsimet eivät ole tuettuja.\n" + +#: lib/libdevmapper.c:1582 +#, fuzzy +msgid "Requested sector_size option is not supported." +msgstr "Pyydetyt dmcrypt-suorituskykyvalitsimet eivät ole tuettuja.\n" + +#: lib/libdevmapper.c:1587 +msgid "Requested automatic recalculation of integrity tags is not supported." +msgstr "" + +#: lib/libdevmapper.c:1591 +#, fuzzy +msgid "Requested dm-integrity bitmap mode is not supported." +msgstr "Pyydetty LUKS-tiiviste %s ei ole tuettu.\n" + +#: lib/libdevmapper.c:1620 +#, fuzzy +msgid "Discard/TRIM is not supported." +msgstr "Tiivistealgoritmia %s ei tueta.\n" + +#: lib/libdevmapper.c:2511 +#, c-format +msgid "Failed to query dm-%s segment." +msgstr "" + +# Entropy viittaa tässä ilmeisesti tiivistettävän tekstin satunnaisuuteen. Mitä satunnaisempi se on, sitä vähemmän sitä voi tiivistää. +#: lib/random.c:80 +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" +msgstr "" +"Järjestelmässä ei ole satunnaisuutta taltioavainta tuotettaessa.\n" +"Siirrä hiirtä tai kirjoita jotain tekstiä toiseen ikkunaan joidenkin satunnaistapahtumien keräämiseksi.\n" + +#: lib/random.c:84 +#, c-format +msgid "Generating key (%d%% done).\n" +msgstr "Avainta tuotetaan (%d%% valmis).\n" + +#: lib/random.c:170 +#, fuzzy +msgid "Running in FIPS mode." +msgstr "Suoritetaan FIPS-tilassa.\n" + +#: lib/random.c:176 +#, fuzzy +msgid "Fatal error during RNG initialisation." +msgstr "Kohtalokas virhe RNG-alustuksen aikana.\n" + +#: lib/random.c:213 +#, fuzzy +msgid "Unknown RNG quality requested." +msgstr "Tuntematonta RNG-laatua pyydetty.\n" + +#: lib/random.c:218 +#, fuzzy +msgid "Error reading from RNG." +msgstr "Virhe %d luettaessa kohteesta RNG: %s\n" + +#: lib/setup.c:223 +#, fuzzy +msgid "Cannot initialize crypto RNG backend." +msgstr "RNG-salaustaustaohjelman alustus epäonnistui.\n" + +#: lib/setup.c:229 +#, fuzzy +msgid "Cannot initialize crypto backend." +msgstr "Salaustaustaohjelman alustus epäonnistui.\n" + +#: lib/setup.c:260 lib/setup.c:1990 lib/verity/verity.c:120 +#, fuzzy, c-format +msgid "Hash algorithm %s not supported." +msgstr "Tiivistealgoritmia %s ei tueta.\n" + +#: lib/setup.c:263 lib/loopaes/loopaes.c:90 +#, fuzzy, c-format +msgid "Key processing error (using hash %s)." +msgstr "Avainkäsittelyvirhe (käytetään tiivistealgoritmia %s).\n" + +#: lib/setup.c:324 lib/setup.c:351 +#, fuzzy +msgid "Cannot determine device type. Incompatible activation of device?" +msgstr "Laitetyypin määritteleminen epäonnistui. Laitteen yhteensopimaton aktivointi?\n" + +#: lib/setup.c:330 lib/setup.c:2985 +#, fuzzy +msgid "This operation is supported only for LUKS device." +msgstr "Tätä toimintoa tuetaan vain LUKS-laitteelle.\n" + +#: lib/setup.c:357 +#, fuzzy +msgid "This operation is supported only for LUKS2 device." +msgstr "Tätä toimintoa tuetaan vain LUKS-laitteelle.\n" + +#: lib/setup.c:412 lib/luks2/luks2_reencrypt.c:2345 +#, fuzzy +msgid "All key slots full." +msgstr "Kaikki avainvälit ovat täynnä.\n" + +#: lib/setup.c:423 +#, fuzzy, c-format +msgid "Key slot %d is invalid, please select between 0 and %d." +msgstr "Avainväli %d on virheellinen, valitse väliltä 0 ... %d.\n" + +#: lib/setup.c:429 +#, fuzzy, c-format +msgid "Key slot %d is full, please select another one." +msgstr "Avainväli %d on täynnä, valitse joku toinen.\n" + +#: lib/setup.c:514 lib/setup.c:2759 +#, fuzzy +msgid "Device size is not aligned to device logical block size." +msgstr "Laite %s ei ole kelvollinen LUKS-laite.\n" + +#: lib/setup.c:610 +#, fuzzy, c-format +msgid "Header detected but device %s is too small." +msgstr "Otsake havaittu, mutta laite %s on liian pieni.\n" + +#: lib/setup.c:647 +#, fuzzy +msgid "This operation is not supported for this device type." +msgstr "Tätä toimintoa ei tueta tälle laitetyypille.\n" + +#: lib/setup.c:652 +msgid "Illegal operation with reencryption in-progress." +msgstr "" + +#: lib/setup.c:821 lib/luks1/keymanage.c:476 +#, fuzzy, c-format +msgid "Unsupported LUKS version %d." +msgstr "Tukematon LUKS-versio %d.\n" + +#: lib/setup.c:838 lib/setup.c:1483 lib/setup.c:1903 +#, fuzzy +msgid "Detached metadata device is not supported for this crypt type." +msgstr "UUID ei ole tuettu tälle laitetyypille.\n" + +#: lib/setup.c:1373 lib/setup.c:2479 lib/setup.c:2551 lib/setup.c:2563 +#: lib/setup.c:2712 lib/setup.c:4310 +#, fuzzy, c-format +msgid "Device %s is not active." +msgstr "Laite %s ei ole aktiivinen.\n" + +#: lib/setup.c:1390 +#, fuzzy, c-format +msgid "Underlying device for crypt device %s disappeared." +msgstr "Salauslaitteen %s perustana oleva laite hävisi.\n" + +#: lib/setup.c:1468 +#, fuzzy +msgid "Invalid plain crypt parameters." +msgstr "Virheelliset tavalliset salausparametrit.\n" + +#: lib/setup.c:1473 lib/setup.c:1893 src/integritysetup.c:73 +#, fuzzy +msgid "Invalid key size." +msgstr "Virheellinen avainkoko.\n" + +#: lib/setup.c:1478 lib/setup.c:1898 lib/setup.c:2100 +#, fuzzy +msgid "UUID is not supported for this crypt type." +msgstr "UUID ei ole tuettu tälle laitetyypille.\n" + +#: lib/setup.c:1493 lib/setup.c:1683 lib/luks2/luks2_reencrypt.c:2308 +#: src/cryptsetup.c:1169 +#, fuzzy +msgid "Unsupported encryption sector size." +msgstr "Uudelleensalauslokitiedoston lukeminen epäonnistui.\n" + +#: lib/setup.c:1501 lib/setup.c:1808 lib/setup.c:2753 +#, fuzzy +msgid "Device size is not aligned to requested sector size." +msgstr "Laite %s ei ole kelvollinen LUKS-laite.\n" + +#: lib/setup.c:1552 lib/setup.c:1671 +#, fuzzy +msgid "Can't format LUKS without device." +msgstr "Kohteen LUKS pohjustus ilman laitetta epäonnistui.\n" + +#: lib/setup.c:1558 lib/setup.c:1677 +msgid "Requested data alignment is not compatible with data offset." +msgstr "" + +#: lib/setup.c:1626 lib/setup.c:1795 +msgid "WARNING: Data offset is outside of currently available data device.\n" +msgstr "" + +#: lib/setup.c:1636 lib/setup.c:1823 lib/setup.c:1844 lib/setup.c:2112 +#, fuzzy, c-format +msgid "Cannot wipe header on device %s." +msgstr "Otsakkeen pyyhkiminen pois laitteesta %s epäonnistui.\n" + +#: lib/setup.c:1688 +msgid "WARNING: The device activation will fail, dm-crypt is missing support for requested encryption sector size.\n" +msgstr "" + +#: lib/setup.c:1710 +msgid "Volume key is too small for encryption with integrity extensions." +msgstr "" + +#: lib/setup.c:1765 +#, fuzzy, c-format +msgid "Cipher %s-%s (key size %zd bits) is not available." +msgstr "Salaus %s ei ole käytettävissä.\n" + +#: lib/setup.c:1798 +#, c-format +msgid "WARNING: LUKS2 metadata size changed to % bytes.\n" +msgstr "" + +#: lib/setup.c:1802 +#, c-format +msgid "WARNING: LUKS2 keyslots area size changed to % bytes.\n" +msgstr "" + +#: lib/setup.c:1826 lib/utils_device.c:829 lib/luks1/keyencryption.c:256 +#: lib/luks2/luks2_reencrypt.c:2356 lib/luks2/luks2_reencrypt.c:3348 +#, fuzzy, c-format +msgid "Device %s is too small." +msgstr "Laite %s on liian pieni.\n" + +#: lib/setup.c:1837 lib/setup.c:1863 +#, fuzzy, c-format +msgid "Cannot format device %s in use." +msgstr "Laitteen %s pohjustus epäonnistui, koska se on yhä käytössä.\n" + +#: lib/setup.c:1840 lib/setup.c:1866 +#, fuzzy, c-format +msgid "Cannot format device %s, permission denied." +msgstr "Laitteen %s pohjustus epäonnistui, koska pääsy laitteeseen on kielletty.\n" + +#: lib/setup.c:1852 lib/setup.c:2164 +#, fuzzy, c-format +msgid "Cannot format integrity for device %s." +msgstr "Laitteelle %s kirjoittaminen epäonnistui.\n" + +#: lib/setup.c:1870 +#, fuzzy, c-format +msgid "Cannot format device %s." +msgstr "Laitteen %s lukeminen epäonnistui.\n" + +#: lib/setup.c:1888 +#, fuzzy +msgid "Can't format LOOPAES without device." +msgstr "Kohteen LOOPAES pohjustus ilman laitetta epäonnistui.\n" + +#: lib/setup.c:1933 +#, fuzzy +msgid "Can't format VERITY without device." +msgstr "Kohteen VERITY pohjustus ilman laitetta epäonnistui.\n" + +#: lib/setup.c:1944 lib/verity/verity.c:103 +#, fuzzy, c-format +msgid "Unsupported VERITY hash type %d." +msgstr "Tukematon VERITY-tiivistetyyppi %d.\n" + +#: lib/setup.c:1950 lib/verity/verity.c:111 +#, fuzzy +msgid "Unsupported VERITY block size." +msgstr "Tukematon VERITY-lohkokoko.\n" + +#: lib/setup.c:1955 lib/verity/verity.c:75 +#, fuzzy +msgid "Unsupported VERITY hash offset." +msgstr "Tukematon VERITY-tiivistesiirros.\n" + +#: lib/setup.c:1960 +#, fuzzy +msgid "Unsupported VERITY FEC offset." +msgstr "Tukematon VERITY-tiivistesiirros.\n" + +#: lib/setup.c:1984 +msgid "Data area overlaps with hash area." +msgstr "" + +#: lib/setup.c:2009 +msgid "Hash area overlaps with FEC area." +msgstr "" + +#: lib/setup.c:2016 +msgid "Data area overlaps with FEC area." +msgstr "" + +#: lib/setup.c:2221 +#, fuzzy, c-format +msgid "Unknown crypt device type %s requested." +msgstr "Tuntematon salauslaitetyyppi %s pyydetty.\n" + +#: lib/setup.c:2485 lib/setup.c:2557 lib/setup.c:2570 +#, fuzzy, c-format +msgid "Unsupported parameters on device %s." +msgstr "Otsakkeen pyyhkiminen pois laitteesta %s epäonnistui.\n" + +#: lib/setup.c:2491 lib/setup.c:2576 lib/luks2/luks2_reencrypt.c:2408 +#: lib/luks2/luks2_reencrypt.c:2718 +#, fuzzy, c-format +msgid "Mismatching parameters on device %s." +msgstr "Otsakkeen pyyhkiminen pois laitteesta %s epäonnistui.\n" + +#: lib/setup.c:2596 +msgid "Crypt devices mismatch." +msgstr "" + +#: lib/setup.c:2633 lib/setup.c:2638 lib/luks2/luks2_reencrypt.c:2054 +#: lib/luks2/luks2_reencrypt.c:3126 +#, fuzzy, c-format +msgid "Failed to reload device %s." +msgstr "Laitteen %s lukeminen epäonnistui.\n" + +#: lib/setup.c:2643 lib/setup.c:2648 lib/luks2/luks2_reencrypt.c:2025 +#: lib/luks2/luks2_reencrypt.c:2032 +#, fuzzy, c-format +msgid "Failed to suspend device %s." +msgstr "Avaintiedoston avaus epäonnistui.\n" + +#: lib/setup.c:2653 lib/luks2/luks2_reencrypt.c:2039 +#: lib/luks2/luks2_reencrypt.c:3061 lib/luks2/luks2_reencrypt.c:3130 +#, fuzzy, c-format +msgid "Failed to resume device %s." +msgstr "Laitteen %s lukeminen epäonnistui.\n" + +#: lib/setup.c:2667 +#, c-format +msgid "Fatal error while reloading device %s (on top of device %s)." +msgstr "" + +#: lib/setup.c:2670 lib/setup.c:2672 +#, fuzzy, c-format +msgid "Failed to switch device %s to dm-error." +msgstr "Laitekuvaajahakemiston hankkiminen epäonnistui." + +#: lib/setup.c:2744 +#, fuzzy +msgid "Cannot resize loop device." +msgstr "Silmukkalaitteen koon muuttaminen epäonnistui.\n" + +#: lib/setup.c:2817 +msgid "Do you really want to change UUID of device?" +msgstr "Haluatko todella vaihtaa laitteen UUID-tunnistetta?" + +#: lib/setup.c:2893 +#, fuzzy +msgid "Header backup file does not contain compatible LUKS header." +msgstr "Varmuuskopiotiedosto ei sisällä kelvollista LUKS-otsaketta.\n" + +#: lib/setup.c:2993 +#, fuzzy, c-format +msgid "Volume %s is not active." +msgstr "Taltio %s ei ole käytössä.\n" + +#: lib/setup.c:3004 +#, fuzzy, c-format +msgid "Volume %s is already suspended." +msgstr "Taltio %s on jo keskeytetty.\n" + +#: lib/setup.c:3017 +#, fuzzy, c-format +msgid "Suspend is not supported for device %s." +msgstr "Keskeyttämistä ei tueta laitetyypille %s.\n" + +#: lib/setup.c:3019 +#, fuzzy, c-format +msgid "Error during suspending device %s." +msgstr "Virhe keskeytettäessä laitetta %s.\n" + +#: lib/setup.c:3052 lib/setup.c:3119 +#, fuzzy, c-format +msgid "Volume %s is not suspended." +msgstr "Taltiota %s ei ole keskeytetty.\n" + +#: lib/setup.c:3081 +#, fuzzy, c-format +msgid "Resume is not supported for device %s." +msgstr "Jatkamista ei tueta laiteelle %s.\n" + +#: lib/setup.c:3083 lib/setup.c:3151 +#, fuzzy, c-format +msgid "Error during resuming device %s." +msgstr "Virhe jatkettaessa laitteella %s.\n" + +# Volume key tarkoittaa yleensä äänenvoimakkuussäädintä, ei välttämättä tässä. +#: lib/setup.c:3219 lib/setup.c:3407 +#, fuzzy +msgid "Cannot add key slot, all slots disabled and no volume key provided." +msgstr "Avainvälin lisäys epäonnistui, kaikki välit on otettu pois käytöstä ja yhtään taltioavainta ei ole tarjottu.\n" + +#: lib/setup.c:3359 +#, fuzzy +msgid "Failed to swap new key slot." +msgstr "Uuden avainvälin vaihtaminen epäonnistui.\n" + +#: lib/setup.c:3524 lib/setup.c:4161 lib/setup.c:4174 lib/setup.c:4182 +#: lib/setup.c:4195 lib/setup.c:4480 lib/setup.c:5593 +#, fuzzy +msgid "Volume key does not match the volume." +msgstr "Taltioavain ei täsmää taltion kanssa.\n" + +#: lib/setup.c:3545 +#, fuzzy, c-format +msgid "Key slot %d is invalid." +msgstr "Avainväli %d on virheellinen.\n" + +#: lib/setup.c:3551 src/cryptsetup.c:1511 src/cryptsetup.c:1856 +#, fuzzy, c-format +msgid "Keyslot %d is not active." +msgstr "Avainväli %d ei ole käytössä.\n" + +#: lib/setup.c:3570 +#, fuzzy +msgid "Device header overlaps with data area." +msgstr "Tälle salasanalauseelle ei ole saatavissa laiteotsaketta.\n" + +#: lib/setup.c:3836 +msgid "Reencryption in-progress. Cannot activate device." +msgstr "" + +#: lib/setup.c:3838 lib/luks2/luks2_json_metadata.c:2244 +#: lib/luks2/luks2_reencrypt.c:2817 +#, fuzzy +msgid "Failed to get reencryption lock." +msgstr "Uudelleensalauslokitiedoston lukeminen epäonnistui.\n" + +#: lib/setup.c:3851 lib/luks2/luks2_reencrypt.c:2836 +#, fuzzy +msgid "LUKS2 reencryption recovery failed." +msgstr "Uudelleensalauslokitiedoston avaus epäonnistui.\n" + +#: lib/setup.c:3978 lib/setup.c:4248 +#, fuzzy +msgid "Device type is not properly initialised." +msgstr "Laitetyyppi ei ole alustettu oikein.\n" + +#: lib/setup.c:4022 +#, fuzzy, c-format +msgid "Cannot use device %s, name is invalid or still in use." +msgstr "Laitteen %s pohjustus epäonnistui, koska se on yhä käytössä.\n" + +#: lib/setup.c:4025 +#, fuzzy, c-format +msgid "Device %s already exists." +msgstr "Laite %s on jo olemassa.\n" + +#: lib/setup.c:4148 +#, fuzzy +msgid "Incorrect volume key specified for plain device." +msgstr "Virheellinen taltioavain määritelty tavalliselle laitteelle.\n" + +#: lib/setup.c:4214 +#, fuzzy +msgid "Incorrect root hash specified for verity device." +msgstr "Virheellinen root-tiiviste määritelty verity-laitteelle.\n" + +#: lib/setup.c:4289 lib/setup.c:4305 lib/luks2/luks2_json_metadata.c:2297 +#: src/cryptsetup.c:2527 +#, fuzzy, c-format +msgid "Device %s is still in use." +msgstr "Laite %s on yhä käytössä.\n" + +#: lib/setup.c:4314 +#, fuzzy, c-format +msgid "Invalid device %s." +msgstr "Virheellinen laite %s.\n" + +#: lib/setup.c:4430 +#, fuzzy +msgid "Volume key buffer too small." +msgstr "Taltioavainpuskuri on liian pieni.\n" + +#: lib/setup.c:4438 +#, fuzzy +msgid "Cannot retrieve volume key for plain device." +msgstr "Taltioavaimen nouto tavalliselle laitteelle epäonnistui.\n" + +#: lib/setup.c:4449 +#, fuzzy, c-format +msgid "This operation is not supported for %s crypt device." +msgstr "Tätä toimintoa ei tueta %s-salauslaitteelle.\n" + +#: lib/setup.c:4636 +#, fuzzy +msgid "Dump operation is not supported for this device type." +msgstr "Dump-toimintoa ei tueta tälle laitetyypille.\n" + +#: lib/setup.c:4947 +#, c-format +msgid "Data offset is not multiple of %u bytes." +msgstr "" + +#: lib/setup.c:5229 +#, fuzzy, c-format +msgid "Cannot convert device %s which is still in use." +msgstr "Laitteen %s pohjustus epäonnistui, koska se on yhä käytössä.\n" + +#: lib/setup.c:5526 +#, c-format +msgid "Failed to assign keyslot %u as the new volume key." +msgstr "" + +#: lib/setup.c:5599 +msgid "Failed to initialise default LUKS2 keyslot parameters." +msgstr "" + +#: lib/setup.c:5605 +#, fuzzy, c-format +msgid "Failed to assign keyslot %d to digest." +msgstr "Uuden avainvälin vaihtaminen epäonnistui.\n" + +#: lib/setup.c:5690 +#, fuzzy +msgid "Failed to load key in kernel keyring." +msgstr "Avaintiedoston avaus epäonnistui.\n" + +#: lib/setup.c:5757 +#, fuzzy +msgid "Kernel keyring is not supported by the kernel." +msgstr "Tätä toimintoa ei tueta tälle laitetyypille.\n" + +#: lib/setup.c:5767 lib/luks2/luks2_reencrypt.c:2933 +#, fuzzy, c-format +msgid "Failed to read passphrase from keyring (error %d)." +msgstr "Avainsäiliöstä lukeminen epäonnistui.\n" + +#: lib/setup.c:5791 +msgid "Failed to acquire global memory-hard access serialization lock." +msgstr "" + +#: lib/utils.c:81 +#, fuzzy +msgid "Cannot get process priority." +msgstr "Prosessiprioriteetin hakeminen epäonnistui.\n" + +#: lib/utils.c:95 +#, fuzzy +msgid "Cannot unlock memory." +msgstr "Muistin lukituksen avaus epäonnistui.\n" + +#: lib/utils.c:169 lib/tcrypt/tcrypt.c:498 +#, fuzzy +msgid "Failed to open key file." +msgstr "Avaintiedoston avaus epäonnistui.\n" + +#: lib/utils.c:174 +#, fuzzy +msgid "Cannot read keyfile from a terminal." +msgstr "Avaintiedoston %s lukeminen epäonnistui.\n" + +#: lib/utils.c:191 +#, fuzzy +msgid "Failed to stat key file." +msgstr "Avaintiedoston kutsuminen stat-funktiolla epäonnistui.\n" + +#: lib/utils.c:199 lib/utils.c:220 +#, fuzzy +msgid "Cannot seek to requested keyfile offset." +msgstr "Pyydetyn avaintiedostosiirrososoitteen etsintä epäonnistui.\n" + +#: lib/utils.c:214 lib/utils.c:229 src/utils_password.c:188 +#: src/utils_password.c:201 +#, fuzzy +msgid "Out of memory while reading passphrase." +msgstr "Muisti loppui luettaessa salasanalausetta.\n" + +#: lib/utils.c:249 +#, fuzzy +msgid "Error reading passphrase." +msgstr "Virhe luettaessa salasanalausetta.\n" + +#: lib/utils.c:266 +msgid "Nothing to read on input." +msgstr "" + +#: lib/utils.c:273 +#, fuzzy +msgid "Maximum keyfile size exceeded." +msgstr "Avaintiedoston enimmäiskoko ylitettiin.\n" + +#: lib/utils.c:278 +#, fuzzy +msgid "Cannot read requested amount of data." +msgstr "Pyydetyn tietomäärän lukeminen epäonnistui.\n" + +#: lib/utils_device.c:188 lib/utils_storage_wrappers.c:111 +#: lib/luks1/keyencryption.c:92 +#, fuzzy, c-format +msgid "Device %s doesn't exist or access denied." +msgstr "Laite %s ei ole olemassa tai pääsy siihen on kielletty.\n" + +#: lib/utils_device.c:198 +#, fuzzy, c-format +msgid "Device %s is not compatible." +msgstr "Laite %s ei ole aktiivinen.\n" + +#: lib/utils_device.c:643 +#, fuzzy, c-format +msgid "Device %s is too small. Need at least % bytes." +msgstr "Laite %s on liian pieni. (LUKS vaatii vähintään % tavua.)\n" + +#: lib/utils_device.c:724 +#, fuzzy, c-format +msgid "Cannot use device %s which is in use (already mapped or mounted)." +msgstr "Laitteen %s käyttö epäonnistui, koska se on jo käytössä (jo kuvattu tai liitetty).\n" + +#: lib/utils_device.c:728 +#, fuzzy, c-format +msgid "Cannot use device %s, permission denied." +msgstr "Laitteeseen %s kirjoittaminen epäonnistui, pääsy kielletty.\n" + +#: lib/utils_device.c:731 +#, fuzzy, c-format +msgid "Cannot get info about device %s." +msgstr "Tietojen hakeminen laitteesta %s epäonnistui.\n" + +#: lib/utils_device.c:754 +#, fuzzy +msgid "Cannot use a loopback device, running as non-root user." +msgstr "Silmukkalaitteen käyttö epäonnistui, suoritetaan ei-root-käyttäjänä.\n" + +#: lib/utils_device.c:764 +#, fuzzy +msgid "Attaching loopback device failed (loop device with autoclear flag is required)." +msgstr "Silmukkalaitteeseen liittyminen epäonnistui (vaaditaan silmukkalaite autoclear-lipulla).\n" + +#: lib/utils_device.c:810 +#, fuzzy, c-format +msgid "Requested offset is beyond real size of device %s." +msgstr "Pyydetty siirrososoite on laitteen %s todellisen koon ulkopuolella.\n" + +#: lib/utils_device.c:818 +#, fuzzy, c-format +msgid "Device %s has zero size." +msgstr "Laitteen %s koko on nolla.\n" + +#: lib/utils_pbkdf.c:100 +msgid "Requested PBKDF target time cannot be zero." +msgstr "" + +#: lib/utils_pbkdf.c:106 +#, c-format +msgid "Unknown PBKDF type %s." +msgstr "" + +#: lib/utils_pbkdf.c:111 +#, fuzzy, c-format +msgid "Requested hash %s is not supported." +msgstr "Pyydetty LUKS-tiiviste %s ei ole tuettu.\n" + +#: lib/utils_pbkdf.c:122 +#, fuzzy +msgid "Requested PBKDF type is not supported for LUKS1." +msgstr "Pyydetty LUKS-tiiviste %s ei ole tuettu.\n" + +#: lib/utils_pbkdf.c:128 +msgid "PBKDF max memory or parallel threads must not be set with pbkdf2." +msgstr "" + +#: lib/utils_pbkdf.c:133 lib/utils_pbkdf.c:143 +#, c-format +msgid "Forced iteration count is too low for %s (minimum is %u)." +msgstr "" + +#: lib/utils_pbkdf.c:148 +#, c-format +msgid "Forced memory cost is too low for %s (minimum is %u kilobytes)." +msgstr "" + +#: lib/utils_pbkdf.c:155 +#, c-format +msgid "Requested maximum PBKDF memory cost is too high (maximum is %d kilobytes)." +msgstr "" + +#: lib/utils_pbkdf.c:160 +msgid "Requested maximum PBKDF memory cannot be zero." +msgstr "" + +#: lib/utils_pbkdf.c:164 +msgid "Requested PBKDF parallel threads cannot be zero." +msgstr "" + +#: lib/utils_pbkdf.c:184 +msgid "Only PBKDF2 is supported in FIPS mode." +msgstr "" + +#: lib/utils_benchmark.c:166 +msgid "PBKDF benchmark disabled but iterations not set." +msgstr "" + +#: lib/utils_benchmark.c:185 +#, fuzzy, c-format +msgid "Not compatible PBKDF2 options (using hash algorithm %s)." +msgstr "Ei ole yhteensopiva PBKDF2-valitsimien kanssa (käytetään tiivitstealgoritmia %s).\n" + +#: lib/utils_benchmark.c:205 +#, fuzzy +msgid "Not compatible PBKDF options." +msgstr "Ei ole yhteensopiva PBKDF2-valitsimien kanssa (käytetään tiivitstealgoritmia %s).\n" + +#: lib/utils_device_locking.c:103 +#, c-format +msgid "Locking aborted. The locking path %s/%s is unusable (not a directory or missing)." +msgstr "" + +#: lib/utils_device_locking.c:110 +#, c-format +msgid "WARNING: Locking directory %s/%s is missing!\n" +msgstr "" + +#: lib/utils_device_locking.c:120 +#, c-format +msgid "Locking aborted. The locking path %s/%s is unusable (%s is not a directory)." +msgstr "" + +#: lib/utils_wipe.c:185 src/cryptsetup_reencrypt.c:933 +#: src/cryptsetup_reencrypt.c:1017 +#, fuzzy +msgid "Cannot seek to device offset." +msgstr "Laitteen siirrososoitteen etsintä epäonnistui.\n" + +#: lib/utils_wipe.c:209 +#, c-format +msgid "Device wipe error, offset %." +msgstr "" + +#: lib/luks1/keyencryption.c:40 +#, fuzzy, c-format +msgid "" +"Failed to setup dm-crypt key mapping for device %s.\n" +"Check that kernel supports %s cipher (check syslog for more info)." +msgstr "" +"Dm-crypt -avainkuvausasetus laitteelle %s epäonnistui.\n" +"Tarkista, että käyttöjärjestelmäydin tukee %s-salakirjoitusmenetelmää (lisätietoja tarkistamalla syslog).\n" + +#: lib/luks1/keyencryption.c:45 +#, fuzzy +msgid "Key size in XTS mode must be 256 or 512 bits." +msgstr "Avainkoon on oltava XTS-tilassa 256 tai 512 bittiä.\n" + +#: lib/luks1/keyencryption.c:47 +msgid "Cipher specification should be in [cipher]-[mode]-[iv] format." +msgstr "" + +#: lib/luks1/keyencryption.c:98 lib/luks1/keymanage.c:345 +#: lib/luks1/keymanage.c:636 lib/luks1/keymanage.c:1074 +#: lib/luks2/luks2_json_metadata.c:1253 lib/luks2/luks2_keyslot.c:739 +#, fuzzy, c-format +msgid "Cannot write to device %s, permission denied." +msgstr "Laitteeseen %s kirjoittaminen epäonnistui, pääsy kielletty.\n" + +#: lib/luks1/keyencryption.c:121 +#, fuzzy +msgid "Failed to open temporary keystore device." +msgstr "Tilapäisen avainsäiliön avaaminen epäonnistui.\n" + +#: lib/luks1/keyencryption.c:128 +#, fuzzy +msgid "Failed to access temporary keystore device." +msgstr "Pääsy tilapäiseen avainsäiliölaitteeseen epäonnistui.\n" + +#: lib/luks1/keyencryption.c:201 lib/luks2/luks2_keyslot_luks2.c:60 +#: lib/luks2/luks2_keyslot_luks2.c:78 lib/luks2/luks2_keyslot_reenc.c:134 +#, fuzzy +msgid "IO error while encrypting keyslot." +msgstr "Siirräntävirhe salattaessa avainväliä.\n" + +#: lib/luks1/keyencryption.c:247 lib/luks1/keymanage.c:348 +#: lib/luks1/keymanage.c:589 lib/luks1/keymanage.c:639 lib/tcrypt/tcrypt.c:661 +#: lib/verity/verity.c:81 lib/verity/verity.c:179 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:1256 +#: src/cryptsetup_reencrypt.c:205 +#, fuzzy, c-format +msgid "Cannot open device %s." +msgstr "Laitteen %s avaus epäonnistui.\n" + +#: lib/luks1/keyencryption.c:258 lib/luks2/luks2_keyslot_luks2.c:137 +#, fuzzy +msgid "IO error while decrypting keyslot." +msgstr "Siirräntävirhe purettaessa avainvälin salausta.\n" + +#: lib/luks1/keymanage.c:111 +#, fuzzy, c-format +msgid "Device %s is too small. (LUKS1 requires at least % bytes.)" +msgstr "Laite %s on liian pieni. (LUKS vaatii vähintään % tavua.)\n" + +#: 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 +#, fuzzy, c-format +msgid "LUKS keyslot %u is invalid." +msgstr "LUKS-avainväli %u on virheellinen.\n" + +#: lib/luks1/keymanage.c:229 lib/luks1/keymanage.c:473 +#: lib/luks2/luks2_json_metadata.c:1084 src/cryptsetup.c:1372 +#: src/cryptsetup.c:1498 src/cryptsetup.c:1555 src/cryptsetup.c:1611 +#: src/cryptsetup.c:1678 src/cryptsetup.c:1781 src/cryptsetup.c:1845 +#: src/cryptsetup.c:2005 src/cryptsetup.c:2194 src/cryptsetup.c:2254 +#: src/cryptsetup.c:2320 src/cryptsetup.c:2484 src/cryptsetup.c:3137 +#: src/cryptsetup.c:3146 src/cryptsetup_reencrypt.c:1372 +#, fuzzy, c-format +msgid "Device %s is not a valid LUKS device." +msgstr "Laite %s ei ole kelvollinen LUKS-laite.\n" + +#: lib/luks1/keymanage.c:247 lib/luks2/luks2_json_metadata.c:1101 +#, fuzzy, c-format +msgid "Requested header backup file %s already exists." +msgstr "Pyydetty otsakevarmuuskopiotiedosto %s on jo olemassa.\n" + +#: lib/luks1/keymanage.c:249 lib/luks2/luks2_json_metadata.c:1103 +#, fuzzy, c-format +msgid "Cannot create header backup file %s." +msgstr "Otsakevarmuuskopiotiedoston %s luominen epäonnistui.\n" + +#: lib/luks1/keymanage.c:256 lib/luks2/luks2_json_metadata.c:1110 +#, fuzzy, c-format +msgid "Cannot write header backup file %s." +msgstr "Otsakevarmuuskopiotiedoston %s kirjoittaminen epäonnistui.\n" + +#: lib/luks1/keymanage.c:287 lib/luks2/luks2_json_metadata.c:1162 +#, fuzzy +msgid "Backup file doesn't contain valid LUKS header." +msgstr "Varmuuskopiotiedosto ei sisällä kelvollista LUKS-otsaketta.\n" + +#: lib/luks1/keymanage.c:300 lib/luks1/keymanage.c:550 +#: lib/luks2/luks2_json_metadata.c:1183 +#, fuzzy, c-format +msgid "Cannot open header backup file %s." +msgstr "Otsakevarmuuskopiotiedoston %s avaus epäonnistui.\n" + +#: lib/luks1/keymanage.c:308 lib/luks2/luks2_json_metadata.c:1191 +#, fuzzy, c-format +msgid "Cannot read header backup file %s." +msgstr "Otsakevarmuuskopiotiedoston %s lukeminen epäonnistui.\n" + +#: lib/luks1/keymanage.c:318 +#, fuzzy +msgid "Data offset or key size differs on device and backup, restore failed." +msgstr "Tietosiirrososoite tai avainkoko eroaa laitteessa ja varmuuskopiossa, palautus epäonnistui.\n" + +#: lib/luks1/keymanage.c:326 +#, c-format +msgid "Device %s %s%s" +msgstr "Laite %s %s%s" + +#: lib/luks1/keymanage.c:327 +msgid "does not contain LUKS header. Replacing header can destroy data on that device." +msgstr "ei sisällä LUKS-otsaketta. Otsakkeen korvaaminen voi tuhota tietoja tuossa laitteessa." + +#: lib/luks1/keymanage.c:328 +msgid "already contains LUKS header. Replacing header will destroy existing keyslots." +msgstr "sisältää jo LUKS-otsakkeen. Otsakkeen korvaaminen tuhoaa olemassaolevat avainvälit." + +#: lib/luks1/keymanage.c:329 lib/luks2/luks2_json_metadata.c:1225 +msgid "" +"\n" +"WARNING: real device header has different UUID than backup!" +msgstr "" +"\n" +"VAROITUS: oikealla laiteotsakkeella on eri UUID-tunniste kuin varmuuskopiolla!" + +#: lib/luks1/keymanage.c:376 +#, fuzzy +msgid "Non standard key size, manual repair required." +msgstr "Ei-vakio avainkoko, manuaalinen korjaus pyydetty.\n" + +#: lib/luks1/keymanage.c:381 +#, fuzzy +msgid "Non standard keyslots alignment, manual repair required." +msgstr "Ei-vakiot avainvälitasaukset, manuaalinen korjaus pyydetty.\n" + +#: lib/luks1/keymanage.c:391 +#, fuzzy +msgid "Repairing keyslots." +msgstr "Korjataan avainvälit.\n" + +#: lib/luks1/keymanage.c:410 +#, fuzzy, c-format +msgid "Keyslot %i: offset repaired (%u -> %u)." +msgstr "Avainväli %i: siirrososoite korjattu (%u -> %u).\n" + +#: lib/luks1/keymanage.c:418 +#, fuzzy, c-format +msgid "Keyslot %i: stripes repaired (%u -> %u)." +msgstr "Avainväli %i: raidat korjattu (%u -> %u).\n" + +#: lib/luks1/keymanage.c:427 +#, fuzzy, c-format +msgid "Keyslot %i: bogus partition signature." +msgstr "Avainväli %i: valeosiotunniste.\n" + +#: lib/luks1/keymanage.c:432 +#, fuzzy, c-format +msgid "Keyslot %i: salt wiped." +msgstr "Avainväli %i: satunnaisarvosiemen tuhottu.\n" + +#: lib/luks1/keymanage.c:449 +#, fuzzy +msgid "Writing LUKS header to disk." +msgstr "Kirjoitetaan LUKS-otsake levylle.\n" + +#: lib/luks1/keymanage.c:454 +msgid "Repair failed." +msgstr "Korjaus epäonnistui." + +#: lib/luks1/keymanage.c:482 lib/luks1/keymanage.c:751 +#, fuzzy, c-format +msgid "Requested LUKS hash %s is not supported." +msgstr "Pyydetty LUKS-tiiviste %s ei ole tuettu.\n" + +#: lib/luks1/keymanage.c:510 src/cryptsetup.c:1081 +#, fuzzy +msgid "No known problems detected for LUKS header." +msgstr "Tuntemattomat pulmat havaittu LUKS-otsakkeelle.\n" + +#: lib/luks1/keymanage.c:661 +#, fuzzy, c-format +msgid "Error during update of LUKS header on device %s." +msgstr "Virhe LUKS-otsakkeen päivityksen aikana laitteessa %s.\n" + +#: lib/luks1/keymanage.c:669 +#, fuzzy, c-format +msgid "Error re-reading LUKS header after update on device %s." +msgstr "Virhe luettaessa uudelleen LUKS-otsaketta päivityksen jälkeen laitteessa %s.\n" + +#: lib/luks1/keymanage.c:745 +#, fuzzy +msgid "Data offset for LUKS header must be either 0 or higher than header size." +msgstr "Tietosiirrososoitteen irrotetulle LUKS-otsakkeelle on oltava joko 0 tai suurempi kuin otsakekoko (%d sektoria).\n" + +#: lib/luks1/keymanage.c:756 lib/luks1/keymanage.c:821 +#: lib/luks2/luks2_json_format.c:283 lib/luks2/luks2_json_metadata.c:1002 +#: src/cryptsetup.c:2647 +#, fuzzy +msgid "Wrong LUKS UUID format provided." +msgstr "Väärä LUKS UUID-muoto tarjottu.\n" + +#: lib/luks1/keymanage.c:779 +#, fuzzy +msgid "Cannot create LUKS header: reading random salt failed." +msgstr "LUKS-otsakkeen luominen epäonnistui: satunnaisarvosiemenen lukeminen epäonnistui.\n" + +#: lib/luks1/keymanage.c:800 +#, fuzzy, c-format +msgid "Cannot create LUKS header: header digest failed (using hash %s)." +msgstr "LUKS-otsakkeen luominen epäonnistui: otsaketiiviste epäonnistui (käytettäen tiivistettä %s).\n" + +#: lib/luks1/keymanage.c:844 +#, fuzzy, c-format +msgid "Key slot %d active, purge first." +msgstr "Avainväli %d aktiivinen, puhdista ensimmäinen.\n" + +#: lib/luks1/keymanage.c:850 +#, fuzzy, c-format +msgid "Key slot %d material includes too few stripes. Header manipulation?" +msgstr "Avainvälin %d materiaali sisältää liian vähän raitoja. Otsaketta on käsitelty?\n" + +#: lib/luks1/keymanage.c:1060 +#, fuzzy, c-format +msgid "Key slot %d is invalid, please select keyslot between 0 and %d." +msgstr "Avainväli %d on virheellinen, valitse avainväli välillä 0 ... %d.\n" + +#: lib/luks1/keymanage.c:1078 lib/luks2/luks2_keyslot.c:743 +#, fuzzy, c-format +msgid "Cannot wipe device %s." +msgstr "Laitteen %s pyyhkiminen tyhjäksi epäonnistui.\n" + +#: lib/loopaes/loopaes.c:146 +#, fuzzy +msgid "Detected not yet supported GPG encrypted keyfile." +msgstr "Havaittu vielä tukematon GPG-salausavaintiedosto.\n" + +#: lib/loopaes/loopaes.c:147 +msgid "Please use gpg --decrypt | cryptsetup --keyfile=- ...\n" +msgstr "Käytä gpg --decrypt | cryptsetup --keyfile=- ...\n" + +#: lib/loopaes/loopaes.c:168 lib/loopaes/loopaes.c:188 +#, fuzzy +msgid "Incompatible loop-AES keyfile detected." +msgstr "Yhteensopimaton loop-AES -avaintiedosto havaittu.\n" + +#: lib/loopaes/loopaes.c:245 +#, fuzzy +msgid "Kernel doesn't support loop-AES compatible mapping." +msgstr "Käyttöjärjestelmäydin ei tule loop-AES -yhteensopivaa kuvausta.\n" + +#: lib/tcrypt/tcrypt.c:505 +#, fuzzy, c-format +msgid "Error reading keyfile %s." +msgstr "Virhe luettaessa avaintiedostoa %s.\n" + +#: lib/tcrypt/tcrypt.c:545 +#, fuzzy, c-format +msgid "Maximum TCRYPT passphrase length (%d) exceeded." +msgstr "TCRYPT-salasanalauseen enimmäispituus (%d) ylitettiin.\n" + +#: lib/tcrypt/tcrypt.c:586 +#, fuzzy, c-format +msgid "PBKDF2 hash algorithm %s not available, skipping." +msgstr "PBKDF2-tiivistealgoritmi %s ei ole käytettävissä, ohitetaan.\n" + +#: lib/tcrypt/tcrypt.c:602 src/cryptsetup.c:959 +#, fuzzy +msgid "Required kernel crypto interface not available." +msgstr "Pyydetty ydinsalauskäyttöliittymä ei ole käytettävissä.\n" + +#: lib/tcrypt/tcrypt.c:604 src/cryptsetup.c:961 +#, fuzzy +msgid "Ensure you have algif_skcipher kernel module loaded." +msgstr "Varmista, että algif_skcipher-käyttöjärjestelmäydinmoduuli on ladattu.\n" + +#: lib/tcrypt/tcrypt.c:744 +#, fuzzy, c-format +msgid "Activation is not supported for %d sector size." +msgstr "Aktivointia ei tueta sektorikoolle %d.\n" + +#: lib/tcrypt/tcrypt.c:750 +#, fuzzy +msgid "Kernel doesn't support activation for this TCRYPT legacy mode." +msgstr "Käyttöjärjestelmäydin ei tue aktivointia tälle TCRYPT-perinnetilassa.\n" + +#: lib/tcrypt/tcrypt.c:784 +#, fuzzy, c-format +msgid "Activating TCRYPT system encryption for partition %s." +msgstr "Aktivoidaan TCRYPT-järjestelmäsalaus osiolle %s.\n" + +#: lib/tcrypt/tcrypt.c:862 +#, fuzzy +msgid "Kernel doesn't support TCRYPT compatible mapping." +msgstr "Käyttöjärjestelmäydin ei tue TCRYPT -yhteensopivaa kuvausta.\n" + +#: lib/tcrypt/tcrypt.c:1084 +msgid "This function is not supported without TCRYPT header load." +msgstr "Tätä toimintoa ei tueta ilman TCRYPT-otsakelatausta." + +#: lib/verity/verity.c:69 lib/verity/verity.c:172 +#, fuzzy, c-format +msgid "Verity device %s doesn't use on-disk header." +msgstr "Verity-laite %s ei käytä paikallista levyotsaketta.\n" + +#: lib/verity/verity.c:91 +#, fuzzy, c-format +msgid "Device %s is not a valid VERITY device." +msgstr "Laite %s ei ole kelvollinen VERITY-laite.\n" + +#: lib/verity/verity.c:98 +#, fuzzy, c-format +msgid "Unsupported VERITY version %d." +msgstr "Tukematon VERITY-versio %d.\n" + +#: lib/verity/verity.c:129 +#, fuzzy +msgid "VERITY header corrupted." +msgstr "VERITY-otsake rikkinäinen.\n" + +#: lib/verity/verity.c:166 +#, fuzzy, c-format +msgid "Wrong VERITY UUID format provided on device %s." +msgstr "Väärä VERITY UUID-muoto tarjottu laitteessa %s.\n" + +#: lib/verity/verity.c:199 +#, fuzzy, c-format +msgid "Error during update of verity header on device %s." +msgstr "Virhe verity-otsakkeen päivityksen aikana laitteessa %s.\n" + +#: lib/verity/verity.c:262 +msgid "Errors cannot be repaired with FEC device." +msgstr "" + +#: lib/verity/verity.c:264 +#, c-format +msgid "Found %u repairable errors with FEC device." +msgstr "" + +#: lib/verity/verity.c:302 +#, fuzzy +msgid "Kernel doesn't support dm-verity mapping." +msgstr "Käyttöjärjestelmäydin ei tule dm-verity -yhteensopivaa kuvausta.\n" + +#: lib/verity/verity.c:313 +#, fuzzy +msgid "Verity device detected corruption after activation." +msgstr "Verity-laite havaitsi rikkoutumisen aktivoinnin jälkeen.\n" + +#: lib/verity/verity_hash.c:59 +#, fuzzy, c-format +msgid "Spare area is not zeroed at position %." +msgstr "Vapaa-aluetta ei ole nollattu sijainnissa %.\n" + +#: lib/verity/verity_hash.c:160 lib/verity/verity_hash.c:287 +#: lib/verity/verity_hash.c:300 +#, fuzzy +msgid "Device offset overflow." +msgstr "Laitesiirrososoitteen ylivuoto.\n" + +#: lib/verity/verity_hash.c:200 +#, fuzzy, c-format +msgid "Verification failed at position %." +msgstr "Todennus epäonnistui sijainnissa %.\n" + +#: lib/verity/verity_hash.c:273 +#, fuzzy +msgid "Invalid size parameters for verity device." +msgstr "Virheelliset kokoparametrit verity-laitteelle.\n" + +#: lib/verity/verity_hash.c:293 +msgid "Hash area overflow." +msgstr "" + +#: lib/verity/verity_hash.c:370 +#, fuzzy +msgid "Verification of data area failed." +msgstr "Data-alueen todentaminen epäonnistui.\n" + +#: lib/verity/verity_hash.c:375 +#, fuzzy +msgid "Verification of root hash failed." +msgstr "Root-tiivisteen todentaminen epäonnistui.\n" + +#: lib/verity/verity_hash.c:381 +#, fuzzy +msgid "Input/output error while creating hash area." +msgstr "Syöte/tulostevirhe luotaessa tiivistealuetta.\n" + +#: lib/verity/verity_hash.c:383 +#, fuzzy +msgid "Creation of hash area failed." +msgstr "Tiivistealueen luominen epäonnistui.\n" + +#: lib/verity/verity_hash.c:430 +#, fuzzy, c-format +msgid "WARNING: Kernel cannot activate device if data block size exceeds page size (%u)." +msgstr "VAROITUS: Käyttöjärjestelmäydin ei voi aktivoida laitetta, jos lohkokoko ylittää sivukoon (%u).\n" + +#: lib/verity/verity_fec.c:132 +msgid "Failed to allocate RS context." +msgstr "" + +#: lib/verity/verity_fec.c:147 +#, fuzzy +msgid "Failed to allocate buffer." +msgstr "Avaintiedoston kutsuminen stat-funktiolla epäonnistui.\n" + +#: lib/verity/verity_fec.c:157 +#, c-format +msgid "Failed to read RS block % byte %d." +msgstr "" + +#: lib/verity/verity_fec.c:170 +#, c-format +msgid "Failed to read parity for RS block %." +msgstr "" + +#: lib/verity/verity_fec.c:178 +#, c-format +msgid "Failed to repair parity for block %." +msgstr "" + +#: lib/verity/verity_fec.c:189 +#, c-format +msgid "Failed to write parity for RS block %." +msgstr "" + +#: lib/verity/verity_fec.c:224 +msgid "Block sizes must match for FEC." +msgstr "" + +#: lib/verity/verity_fec.c:230 +msgid "Invalid number of parity bytes." +msgstr "" + +#: lib/verity/verity_fec.c:266 +#, fuzzy, c-format +msgid "Failed to determine size for device %s." +msgstr "Tilapäisen avainsäiliön avaaminen epäonnistui.\n" + +#: lib/integrity/integrity.c:241 lib/integrity/integrity.c:306 +#, fuzzy +msgid "Kernel doesn't support dm-integrity mapping." +msgstr "Käyttöjärjestelmäydin ei tule dm-verity -yhteensopivaa kuvausta.\n" + +#: lib/luks2/luks2_disk_metadata.c:383 lib/luks2/luks2_json_metadata.c:959 +#: lib/luks2/luks2_json_metadata.c:1245 +#, fuzzy, c-format +msgid "Failed to acquire write lock on device %s." +msgstr "Pääsy tilapäiseen avainsäiliölaitteeseen epäonnistui.\n" + +#: lib/luks2/luks2_disk_metadata.c:392 +msgid "Detected attempt for concurrent LUKS2 metadata update. Aborting operation." +msgstr "" + +#: 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 "" + +#: lib/luks2/luks2_json_format.c:227 +#, fuzzy +msgid "Requested data offset is too small." +msgstr "Laite %s on liian pieni.\n" + +#: 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 "" + +#: lib/luks2/luks2_json_metadata.c:946 lib/luks2/luks2_json_metadata.c:1075 +#: lib/luks2/luks2_json_metadata.c:1151 lib/luks2/luks2_keyslot_luks2.c:92 +#: lib/luks2/luks2_keyslot_luks2.c:114 +#, fuzzy, c-format +msgid "Failed to acquire read lock on device %s." +msgstr "Pääsy tilapäiseen avainsäiliölaitteeseen epäonnistui.\n" + +#: lib/luks2/luks2_json_metadata.c:1168 +#, c-format +msgid "Forbidden LUKS2 requirements detected in backup %s." +msgstr "" + +#: lib/luks2/luks2_json_metadata.c:1209 +#, fuzzy +msgid "Data offset differ on device and backup, restore failed." +msgstr "Tietosiirrososoite tai avainkoko eroaa laitteessa ja varmuuskopiossa, palautus epäonnistui.\n" + +#: lib/luks2/luks2_json_metadata.c:1215 +#, fuzzy +msgid "Binary header with keyslot areas size differ on device and backup, restore failed." +msgstr "Tietosiirrososoite tai avainkoko eroaa laitteessa ja varmuuskopiossa, palautus epäonnistui.\n" + +#: lib/luks2/luks2_json_metadata.c:1222 +#, fuzzy, c-format +msgid "Device %s %s%s%s%s" +msgstr "Laite %s %s%s" + +#: lib/luks2/luks2_json_metadata.c:1223 +#, fuzzy +msgid "does not contain LUKS2 header. Replacing header can destroy data on that device." +msgstr "ei sisällä LUKS-otsaketta. Otsakkeen korvaaminen voi tuhota tietoja tuossa laitteessa." + +#: lib/luks2/luks2_json_metadata.c:1224 +#, fuzzy +msgid "already contains LUKS2 header. Replacing header will destroy existing keyslots." +msgstr "sisältää jo LUKS-otsakkeen. Otsakkeen korvaaminen tuhoaa olemassaolevat avainvälit." + +#: lib/luks2/luks2_json_metadata.c:1226 +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:1228 +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:1324 +#, c-format +msgid "Ignored unknown flag %s." +msgstr "" + +#: lib/luks2/luks2_json_metadata.c:2011 lib/luks2/luks2_reencrypt.c:1746 +#, c-format +msgid "Missing key for dm-crypt segment %u" +msgstr "" + +#: lib/luks2/luks2_json_metadata.c:2023 lib/luks2/luks2_reencrypt.c:1764 +#, fuzzy +msgid "Failed to set dm-crypt segment." +msgstr "Avaintiedoston kutsuminen stat-funktiolla epäonnistui.\n" + +#: lib/luks2/luks2_json_metadata.c:2029 lib/luks2/luks2_reencrypt.c:1770 +msgid "Failed to set dm-linear segment." +msgstr "" + +#: lib/luks2/luks2_json_metadata.c:2156 +msgid "Unsupported device integrity configuration." +msgstr "" + +#: lib/luks2/luks2_json_metadata.c:2242 +msgid "Reencryption in-progress. Cannot deactivate device." +msgstr "" + +#: lib/luks2/luks2_json_metadata.c:2253 lib/luks2/luks2_reencrypt.c:3171 +#, c-format +msgid "Failed to replace suspended device %s with dm-error target." +msgstr "" + +#: lib/luks2/luks2_json_metadata.c:2333 +msgid "Failed to read LUKS2 requirements." +msgstr "" + +#: lib/luks2/luks2_json_metadata.c:2340 +msgid "Unmet LUKS2 requirements detected." +msgstr "" + +#: lib/luks2/luks2_json_metadata.c:2348 +msgid "Offline reencryption in progress. Aborting." +msgstr "" + +#: lib/luks2/luks2_json_metadata.c:2350 +msgid "Online reencryption in progress. Aborting." +msgstr "" + +#: lib/luks2/luks2_keyslot.c:552 lib/luks2/luks2_keyslot.c:589 +msgid "Not enough available memory to open a keyslot." +msgstr "" + +#: lib/luks2/luks2_keyslot.c:554 lib/luks2/luks2_keyslot.c:591 +#, fuzzy +msgid "Keyslot open failed." +msgstr "Avainväli %d on todennettu.\n" + +#: 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 "" + +#: lib/luks2/luks2_keyslot_luks2.c:480 +#, fuzzy +msgid "No space for new keyslot." +msgstr "Uuden avainvälin vaihtaminen epäonnistui.\n" + +#: lib/luks2/luks2_luks1_convert.c:481 +#, fuzzy, c-format +msgid "Cannot check status of device with uuid: %s." +msgstr "Salasanan laatutarkistus epäonnistui: %s\n" + +#: lib/luks2/luks2_luks1_convert.c:507 +msgid "Unable to convert header with LUKSMETA additional metadata." +msgstr "" + +#: lib/luks2/luks2_luks1_convert.c:547 +msgid "Unable to move keyslot area. Not enough space." +msgstr "" + +#: lib/luks2/luks2_luks1_convert.c:590 lib/luks2/luks2_luks1_convert.c:872 +#, fuzzy +msgid "Unable to move keyslot area." +msgstr "Avaintiedoston avaus epäonnistui.\n" + +#: lib/luks2/luks2_luks1_convert.c:682 +msgid "Cannot convert to LUKS1 format - default segment encryption sector size is not 512 bytes." +msgstr "" + +#: lib/luks2/luks2_luks1_convert.c:690 +msgid "Cannot convert to LUKS1 format - key slot digests are not LUKS1 compatible." +msgstr "" + +#: lib/luks2/luks2_luks1_convert.c:702 +#, c-format +msgid "Cannot convert to LUKS1 format - device uses wrapped key cipher %s." +msgstr "" + +#: lib/luks2/luks2_luks1_convert.c:710 +#, c-format +msgid "Cannot convert to LUKS1 format - LUKS2 header contains %u token(s)." +msgstr "" + +#: lib/luks2/luks2_luks1_convert.c:724 +#, c-format +msgid "Cannot convert to LUKS1 format - keyslot %u is in invalid state." +msgstr "" + +#: lib/luks2/luks2_luks1_convert.c:729 +#, c-format +msgid "Cannot convert to LUKS1 format - slot %u (over maximum slots) is still active." +msgstr "" + +#: lib/luks2/luks2_luks1_convert.c:734 +#, c-format +msgid "Cannot convert to LUKS1 format - keyslot %u is not LUKS1 compatible." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:892 +#, c-format +msgid "Hotzone size must be multiple of calculated zone alignment (%zu bytes)." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:897 +#, fuzzy, c-format +msgid "Device size must be multiple of calculated zone alignment (%zu bytes)." +msgstr "Pienennyskoon on oltava 512-tavuisen sektorin monikerta." + +#: lib/luks2/luks2_reencrypt.c:941 +#, fuzzy, c-format +msgid "Unsupported resilience mode %s" +msgstr "Tukematon LUKS-versio %d.\n" + +#: lib/luks2/luks2_reencrypt.c:1158 lib/luks2/luks2_reencrypt.c:1313 +#: lib/luks2/luks2_reencrypt.c:1396 lib/luks2/luks2_reencrypt.c:1430 +#: lib/luks2/luks2_reencrypt.c:3011 +#, fuzzy +msgid "Failed to initialize old segment storage wrapper." +msgstr "Avainsäiliöön kirjoittaminen epäonnistui.\n" + +#: lib/luks2/luks2_reencrypt.c:1172 lib/luks2/luks2_reencrypt.c:1291 +#, fuzzy +msgid "Failed to initialize new segment storage wrapper." +msgstr "Avainsäiliöön kirjoittaminen epäonnistui.\n" + +#: lib/luks2/luks2_reencrypt.c:1340 +#, fuzzy +msgid "Failed to read checksums for current hotzone." +msgstr "Avainsäiliöstä lukeminen epäonnistui.\n" + +#: lib/luks2/luks2_reencrypt.c:1347 lib/luks2/luks2_reencrypt.c:3019 +#, fuzzy, c-format +msgid "Failed to read hotzone area starting at %." +msgstr "Vapaa-aluetta ei ole nollattu sijainnissa %.\n" + +#: lib/luks2/luks2_reencrypt.c:1366 +#, fuzzy, c-format +msgid "Failed to decrypt sector %zu." +msgstr "Avainsäiliöstä lukeminen epäonnistui.\n" + +#: lib/luks2/luks2_reencrypt.c:1372 +#, fuzzy, c-format +msgid "Failed to recover sector %zu." +msgstr "Avainsäiliöön kirjoittaminen epäonnistui.\n" + +#: lib/luks2/luks2_reencrypt.c:1867 +#, c-format +msgid "Source and target device sizes don't match. Source %, target: %." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:1965 +#, fuzzy, c-format +msgid "Failed to activate hotzone device %s." +msgstr "Pääsy tilapäiseen avainsäiliölaitteeseen epäonnistui.\n" + +#: lib/luks2/luks2_reencrypt.c:1982 +#, c-format +msgid "Failed to activate overlay device %s with actual origin table." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:1989 +#, fuzzy, c-format +msgid "Failed to load new mapping for device %s." +msgstr "Tilapäisen avainsäiliön avaaminen epäonnistui.\n" + +#: lib/luks2/luks2_reencrypt.c:2060 +msgid "Failed to refresh reencryption devices stack." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:2216 +#, fuzzy +msgid "Failed to set new keyslots area size." +msgstr "Uuden avainvälin vaihtaminen epäonnistui.\n" + +#: lib/luks2/luks2_reencrypt.c:2318 +#, c-format +msgid "Data shift is not aligned to requested encryption sector size (% bytes)." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:2339 +#, c-format +msgid "Data device is not aligned to requested encryption sector size (% bytes)." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:2360 +#, c-format +msgid "Data shift (% sectors) is less than future data offset (% sectors)." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:2366 lib/luks2/luks2_reencrypt.c:2760 +#: lib/luks2/luks2_reencrypt.c:2781 +#, fuzzy, c-format +msgid "Failed to open %s in exclusive mode (already mapped or mounted)." +msgstr "Laitteen %s käyttö epäonnistui, koska se on jo käytössä (jo kuvattu tai liitetty).\n" + +#: lib/luks2/luks2_reencrypt.c:2534 +msgid "No LUKS2 reencryption in progress." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:2540 lib/luks2/luks2_reencrypt.c:3276 +msgid "Failed to load LUKS2 reencryption context." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:2600 +#, fuzzy +msgid "Failed to get reencryption state." +msgstr "Avainsäiliöön kirjoittaminen epäonnistui.\n" + +#: lib/luks2/luks2_reencrypt.c:2604 +#, fuzzy +msgid "Device is not in reencryption." +msgstr "Laite %s ei ole aktiivinen.\n" + +#: lib/luks2/luks2_reencrypt.c:2611 +msgid "Reencryption process is already running." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:2613 +#, fuzzy +msgid "Failed to acquire reencryption lock." +msgstr "Uudelleensalauslokitiedoston lukeminen epäonnistui.\n" + +#: lib/luks2/luks2_reencrypt.c:2631 +msgid "Cannot proceed with reencryption. Run reencryption recovery first." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:2731 +msgid "Active device size and requested reencryption size don't match." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:2745 +msgid "Illegal device size requested in reencryption parameters." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:2815 +msgid "Reencryption in-progress. Cannot perform recovery." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:2887 +msgid "LUKS2 reencryption already initialized in metadata." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:2894 +msgid "Failed to initialize LUKS2 reencryption in metadata." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:2985 +msgid "Failed to set device segments for next reencryption hotzone." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:3027 +#, fuzzy +msgid "Failed to write reencryption resilience metadata." +msgstr "Uudelleensalauslokitiedoston kirjoittaminen epäonnistui.\n" + +#: lib/luks2/luks2_reencrypt.c:3034 +#, fuzzy +msgid "Decryption failed." +msgstr "Korjaus epäonnistui." + +#: lib/luks2/luks2_reencrypt.c:3039 +#, fuzzy, c-format +msgid "Failed to write hotzone area starting at %." +msgstr "Avainsäiliöön kirjoittaminen epäonnistui.\n" + +#: lib/luks2/luks2_reencrypt.c:3044 +#, fuzzy +msgid "Failed to sync data." +msgstr "Avaintiedoston kutsuminen stat-funktiolla epäonnistui.\n" + +#: lib/luks2/luks2_reencrypt.c:3052 +msgid "Failed to update metadata after current reencryption hotzone completed." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:3119 +#, fuzzy +msgid "Failed to write LUKS2 metadata." +msgstr "Avainsäiliöön kirjoittaminen epäonnistui.\n" + +#: lib/luks2/luks2_reencrypt.c:3142 +msgid "Failed to wipe backup segment data." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:3155 +msgid "Failed to disable reencryption requirement flag." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:3163 +#, c-format +msgid "Fatal error while reencrypting chunk starting at %, % sectors long." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:3172 +msgid "Do not resume the device unless replaced with error target manually." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:3221 +msgid "Cannot proceed with reencryption. Unexpected reencryption status." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:3227 +msgid "Missing or invalid reencrypt context." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:3234 +#, fuzzy +msgid "Failed to initialize reencryption device stack." +msgstr "Salaustaustaohjelman alustus epäonnistui.\n" + +#: lib/luks2/luks2_reencrypt.c:3253 lib/luks2/luks2_reencrypt.c:3289 +#, fuzzy +msgid "Failed to update reencryption context." +msgstr "Uudelleensalauslokitiedoston avaus epäonnistui.\n" + +#: lib/luks2/luks2_token.c:262 +msgid "No free token slot." +msgstr "" + +#: lib/luks2/luks2_token.c:269 +#, fuzzy, c-format +msgid "Failed to create builtin token %s." +msgstr "Avainsäiliöön kirjoittaminen epäonnistui.\n" + +#: src/cryptsetup.c:162 +#, fuzzy +msgid "Can't do passphrase verification on non-tty inputs." +msgstr "Salasanalauseiden todennus epäonnistui ei-tty-syötteissä.\n" + +#: src/cryptsetup.c:215 +#, fuzzy +msgid "Keyslot encryption parameters can be set only for LUKS2 device." +msgstr "Tätä toimintoa tuetaan vain LUKS-laitteelle.\n" + +#: src/cryptsetup.c:245 src/cryptsetup.c:893 src/cryptsetup.c:1212 +#: src/cryptsetup.c:3011 src/cryptsetup_reencrypt.c:715 +#: src/cryptsetup_reencrypt.c:785 +#, fuzzy +msgid "No known cipher specification pattern detected." +msgstr "Havaittu tuntematon salakirjoitusmenetelmämäärittelymalli.\n" + +#: src/cryptsetup.c:253 +msgid "WARNING: The --hash parameter is being ignored in plain mode with keyfile specified.\n" +msgstr "VAROITUS: Parametri --hash ohitetaan tavallisessa tilassa kun avaintiedosto on määritelty.\n" + +#: src/cryptsetup.c:261 +msgid "WARNING: The --keyfile-size option is being ignored, the read size is the same as the encryption key size.\n" +msgstr "VAROITUS: Valitsin --keyfile-size ohitetaan , lukukoko on sama kuin salausavaimen koko.\n" + +#: src/cryptsetup.c:301 +#, c-format +msgid "Detected device signature(s) on %s. Proceeding further may damage existing data." +msgstr "" + +#: src/cryptsetup.c:307 src/cryptsetup.c:1038 src/cryptsetup.c:1090 +#: src/cryptsetup.c:1189 src/cryptsetup.c:1262 src/cryptsetup.c:1913 +#: src/cryptsetup.c:2545 src/cryptsetup.c:2668 src/integritysetup.c:232 +msgid "Operation aborted.\n" +msgstr "" + +#: src/cryptsetup.c:375 +#, fuzzy +msgid "Option --key-file is required." +msgstr "Vaaditaan valitsin --key-file.\n" + +#: src/cryptsetup.c:428 +msgid "Enter VeraCrypt PIM: " +msgstr "" + +#: src/cryptsetup.c:437 +msgid "Invalid PIM value: parse error." +msgstr "" + +#: src/cryptsetup.c:440 +#, fuzzy +msgid "Invalid PIM value: 0." +msgstr "Virheellinen laite %s.\n" + +#: src/cryptsetup.c:443 +msgid "Invalid PIM value: outside of range." +msgstr "" + +#: src/cryptsetup.c:466 +#, fuzzy +msgid "No device header detected with this passphrase." +msgstr "Tälle salasanalauseelle ei ole saatavissa laiteotsaketta.\n" + +#: src/cryptsetup.c:528 src/cryptsetup.c:1940 +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 "" +"Otsakevedos taltioavaimella on arkaluonteista tietoa,\n" +"joka sallii pääsyn salatulle osiolle ilman salasanaa.\n" +"Tämä vedos pitäisi aina tallentaa salattuna turvallisessa paikasssa." + +#: src/cryptsetup.c:607 +#, c-format +msgid "Device %s is still active and scheduled for deferred removal.\n" +msgstr "" + +#: src/cryptsetup.c:635 +msgid "Resize of active device requires volume key in keyring but --disable-keyring option is set." +msgstr "" + +#: src/cryptsetup.c:771 +#, fuzzy +msgid "Benchmark interrupted." +msgstr "koestussalaus" + +#: src/cryptsetup.c:792 +#, c-format +msgid "PBKDF2-%-9s N/A\n" +msgstr "" + +#: src/cryptsetup.c:794 +#, c-format +msgid "PBKDF2-%-9s %7u iterations per second for %zu-bit key\n" +msgstr "" + +#: src/cryptsetup.c:808 +#, c-format +msgid "%-10s N/A\n" +msgstr "" + +#: src/cryptsetup.c:810 +#, 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:834 +#, fuzzy +msgid "Result of benchmark is not reliable." +msgstr "Suorituskykytestin tulos ei ole luotettava.\n" + +#: src/cryptsetup.c:885 +msgid "# Tests are approximate using memory only (no storage IO).\n" +msgstr "# Testit käyttävät vain muistia ylimalkaan (ei tallennussiirtos).\n" + +#. TRANSLATORS: The string is header of a table and must be exactly (right side) aligned. +#: src/cryptsetup.c:919 +#, fuzzy, c-format +msgid "#%*s Algorithm | Key | Encryption | Decryption\n" +msgstr "# Algoritmi | Avain | Salaus | Salauksen purku\n" + +#: src/cryptsetup.c:923 +#, fuzzy, c-format +msgid "Cipher %s is not available." +msgstr "Salaus %s ei ole käytettävissä.\n" + +#. TRANSLATORS: The string is header of a table and must be exactly (right side) aligned. +#: src/cryptsetup.c:943 +#, fuzzy +msgid "# Algorithm | Key | Encryption | Decryption\n" +msgstr "# Algoritmi | Avain | Salaus | Salauksen purku\n" + +#: src/cryptsetup.c:952 +msgid "N/A" +msgstr "Ei käytössä" + +#: src/cryptsetup.c:1031 +msgid "" +"Seems device does not require reencryption recovery.\n" +"Do you want to proceed anyway?" +msgstr "" + +#: src/cryptsetup.c:1037 +msgid "Really proceed with LUKS2 reencryption recovery?" +msgstr "" + +#: src/cryptsetup.c:1046 +#, fuzzy +msgid "Enter passphrase for reencryption recovery: " +msgstr "Kirjoita salasanalause avainvälille %u: " + +#: src/cryptsetup.c:1089 +msgid "Really try to repair LUKS device header?" +msgstr "Yritetäänkö todella korjata LUKS-laiteotsake?" + +#: src/cryptsetup.c:1108 src/integritysetup.c:145 +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:1130 src/integritysetup.c:167 +#, fuzzy, c-format +msgid "Cannot deactivate temporary device %s." +msgstr "Tilapäisen LUKS-laitteen avaaminen epäonnistui.\n" + +#: src/cryptsetup.c:1174 +msgid "Integrity option can be used only for LUKS2 format." +msgstr "" + +#: src/cryptsetup.c:1179 src/cryptsetup.c:1239 +#, fuzzy +msgid "Unsupported LUKS2 metadata size options." +msgstr "Tukematon LUKS-versio %d.\n" + +#: src/cryptsetup.c:1196 +#, fuzzy, c-format +msgid "Cannot create header file %s." +msgstr "Otsakevarmuuskopiotiedoston %s luominen epäonnistui.\n" + +#: src/cryptsetup.c:1219 src/integritysetup.c:194 src/integritysetup.c:203 +#: src/integritysetup.c:212 src/integritysetup.c:279 src/integritysetup.c:288 +#: src/integritysetup.c:298 +#, fuzzy +msgid "No known integrity specification pattern detected." +msgstr "Havaittu tuntematon salakirjoitusmenetelmämäärittelymalli.\n" + +#: src/cryptsetup.c:1232 +#, fuzzy, c-format +msgid "Cannot use %s as on-disk header." +msgstr "Kohteen %s käyttö paikallisena levyotsakkeena epäonnistui.\n" + +#: src/cryptsetup.c:1256 src/integritysetup.c:226 +#, c-format +msgid "This will overwrite data on %s irrevocably." +msgstr "Tämä korvaa tiedot kohteella %s peruuttamattomasti." + +#: src/cryptsetup.c:1297 src/cryptsetup.c:1627 src/cryptsetup.c:1694 +#: src/cryptsetup.c:1796 src/cryptsetup.c:1862 src/cryptsetup_reencrypt.c:545 +#, fuzzy +msgid "Failed to set pbkdf parameters." +msgstr "Avaintiedoston kutsuminen stat-funktiolla epäonnistui.\n" + +#: src/cryptsetup.c:1378 +#, fuzzy +msgid "Reduced data offset is allowed only for detached LUKS header." +msgstr "Pienennetty tietosiirrososoite sallitaan vain irrotetulle LUKS-otsakkeelle.\n" + +#: src/cryptsetup.c:1389 src/cryptsetup.c:1700 +msgid "Cannot determine volume key size for LUKS without keyslots, please use --key-size option." +msgstr "" + +#: src/cryptsetup.c:1427 +msgid "Device activated but cannot make flags persistent." +msgstr "" + +#: src/cryptsetup.c:1508 src/cryptsetup.c:1578 +#, fuzzy, c-format +msgid "Keyslot %d is selected for deletion." +msgstr "Avainväli %d valittu poistoa varten.\n" + +#: src/cryptsetup.c:1520 src/cryptsetup.c:1581 +msgid "This is the last keyslot. Device will become unusable after purging this key." +msgstr "Tämä on viimeinen avainväli. Laite tulee käyttökelvottomaksi tämän avaimen poistamisen jälkeen." + +#: src/cryptsetup.c:1521 +msgid "Enter any remaining passphrase: " +msgstr "Kirjoita mikä tahansa jäljellä oleva salasanalause: " + +#: src/cryptsetup.c:1522 src/cryptsetup.c:1583 +msgid "Operation aborted, the keyslot was NOT wiped.\n" +msgstr "" + +#: src/cryptsetup.c:1560 +msgid "Enter passphrase to be deleted: " +msgstr "Kirjoita poistettava salasanalause: " + +#: src/cryptsetup.c:1641 src/cryptsetup.c:1715 src/cryptsetup.c:1749 +msgid "Enter new passphrase for key slot: " +msgstr "Kirjoita uusi salasanalause avainvälille: " + +#: src/cryptsetup.c:1732 src/cryptsetup_reencrypt.c:1327 +#, c-format +msgid "Enter any existing passphrase: " +msgstr "Kirjoita mikä tahansa olemassa oleva salasanalause: " + +#: src/cryptsetup.c:1800 +msgid "Enter passphrase to be changed: " +msgstr "Kirjoita vaihdettava salasanalause: " + +#: src/cryptsetup.c:1816 src/cryptsetup_reencrypt.c:1313 +msgid "Enter new passphrase: " +msgstr "Kirjoita uusi salasanalause: " + +#: src/cryptsetup.c:1866 +#, fuzzy +msgid "Enter passphrase for keyslot to be converted: " +msgstr "Kirjoita salasanalause avainvälille %u: " + +#: src/cryptsetup.c:1890 +#, fuzzy +msgid "Only one device argument for isLuks operation is supported." +msgstr "Tuetaan vain yhtä laiteargumenttia isLuks-toiminnolle.\n" + +#: src/cryptsetup.c:2074 src/cryptsetup.c:2095 +#, fuzzy +msgid "Option --header-backup-file is required." +msgstr "Vaaditaan valitsin --header-backup-file.\n" + +#: src/cryptsetup.c:2125 +#, fuzzy, c-format +msgid "%s is not cryptsetup managed device." +msgstr "%s ei ole LUKS-laite." + +#: src/cryptsetup.c:2136 +#, fuzzy, c-format +msgid "Refresh is not supported for device type %s" +msgstr "Jatkamista ei tueta laiteelle %s.\n" + +#: src/cryptsetup.c:2174 +#, fuzzy, c-format +msgid "Unrecognized metadata device type %s." +msgstr "Tunnistamaton metatietolaitetyyppi %s.\n" + +#: src/cryptsetup.c:2177 +#, fuzzy +msgid "Command requires device and mapped name as arguments." +msgstr "Komento vaatii laitteen ja kuvausnimen argumenttina.\n" + +#: src/cryptsetup.c:2199 +#, c-format +msgid "" +"This operation will erase all keyslots on device %s.\n" +"Device will become unusable after this operation." +msgstr "" +"Tämä toiminto poistaa kaikki avainvälit laitteesta %s.\n" +"Laite tulee käyttökelvottomaksi tämän toiminnon jälkeen." + +#: src/cryptsetup.c:2206 +msgid "Operation aborted, keyslots were NOT wiped.\n" +msgstr "" + +#: src/cryptsetup.c:2243 +msgid "Invalid LUKS type, only luks1 and luks2 are supported." +msgstr "" + +#: src/cryptsetup.c:2261 +#, fuzzy, c-format +msgid "Device is already %s type." +msgstr "Laite %s on jo olemassa.\n" + +#: src/cryptsetup.c:2266 +#, fuzzy, c-format +msgid "This operation will convert %s to %s format.\n" +msgstr "Tätä toimintoa ei tueta %s-salauslaitteelle.\n" + +#: src/cryptsetup.c:2272 +msgid "Operation aborted, device was NOT converted.\n" +msgstr "" + +#: src/cryptsetup.c:2312 +msgid "Option --priority, --label or --subsystem is missing." +msgstr "" + +#: src/cryptsetup.c:2346 src/cryptsetup.c:2379 src/cryptsetup.c:2402 +#, fuzzy, c-format +msgid "Token %d is invalid." +msgstr "Avainväli %d on virheellinen.\n" + +#: src/cryptsetup.c:2349 src/cryptsetup.c:2405 +#, c-format +msgid "Token %d in use." +msgstr "" + +#: src/cryptsetup.c:2356 +#, fuzzy, c-format +msgid "Failed to add luks2-keyring token %d." +msgstr "Avainsäiliöstä lukeminen epäonnistui.\n" + +#: src/cryptsetup.c:2365 src/cryptsetup.c:2427 +#, fuzzy, c-format +msgid "Failed to assign token %d to keyslot %d." +msgstr "Avainsäiliöön kirjoittaminen epäonnistui.\n" + +#: src/cryptsetup.c:2382 +#, fuzzy, c-format +msgid "Token %d is not in use." +msgstr "Avainväli %d ei ole käytössä.\n" + +#: src/cryptsetup.c:2417 +#, fuzzy +msgid "Failed to import token from file." +msgstr "Avaintiedoston avaus epäonnistui.\n" + +#: src/cryptsetup.c:2442 +#, fuzzy, c-format +msgid "Failed to get token %d for export." +msgstr "Avainsäiliöön kirjoittaminen epäonnistui.\n" + +#: src/cryptsetup.c:2457 +msgid "--key-description parameter is mandatory for token add action." +msgstr "" + +#: src/cryptsetup.c:2463 src/cryptsetup.c:2471 +msgid "Action requires specific token. Use --token-id parameter." +msgstr "" + +#: src/cryptsetup.c:2476 +#, fuzzy, c-format +msgid "Invalid token operation %s." +msgstr "Virheellinen avainkoko %d.\n" + +#: src/cryptsetup.c:2531 +#, c-format +msgid "Auto-detected active dm device '%s' for data device %s.\n" +msgstr "" + +#: src/cryptsetup.c:2535 +#, fuzzy, c-format +msgid "Device %s is not a block device.\n" +msgstr "Laite %s ei ole kelvollinen LUKS-laite.\n" + +#: src/cryptsetup.c:2537 +#, fuzzy, c-format +msgid "Failed to auto-detect device %s holders." +msgstr "Laitekuvaajahakemiston hankkiminen epäonnistui." + +#: src/cryptsetup.c:2539 +#, 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 "" + +#: src/cryptsetup.c:2619 +#, fuzzy +msgid "Invalid LUKS device type." +msgstr "Virheellinen laite %s.\n" + +#: src/cryptsetup.c:2624 +msgid "Encryption without detached header (--header) is not possible without data device size reduction (--reduce-device-size)." +msgstr "" + +#: src/cryptsetup.c:2629 +msgid "Requested data offset must be less than or equal to half of --reduce-device-size parameter." +msgstr "" + +#: src/cryptsetup.c:2638 +#, c-format +msgid "Adjusting --reduce-device-size value to twice the --offset % (sectors).\n" +msgstr "" + +#: src/cryptsetup.c:2642 +#, fuzzy +msgid "Encryption is supported only for LUKS2 format." +msgstr "Tätä toimintoa tuetaan vain LUKS-laitteelle.\n" + +#: src/cryptsetup.c:2664 +#, c-format +msgid "Detected LUKS device on %s. Do you want to encrypt that LUKS device again?" +msgstr "" + +#: src/cryptsetup.c:2679 +#, fuzzy, c-format +msgid "Temporary header file %s already exists. Aborting." +msgstr "Pyydetty otsakevarmuuskopiotiedosto %s on jo olemassa.\n" + +#: src/cryptsetup.c:2681 src/cryptsetup.c:2688 +#, fuzzy, c-format +msgid "Cannot create temporary header file %s." +msgstr "Otsakevarmuuskopiotiedoston %s luominen epäonnistui.\n" + +#: src/cryptsetup.c:2752 +#, c-format +msgid "%s/%s is now active and ready for online encryption." +msgstr "" + +#: src/cryptsetup.c:2919 src/cryptsetup.c:2925 +#, fuzzy +msgid "Not enough free keyslots for reencryption." +msgstr "Älä vaihda avainta, yhtään data-aluetta ei ole salattu uudelleen." + +#: src/cryptsetup.c:2945 src/cryptsetup_reencrypt.c:1284 +#, fuzzy +msgid "Key file can be used only with --key-slot or with exactly one key slot active." +msgstr "Avaintiedostoa voidaan käyttää vain valitsimen --key-slot kanssa tai täsmälleen yhden avainvälin ollessa aktiivisena.\n" + +#: src/cryptsetup.c:2954 src/cryptsetup_reencrypt.c:1325 +#: src/cryptsetup_reencrypt.c:1336 +#, fuzzy, c-format +msgid "Enter passphrase for key slot %d: " +msgstr "Kirjoita salasanalause avainvälille %u: " + +#: src/cryptsetup.c:2962 +#, c-format +msgid "Enter passphrase for key slot %u: " +msgstr "Kirjoita salasanalause avainvälille %u: " + +#: src/cryptsetup.c:3129 +#, fuzzy +msgid "Command requires device as argument." +msgstr "Komento vaatii laitteen ja kuvausnimen argumenttina.\n" + +#: src/cryptsetup.c:3151 +msgid "Only LUKS2 format is currently supported. Please use cryptsetup-reencrypt tool for LUKS1." +msgstr "" + +#: src/cryptsetup.c:3163 +msgid "Legacy offline reencryption already in-progress. Use cryptsetup-reencrypt utility." +msgstr "" + +#: src/cryptsetup.c:3173 src/cryptsetup_reencrypt.c:178 +msgid "Reencryption of device with integrity profile is not supported." +msgstr "" + +#: src/cryptsetup.c:3181 +msgid "LUKS2 reencryption already initialized. Aborting operation." +msgstr "" + +#: src/cryptsetup.c:3185 +#, fuzzy +msgid "LUKS2 device is not in reencryption." +msgstr "Lokitiedosto %s on olemassa, aloitetaan salaus uudelleen.\n" + +#: src/cryptsetup.c:3212 +msgid " [--type ] []" +msgstr " [--type ] []" + +#: src/cryptsetup.c:3212 src/veritysetup.c:358 src/integritysetup.c:470 +#, fuzzy +msgid "open device as " +msgstr "avaa laite kuvauksena " + +#: src/cryptsetup.c:3213 src/cryptsetup.c:3214 src/cryptsetup.c:3215 +#: src/veritysetup.c:359 src/veritysetup.c:360 src/integritysetup.c:471 +#: src/integritysetup.c:472 +msgid "" +msgstr "" + +#: src/cryptsetup.c:3213 src/veritysetup.c:359 src/integritysetup.c:471 +msgid "close device (remove mapping)" +msgstr "sulje laite (poista kuvaus)" + +#: src/cryptsetup.c:3214 +msgid "resize active device" +msgstr "muuta käytössä olevan laitteen kokoa" + +#: src/cryptsetup.c:3215 +msgid "show device status" +msgstr "näytä laitetila" + +#: src/cryptsetup.c:3216 +msgid "[--cipher ]" +msgstr "" + +#: src/cryptsetup.c:3216 +msgid "benchmark cipher" +msgstr "koestussalaus" + +#: src/cryptsetup.c:3217 src/cryptsetup.c:3218 src/cryptsetup.c:3219 +#: src/cryptsetup.c:3220 src/cryptsetup.c:3221 src/cryptsetup.c:3228 +#: src/cryptsetup.c:3229 src/cryptsetup.c:3230 src/cryptsetup.c:3231 +#: src/cryptsetup.c:3232 src/cryptsetup.c:3233 src/cryptsetup.c:3234 +#: src/cryptsetup.c:3235 +msgid "" +msgstr "" + +#: src/cryptsetup.c:3217 +msgid "try to repair on-disk metadata" +msgstr "yritä korjata levyn sisäiset metatiedot" + +#: src/cryptsetup.c:3218 +#, fuzzy +msgid "reencrypt LUKS2 device" +msgstr "lisää avain LUKS-laitteeseen" + +#: src/cryptsetup.c:3219 +msgid "erase all keyslots (remove encryption key)" +msgstr "poista kaikki avainvälit (poista salausavain)" + +#: src/cryptsetup.c:3220 +msgid "convert LUKS from/to LUKS2 format" +msgstr "" + +#: src/cryptsetup.c:3221 +msgid "set permanent configuration options for LUKS2" +msgstr "" + +#: src/cryptsetup.c:3222 src/cryptsetup.c:3223 +msgid " []" +msgstr " []" + +#: src/cryptsetup.c:3222 +msgid "formats a LUKS device" +msgstr "pohjustaa LUKS-laitteen" + +#: src/cryptsetup.c:3223 +msgid "add key to LUKS device" +msgstr "lisää avain LUKS-laitteeseen" + +#: src/cryptsetup.c:3224 src/cryptsetup.c:3225 src/cryptsetup.c:3226 +msgid " []" +msgstr " []" + +#: src/cryptsetup.c:3224 +msgid "removes supplied key or key file from LUKS device" +msgstr "poistaa tarjotun avaimen tai avaintiedoston LUKS-laitteesta" + +#: src/cryptsetup.c:3225 +msgid "changes supplied key or key file of LUKS device" +msgstr "vaihtaa LUKS-laitteen tarjotun avaimen tai avaintiedoston" + +#: src/cryptsetup.c:3226 +msgid "converts a key to new pbkdf parameters" +msgstr "" + +#: src/cryptsetup.c:3227 +msgid " " +msgstr " " + +#: src/cryptsetup.c:3227 +msgid "wipes key with number from LUKS device" +msgstr "pyyhkäisee pois avaimen numerolla LUKS-laitteesta" + +#: src/cryptsetup.c:3228 +msgid "print UUID of LUKS device" +msgstr "tulostaa LUKS-laitteen UUID-tunnuksen" + +#: src/cryptsetup.c:3229 +msgid "tests for LUKS partition header" +msgstr "testaa LUKS-osio-otsakkeesta" + +#: src/cryptsetup.c:3230 +msgid "dump LUKS partition information" +msgstr "vedosta LUKS-osiotiedot" + +#: src/cryptsetup.c:3231 +msgid "dump TCRYPT device information" +msgstr "vedosta TCRYPT-laitetiedot" + +#: src/cryptsetup.c:3232 +#, fuzzy +msgid "Suspend LUKS device and wipe key (all IOs are frozen)" +msgstr "Keskeytä LUKS-laite ja pyyhi pois avain (kaikki siirräntäliitännät jäädytetään)." + +#: src/cryptsetup.c:3233 +#, fuzzy +msgid "Resume suspended LUKS device" +msgstr "Aloita uudelleen pysäytetty LUKS-laite." + +#: src/cryptsetup.c:3234 +msgid "Backup LUKS device header and keyslots" +msgstr "Varmuuskopioi LUKS-laiteotsake ja avainvälit" + +#: src/cryptsetup.c:3235 +msgid "Restore LUKS device header and keyslots" +msgstr "Palauta LUKS-laiteotsake ja avainvälit" + +#: src/cryptsetup.c:3236 +msgid " " +msgstr "" + +#: src/cryptsetup.c:3236 +msgid "Manipulate LUKS2 tokens" +msgstr "" + +#: src/cryptsetup.c:3254 src/veritysetup.c:376 src/integritysetup.c:488 +msgid "" +"\n" +" is one of:\n" +msgstr "" +"\n" +" on yksi seuraavista:\n" + +#: src/cryptsetup.c:3260 +msgid "" +"\n" +"You can also use old syntax aliases:\n" +"\topen: create (plainOpen), luksOpen, loopaesOpen, tcryptOpen\n" +"\tclose: remove (plainClose), luksClose, loopaesClose, tcryptClose\n" +msgstr "" +"\n" +"Voit myös käyttää vanhaa -syntaksialiasta:\n" +"\topen: luo (plainOpen), luksOpen, loopaesOpen, tcryptOpen\n" +"\tclose: poista (plainClose), luksClose, loopaesClose, tcryptClose\n" + +#: src/cryptsetup.c:3264 +#, c-format +msgid "" +"\n" +" is the device to create under %s\n" +" is the encrypted device\n" +" is the LUKS key slot number to modify\n" +" optional key file for the new key for luksAddKey action\n" +msgstr "" +"\n" +" on laite, joka luodaan kohteen %s alaisena\n" +" on salaussuojattu laite\n" +" on LUKS-avainväli muokattavaksi\n" +" valinnainen avaintiedosto uudelle avaimelle luksAddKey-toimintoa varten\n" + +#: src/cryptsetup.c:3271 +#, c-format +msgid "" +"\n" +"Default compiled-in metadata format is %s (for luksFormat action).\n" +msgstr "" + +#: src/cryptsetup.c:3276 +#, fuzzy, c-format +msgid "" +"\n" +"Default compiled-in key and passphrase parameters:\n" +"\tMaximum keyfile size: %dkB, Maximum interactive passphrase length %d (characters)\n" +"Default PBKDF for LUKS1: %s, iteration time: %d (ms)\n" +"Default PBKDF for LUKS2: %s\n" +"\tIteration time: %d, Memory required: %dkB, Parallel threads: %d\n" +msgstr "" +"\n" +"Käännetyn avaintiedoston ja salasanan oletusparametrit:\n" +"\tAvaintiedoston enimmäiskoko: %d kilobittiä, vuorovaikutteisen\n" +"\tsalasanalauseen enimmäispituus %d (merkkiä)\n" +"PBKDF2-iteroinnin enimmäisaika LUKS-avainvälille: %d (millisekuntia)\n" + +#: src/cryptsetup.c:3287 +#, fuzzy, c-format +msgid "" +"\n" +"Default compiled-in device cipher parameters:\n" +"\tloop-AES: %s, Key %d bits\n" +"\tplain: %s, Key: %d bits, Password hashing: %s\n" +"\tLUKS: %s, Key: %d bits, LUKS header hashing: %s, RNG: %s\n" +msgstr "" +"\n" +"Käännetyn laitesalakirjoitusmenetelmän oletusparametrit:\n" +"\tloop-AES: %s, Avain %d bittiä\n" +"\tplain-tyyppi: %s, Avain: %d bittiä, Salasanatiivistys: %s\n" +"\tLUKS1: %s, Avain: %d bittiä, LUKS-otsaketiivistys: %s, RNG: %s\n" + +#: src/cryptsetup.c:3296 +msgid "\tLUKS: Default keysize with XTS mode (two internal keys) will be doubled.\n" +msgstr "" + +#: src/cryptsetup.c:3312 src/veritysetup.c:532 src/integritysetup.c:630 +#, c-format +msgid "%s: requires %s as arguments" +msgstr "%s: vaatii %s argumentteina" + +#: src/cryptsetup.c:3350 src/veritysetup.c:421 src/integritysetup.c:527 +#: src/cryptsetup_reencrypt.c:1591 +msgid "Show this help message" +msgstr "Näytä tämä opastesanoma" + +#: src/cryptsetup.c:3351 src/veritysetup.c:422 src/integritysetup.c:528 +#: src/cryptsetup_reencrypt.c:1592 +msgid "Display brief usage" +msgstr "Näytä lyhyt käyttöopaste" + +#: src/cryptsetup.c:3352 src/veritysetup.c:423 src/integritysetup.c:529 +#: src/cryptsetup_reencrypt.c:1593 +msgid "Print package version" +msgstr "Tulosta pakkausversio" + +#: src/cryptsetup.c:3356 src/veritysetup.c:427 src/integritysetup.c:533 +#: src/cryptsetup_reencrypt.c:1597 +msgid "Help options:" +msgstr "Opastevalitsimet:" + +#: src/cryptsetup.c:3357 src/veritysetup.c:428 src/integritysetup.c:534 +#: src/cryptsetup_reencrypt.c:1598 +msgid "Shows more detailed error messages" +msgstr "Näyttää yksityiskohtaisemmat virheilmoitukset" + +#: src/cryptsetup.c:3358 src/veritysetup.c:429 src/integritysetup.c:535 +#: src/cryptsetup_reencrypt.c:1599 +msgid "Show debug messages" +msgstr "Näytä vianjäljityssanomat" + +#: src/cryptsetup.c:3359 +#, fuzzy +msgid "Show debug messages including JSON metadata" +msgstr "Näytä vianjäljityssanomat" + +#: src/cryptsetup.c:3360 src/cryptsetup_reencrypt.c:1601 +msgid "The cipher used to encrypt the disk (see /proc/crypto)" +msgstr "Salakirjoitusmenetelmä, jota käytetään salaamaan levy (katso /proc/crypto)" + +#: src/cryptsetup.c:3361 src/cryptsetup_reencrypt.c:1603 +msgid "The hash used to create the encryption key from the passphrase" +msgstr "Tiivisteavain, jota käytetään salausavaimen luomiseen salasanalauseesta" + +#: src/cryptsetup.c:3362 +msgid "Verifies the passphrase by asking for it twice" +msgstr "Todentaa salasanalauseen kysymällä kahdesti" + +#: src/cryptsetup.c:3363 src/cryptsetup_reencrypt.c:1605 +#, fuzzy +msgid "Read the key from a file" +msgstr "Lue avain tiedostosta." + +#: src/cryptsetup.c:3364 +msgid "Read the volume (master) key from file." +msgstr "Lue taltion (pää)avain tiedostosta." + +#: src/cryptsetup.c:3365 +#, fuzzy +msgid "Dump volume (master) key instead of keyslots info" +msgstr "Vedosta taltion (pää)avain eikä avainvälien tiedot." + +#: src/cryptsetup.c:3366 src/cryptsetup_reencrypt.c:1602 +msgid "The size of the encryption key" +msgstr "Salausavaimen koko" + +#: src/cryptsetup.c:3366 src/cryptsetup.c:3425 src/integritysetup.c:553 +#: src/integritysetup.c:557 src/integritysetup.c:561 +#: src/cryptsetup_reencrypt.c:1602 +msgid "BITS" +msgstr "BITTIÄ" + +#: src/cryptsetup.c:3367 src/cryptsetup_reencrypt.c:1618 +msgid "Limits the read from keyfile" +msgstr "Avaintiedostosta luettavat rajat" + +#: src/cryptsetup.c:3367 src/cryptsetup.c:3368 src/cryptsetup.c:3369 +#: src/cryptsetup.c:3370 src/cryptsetup.c:3373 src/cryptsetup.c:3422 +#: src/cryptsetup.c:3423 src/cryptsetup.c:3431 src/cryptsetup.c:3432 +#: src/veritysetup.c:432 src/veritysetup.c:433 src/veritysetup.c:434 +#: src/veritysetup.c:437 src/veritysetup.c:438 src/integritysetup.c:542 +#: src/integritysetup.c:548 src/integritysetup.c:549 +#: src/cryptsetup_reencrypt.c:1617 src/cryptsetup_reencrypt.c:1618 +#: src/cryptsetup_reencrypt.c:1619 src/cryptsetup_reencrypt.c:1620 +msgid "bytes" +msgstr "tavua" + +#: src/cryptsetup.c:3368 src/cryptsetup_reencrypt.c:1617 +msgid "Number of bytes to skip in keyfile" +msgstr "Avaintiedostossa ohitettavien tavujen määrä" + +#: src/cryptsetup.c:3369 +msgid "Limits the read from newly added keyfile" +msgstr "Äskettäin lisätystä avaintiedostosta luetut rajat" + +#: src/cryptsetup.c:3370 +msgid "Number of bytes to skip in newly added keyfile" +msgstr "Ohitettu tavumäärä äskettäin lisätyssä avaintiedostossa" + +#: src/cryptsetup.c:3371 +msgid "Slot number for new key (default is first free)" +msgstr "Välinumero uudelle avaimelle (oletus on ensimmäinen vapaa)" + +#: src/cryptsetup.c:3372 +msgid "The size of the device" +msgstr "Laitteen koko" + +#: src/cryptsetup.c:3372 src/cryptsetup.c:3374 src/cryptsetup.c:3375 +#: src/cryptsetup.c:3381 src/integritysetup.c:543 src/integritysetup.c:550 +msgid "SECTORS" +msgstr "SEKTORIA" + +#: src/cryptsetup.c:3373 src/cryptsetup_reencrypt.c:1620 +msgid "Use only specified device size (ignore rest of device). DANGEROUS!" +msgstr "Käytä vain määriteltyä laitekokoa (ohita laitteen loppu). VAARALLINEN!" + +#: src/cryptsetup.c:3374 +msgid "The start offset in the backend device" +msgstr "Alkusiirrososoite taustalaitteessa" + +#: src/cryptsetup.c:3375 +msgid "How many sectors of the encrypted data to skip at the beginning" +msgstr "Kuinka monta salaustietojen sektoria ohitetaan alussa" + +#: src/cryptsetup.c:3376 +msgid "Create a readonly mapping" +msgstr "Luo kirjoitussuojattu kuvaus" + +#: src/cryptsetup.c:3377 src/integritysetup.c:536 +#: src/cryptsetup_reencrypt.c:1608 +msgid "Do not ask for confirmation" +msgstr "Älä pyydä vahvistusta" + +#: src/cryptsetup.c:3378 +msgid "Timeout for interactive passphrase prompt (in seconds)" +msgstr "Aikakatkaisu vuorovaikutteiselle salasanalausekyselylle (sekunteina)" + +#: src/cryptsetup.c:3378 src/cryptsetup.c:3379 src/integritysetup.c:537 +#: src/cryptsetup_reencrypt.c:1609 +msgid "secs" +msgstr "s" + +#: src/cryptsetup.c:3379 src/integritysetup.c:537 +#: src/cryptsetup_reencrypt.c:1609 +msgid "Progress line update (in seconds)" +msgstr "" + +#: src/cryptsetup.c:3380 src/cryptsetup_reencrypt.c:1610 +msgid "How often the input of the passphrase can be retried" +msgstr "Kuinka usein salasanasyötettä voidaan yrittää uudelleen" + +#: src/cryptsetup.c:3381 +msgid "Align payload at sector boundaries - for luksFormat" +msgstr "Tasaa tietosisältö osoitteessa sektorirajoihin - kohdetta luksFormat varten" + +#: src/cryptsetup.c:3382 +#, fuzzy +msgid "File with LUKS header and keyslots backup" +msgstr "Tiedosto LUKS-otsakkeella ja avainvälien varmuuskopiolla." + +#: src/cryptsetup.c:3383 src/cryptsetup_reencrypt.c:1611 +#, fuzzy +msgid "Use /dev/random for generating volume key" +msgstr "Käytä /dev/random taltioavaimen synnyttämiseen." + +#: src/cryptsetup.c:3384 src/cryptsetup_reencrypt.c:1612 +#, fuzzy +msgid "Use /dev/urandom for generating volume key" +msgstr "Käytä /dev/urandom taltioavaimen synnyttämiseen." + +#: src/cryptsetup.c:3385 +#, fuzzy +msgid "Share device with another non-overlapping crypt segment" +msgstr "Jaa laite toisen ei-päällekkäisen salaussegmentin kanssa." + +#: src/cryptsetup.c:3386 src/veritysetup.c:441 +#, fuzzy +msgid "UUID for device to use" +msgstr "UUID laitteelle käytettäväksi." + +#: src/cryptsetup.c:3387 +#, fuzzy +msgid "Allow discards (aka TRIM) requests for device" +msgstr "Salli hylkäys(lempinimeltään TRIM)-pyynnöt laitteelle." + +#: src/cryptsetup.c:3388 src/cryptsetup_reencrypt.c:1629 +#, fuzzy +msgid "Device or file with separated LUKS header" +msgstr "Laite tai tiedosto erillisellä LUKS-otsakkeella." + +#: src/cryptsetup.c:3389 +#, fuzzy +msgid "Do not activate device, just check passphrase" +msgstr "Älä aktivoi laitetta, tarkista vain salasanalauseke." + +#: src/cryptsetup.c:3390 +#, fuzzy +msgid "Use hidden header (hidden TCRYPT device)" +msgstr "Käytä piilotettua otsaketta (piilotettu TCRYPT-laite)." + +#: src/cryptsetup.c:3391 +#, fuzzy +msgid "Device is system TCRYPT drive (with bootloader)" +msgstr "Laite on järjestelmä-TCRYPT-levyasema (alkulatausohjelmalla)." + +#: src/cryptsetup.c:3392 +#, fuzzy +msgid "Use backup (secondary) TCRYPT header" +msgstr "Käytä (toissijaista) TCRYPT-varmuuskopio-otsaketta." + +#: src/cryptsetup.c:3393 +#, fuzzy +msgid "Scan also for VeraCrypt compatible device" +msgstr "Tutkinta myös VeraCrypt-yhteensopivalle laitteelle." + +#: src/cryptsetup.c:3394 +#, fuzzy +msgid "Personal Iteration Multiplier for VeraCrypt compatible device" +msgstr "Tutkinta myös VeraCrypt-yhteensopivalle laitteelle." + +#: src/cryptsetup.c:3395 +#, fuzzy +msgid "Query Personal Iteration Multiplier for VeraCrypt compatible device" +msgstr "Tutkinta myös VeraCrypt-yhteensopivalle laitteelle." + +#: src/cryptsetup.c:3396 +#, fuzzy +msgid "Type of device metadata: luks, luks1, luks2, plain, loopaes, tcrypt" +msgstr "Laitemetatietojen tyyppi: luks, plain, loopaes, tcrypt." + +#: src/cryptsetup.c:3397 +#, fuzzy +msgid "Disable password quality check (if enabled)" +msgstr "Ota pois käytöstä salasanan laatutarkistus (jos käytössä)." + +#: src/cryptsetup.c:3398 +#, fuzzy +msgid "Use dm-crypt same_cpu_crypt performance compatibility option" +msgstr "Käytä dm-crypt same_cpu_crypt-suorituskyky-yhteensopivuusvalitsinta." + +#: src/cryptsetup.c:3399 +#, fuzzy +msgid "Use dm-crypt submit_from_crypt_cpus performance compatibility option" +msgstr "Käytä dm-crypt submit_from_crypt_cpus-suorituskyky-yhteensopivuusvalitsinta." + +#: src/cryptsetup.c:3400 +msgid "Device removal is deferred until the last user closes it" +msgstr "" + +#: src/cryptsetup.c:3401 +msgid "Use global lock to serialize memory hard PBKDF (OOM workaround)" +msgstr "" + +#: src/cryptsetup.c:3402 +#, fuzzy +msgid "PBKDF iteration time for LUKS (in ms)" +msgstr "PBKDF2-iterointiaika kohteelle LUKS (millisekunneissa)" + +#: src/cryptsetup.c:3402 src/cryptsetup_reencrypt.c:1607 +msgid "msecs" +msgstr "ms" + +#: src/cryptsetup.c:3403 src/cryptsetup_reencrypt.c:1625 +msgid "PBKDF algorithm (for LUKS2): argon2i, argon2id, pbkdf2" +msgstr "" + +#: src/cryptsetup.c:3404 src/cryptsetup_reencrypt.c:1626 +msgid "PBKDF memory cost limit" +msgstr "" + +#: src/cryptsetup.c:3404 src/cryptsetup_reencrypt.c:1626 +#, fuzzy +msgid "kilobytes" +msgstr "tavua" + +#: src/cryptsetup.c:3405 src/cryptsetup_reencrypt.c:1627 +msgid "PBKDF parallel cost" +msgstr "" + +#: src/cryptsetup.c:3405 src/cryptsetup_reencrypt.c:1627 +msgid "threads" +msgstr "" + +#: src/cryptsetup.c:3406 src/cryptsetup_reencrypt.c:1628 +msgid "PBKDF iterations cost (forced, disables benchmark)" +msgstr "" + +#: src/cryptsetup.c:3407 +msgid "Keyslot priority: ignore, normal, prefer" +msgstr "" + +#: src/cryptsetup.c:3408 +#, fuzzy +msgid "Disable locking of on-disk metadata" +msgstr "yritä korjata levyn sisäiset metatiedot" + +#: src/cryptsetup.c:3409 +msgid "Disable loading volume keys via kernel keyring" +msgstr "" + +#: src/cryptsetup.c:3410 +msgid "Data integrity algorithm (LUKS2 only)" +msgstr "" + +#: src/cryptsetup.c:3411 src/integritysetup.c:564 +msgid "Disable journal for integrity device" +msgstr "" + +#: src/cryptsetup.c:3412 src/integritysetup.c:538 +msgid "Do not wipe device after format" +msgstr "" + +#: src/cryptsetup.c:3413 +msgid "Do not ask for passphrase if activation by token fails" +msgstr "" + +#: src/cryptsetup.c:3414 +msgid "Token number (default: any)" +msgstr "" + +#: src/cryptsetup.c:3415 +msgid "Key description" +msgstr "" + +#: src/cryptsetup.c:3416 +msgid "Encryption sector size (default: 512 bytes)" +msgstr "" + +#: src/cryptsetup.c:3417 +msgid "Set activation flags persistent for device" +msgstr "" + +#: src/cryptsetup.c:3418 +#, fuzzy +msgid "Set label for the LUKS2 device" +msgstr "pohjustaa LUKS-laitteen" + +#: src/cryptsetup.c:3419 +msgid "Set subsystem label for the LUKS2 device" +msgstr "" + +#: src/cryptsetup.c:3420 +msgid "Create unbound (no assigned data segment) LUKS2 keyslot" +msgstr "" + +#: src/cryptsetup.c:3421 +#, fuzzy +msgid "Read or write the json from or to a file" +msgstr "Lue avain tiedostosta." + +#: src/cryptsetup.c:3422 +msgid "LUKS2 header metadata area size" +msgstr "" + +#: src/cryptsetup.c:3423 +#, fuzzy +msgid "LUKS2 header keyslots area size" +msgstr "Tiedosto LUKS-otsakkeella ja avainvälien varmuuskopiolla." + +#: src/cryptsetup.c:3424 +msgid "Refresh (reactivate) device with new parameters" +msgstr "" + +#: src/cryptsetup.c:3425 +#, fuzzy +msgid "LUKS2 keyslot: The size of the encryption key" +msgstr "Salausavaimen koko" + +#: src/cryptsetup.c:3426 +msgid "LUKS2 keyslot: The cipher used for keyslot encryption" +msgstr "" + +#: src/cryptsetup.c:3427 +#, fuzzy +msgid "Encrypt LUKS2 device (in-place encryption)." +msgstr "Poista laitteen salaus pysyvästi (poista salaus)" + +#: src/cryptsetup.c:3428 +#, fuzzy +msgid "Decrypt LUKS2 device (remove encryption)." +msgstr "Poista laitteen salaus pysyvästi (poista salaus)" + +#: src/cryptsetup.c:3429 +msgid "Initialize LUKS2 reencryption in metadata only." +msgstr "" + +#: src/cryptsetup.c:3430 +msgid "Resume initialized LUKS2 reencryption only." +msgstr "" + +#: src/cryptsetup.c:3431 src/cryptsetup_reencrypt.c:1619 +msgid "Reduce data device size (move data offset). DANGEROUS!" +msgstr "Pienennä datalaitekokoa (siirrä datasiirrososoitetta). VAARALLINEN!" + +#: src/cryptsetup.c:3432 +#, fuzzy +msgid "Maximal reencryption hotzone size." +msgstr "Uudelleensalauslohkon koko" + +#: src/cryptsetup.c:3433 +msgid "Reencryption hotzone resilience type (checksum,journal,none)" +msgstr "" + +#: src/cryptsetup.c:3434 +#, fuzzy +msgid "Reencryption hotzone checksums hash" +msgstr "Uudelleensalauslohkon koko" + +#: src/cryptsetup.c:3435 +msgid "Override device autodetection of dm device to be reencrypted" +msgstr "" + +#: src/cryptsetup.c:3451 src/veritysetup.c:462 src/integritysetup.c:583 +msgid "[OPTION...] " +msgstr "[VALITSIN...] " + +#: src/cryptsetup.c:3502 src/veritysetup.c:496 src/integritysetup.c:594 +msgid "Argument missing." +msgstr "Argumentti puuttuu." + +#: src/cryptsetup.c:3565 src/veritysetup.c:527 src/integritysetup.c:625 +msgid "Unknown action." +msgstr "Tuntematon toiminto." + +#: src/cryptsetup.c:3575 +msgid "Parameter --refresh is only allowed with open or refresh commands.\n" +msgstr "" + +#: src/cryptsetup.c:3580 +msgid "Options --refresh and --test-passphrase are mutually exclusive.\n" +msgstr "" + +#: src/cryptsetup.c:3585 +#, fuzzy +msgid "Option --deferred is allowed only for close command.\n" +msgstr "Valitsin --shared sallitaan vain pelkän laitteen avaukseen.\n" + +#: src/cryptsetup.c:3590 +msgid "Option --shared is allowed only for open of plain device.\n" +msgstr "Valitsin --shared sallitaan vain pelkän laitteen avaukseen.\n" + +#: src/cryptsetup.c:3595 +msgid "Option --allow-discards is allowed only for open operation.\n" +msgstr "Valitsin --allow-discards sallitaan vain open-toiminnolle.\n" + +#: src/cryptsetup.c:3600 +#, fuzzy +msgid "Option --persistent is allowed only for open operation.\n" +msgstr "Valitsin --allow-discards sallitaan vain open-toiminnolle.\n" + +#: src/cryptsetup.c:3605 +#, fuzzy +msgid "Option --serialize-memory-hard-pbkdf is allowed only for open operation.\n" +msgstr "Valitsin --allow-discards sallitaan vain open-toiminnolle.\n" + +#: src/cryptsetup.c:3610 +msgid "Option --persistent is not allowed with --test-passphrase.\n" +msgstr "" + +#: src/cryptsetup.c:3620 +#, fuzzy +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 "" +"Valitsin --key-size sallitaan vain muodoille luksFormat, open ja benchmark.\n" +"Käytä avaintiedostosta lukemisen rajoittamiseksi valitsinta --keyfile-size=(tavua)." + +#: src/cryptsetup.c:3626 +#, fuzzy +msgid "Option --integrity is allowed only for luksFormat (LUKS2).\n" +msgstr "Valitsin --align-payload sallitaan vain luksFormat-muodolle." + +#: src/cryptsetup.c:3631 +msgid "Option --integrity-no-wipe can be used only for format action with integrity extension.\n" +msgstr "" + +#: src/cryptsetup.c:3637 +#, fuzzy +msgid "Options --label and --subsystem are allowed only for luksFormat and config LUKS2 operations.\n" +msgstr "Valitsin --allow-discards sallitaan vain luksOpen-, loopaesOpen- ja create-toiminnoille .\n" + +#: src/cryptsetup.c:3643 +msgid "Option --test-passphrase is allowed only for open of LUKS and TCRYPT devices.\n" +msgstr "Valitsin --test-passphrase sallitaan vain LUKS- ja TCRYPT-laitteiden avaamiseen.\n" + +#: src/cryptsetup.c:3648 src/cryptsetup_reencrypt.c:1692 +msgid "Key size must be a multiple of 8 bits" +msgstr "Avainkoon on oltava 8-bitin monikerta" + +#: src/cryptsetup.c:3654 src/cryptsetup_reencrypt.c:1378 +#: src/cryptsetup_reencrypt.c:1697 +msgid "Key slot is invalid." +msgstr "Avainväli on virheellinen." + +#: src/cryptsetup.c:3661 +#, fuzzy +msgid "Option --key-file takes precedence over specified key file argument." +msgstr "Valitsin --key-file on ensisijainen määritellylle avaintiedostoargumentille.\n" + +#: src/cryptsetup.c:3668 src/veritysetup.c:539 src/integritysetup.c:649 +#: src/cryptsetup_reencrypt.c:1671 +msgid "Negative number for option not permitted." +msgstr "Valitsimelle ei sallita negatiivista numeroa." + +#: src/cryptsetup.c:3672 +#, fuzzy +msgid "Only one --key-file argument is allowed." +msgstr "Vain yksi --use-[u]random -valitsin on sallittu." + +#: src/cryptsetup.c:3676 src/cryptsetup_reencrypt.c:1663 +#: src/cryptsetup_reencrypt.c:1701 +msgid "Only one of --use-[u]random options is allowed." +msgstr "Vain yksi --use-[u]random -valitsin on sallittu." + +#: src/cryptsetup.c:3680 +msgid "Option --use-[u]random is allowed only for luksFormat." +msgstr "Valitsin --use-[u]random sallitaan vain luksFormat-muodolle." + +#: src/cryptsetup.c:3684 +msgid "Option --uuid is allowed only for luksFormat and luksUUID." +msgstr "Valitsin --uuid sallitaan vain luksFormat-muodolle ja luksUUID-muodolle." + +#: src/cryptsetup.c:3688 +msgid "Option --align-payload is allowed only for luksFormat." +msgstr "Valitsin --align-payload sallitaan vain luksFormat-muodolle." + +#: src/cryptsetup.c:3692 +msgid "Options --luks2-metadata-size and --opt-luks2-keyslots-size are allowed only for luksFormat with LUKS2." +msgstr "" + +#: src/cryptsetup.c:3697 +#, fuzzy +msgid "Invalid LUKS2 metadata size specification." +msgstr "Virheellinen laitekokomäärittely." + +#: src/cryptsetup.c:3701 +#, fuzzy +msgid "Invalid LUKS2 keyslots size specification." +msgstr "Virheellinen laitekokomäärittely." + +#: src/cryptsetup.c:3705 +#, fuzzy +msgid "Options --align-payload and --offset cannot be combined." +msgstr "Valitsin --align-payload sallitaan vain luksFormat-muodolle." + +#: src/cryptsetup.c:3711 +msgid "Option --skip is supported only for open of plain and loopaes devices.\n" +msgstr "Valitsinta --skip tuetaan vain plain- ja loopaes-laitteiden avaamiseen.\n" + +#: src/cryptsetup.c:3718 +#, fuzzy +msgid "Option --offset is supported only for open of plain and loopaes devices, luksFormat and device reencryption.\n" +msgstr "Valitsinta --offset tuetaan vain plain- ja loopaes-laitteiden avaamiseen.\n" + +#: src/cryptsetup.c:3724 +msgid "Option --tcrypt-hidden, --tcrypt-system or --tcrypt-backup is supported only for TCRYPT device.\n" +msgstr "Valitsinta --tcrypt-hidden, --tcrypt-system tai --tcrypt-backup tuetaan vain TCRYPT-laiteeelle.\n" + +#: src/cryptsetup.c:3729 +msgid "Option --tcrypt-hidden cannot be combined with --allow-discards.\n" +msgstr "Valitsinta --tcrypt-hidden ei voida yhdistää valitsimeen --allow-discards.\n" + +#: src/cryptsetup.c:3734 +msgid "Option --veracrypt is supported only for TCRYPT device type.\n" +msgstr "Valitsinta --veracrypt tuetaan vain TCRYPT-laiteeelle.\n" + +#: src/cryptsetup.c:3740 +msgid "Invalid argument for parameter --veracrypt-pim supplied.\n" +msgstr "" + +#: src/cryptsetup.c:3744 +#, fuzzy +msgid "Option --veracrypt-pim is supported only for VeraCrypt compatible devices.\n" +msgstr "Valitsinta --veracrypt tuetaan vain TCRYPT-laiteeelle.\n" + +#: src/cryptsetup.c:3752 +#, fuzzy +msgid "Option --veracrypt-query-pim is supported only for VeraCrypt compatible devices.\n" +msgstr "Valitsinta --veracrypt tuetaan vain TCRYPT-laiteeelle.\n" + +#: src/cryptsetup.c:3756 +msgid "The options --veracrypt-pim and --veracrypt-query-pim are mutually exclusive.\n" +msgstr "" + +#: src/cryptsetup.c:3763 +msgid "Option --priority can be only ignore/normal/prefer.\n" +msgstr "" + +#: src/cryptsetup.c:3768 +msgid "Keyslot specification is required.\n" +msgstr "" + +#: src/cryptsetup.c:3773 src/cryptsetup_reencrypt.c:1677 +msgid "Password-based key derivation function (PBKDF) can be only pbkdf2 or argon2i/argon2id.\n" +msgstr "" + +#: src/cryptsetup.c:3778 src/cryptsetup_reencrypt.c:1682 +msgid "PBKDF forced iterations cannot be combined with iteration time option.\n" +msgstr "" + +#: src/cryptsetup.c:3784 +#, fuzzy +msgid "Sector size option is not supported for this command.\n" +msgstr "Tätä toimintoa ei tueta tälle laitetyypille.\n" + +#: src/cryptsetup.c:3790 +#, fuzzy +msgid "Unsupported encryption sector size.\n" +msgstr "Uudelleensalauslokitiedoston lukeminen epäonnistui.\n" + +#: src/cryptsetup.c:3795 +msgid "Key size is required with --unbound option.\n" +msgstr "" + +#: src/cryptsetup.c:3800 +#, fuzzy +msgid "Option --unbound may be used only with luksAddKey action.\n" +msgstr "Valitsinta --new ei voi käytttää yhdessä valitsimen --decrypt kanssa." + +#: src/cryptsetup.c:3805 +#, fuzzy +msgid "Option --refresh may be used only with open action.\n" +msgstr "Valitsinta --keep-key voidaan käyttää vain valitsimen --hash tai --iter-time kanssa." + +#: src/cryptsetup.c:3816 +msgid "Cannot disable metadata locking.\n" +msgstr "" + +#: src/cryptsetup.c:3826 +#, fuzzy +msgid "Invalid max reencryption hotzone size specification." +msgstr "Virheellinen laitekokomäärittely." + +#: src/cryptsetup.c:3834 src/cryptsetup_reencrypt.c:1706 +#: src/cryptsetup_reencrypt.c:1711 +msgid "Invalid device size specification." +msgstr "Virheellinen laitekokomäärittely." + +#: src/cryptsetup.c:3837 +#, fuzzy +msgid "Maximum device reduce size is 1 GiB." +msgstr "Maksimi laitepienennyskoko on 64 mebitavua." + +#: src/cryptsetup.c:3840 src/cryptsetup_reencrypt.c:1717 +msgid "Reduce size must be multiple of 512 bytes sector." +msgstr "Pienennyskoon on oltava 512-tavuisen sektorin monikerta." + +#: src/cryptsetup.c:3845 +#, fuzzy +msgid "Invalid data size specification." +msgstr "Virheellinen laitekokomäärittely." + +#: src/cryptsetup.c:3850 +#, fuzzy +msgid "Reduce size overflow." +msgstr "Laitesiirrososoitteen ylivuoto.\n" + +#: src/cryptsetup.c:3854 +msgid "LUKS2 decryption requires option --header." +msgstr "" + +#: src/cryptsetup.c:3858 +#, fuzzy +msgid "Device size must be multiple of 512 bytes sector." +msgstr "Pienennyskoon on oltava 512-tavuisen sektorin monikerta." + +#: src/cryptsetup.c:3862 +msgid "Options --reduce-device-size and --data-size cannot be combined." +msgstr "" + +#: src/cryptsetup.c:3866 +msgid "Options --device-size and --size cannot be combined." +msgstr "" + +#: src/veritysetup.c:65 +#, fuzzy +msgid "Invalid salt string specified." +msgstr "Määritelty virheellinen satunnaisarvosiemenmerkkijono.\n" + +#: src/veritysetup.c:96 +#, fuzzy, c-format +msgid "Cannot create hash image %s for writing." +msgstr "Tiivistevedoksen %s luominen kirjoittamista varten epäonnistui.\n" + +#: src/veritysetup.c:106 +#, fuzzy, c-format +msgid "Cannot create FEC image %s for writing." +msgstr "Tiivistevedoksen %s luominen kirjoittamista varten epäonnistui.\n" + +#: src/veritysetup.c:176 +#, fuzzy +msgid "Invalid root hash string specified." +msgstr "Virheellinen root-tiivistemerkkijono määritelty.\n" + +#: src/veritysetup.c:356 +msgid " " +msgstr " " + +#: src/veritysetup.c:356 src/integritysetup.c:469 +msgid "format device" +msgstr "pohjusta laite" + +#: src/veritysetup.c:357 +msgid " " +msgstr " " + +#: src/veritysetup.c:357 +msgid "verify device" +msgstr "todenna laite" + +#: src/veritysetup.c:358 +#, fuzzy +msgid " " +msgstr " " + +#: src/veritysetup.c:360 src/integritysetup.c:472 +msgid "show active device status" +msgstr "näytä aktiivilaitteen tila" + +#: src/veritysetup.c:361 +msgid "" +msgstr "" + +#: src/veritysetup.c:361 src/integritysetup.c:473 +msgid "show on-disk information" +msgstr "näytä paikallisen levyn tiedot" + +#: src/veritysetup.c:380 +#, c-format +msgid "" +"\n" +" is the device to create under %s\n" +" is the data device\n" +" is the device containing verification data\n" +" hash of the root node on \n" +msgstr "" +"\n" +" on kohteen alle %s luotava laite\n" +" on datalaite\n" +" on todennusdataa sisältävä laite\n" +" root-solmun tiiviste kohteella \n" + +#: src/veritysetup.c:387 +#, c-format +msgid "" +"\n" +"Default compiled-in dm-verity parameters:\n" +"\tHash: %s, Data block (bytes): %u, Hash block (bytes): %u, Salt size: %u, Hash format: %u\n" +msgstr "" +"\n" +"Käännetyt dm-verity oletusparametrit:\n" +"\tTiiviste: %s, Data-lohko (tavua): %u, Tiivistelohko (tavua): %u, Satunnaislukuarvosiemenen koko: %u, Tiivistemuoto: %u\n" + +#: src/veritysetup.c:430 +msgid "Do not use verity superblock" +msgstr "Älä käytä verity-superlohkoa" + +#: src/veritysetup.c:431 +msgid "Format type (1 - normal, 0 - original Chrome OS)" +msgstr "Muototyyppi (1 - normaali, 0 - alkuperäinen Chrome OS)" + +#: src/veritysetup.c:431 +msgid "number" +msgstr "numero" + +#: src/veritysetup.c:432 +msgid "Block size on the data device" +msgstr "Data-laitteen lohkokoko" + +#: src/veritysetup.c:433 +msgid "Block size on the hash device" +msgstr "Tiivistelaitteen lohkokoko" + +#: src/veritysetup.c:434 +msgid "FEC parity bytes" +msgstr "" + +#: src/veritysetup.c:435 +msgid "The number of blocks in the data file" +msgstr "Data-tiedoston lohkojen määrä" + +#: src/veritysetup.c:435 +msgid "blocks" +msgstr "lohkoa" + +#: src/veritysetup.c:436 +msgid "Path to device with error correction data" +msgstr "" + +#: src/veritysetup.c:436 src/integritysetup.c:540 +msgid "path" +msgstr "" + +#: src/veritysetup.c:437 +msgid "Starting offset on the hash device" +msgstr "Tiivistelaitteen alkusiirrososoite" + +#: src/veritysetup.c:438 +#, fuzzy +msgid "Starting offset on the FEC device" +msgstr "Tiivistelaitteen alkusiirrososoite" + +#: src/veritysetup.c:439 +msgid "Hash algorithm" +msgstr "Tiivistealgoritmi" + +#: src/veritysetup.c:439 +msgid "string" +msgstr "merkkijono" + +#: src/veritysetup.c:440 +msgid "Salt" +msgstr "Satunnaisarvosiemenluku" + +#: src/veritysetup.c:440 +msgid "hex string" +msgstr "heksadesimaalimerkkijono" + +#: src/veritysetup.c:442 +msgid "Restart kernel if corruption is detected" +msgstr "" + +#: src/veritysetup.c:443 +msgid "Ignore corruption, log it only" +msgstr "" + +#: src/veritysetup.c:444 +#, fuzzy +msgid "Do not verify zeroed blocks" +msgstr "Älä käytä verity-superlohkoa" + +#: src/veritysetup.c:445 +msgid "Verify data block only the first time it is read" +msgstr "" + +#: src/veritysetup.c:545 +#, fuzzy +msgid "Option --ignore-corruption, --restart-on-corruption or --ignore-zero-blocks is allowed only for open operation.\n" +msgstr "Valitsin --allow-discards sallitaan vain open-toiminnolle.\n" + +#: src/veritysetup.c:550 +msgid "Option --ignore-corruption and --restart-on-corruption cannot be used together.\n" +msgstr "" + +#: src/integritysetup.c:83 src/utils_password.c:305 +#, fuzzy, c-format +msgid "Cannot read keyfile %s." +msgstr "Avaintiedoston %s lukeminen epäonnistui.\n" + +#: src/integritysetup.c:87 src/utils_password.c:310 +#, fuzzy, c-format +msgid "Cannot read %d bytes from keyfile %s." +msgstr "Ei voida lukea %d tavua avaintiedostosta %s.\n" + +#: src/integritysetup.c:250 +#, c-format +msgid "Formatted with tag size %u, internal integrity %s.\n" +msgstr "" + +#: src/integritysetup.c:469 src/integritysetup.c:473 +#, fuzzy +msgid "" +msgstr "todenna laite" + +#: src/integritysetup.c:470 +msgid " " +msgstr "" + +#: src/integritysetup.c:492 +#, fuzzy, c-format +msgid "" +"\n" +" is the device to create under %s\n" +" is the device containing data with integrity tags\n" +msgstr "" +"\n" +" on kohteen alle %s luotava laite\n" +" on datalaite\n" +" on todennusdataa sisältävä laite\n" +" root-solmun tiiviste kohteella \n" + +#: src/integritysetup.c:497 +#, fuzzy, c-format +msgid "" +"\n" +"Default compiled-in dm-integrity parameters:\n" +"\tTag size: %u bytes, Checksum algorithm: %s\n" +msgstr "" +"\n" +"Käännetyt dm-verity oletusparametrit:\n" +"\tTiiviste: %s, Data-lohko (tavua): %u, Tiivistelohko (tavua): %u, Satunnaislukuarvosiemenen koko: %u, Tiivistemuoto: %u\n" + +#: src/integritysetup.c:540 +msgid "Path to data device (if separated)" +msgstr "" + +#: src/integritysetup.c:542 +msgid "Journal size" +msgstr "" + +#: src/integritysetup.c:543 +msgid "Interleave sectors" +msgstr "" + +#: src/integritysetup.c:544 +msgid "Journal watermark" +msgstr "" + +#: src/integritysetup.c:544 +msgid "percent" +msgstr "" + +#: src/integritysetup.c:545 +msgid "Journal commit time" +msgstr "" + +#: src/integritysetup.c:545 src/integritysetup.c:547 +msgid "ms" +msgstr "" + +#: src/integritysetup.c:546 +msgid "Number of 512-byte sectors per bit (bitmap mode)." +msgstr "" + +#: src/integritysetup.c:547 +msgid "Bitmap mode flush time" +msgstr "" + +#: src/integritysetup.c:548 +msgid "Tag size (per-sector)" +msgstr "" + +#: src/integritysetup.c:549 +msgid "Sector size" +msgstr "" + +#: src/integritysetup.c:550 +msgid "Buffers size" +msgstr "" + +#: src/integritysetup.c:552 +msgid "Data integrity algorithm" +msgstr "" + +#: src/integritysetup.c:553 +#, fuzzy +msgid "The size of the data integrity key" +msgstr "Salausavaimen koko" + +#: src/integritysetup.c:554 +#, fuzzy +msgid "Read the integrity key from a file" +msgstr "Lue avain tiedostosta." + +#: src/integritysetup.c:556 +msgid "Journal integrity algorithm" +msgstr "" + +#: src/integritysetup.c:557 +#, fuzzy +msgid "The size of the journal integrity key" +msgstr "Salausavaimen koko" + +#: src/integritysetup.c:558 +#, fuzzy +msgid "Read the journal integrity key from a file" +msgstr "Lue avain tiedostosta." + +#: src/integritysetup.c:560 +msgid "Journal encryption algorithm" +msgstr "" + +#: src/integritysetup.c:561 +#, fuzzy +msgid "The size of the journal encryption key" +msgstr "Salausavaimen koko" + +#: src/integritysetup.c:562 +#, fuzzy +msgid "Read the journal encryption key from a file" +msgstr "Lue avain tiedostosta." + +#: src/integritysetup.c:565 +msgid "Recovery mode (no journal, no tag checking)" +msgstr "" + +#: src/integritysetup.c:566 +msgid "Use bitmap to track changes and disable journal for integrity device" +msgstr "" + +#: src/integritysetup.c:567 +msgid "Recalculate initial tags automatically." +msgstr "" + +#: src/integritysetup.c:640 +#, fuzzy +msgid "Option --integrity-recalculate can be used only for open action." +msgstr "Valitsin --allow-discards sallitaan vain open-toiminnolle.\n" + +#: src/integritysetup.c:655 +msgid "Options --journal-size, --interleave-sectors, --sector-size, --tag-size and --no-wipe can be used only for format action.\n" +msgstr "" + +#: src/integritysetup.c:661 +#, fuzzy +msgid "Invalid journal size specification." +msgstr "Virheellinen laitekokomäärittely." + +#: src/integritysetup.c:666 +msgid "Both key file and key size options must be specified." +msgstr "" + +#: src/integritysetup.c:669 +msgid "Integrity algorithm must be specified if integrity key is used." +msgstr "" + +#: src/integritysetup.c:674 +msgid "Both journal integrity key file and key size options must be specified." +msgstr "" + +#: src/integritysetup.c:677 +msgid "Journal integrity algorithm must be specified if journal integrity key is used." +msgstr "" + +#: src/integritysetup.c:682 +msgid "Both journal encryption key file and key size options must be specified." +msgstr "" + +#: src/integritysetup.c:685 +msgid "Journal encryption algorithm must be specified if journal encryption key is used." +msgstr "" + +#: src/integritysetup.c:689 +msgid "Recovery and bitmap mode options are mutually exclusive." +msgstr "" + +#: src/integritysetup.c:693 +msgid "Journal options cannot be used in bitmap mode." +msgstr "" + +#: src/integritysetup.c:697 +msgid "Bitmap options can be used only in bitmap mode." +msgstr "" + +#: src/cryptsetup_reencrypt.c:172 +#, fuzzy +msgid "Reencryption already in-progress." +msgstr "Uudelleensalauslohkon koko" + +#: src/cryptsetup_reencrypt.c:201 +#, fuzzy, c-format +msgid "Cannot exclusively open %s, device in use." +msgstr "Kohteen %s avaaminen eksklusiivisesti epäonnistui, laite on käytössä.\n" + +#: src/cryptsetup_reencrypt.c:215 src/cryptsetup_reencrypt.c:1127 +#, fuzzy +msgid "Allocation of aligned memory failed." +msgstr "Tasatun muistin varaaminen epäonnistui.\n" + +#: src/cryptsetup_reencrypt.c:222 +#, fuzzy, c-format +msgid "Cannot read device %s." +msgstr "Laitteen %s lukeminen epäonnistui.\n" + +#: src/cryptsetup_reencrypt.c:233 +#, fuzzy, c-format +msgid "Marking LUKS1 device %s unusable." +msgstr "Merkitään LUKS-laite %s käyttökelvottomaksi.\n" + +#: src/cryptsetup_reencrypt.c:237 +#, c-format +msgid "Setting LUKS2 offline reencrypt flag on device %s." +msgstr "" + +#: src/cryptsetup_reencrypt.c:254 +#, fuzzy, c-format +msgid "Cannot write device %s." +msgstr "Laitteelle %s kirjoittaminen epäonnistui.\n" + +#: src/cryptsetup_reencrypt.c:302 +#, fuzzy +msgid "Cannot write reencryption log file." +msgstr "Uudelleensalauslokitiedoston kirjoittaminen epäonnistui.\n" + +#: src/cryptsetup_reencrypt.c:358 +#, fuzzy +msgid "Cannot read reencryption log file." +msgstr "Uudelleensalauslokitiedoston lukeminen epäonnistui.\n" + +#: src/cryptsetup_reencrypt.c:396 +#, c-format +msgid "Log file %s exists, resuming reencryption.\n" +msgstr "Lokitiedosto %s on olemassa, aloitetaan salaus uudelleen.\n" + +#: src/cryptsetup_reencrypt.c:445 +#, fuzzy +msgid "Activating temporary device using old LUKS header." +msgstr "Aktivoidaan tilapäinen laite käyttäen vanhaa LUKS-otsaketta.\n" + +#: src/cryptsetup_reencrypt.c:455 +#, fuzzy +msgid "Activating temporary device using new LUKS header." +msgstr "Aktivoidaan tilapäinen laite käyttäen uutta LUKS-otsaketta.\n" + +#: src/cryptsetup_reencrypt.c:465 +#, fuzzy +msgid "Activation of temporary devices failed." +msgstr "Tilapäisten laitteiden aktivoiminen epäonnistui.\n" + +#: src/cryptsetup_reencrypt.c:551 +#, fuzzy +msgid "Failed to set data offset." +msgstr "Avaintiedoston kutsuminen stat-funktiolla epäonnistui.\n" + +#: src/cryptsetup_reencrypt.c:557 +#, fuzzy +msgid "Failed to set metadata size." +msgstr "Avaintiedoston kutsuminen stat-funktiolla epäonnistui.\n" + +#: src/cryptsetup_reencrypt.c:565 +#, fuzzy, c-format +msgid "New LUKS header for device %s created." +msgstr "Luotiin uusi LUKS-otsake laitteelle %s.\n" + +#: src/cryptsetup_reencrypt.c:625 +#, c-format +msgid "This version of cryptsetup-reencrypt can't handle new internal token type %s." +msgstr "" + +#: src/cryptsetup_reencrypt.c:647 +msgid "Failed to read activation flags from backup header." +msgstr "" + +#: src/cryptsetup_reencrypt.c:651 +#, fuzzy +msgid "Failed to write activation flags to new header." +msgstr "Avainsäiliöön kirjoittaminen epäonnistui.\n" + +#: src/cryptsetup_reencrypt.c:655 src/cryptsetup_reencrypt.c:659 +#, fuzzy +msgid "Failed to read requirements from backup header." +msgstr "Avainsäiliöstä lukeminen epäonnistui.\n" + +#: src/cryptsetup_reencrypt.c:697 +#, fuzzy, c-format +msgid "%s header backup of device %s created." +msgstr "Laitteen %s LUKS-otsakkeen varmuuskopio luotu.\n" + +#: src/cryptsetup_reencrypt.c:760 +#, fuzzy +msgid "Creation of LUKS backup headers failed." +msgstr "LUKS-varmuuskopio-otsakkeiden luominen epäonnistui.\n" + +#: src/cryptsetup_reencrypt.c:893 +#, fuzzy, c-format +msgid "Cannot restore %s header on device %s." +msgstr "LUKS-otsakkeen palautus laitteeseen %s epäonnistui.\n" + +#: src/cryptsetup_reencrypt.c:895 +#, fuzzy, c-format +msgid "%s header on device %s restored." +msgstr "LUKS-otsake palautettu laitteessa %s.\n" + +#: src/cryptsetup_reencrypt.c:1099 src/cryptsetup_reencrypt.c:1105 +#, fuzzy +msgid "Cannot open temporary LUKS device." +msgstr "Tilapäisen LUKS-laitteen avaaminen epäonnistui.\n" + +#: src/cryptsetup_reencrypt.c:1110 src/cryptsetup_reencrypt.c:1115 +#, fuzzy +msgid "Cannot get device size." +msgstr "Laitekoon hakeminen epäonnistui.\n" + +#: src/cryptsetup_reencrypt.c:1150 +#, fuzzy +msgid "IO error during reencryption." +msgstr "Siirräntävirhe uudelleensalauksen aikana.\n" + +#: src/cryptsetup_reencrypt.c:1181 +#, fuzzy +msgid "Provided UUID is invalid." +msgstr "Avainväli on virheellinen." + +#: src/cryptsetup_reencrypt.c:1407 +#, fuzzy +msgid "Cannot open reencryption log file." +msgstr "Uudelleensalauslokitiedoston avaus epäonnistui.\n" + +#: src/cryptsetup_reencrypt.c:1413 +msgid "No decryption in progress, provided UUID can be used only to resume suspended decryption process." +msgstr "" + +#: src/cryptsetup_reencrypt.c:1488 +#, c-format +msgid "Changed pbkdf parameters in keyslot %i." +msgstr "" + +#: src/cryptsetup_reencrypt.c:1600 +msgid "Reencryption block size" +msgstr "Uudelleensalauslohkon koko" + +#: src/cryptsetup_reencrypt.c:1600 +msgid "MiB" +msgstr "Mebitavua" + +#: src/cryptsetup_reencrypt.c:1604 +#, fuzzy +msgid "Do not change key, no data area reencryption" +msgstr "Älä vaihda avainta, yhtään data-aluetta ei ole salattu uudelleen." + +#: src/cryptsetup_reencrypt.c:1606 +#, fuzzy +msgid "Read new volume (master) key from file" +msgstr "Lue taltion (pää)avain tiedostosta." + +#: src/cryptsetup_reencrypt.c:1607 +msgid "PBKDF2 iteration time for LUKS (in ms)" +msgstr "PBKDF2-iterointiaika kohteelle LUKS (millisekunneissa)" + +#: src/cryptsetup_reencrypt.c:1613 +#, fuzzy +msgid "Use direct-io when accessing devices" +msgstr "Käytä direct-io -siirräntää laitteisiin yhdistettäessä." + +#: src/cryptsetup_reencrypt.c:1614 +#, fuzzy +msgid "Use fsync after each block" +msgstr "Käytä fsync-komentoa jokaisen lohkon jälkeen." + +#: src/cryptsetup_reencrypt.c:1615 +#, fuzzy +msgid "Update log file after every block" +msgstr "Päivitä lokitiedosto jokaisen lohkon jälkeen." + +#: src/cryptsetup_reencrypt.c:1616 +#, fuzzy +msgid "Use only this slot (others will be disabled)" +msgstr "Käytä vain tätä väliä (muut ovat pois käytöstä)." + +#: src/cryptsetup_reencrypt.c:1621 +#, fuzzy +msgid "Create new header on not encrypted device" +msgstr "Luo uusi otsake ei-salattuun laitteeseen." + +#: src/cryptsetup_reencrypt.c:1622 +#, fuzzy +msgid "Permanently decrypt device (remove encryption)" +msgstr "Poista laitteen salaus pysyvästi (poista salaus)" + +#: src/cryptsetup_reencrypt.c:1623 +#, fuzzy +msgid "The UUID used to resume decryption" +msgstr "Salausavaimen koko" + +#: src/cryptsetup_reencrypt.c:1624 +#, fuzzy +msgid "Type of LUKS metadata: luks1, luks2" +msgstr "Laitemetatietojen tyyppi: luks, plain, loopaes, tcrypt." + +#: src/cryptsetup_reencrypt.c:1643 +msgid "[OPTION...] " +msgstr "[VALITSIN...] " + +#: src/cryptsetup_reencrypt.c:1651 +#, fuzzy, c-format +msgid "Reencryption will change: %s%s%s%s%s%s." +msgstr "Uudelleensalauas muuttuu: taltio key%s%s%s%s.\n" + +#: src/cryptsetup_reencrypt.c:1652 +msgid "volume key" +msgstr "" + +#: src/cryptsetup_reencrypt.c:1654 +#, fuzzy +msgid "set hash to " +msgstr ", aseta tiivisteeksi " + +#: src/cryptsetup_reencrypt.c:1655 +msgid ", set cipher to " +msgstr ", aseta salaukseksi " + +#: src/cryptsetup_reencrypt.c:1659 +msgid "Argument required." +msgstr "Argumentti vaadittu." + +#: src/cryptsetup_reencrypt.c:1687 +msgid "Only values between 1 MiB and 64 MiB allowed for reencryption block size." +msgstr "Vain arvot välillä 1 mebitavua ja 64 mebitavua ovat sallittuja uudelleensalauslohkokokoja." + +#: src/cryptsetup_reencrypt.c:1714 +msgid "Maximum device reduce size is 64 MiB." +msgstr "Maksimi laitepienennyskoko on 64 mebitavua." + +#: src/cryptsetup_reencrypt.c:1721 +#, fuzzy +msgid "Option --new must be used together with --reduce-device-size or --header." +msgstr "Valitsinta --new on käytettävä yhdessä valitsimen --reduce-device-size kanssa." + +#: src/cryptsetup_reencrypt.c:1725 +#, fuzzy +msgid "Option --keep-key can be used only with --hash, --iter-time or --pbkdf-force-iterations." +msgstr "Valitsinta --keep-key voidaan käyttää vain valitsimen --hash tai --iter-time kanssa." + +#: src/cryptsetup_reencrypt.c:1729 +msgid "Option --new cannot be used together with --decrypt." +msgstr "Valitsinta --new ei voi käytttää yhdessä valitsimen --decrypt kanssa." + +#: src/cryptsetup_reencrypt.c:1733 +msgid "Option --decrypt is incompatible with specified parameters." +msgstr "Valitsin --decrypt on yhteensopimaton määriteltyjen parametrien kanssa." + +#: src/cryptsetup_reencrypt.c:1737 +#, fuzzy +msgid "Option --uuid is allowed only together with --decrypt." +msgstr "Valitsinta --new ei voi käytttää yhdessä valitsimen --decrypt kanssa." + +#: src/cryptsetup_reencrypt.c:1741 +msgid "Invalid luks type. Use one of these: 'luks', 'luks1' or 'luks2'." +msgstr "" + +#: src/utils_tools.c:151 +#, fuzzy +msgid "Error reading response from terminal." +msgstr "Virhe luettaessa vastausta pääteikkunasta.\n" + +#: src/utils_tools.c:186 +msgid "Command successful.\n" +msgstr "Komento onnistui.\n" + +#: src/utils_tools.c:194 +msgid "wrong or missing parameters" +msgstr "" + +#: src/utils_tools.c:196 +#, fuzzy +msgid "no permission or bad passphrase" +msgstr "Kirjoita mikä tahansa salasanalause: " + +#: src/utils_tools.c:198 +#, fuzzy +msgid "out of memory" +msgstr "Muistin lukituksen avaus epäonnistui.\n" + +#: src/utils_tools.c:200 +msgid "wrong device or file specified" +msgstr "" + +#: src/utils_tools.c:202 +#, fuzzy +msgid "device already exists or device is busy" +msgstr "Laite %s on jo olemassa.\n" + +#: src/utils_tools.c:204 +msgid "unknown error" +msgstr "" + +#: src/utils_tools.c:206 +#, fuzzy, c-format +msgid "Command failed with code %i (%s).\n" +msgstr "Komento epäonnistui koodilla %i" + +#: src/utils_tools.c:283 +#, fuzzy, c-format +msgid "Key slot %i created." +msgstr "Avaivälin %d vaihtui.\n" + +#: src/utils_tools.c:285 +#, fuzzy, c-format +msgid "Key slot %i unlocked." +msgstr "Avaivälin %d lukitus avattu.\n" + +#: src/utils_tools.c:287 +#, fuzzy, c-format +msgid "Key slot %i removed." +msgstr "Avaivälin %d lukitus avattu.\n" + +#: src/utils_tools.c:296 +#, c-format +msgid "Token %i created." +msgstr "" + +#: src/utils_tools.c:298 +#, c-format +msgid "Token %i removed." +msgstr "" + +#: src/utils_tools.c:464 +msgid "" +"\n" +"Wipe interrupted." +msgstr "" + +#: src/utils_tools.c:475 +#, c-format +msgid "WARNING: Device %s already contains a '%s' partition signature.\n" +msgstr "" + +#: src/utils_tools.c:483 +#, c-format +msgid "WARNING: Device %s already contains a '%s' superblock signature.\n" +msgstr "" + +#: src/utils_tools.c:504 src/utils_tools.c:568 +#, fuzzy +msgid "Failed to initialize device signature probes." +msgstr "Laitekuvaajahakemiston hankkiminen epäonnistui." + +#: src/utils_tools.c:548 +#, fuzzy, c-format +msgid "Failed to stat device %s." +msgstr "Avaintiedoston kutsuminen stat-funktiolla epäonnistui.\n" + +#: src/utils_tools.c:561 +#, c-format +msgid "Device %s is in use. Can not proceed with format operation." +msgstr "" + +#: src/utils_tools.c:563 +#, c-format +msgid "Failed to open file %s in read/write mode." +msgstr "" + +#: src/utils_tools.c:577 +#, c-format +msgid "Existing '%s' partition signature (offset: % bytes) on device %s will be wiped." +msgstr "" + +#: src/utils_tools.c:580 +#, c-format +msgid "Existing '%s' superblock signature (offset: % bytes) on device %s will be wiped." +msgstr "" + +#: src/utils_tools.c:583 +#, fuzzy +msgid "Failed to wipe device signature." +msgstr "Avainsäiliöön kirjoittaminen epäonnistui.\n" + +#: src/utils_tools.c:590 +#, fuzzy, c-format +msgid "Failed to probe device %s for a signature." +msgstr "Laitekuvaajahakemiston hankkiminen epäonnistui." + +#: src/utils_tools.c:629 +#, fuzzy +msgid "" +"\n" +"Reencryption interrupted." +msgstr "Uudelleensalauslohkon koko" + +#: src/utils_password.c:43 src/utils_password.c:75 +#, fuzzy, c-format +msgid "Cannot check password quality: %s" +msgstr "Salasanan laatutarkistus epäonnistui: %s\n" + +#: src/utils_password.c:51 +#, fuzzy, c-format +msgid "" +"Password quality check failed:\n" +" %s" +msgstr "" +"Salasanan laatutarkistus epäonnistui:\n" +" %s\n" + +#: src/utils_password.c:83 +#, fuzzy, c-format +msgid "Password quality check failed: Bad passphrase (%s)" +msgstr "Salasanan laatutarkistus epäonnistui: Virheellinen salasana (%s)\n" + +#: src/utils_password.c:193 src/utils_password.c:208 +#, fuzzy +msgid "Error reading passphrase from terminal." +msgstr "Virhe luettaessa salasanalausetta pääteikkunasta.\n" + +#: src/utils_password.c:206 +msgid "Verify passphrase: " +msgstr "Todenna salasanalause: " + +#: src/utils_password.c:213 +#, fuzzy +msgid "Passphrases do not match." +msgstr "Salasanalauseet eivät täsmää.\n" + +#: src/utils_password.c:250 +#, fuzzy +msgid "Cannot use offset with terminal input." +msgstr "Siirrososoitteen käyttö pääteikkunasyötteellä epäonnistui.\n" + +#: src/utils_password.c:253 +#, c-format +msgid "Enter passphrase: " +msgstr "Kirjoita salasanalause: " + +#: src/utils_password.c:256 +#, c-format +msgid "Enter passphrase for %s: " +msgstr "Kirjoita salasanalause kohteelle %s: " + +#: src/utils_password.c:287 +#, fuzzy +msgid "No key available with this passphrase." +msgstr "Tälle salasanalauseelle ei ole saatavissa avainta.\n" + +#: src/utils_password.c:289 +msgid "No usable keyslot is available." +msgstr "" + +#: src/utils_password.c:328 +#, fuzzy, c-format +msgid "Cannot open keyfile %s for write." +msgstr "Tiedoston %s avaus epäonnistui.\n" + +#: src/utils_password.c:335 +#, fuzzy, c-format +msgid "Cannot write to keyfile %s." +msgstr "Avaintiedoston %s lukeminen epäonnistui.\n" + +#: src/utils_luks2.c:47 +#, fuzzy, c-format +msgid "Failed to open file %s in read-only mode." +msgstr "Avaintiedoston avaus epäonnistui.\n" + +#: src/utils_luks2.c:60 +msgid "Provide valid LUKS2 token JSON:\n" +msgstr "" + +#: src/utils_luks2.c:67 +#, fuzzy +msgid "Failed to read JSON file." +msgstr "Avaintiedoston avaus epäonnistui.\n" + +#: src/utils_luks2.c:72 +#, fuzzy +msgid "" +"\n" +"Read interrupted." +msgstr "VERITY-otsake rikkinäinen.\n" + +#: src/utils_luks2.c:113 +#, fuzzy, c-format +msgid "Failed to open file %s in write mode." +msgstr "Avaintiedoston avaus epäonnistui.\n" + +#: src/utils_luks2.c:122 +msgid "" +"\n" +"Write interrupted." +msgstr "" + +#: src/utils_luks2.c:126 +#, fuzzy +msgid "Failed to write JSON file." +msgstr "Avaintiedoston avaus epäonnistui.\n" + +#~ msgid "Replaced with key slot %d.\n" +#~ msgstr "Korvattiin avainvälillä %d.\n" + +#~ msgid "Function not available in FIPS mode.\n" +#~ msgstr "Funktio ei ole käytettävissä FIPS-tilassa.\n" + +#~ msgid "Cannot find a free loopback device.\n" +#~ msgstr "Vapaan silmukkalaiteen löytäminen epäonnistui.\n" + +#~ msgid "Too many tree levels for verity volume.\n" +#~ msgstr "Verity-taltiolla liian monta puutasoa.\n" + +#~ msgid "memory allocation error in action_luksFormat" +#~ msgstr "muistivarausvirhe kohteessa action_luksFormat" + +#~ msgid "Key %d not active. Can't wipe.\n" +#~ msgstr "Avain %d ei ole käytössä. Ei voida pyyhkiä pois.\n" + +#~ msgid " " +#~ msgstr " " + +#~ msgid "create active device" +#~ msgstr "luo aktiivilaite" + +#~ msgid "remove (deactivate) device" +#~ msgstr "poista (deaktivoi) laite" + +#~ msgid "Cannot open device %s\n" +#~ msgstr "Laitteen %s avaus epäonnistui.\n" + +#~ msgid "Marking LUKS device %s usable.\n" +#~ msgstr "Merkitään LUKS-laite %s käyttökelpoiseksi.\n" + +#~ msgid "Activated keyslot %i.\n" +#~ msgstr "Aktivoitiin avainväli %i.\n" + +#~ msgid "Progress: %5.1f%%, ETA %02llu:%02llu, %4llu MiB written, speed %5.1f MiB/s%s" +#~ msgstr "Eteneminen: %5.1f%%, ETA %02llu:%02llu, %4llu Mebitavua kirjoitettu, nopeus %5.1f Mebitavua/s%s" + +#~ msgid "Interrupted by a signal.\n" +#~ msgstr "Signaalin keskeyttämä.\n" + +#~ msgid "WARNING: this is experimental code, it can completely break your data.\n" +#~ msgstr "VAROITUS: tämä on kokeellista koodia, se voi rikkoa tietosi kokonaan.\n" + +#~ msgid "FIPS checksum verification failed.\n" +#~ msgstr "FIPS-tarkistussummavarmennus epäonnistui.\n" + +#~ msgid "WARNING: device %s is a partition, for TCRYPT system encryption you usually need to use whole block device path.\n" +#~ msgstr "VAROITUS: laite %s on osio, TCRYPT-järjestelmäsalaukselle tarvitaan normaalisti koko lohkolaitepolun käyttö.\n" + +#~ msgid "Kernel doesn't support plain64 IV.\n" +#~ msgstr "Käyttöjärjestelmäydin ei tule plain64 IV.\n" + +#~ msgid "Enter LUKS passphrase: " +#~ msgstr "Kirjoita LUKS-salasanalause: " + +#~ msgid "Enter new LUKS passphrase: " +#~ msgstr "Kirjoita uusi LUKS-salasanalause: " + +#~ msgid "Enter any LUKS passphrase: " +#~ msgstr "Kirjoita mikä tahansa LUKS-salasanalause: " + +#~ msgid "Cannot check passsword quality: %s\n" +#~ msgstr "Salasanan laatutarkistus epäonnistui: %s\n" + +#~ msgid "Backup file %s doesn't exist.\n" +#~ msgstr "Varmuuskopiotiedostoa %s ei ole olemassa.\n" + +#~ msgid " " +#~ msgstr " " + +#~ msgid "create device" +#~ msgstr "luo laite" + +#~ msgid "remove device" +#~ msgstr "poista laite" + +#~ msgid "remove LUKS mapping" +#~ msgstr "poista LUKS-kuvaus" + +#~ msgid "open loop-AES device as mapping " +#~ msgstr "avaa loop-AES -laitteen kuvauksena " + +#~ msgid "remove loop-AES mapping" +#~ msgstr "poista loop-AES -kuvaus" + +#~ msgid "Cannot open device %s for %s%s access.\n" +#~ msgstr "Ei voida avata laitetta %s kohteeseen %s%s pääsyä varten.\n" + +#~ msgid "exclusive " +#~ msgstr "yksinomainen " + +#~ msgid "writable" +#~ msgstr "kirjoitettava" + +#~ msgid "read-only" +#~ msgstr "kirjoitussuojattu" + +#~ msgid "WARNING!!! Possibly insecure memory. Are you root?\n" +#~ msgstr "VAROITUS!!! Mahdollisesti turvaton muisti. Oletko pääkäyttäjä?\n" + +#~ msgid "Unable to obtain sector size for %s" +#~ msgstr "Ei kyetä samaan sektorikokoa kohteelle %s" + +#~ msgid "Cannot use device %s (crypt segments overlaps or in use by another device).\n" +#~ msgstr "Ei voida käyttää laitetta %s (salatut segmentit ovat päällekkäin tai toisen laitteen käyttämiä).\n" + +#~ msgid "Block mode XTS is available since kernel 2.6.24.\n" +#~ msgstr "Lohkotila XTS on käytetettävissä käyttöjärjestelmäytimestä 2.6.24 alkaen.\n" + +#~ msgid "Key size in LRW mode must be 256 or 512 bits.\n" +#~ msgstr "Avainkoon on oltava LRW-tilassa 256 tai 512 bittiä.\n" + +#~ msgid "Block mode LRW is available since kernel 2.6.20.\n" +#~ msgstr "Lohkotila LRW on käytettävissä käyttöjärjestelmäytimestä 2.6.20 alkaen.\n" + +#~ msgid "Negative keyfile size not permitted.\n" +#~ msgstr "Negatiivinen avaintiedostokoko ei ole sallittu.\n" + +#~ msgid "Warning: exhausting read requested, but key file is not a regular file, function might never return.\n" +#~ msgstr "Varoitus: uuvuttava luku pyydetty, mutta avaintiedosto ei ole tavallinen tiedosto, funktio ei ehkä koskaan palaa.\n" + +#~ msgid "Cannot find compatible device-mapper kernel modules.\n" +#~ msgstr "Ei voida löytää yhteensopivia laitekuvaimen käyttöjärjestelmäydinmoduuleja.\n" + +#~ msgid "Cannot open device: %s\n" +#~ msgstr "Ei voida avata laitetta: %s\n" + +#~ msgid "BLKROGET failed on device %s.\n" +#~ msgstr "BLKROGET epäonnistui laitteessa %s.\n" + +#~ msgid "BLKGETSIZE failed on device %s.\n" +#~ msgstr "BLKGETSIZE epäonnistui laitteessa %s.\n" + +#~ msgid "identical to luksKillSlot - DEPRECATED - see man page" +#~ msgstr "identtinen kohteelle luksKillSlot - VANHENTUNUT - katso man-sivua" + +#~ msgid "modify active device - DEPRECATED - see man page" +#~ msgstr "muokkaa aktiivista laitetta - VANHENTUNUT - katso man-sivua" + +#~ msgid "" +#~ "The reload action is deprecated. Please use \"dmsetup reload\" in case you really need this functionality.\n" +#~ "WARNING: do not use reload to touch LUKS devices. If that is the case, hit Ctrl-C now.\n" +#~ msgstr "" +#~ "Uudelleenlataustoiminto on vanhentunut. Käytä ”dmsetup reload” siinä tapauksessa, että todella tarvitset tätä toiminnallisuutta.\n" +#~ "VAROITUS: älä käytä uudelleenlatausta koskettamaan LUKS-laitteita. Jos näin on laita, paina nyt näppäimiä Ctrl-C.\n" + +#~ msgid "Obsolete option --non-exclusive is ignored.\n" +#~ msgstr "Vanhentunut valitsin --non-exclusive ohitetaan.\n" + +#~ msgid "Read the key from a file (can be /dev/random)" +#~ msgstr "Lue avain tiedostosta (voi olla /dev/random)" + +#~ msgid "(Obsoleted, see man page.)" +#~ msgstr "(Vanhentunut, katso man-sivu.)" + +#~ msgid "%s is not LUKS device.\n" +#~ msgstr "%s ei ole LUKS-laite.\n" + +#~ msgid "Unknown crypto device type %s requesed.\n" +#~ msgstr "Tuntematon salauslaitetyyppi %s pyydetty.\n" + +#~ msgid "Limits to read from keyfile" +#~ msgstr "Avaintiedostosta luettavat rajat" diff --git a/po/fr.gmo b/po/fr.gmo new file mode 100644 index 0000000000000000000000000000000000000000..f9056c5600ef1398957ad77bd5d5b0048fe33ab6 GIT binary patch literal 107046 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, 2009. +# Nicolas Provost , 2011. +# Frédéric Marchal , 2019. +msgid "" +msgstr "" +"Project-Id-Version: cryptsetup 2.2.2-rc0\n" +"Report-Msgid-Bugs-To: dm-crypt@saout.de\n" +"POT-Creation-Date: 2019-11-01 09:04+0100\n" +"PO-Revision-Date: 2019-10-21 17:27+0200\n" +"Last-Translator: Frédéric Marchal \n" +"Language-Team: French \n" +"Language: fr\n" +"MIME-Version: 1.0\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" +"Plural-Forms: nplurals=2; plural=(n >= 2);\n" + +#: lib/libdevmapper.c:384 +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:387 +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:1082 +msgid "Requested deferred flag is not supported." +msgstr "Le fanion différé demandé n'est pas supporté." + +#: lib/libdevmapper.c:1149 +#, 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:1463 +msgid "Unknown dm target type." +msgstr "Type de cible dm inconnu." + +#: lib/libdevmapper.c:1565 lib/libdevmapper.c:1617 +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:1572 +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:1576 +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:1580 +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:1582 +msgid "Requested sector_size option is not supported." +msgstr "L'option sector_size demandée n'est pas supportée." + +#: lib/libdevmapper.c:1587 +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:1591 +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:1620 +msgid "Discard/TRIM is not supported." +msgstr "Discard/TRIM n'est pas supporté." + +#: lib/libdevmapper.c:2511 +#, c-format +msgid "Failed to query dm-%s segment." +msgstr "Échec lors de l'interrogation du segment dm-%s." + +#: lib/random.c:80 +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" +msgstr "" +"Le système a manqué d'entropie lors de la génération de la clef de volume.\n" +"Veuillez remuer la souris ou taper du texte dans une autre fenêtre pour générer des événements aléatoires.\n" + +#: lib/random.c:84 +#, c-format +msgid "Generating key (%d%% done).\n" +msgstr "Génération de la clef (%d%% effectués).\n" + +#: lib/random.c:170 +msgid "Running in FIPS mode." +msgstr "Fonctionne en mode FIPS." + +#: lib/random.c:176 +msgid "Fatal error during RNG initialisation." +msgstr "Erreur fatale d'initialisation RNG." + +#: lib/random.c:213 +msgid "Unknown RNG quality requested." +msgstr "La qualité du générateur aléatoire RNG demandé est inconnue." + +#: lib/random.c:218 +msgid "Error reading from RNG." +msgstr "Erreur en lecture du générateur aléatoire RNG " + +#: lib/setup.c:223 +msgid "Cannot initialize crypto RNG backend." +msgstr "Impossible d'initialiser le moteur aléatoire RNG pour le chiffrement." + +#: lib/setup.c:229 +msgid "Cannot initialize crypto backend." +msgstr "Impossible d'initialiser le moteur de chiffrement." + +#: lib/setup.c:260 lib/setup.c:1990 lib/verity/verity.c:120 +#, c-format +msgid "Hash algorithm %s not supported." +msgstr "L'algorithme de hachage %s n'est pas supporté." + +#: lib/setup.c:263 lib/loopaes/loopaes.c:90 +#, c-format +msgid "Key processing error (using hash %s)." +msgstr "Erreur de traitement de clé (valeur hachage %s)." + +#: lib/setup.c:324 lib/setup.c:351 +msgid "Cannot determine device type. Incompatible activation of device?" +msgstr "Impossible de déterminer le type de périphérique. Activation du périphérique incompatible ?" + +#: lib/setup.c:330 lib/setup.c:2985 +msgid "This operation is supported only for LUKS device." +msgstr "Cette opération n'est possible que pour les périphériques LUKS." + +#: lib/setup.c:357 +msgid "This operation is supported only for LUKS2 device." +msgstr "Cette opération n'est possible que pour les périphériques LUKS2." + +#: lib/setup.c:412 lib/luks2/luks2_reencrypt.c:2345 +msgid "All key slots full." +msgstr "Tous les emplacements de clés sont utilisés." + +#: lib/setup.c:423 +#, c-format +msgid "Key slot %d is invalid, please select between 0 and %d." +msgstr "L'emplacement de clé %d n'est pas valide, merci d'en choisir un entre 0 et %d." + +#: lib/setup.c:429 +#, c-format +msgid "Key slot %d is full, please select another one." +msgstr "L'emplacement de clé %d est utilisé, merci d'en sélectionner un autre." + +#: lib/setup.c:514 lib/setup.c:2759 +msgid "Device size is not aligned to device logical block size." +msgstr "La taille du périphérique n'est pas alignée avec la taille d'un bloc logique du périphérique." + +#: lib/setup.c:610 +#, c-format +msgid "Header detected but device %s is too small." +msgstr "En-tête détecté mais le périphérique %s est trop petit." + +#: lib/setup.c:647 +msgid "This operation is not supported for this device type." +msgstr "Cette opération n'est pas supportée pour ce type de périphérique." + +#: lib/setup.c:652 +msgid "Illegal operation with reencryption in-progress." +msgstr "Opération illégale avec une re-chiffrement en cours." + +#: lib/setup.c:821 lib/luks1/keymanage.c:476 +#, c-format +msgid "Unsupported LUKS version %d." +msgstr "La version %d de LUKS n'est pas supportée." + +#: lib/setup.c:838 lib/setup.c:1483 lib/setup.c:1903 +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:1373 lib/setup.c:2479 lib/setup.c:2551 lib/setup.c:2563 +#: lib/setup.c:2712 lib/setup.c:4310 +#, c-format +msgid "Device %s is not active." +msgstr "Le périphérique %s n'est pas activé." + +#: lib/setup.c:1390 +#, c-format +msgid "Underlying device for crypt device %s disappeared." +msgstr "Le périphérique sous-jacent pour le périphérique chiffré %s a disparu." + +#: lib/setup.c:1468 +msgid "Invalid plain crypt parameters." +msgstr "Paramètres de chiffrement non valides." + +#: lib/setup.c:1473 lib/setup.c:1893 src/integritysetup.c:73 +msgid "Invalid key size." +msgstr "La taille de la clé n'est pas valide." + +#: lib/setup.c:1478 lib/setup.c:1898 lib/setup.c:2100 +msgid "UUID is not supported for this crypt type." +msgstr "le UUID n'est pas supporté avec ce type de chiffrement." + +#: lib/setup.c:1493 lib/setup.c:1683 lib/luks2/luks2_reencrypt.c:2308 +#: src/cryptsetup.c:1169 +msgid "Unsupported encryption sector size." +msgstr "Taille de secteur de chiffrement non supportée." + +#: lib/setup.c:1501 lib/setup.c:1808 lib/setup.c:2753 +msgid "Device size is not aligned to requested sector size." +msgstr "La taille du périphérique n'est pas alignée avec la taille de secteur demandée." + +#: lib/setup.c:1552 lib/setup.c:1671 +msgid "Can't format LUKS without device." +msgstr "Impossible de formater en LUKS sans périphérique." + +#: lib/setup.c:1558 lib/setup.c:1677 +msgid "Requested data alignment is not compatible with data offset." +msgstr "L'alignement de données demandé n'est pas compatible avec le décalage des données." + +#: lib/setup.c:1626 lib/setup.c:1795 +msgid "WARNING: Data offset is outside of currently available data device.\n" +msgstr "AVERTISSEMENT: L'offset des données est en dehors du périphérique de données actuellement disponible.\n" + +#: lib/setup.c:1636 lib/setup.c:1823 lib/setup.c:1844 lib/setup.c:2112 +#, c-format +msgid "Cannot wipe header on device %s." +msgstr "Impossible d'effacer l'en-tête du périphérique %s." + +#: lib/setup.c:1688 +msgid "WARNING: The device activation will fail, dm-crypt is missing support for requested encryption sector size.\n" +msgstr "AVERTISSEMENT: L'activation du périphérique va échouer, dm-crypt ne supporte pas la taille de secteur de chiffrement demandée.\n" + +#: lib/setup.c:1710 +msgid "Volume key is too small for encryption with integrity extensions." +msgstr "La clé de volume est trop petite pour chiffrer avec les extensions d'intégrité." + +#: lib/setup.c:1765 +#, c-format +msgid "Cipher %s-%s (key size %zd bits) is not available." +msgstr "Le chiffrement %s-%s (clé de %zd bits) n'est pas disponible." + +#: lib/setup.c:1798 +#, c-format +msgid "WARNING: LUKS2 metadata size changed to % bytes.\n" +msgstr "ATTENTION: La taille des métadonnées LUKS2 est devenue % octets.\n" + +#: lib/setup.c:1802 +#, c-format +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:1826 lib/utils_device.c:829 lib/luks1/keyencryption.c:256 +#: lib/luks2/luks2_reencrypt.c:2356 lib/luks2/luks2_reencrypt.c:3348 +#, c-format +msgid "Device %s is too small." +msgstr "Le périphérique %s est trop petit." + +#: lib/setup.c:1837 lib/setup.c:1863 +#, c-format +msgid "Cannot format device %s in use." +msgstr "Impossible de formater le périphérique %s qui est en cours d'utilisation." + +#: lib/setup.c:1840 lib/setup.c:1866 +#, c-format +msgid "Cannot format device %s, permission denied." +msgstr "Impossible de formater le périphérique %s. Permission refusée." + +#: lib/setup.c:1852 lib/setup.c:2164 +#, c-format +msgid "Cannot format integrity for device %s." +msgstr "Impossible de formater l'intégrité du périphérique %s." + +#: lib/setup.c:1870 +#, c-format +msgid "Cannot format device %s." +msgstr "Impossible de formater le périphérique %s" + +#: lib/setup.c:1888 +msgid "Can't format LOOPAES without device." +msgstr "Impossible de formater LOOPAES sans périphérique." + +#: lib/setup.c:1933 +msgid "Can't format VERITY without device." +msgstr "Impossible de formater VERITY sans périphérique." + +#: lib/setup.c:1944 lib/verity/verity.c:103 +#, c-format +msgid "Unsupported VERITY hash type %d." +msgstr "Type de hachage VERITY %d non supporté." + +#: lib/setup.c:1950 lib/verity/verity.c:111 +msgid "Unsupported VERITY block size." +msgstr "Taille de bloc VERITY non supportée." + +#: lib/setup.c:1955 lib/verity/verity.c:75 +msgid "Unsupported VERITY hash offset." +msgstr "Décalage de hachage VERITY non supporté." + +#: lib/setup.c:1960 +msgid "Unsupported VERITY FEC offset." +msgstr "Décalage VERITY FEC non supporté." + +#: lib/setup.c:1984 +msgid "Data area overlaps with hash area." +msgstr "La zone de données recouvre la zone de hachage." + +#: lib/setup.c:2009 +msgid "Hash area overlaps with FEC area." +msgstr "La zone de hachage recouvre la zone FEC." + +#: lib/setup.c:2016 +msgid "Data area overlaps with FEC area." +msgstr "La zone de données recouvre la zone FEC." + +#: lib/setup.c:2221 +#, c-format +msgid "Unknown crypt device type %s requested." +msgstr "Type de chiffrement de périphérique demandé (%s) inconnu." + +#: lib/setup.c:2485 lib/setup.c:2557 lib/setup.c:2570 +#, c-format +msgid "Unsupported parameters on device %s." +msgstr "Paramètres non supportés sur le périphérique %s." + +#: lib/setup.c:2491 lib/setup.c:2576 lib/luks2/luks2_reencrypt.c:2408 +#: lib/luks2/luks2_reencrypt.c:2718 +#, c-format +msgid "Mismatching parameters on device %s." +msgstr "Paramètres non concordants sur le périphérique %s." + +#: lib/setup.c:2596 +msgid "Crypt devices mismatch." +msgstr "Désaccord entre les périphériques crypt." + +#: lib/setup.c:2633 lib/setup.c:2638 lib/luks2/luks2_reencrypt.c:2054 +#: lib/luks2/luks2_reencrypt.c:3126 +#, c-format +msgid "Failed to reload device %s." +msgstr "Impossible de recharger le périphérique %s." + +#: lib/setup.c:2643 lib/setup.c:2648 lib/luks2/luks2_reencrypt.c:2025 +#: lib/luks2/luks2_reencrypt.c:2032 +#, c-format +msgid "Failed to suspend device %s." +msgstr "Impossible de suspendre le périphérique %s." + +#: lib/setup.c:2653 lib/luks2/luks2_reencrypt.c:2039 +#: lib/luks2/luks2_reencrypt.c:3061 lib/luks2/luks2_reencrypt.c:3130 +#, c-format +msgid "Failed to resume device %s." +msgstr "Impossible de redémarrer le périphérique %s." + +#: lib/setup.c:2667 +#, c-format +msgid "Fatal error while reloading device %s (on top of device %s)." +msgstr "Erreur fatale en rechargeant le périphérique %s (au dessus du périphérique %s)" + +#: lib/setup.c:2670 lib/setup.c:2672 +#, c-format +msgid "Failed to switch device %s to dm-error." +msgstr "Impossible de basculer le périphérique %s en dm-error." + +#: lib/setup.c:2744 +msgid "Cannot resize loop device." +msgstr "Impossible de redimensionner le périphérique loopback." + +#: lib/setup.c:2817 +msgid "Do you really want to change UUID of device?" +msgstr "Voulez vous réellement changer l'UUID du périphérique ?" + +#: lib/setup.c:2893 +msgid "Header backup file does not contain compatible LUKS header." +msgstr "Le fichier de sauvegarde de l'en-tête ne contient pas d'en-tête compatible LUKS." + +#: lib/setup.c:2993 +#, c-format +msgid "Volume %s is not active." +msgstr "Le volume %s n'est pas actif." + +#: lib/setup.c:3004 +#, c-format +msgid "Volume %s is already suspended." +msgstr "Le volume %s est déjà suspendu." + +#: lib/setup.c:3017 +#, c-format +msgid "Suspend is not supported for device %s." +msgstr "Le périphérique %s ne supporte pas la suspension." + +#: lib/setup.c:3019 +#, c-format +msgid "Error during suspending device %s." +msgstr "Erreur lors de la suspension du périphérique %s." + +#: lib/setup.c:3052 lib/setup.c:3119 +#, c-format +msgid "Volume %s is not suspended." +msgstr "Le volume %s n'est pas suspendu." + +#: lib/setup.c:3081 +#, c-format +msgid "Resume is not supported for device %s." +msgstr "Le périphérique %s ne supporte pas la remise en service." + +#: lib/setup.c:3083 lib/setup.c:3151 +#, c-format +msgid "Error during resuming device %s." +msgstr "Erreur lors de la remise en service du périphérique %s." + +#: lib/setup.c:3219 lib/setup.c:3407 +msgid "Cannot add key slot, all slots disabled and no volume key provided." +msgstr "Impossible d'ajouter un emplacement de clé, tous les emplacements sont désactivés et aucune clé n'a été fournie pour ce volume." + +#: lib/setup.c:3359 +msgid "Failed to swap new key slot." +msgstr "Nouvel emplacement de clé impossible à échanger." + +#: lib/setup.c:3524 lib/setup.c:4161 lib/setup.c:4174 lib/setup.c:4182 +#: lib/setup.c:4195 lib/setup.c:4480 lib/setup.c:5593 +msgid "Volume key does not match the volume." +msgstr "Ceci n'est pas la clé du volume." + +#: lib/setup.c:3545 +#, c-format +msgid "Key slot %d is invalid." +msgstr "L'emplacement de clé %d n'est pas valide." + +#: lib/setup.c:3551 src/cryptsetup.c:1511 src/cryptsetup.c:1856 +#, c-format +msgid "Keyslot %d is not active." +msgstr "L'emplacement de clé %d n'est pas actif." + +#: lib/setup.c:3570 +msgid "Device header overlaps with data area." +msgstr "L'en-tête du périphérique recouvre la zone de données." + +#: lib/setup.c:3836 +msgid "Reencryption in-progress. Cannot activate device." +msgstr "Re-chiffrement en cours. Impossible d'activer le périphérique." + +#: lib/setup.c:3838 lib/luks2/luks2_json_metadata.c:2244 +#: lib/luks2/luks2_reencrypt.c:2817 +msgid "Failed to get reencryption lock." +msgstr "Impossible d'obtenir le verrou de re-chiffrement." + +#: lib/setup.c:3851 lib/luks2/luks2_reencrypt.c:2836 +msgid "LUKS2 reencryption recovery failed." +msgstr "La récupération du rechiffrement LUKS2 a échoué." + +#: lib/setup.c:3978 lib/setup.c:4248 +msgid "Device type is not properly initialised." +msgstr "Type de périphérique improprement initialisé." + +#: lib/setup.c:4022 +#, 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:4025 +#, c-format +msgid "Device %s already exists." +msgstr "Le périphérique %s existe déjà." + +#: lib/setup.c:4148 +msgid "Incorrect volume key specified for plain device." +msgstr "Clé de volume incorrecte pour le périphérique en clair." + +#: lib/setup.c:4214 +msgid "Incorrect root hash specified for verity device." +msgstr "Hachage racine incorrect spécifié pour le périphérique verity." + +#: lib/setup.c:4289 lib/setup.c:4305 lib/luks2/luks2_json_metadata.c:2297 +#: src/cryptsetup.c:2527 +#, c-format +msgid "Device %s is still in use." +msgstr "Le périphérique %s est toujours occupé." + +#: lib/setup.c:4314 +#, c-format +msgid "Invalid device %s." +msgstr "Le périphérique %s n'est pas valide." + +#: lib/setup.c:4430 +msgid "Volume key buffer too small." +msgstr "Le tampon de la clé du volume est trop petit." + +#: lib/setup.c:4438 +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:4449 +#, 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:4636 +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:4947 +#, 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:5229 +#, 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:5526 +#, 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:5599 +msgid "Failed to initialise default LUKS2 keyslot parameters." +msgstr "Échec de l'initialisation des paramètres par défaut des emplacement de clé LUKS2." + +#: lib/setup.c:5605 +#, 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:5690 +msgid "Failed to load key in kernel keyring." +msgstr "Impossible de charger la clé dans le porte-clé du noyau." + +#: lib/setup.c:5757 +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:5767 lib/luks2/luks2_reencrypt.c:2933 +#, 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:5791 +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" + +#: lib/utils.c:81 +msgid "Cannot get process priority." +msgstr "Impossible d'obtenir la priorité du processus." + +#: lib/utils.c:95 +msgid "Cannot unlock memory." +msgstr "Impossible de déverrouiller la mémoire." + +#: lib/utils.c:169 lib/tcrypt/tcrypt.c:498 +msgid "Failed to open key file." +msgstr "Impossible d'ouvrir le fichier de clef." + +#: lib/utils.c:174 +msgid "Cannot read keyfile from a terminal." +msgstr "Impossible de lire le fichier de clé depuis un terminal." + +#: lib/utils.c:191 +msgid "Failed to stat key file." +msgstr "Impossible d'exécuter « stat » sur le fichier de clef." + +#: lib/utils.c:199 lib/utils.c:220 +msgid "Cannot seek to requested keyfile offset." +msgstr "Impossible de sauter au décalage demandé dans le fichier de clé." + +#: lib/utils.c:214 lib/utils.c:229 src/utils_password.c:188 +#: src/utils_password.c:201 +msgid "Out of memory while reading passphrase." +msgstr "Plus assez de mémoire lors de la lecture de la phrase secrète." + +#: lib/utils.c:249 +msgid "Error reading passphrase." +msgstr "Erreur de lecture de la phrase secrète." + +#: lib/utils.c:266 +msgid "Nothing to read on input." +msgstr "Rien à lire en entrée." + +#: lib/utils.c:273 +msgid "Maximum keyfile size exceeded." +msgstr "Taille max. de fichier de clé dépassée." + +#: lib/utils.c:278 +msgid "Cannot read requested amount of data." +msgstr "Impossible de lire la quantité de données demandée." + +#: lib/utils_device.c:188 lib/utils_storage_wrappers.c:111 +#: lib/luks1/keyencryption.c:92 +#, c-format +msgid "Device %s doesn't exist or access denied." +msgstr "Le périphérique %s n'existe pas ou l'accès y est interdit." + +#: lib/utils_device.c:198 +#, c-format +msgid "Device %s is not compatible." +msgstr "Le périphérique %s n'est pas compatible." + +#: lib/utils_device.c:643 +#, 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:724 +#, 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:728 +#, 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:731 +#, 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:754 +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:764 +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:810 +#, 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:818 +#, c-format +msgid "Device %s has zero size." +msgstr "Le périphérique %s a une taille nulle." + +#: lib/utils_pbkdf.c:100 +msgid "Requested PBKDF target time cannot be zero." +msgstr "Le temps cible PBKDF demandé ne peut pas être zéro." + +#: lib/utils_pbkdf.c:106 +#, c-format +msgid "Unknown PBKDF type %s." +msgstr "Type PBKDF %s inconnu." + +#: lib/utils_pbkdf.c:111 +#, c-format +msgid "Requested hash %s is not supported." +msgstr "L'algorithme de hachage %s demandé n'est pas supporté." + +#: lib/utils_pbkdf.c:122 +msgid "Requested PBKDF type is not supported for LUKS1." +msgstr "Le type PBKDF demandé n'est pas supporté par LUKS1." + +#: lib/utils_pbkdf.c:128 +msgid "PBKDF max memory or parallel threads must not be set with pbkdf2." +msgstr "La mémoire maximum ou les threads parallèles de PBKDF ne peuvent pas être définis avec pbkdf2." + +#: lib/utils_pbkdf.c:133 lib/utils_pbkdf.c:143 +#, c-format +msgid "Forced iteration count is too low for %s (minimum is %u)." +msgstr "Le nombre d'itérations forcées est trop petit pour %s (le minimum est %u)." + +#: lib/utils_pbkdf.c:148 +#, c-format +msgid "Forced memory cost is too low for %s (minimum is %u kilobytes)." +msgstr "Le coût de la mémoire forcé est trop petit pour %s (le minimum est %u kilooctets)." + +#: lib/utils_pbkdf.c:155 +#, c-format +msgid "Requested maximum PBKDF memory cost is too high (maximum is %d kilobytes)." +msgstr "Le coût de la mémoire PBKDF maximum demandée est trop grand (maximum est %d kilooctets)." + +#: lib/utils_pbkdf.c:160 +msgid "Requested maximum PBKDF memory cannot be zero." +msgstr "La mémoire PBKDF maximum demandée ne peut pas être zéro." + +#: lib/utils_pbkdf.c:164 +msgid "Requested PBKDF parallel threads cannot be zero." +msgstr "Le nombre de threads parallèles PBKDF demandé ne peut pas être zéro." + +#: lib/utils_pbkdf.c:184 +msgid "Only PBKDF2 is supported in FIPS mode." +msgstr "Seul PBKDF2 est supporté en mode FIPS." + +#: lib/utils_benchmark.c:166 +msgid "PBKDF benchmark disabled but iterations not set." +msgstr "L'étalon PBKDF est désactivé mais les itérations ne sont pas définies." + +#: lib/utils_benchmark.c:185 +#, c-format +msgid "Not compatible PBKDF2 options (using hash algorithm %s)." +msgstr "Options PBKDF2 incompatibles (en utilisant l'algorithme de hachage %s)." + +#: lib/utils_benchmark.c:205 +msgid "Not compatible PBKDF options." +msgstr "Options PBKDF incompatibles." + +#: lib/utils_device_locking.c:103 +#, c-format +msgid "Locking aborted. The locking path %s/%s is unusable (not a directory or missing)." +msgstr "Verrouillage interrompu. Le chemin de verrouillage %s/%s est inutilisable (pas un répertoire ou est manquant)." + +#: lib/utils_device_locking.c:110 +#, c-format +msgid "WARNING: Locking directory %s/%s is missing!\n" +msgstr "ATTENTION: Le répertoire verrou %s/%s est manquant !\n" + +#: lib/utils_device_locking.c:120 +#, c-format +msgid "Locking aborted. The locking path %s/%s is unusable (%s is not a directory)." +msgstr "Verrouillage interrompu. Le chemin de verrouillage %s/%s est inutilisable (%s n'est pas un répertoire)." + +#: lib/utils_wipe.c:185 src/cryptsetup_reencrypt.c:933 +#: src/cryptsetup_reencrypt.c:1017 +msgid "Cannot seek to device offset." +msgstr "Impossible de se déplacer au décalage du périphérique." + +#: lib/utils_wipe.c:209 +#, c-format +msgid "Device wipe error, offset %." +msgstr "Erreur durant l'effacement total, offset %" + +#: lib/luks1/keyencryption.c:40 +#, c-format +msgid "" +"Failed to setup dm-crypt key mapping for device %s.\n" +"Check that kernel supports %s cipher (check syslog for more info)." +msgstr "" +"Impossible de configurer la correspondance des clés dm-crypt du périphérique %s.\n" +"Vérifiez que le noyau supporte le chiffrement %s (pour plus d'informations, voir les journaux syslog)." + +#: lib/luks1/keyencryption.c:45 +msgid "Key size in XTS mode must be 256 or 512 bits." +msgstr "La taille de la clé en mode XTS doit être un multiple de 256 ou 512 bits." + +# Frédéric: Je laisse iv (initialisation vector) sous cette forme car elle est plus habituelle que vi +#: lib/luks1/keyencryption.c:47 +msgid "Cipher specification should be in [cipher]-[mode]-[iv] format." +msgstr "La spécification du chiffrement devrait être au format [chiffrement]-[mode]-[iv]." + +#: lib/luks1/keyencryption.c:98 lib/luks1/keymanage.c:345 +#: lib/luks1/keymanage.c:636 lib/luks1/keymanage.c:1074 +#: lib/luks2/luks2_json_metadata.c:1253 lib/luks2/luks2_keyslot.c:739 +#, c-format +msgid "Cannot write to device %s, permission denied." +msgstr "Impossible d'écrire sur le périphérique %s. Permission refusée." + +#: lib/luks1/keyencryption.c:121 +msgid "Failed to open temporary keystore device." +msgstr "Échec lors de l'ouverture du périphérique de stockage temporaire de clés." + +#: lib/luks1/keyencryption.c:128 +msgid "Failed to access temporary keystore device." +msgstr "Impossible d'accéder au périphérique de stockage temporaire de clés." + +#: lib/luks1/keyencryption.c:201 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 "Erreur E/S pendant le chiffrement de l'emplacement de clé." + +#: lib/luks1/keyencryption.c:247 lib/luks1/keymanage.c:348 +#: lib/luks1/keymanage.c:589 lib/luks1/keymanage.c:639 lib/tcrypt/tcrypt.c:661 +#: lib/verity/verity.c:81 lib/verity/verity.c:179 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:1256 +#: src/cryptsetup_reencrypt.c:205 +#, c-format +msgid "Cannot open device %s." +msgstr "Impossible d'ouvrir le périphérique %s." + +#: lib/luks1/keyencryption.c:258 lib/luks2/luks2_keyslot_luks2.c:137 +msgid "IO error while decrypting keyslot." +msgstr "Erreur E/S pendant le déchiffrement de l'emplacement de clé." + +#: lib/luks1/keymanage.c:111 +#, c-format +msgid "Device %s is too small. (LUKS1 requires at least % bytes.)" +msgstr "Le périphérique %s est trop petit (LUKS1 a besoin d'au moins % octets)." + +#: 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 +#, c-format +msgid "LUKS keyslot %u is invalid." +msgstr "L'emplacement de clé LUKS %u n'est pas valide." + +#: lib/luks1/keymanage.c:229 lib/luks1/keymanage.c:473 +#: lib/luks2/luks2_json_metadata.c:1084 src/cryptsetup.c:1372 +#: src/cryptsetup.c:1498 src/cryptsetup.c:1555 src/cryptsetup.c:1611 +#: src/cryptsetup.c:1678 src/cryptsetup.c:1781 src/cryptsetup.c:1845 +#: src/cryptsetup.c:2005 src/cryptsetup.c:2194 src/cryptsetup.c:2254 +#: src/cryptsetup.c:2320 src/cryptsetup.c:2484 src/cryptsetup.c:3137 +#: src/cryptsetup.c:3146 src/cryptsetup_reencrypt.c:1372 +#, 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:247 lib/luks2/luks2_json_metadata.c:1101 +#, 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:249 lib/luks2/luks2_json_metadata.c:1103 +#, 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:256 lib/luks2/luks2_json_metadata.c:1110 +#, 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:287 lib/luks2/luks2_json_metadata.c:1162 +msgid "Backup file doesn't contain valid LUKS header." +msgstr "Le fichier de sauvegarde ne contient pas d'en-tête LUKS valide." + +#: lib/luks1/keymanage.c:300 lib/luks1/keymanage.c:550 +#: lib/luks2/luks2_json_metadata.c:1183 +#, 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:308 lib/luks2/luks2_json_metadata.c:1191 +#, c-format +msgid "Cannot read header backup file %s." +msgstr "Impossible de lire le fichier de sauvegarde d'en-tête %s." + +#: lib/luks1/keymanage.c:318 +msgid "Data offset or key size differs on device and backup, restore failed." +msgstr "Le décalage des données (« offset ») ou la taille de la clé ne sont pas identiques dans le périphérique et la sauvegarde. La restauration a échouée." + +#: lib/luks1/keymanage.c:326 +#, c-format +msgid "Device %s %s%s" +msgstr "Périphérique %s %s%s" + +#: lib/luks1/keymanage.c:327 +msgid "does not contain LUKS header. Replacing header can destroy data on that device." +msgstr "ne contient pas d'en-tête LUKS. Remplacer l'en-tête peut détruire les données de ce périphérique." + +#: lib/luks1/keymanage.c:328 +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:329 lib/luks2/luks2_json_metadata.c:1225 +msgid "" +"\n" +"WARNING: real device header has different UUID than backup!" +msgstr "" +"\n" +"ATTENTION : l'en-tête du périphérique a un UUID différent de celui de la sauvegarde !" + +#: lib/luks1/keymanage.c:376 +msgid "Non standard key size, manual repair required." +msgstr "Taille de clé non standard. Réparation manuelle requise." + +#: lib/luks1/keymanage.c:381 +msgid "Non standard keyslots alignment, manual repair required." +msgstr "Alignement non standard des emplacements de clé. Réparation manuelle requise." + +#: lib/luks1/keymanage.c:391 +msgid "Repairing keyslots." +msgstr "Réparation des emplacements de clé." + +#: lib/luks1/keymanage.c:410 +#, c-format +msgid "Keyslot %i: offset repaired (%u -> %u)." +msgstr "Emplacement de clé %i : décalage réparé (%u -> %u)." + +#: lib/luks1/keymanage.c:418 +#, c-format +msgid "Keyslot %i: stripes repaired (%u -> %u)." +msgstr "Emplacement de clé %i : bandes réparées (%u -> %u)." + +#: lib/luks1/keymanage.c:427 +#, c-format +msgid "Keyslot %i: bogus partition signature." +msgstr "Emplacement de clé %i : signature de partition contrefaite." + +#: lib/luks1/keymanage.c:432 +#, c-format +msgid "Keyslot %i: salt wiped." +msgstr "Emplacement de clé %i : aléa effacé." + +#: lib/luks1/keymanage.c:449 +msgid "Writing LUKS header to disk." +msgstr "Écriture de l'en-tête LUKS sur le disque." + +#: lib/luks1/keymanage.c:454 +msgid "Repair failed." +msgstr "Échec de la réparation." + +#: lib/luks1/keymanage.c:482 lib/luks1/keymanage.c:751 +#, c-format +msgid "Requested LUKS hash %s is not supported." +msgstr "L'algorithme de hachage LUKS demandé (%s) n'est pas supporté." + +#: lib/luks1/keymanage.c:510 src/cryptsetup.c:1081 +msgid "No known problems detected for LUKS header." +msgstr "Aucun problème connu détecté pour l'en-tête LUKS." + +#: lib/luks1/keymanage.c:661 +#, c-format +msgid "Error during update of LUKS header on device %s." +msgstr "Erreur lors de la mise à jour de l'en-tête LUKS sur le périphérique %s." + +#: lib/luks1/keymanage.c:669 +#, c-format +msgid "Error re-reading LUKS header after update on device %s." +msgstr "Erreur lors de la relecture de l'en-tête LUKS après la mise à jour sur le périphérique %s." + +#: lib/luks1/keymanage.c:745 +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:756 lib/luks1/keymanage.c:821 +#: lib/luks2/luks2_json_format.c:283 lib/luks2/luks2_json_metadata.c:1002 +#: src/cryptsetup.c:2647 +msgid "Wrong LUKS UUID format provided." +msgstr "Mauvais format fourni pour le UUID LUKS." + +#: lib/luks1/keymanage.c:779 +msgid "Cannot create LUKS header: reading random salt failed." +msgstr "Impossible de créer un en-tête LUKS : échec lors de la lecture de l'aléa." + +#: lib/luks1/keymanage.c:800 +#, c-format +msgid "Cannot create LUKS header: header digest failed (using hash %s)." +msgstr "Impossible de créer un en-tête LUKS : le résumé (« digest ») de l'en-tête a échoué (en utilisant l'algorithme de hachage %s)." + +#: lib/luks1/keymanage.c:844 +#, c-format +msgid "Key slot %d active, purge first." +msgstr "L'emplacement de clé %d est activé, effacez le d'abord." + +#: lib/luks1/keymanage.c:850 +#, c-format +msgid "Key slot %d material includes too few stripes. Header manipulation?" +msgstr "Le matériel de l'emplacement de clé %d a trop peu de bandes. L'en-tête a-t-il été modifié ?" + +#: lib/luks1/keymanage.c:1060 +#, c-format +msgid "Key slot %d is invalid, please select keyslot between 0 and %d." +msgstr "L'emplacement de clé %d n'est pas valide, merci de sélectionner un emplacement entre 0 et %d." + +#: lib/luks1/keymanage.c:1078 lib/luks2/luks2_keyslot.c:743 +#, c-format +msgid "Cannot wipe device %s." +msgstr "Impossible d'effacer de façon sécurisée le périphérique %s." + +#: lib/loopaes/loopaes.c:146 +msgid "Detected not yet supported GPG encrypted keyfile." +msgstr "Fichier de clé GPG chiffré détecté mais pas encore supporté." + +#: lib/loopaes/loopaes.c:147 +msgid "Please use gpg --decrypt | cryptsetup --keyfile=- ...\n" +msgstr "SVP utilisez gpg --decrypt | cryptsetup --keyfile=-...\n" + +#: lib/loopaes/loopaes.c:168 lib/loopaes/loopaes.c:188 +msgid "Incompatible loop-AES keyfile detected." +msgstr "Fichier de clé incompatible pour boucle « loop-AES »." + +#: lib/loopaes/loopaes.c:245 +msgid "Kernel doesn't support loop-AES compatible mapping." +msgstr "Le noyau ne supporte pas les associations de type boucle « loop-AES »." + +#: lib/tcrypt/tcrypt.c:505 +#, c-format +msgid "Error reading keyfile %s." +msgstr "Erreur lors de la lecture du fichier de clé %s." + +#: lib/tcrypt/tcrypt.c:545 +#, c-format +msgid "Maximum TCRYPT passphrase length (%d) exceeded." +msgstr "Longueur maximum de la phrase secrète TCRYPT (%d) dépassée." + +#: lib/tcrypt/tcrypt.c:586 +#, c-format +msgid "PBKDF2 hash algorithm %s not available, skipping." +msgstr "L'algorithme de hachage PBKDF2 %s n'est pas supporté, ignoré." + +#: lib/tcrypt/tcrypt.c:602 src/cryptsetup.c:959 +msgid "Required kernel crypto interface not available." +msgstr "L'interface du noyau requise pour le chiffrement n'est pas disponible." + +#: lib/tcrypt/tcrypt.c:604 src/cryptsetup.c:961 +msgid "Ensure you have algif_skcipher kernel module loaded." +msgstr "Vérifiez que le module du noyau algif_skcipher est chargé." + +#: lib/tcrypt/tcrypt.c:744 +#, c-format +msgid "Activation is not supported for %d sector size." +msgstr "L'activation n'est pas supportée pour des secteurs de taille %d." + +#: lib/tcrypt/tcrypt.c:750 +msgid "Kernel doesn't support activation for this TCRYPT legacy mode." +msgstr "Le noyau ne supporte pas l'activation pour ce mode TCRYPT historique." + +#: lib/tcrypt/tcrypt.c:784 +#, 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:862 +msgid "Kernel doesn't support TCRYPT compatible mapping." +msgstr "Le noyau ne supporte pas les associations de type TCRYPT." + +#: lib/tcrypt/tcrypt.c:1084 +msgid "This function is not supported without TCRYPT header load." +msgstr "Cette fonction n'est pas supportée sans le chargement de l'en-tête TCRYPT." + +#: lib/verity/verity.c:69 lib/verity/verity.c:172 +#, c-format +msgid "Verity device %s doesn't use on-disk header." +msgstr "Le périphérique verity %s n'utilise pas l'en-tête sur le disque." + +#: lib/verity/verity.c:91 +#, c-format +msgid "Device %s is not a valid VERITY device." +msgstr "Le périphérique %s n'est pas un périphérique VERITY valable." + +#: lib/verity/verity.c:98 +#, c-format +msgid "Unsupported VERITY version %d." +msgstr "La version VERITY %d n'est pas supportée." + +#: lib/verity/verity.c:129 +msgid "VERITY header corrupted." +msgstr "En-tête VERITY corrompu." + +#: lib/verity/verity.c:166 +#, c-format +msgid "Wrong VERITY UUID format provided on device %s." +msgstr "Mauvais format d'UUID VERITY fourni sur le périphérique %s." + +#: lib/verity/verity.c:199 +#, c-format +msgid "Error during update of verity header on device %s." +msgstr "Erreur lors de la mise à jour de l'en-tête verity sur le périphérique %s." + +#: lib/verity/verity.c:262 +msgid "Errors cannot be repaired with FEC device." +msgstr "Les erreurs ne savent pas être réparées avec un périphérique FEC." + +#: lib/verity/verity.c:264 +#, c-format +msgid "Found %u repairable errors with FEC device." +msgstr "%u erreurs réparables ont été trouvées avec le périphérique FEC." + +#: lib/verity/verity.c:302 +msgid "Kernel doesn't support dm-verity mapping." +msgstr "Le noyau ne supporte pas les associations de type dm-verity." + +#: lib/verity/verity.c:313 +msgid "Verity device detected corruption after activation." +msgstr "Le périphérique verity a détecté une corruption après l'activation." + +#: lib/verity/verity_hash.c:59 +#, c-format +msgid "Spare area is not zeroed at position %." +msgstr "La zone de réserve n'a pas été mise à zéro à la positon %." + +#: lib/verity/verity_hash.c:160 lib/verity/verity_hash.c:287 +#: lib/verity/verity_hash.c:300 +msgid "Device offset overflow." +msgstr "Débordement du décalage du périphérique." + +#: lib/verity/verity_hash.c:200 +#, c-format +msgid "Verification failed at position %." +msgstr "La vérification a échoué à la position %." + +#: lib/verity/verity_hash.c:273 +msgid "Invalid size parameters for verity device." +msgstr "Mauvais paramètres de taille pour le périphérique verity." + +#: lib/verity/verity_hash.c:293 +msgid "Hash area overflow." +msgstr "Débordement de la zone de hachage." + +#: lib/verity/verity_hash.c:370 +msgid "Verification of data area failed." +msgstr "La vérification de la zone de données a échoué." + +#: lib/verity/verity_hash.c:375 +msgid "Verification of root hash failed." +msgstr "La vérification du hachage de la racine a échoué." + +#: lib/verity/verity_hash.c:381 +msgid "Input/output error while creating hash area." +msgstr "Erreur d'entrée/sortie lors de la création de la zone de hachage." + +#: lib/verity/verity_hash.c:383 +msgid "Creation of hash area failed." +msgstr "La création de la zone de hachage a échoué." + +#: lib/verity/verity_hash.c:430 +#, c-format +msgid "WARNING: Kernel cannot activate device if data block size exceeds page size (%u)." +msgstr "ATTENTION : Le kernel ne peut pas activer le périphérique si la taille des blocs de données dépasse la taille d'une page (%u)." + +#: lib/verity/verity_fec.c:132 +msgid "Failed to allocate RS context." +msgstr "Échec de l'allocation du contexte RS." + +#: lib/verity/verity_fec.c:147 +msgid "Failed to allocate buffer." +msgstr "Échec de l'allocation du tampon." + +#: lib/verity/verity_fec.c:157 +#, c-format +msgid "Failed to read RS block % byte %d." +msgstr "Échec de lecture du bloc RS % octet %d." + +#: lib/verity/verity_fec.c:170 +#, c-format +msgid "Failed to read parity for RS block %." +msgstr "Échec de la lecture de la parité du bloc RS %." + +#: lib/verity/verity_fec.c:178 +#, c-format +msgid "Failed to repair parity for block %." +msgstr "Échec de la réparation de la parité du bloc %." + +#: lib/verity/verity_fec.c:189 +#, c-format +msgid "Failed to write parity for RS block %." +msgstr "Échec de l'écriture de la parité du bloc RS %." + +#: lib/verity/verity_fec.c:224 +msgid "Block sizes must match for FEC." +msgstr "Les tailles des blocs doivent concorder pour FEC." + +#: lib/verity/verity_fec.c:230 +msgid "Invalid number of parity bytes." +msgstr "Nombre d'octets de parité invalide." + +#: lib/verity/verity_fec.c:266 +#, c-format +msgid "Failed to determine size for device %s." +msgstr "Impossible de déterminer la taille du périphérique %s." + +#: lib/integrity/integrity.c:241 lib/integrity/integrity.c:306 +msgid "Kernel doesn't support dm-integrity mapping." +msgstr "Le noyau ne supporte pas les associations de type dm-integrity." + +#: lib/luks2/luks2_disk_metadata.c:383 lib/luks2/luks2_json_metadata.c:959 +#: lib/luks2/luks2_json_metadata.c:1245 +#, 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." + +#: lib/luks2/luks2_disk_metadata.c:392 +msgid "Detected attempt for concurrent LUKS2 metadata update. Aborting operation." +msgstr "Tentative détectée de mettre à jour les métadonnées LUKS2 de manière concurrent. L'opération est abandonnée." + +#: 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 "" +"Le périphérique contient une signature ambigüe, impossible de récupérer automatiquement LUKS2.\n" +"Veuillez exécuter « cryptsetup repair » pour la récupération." + +#: lib/luks2/luks2_json_format.c:227 +msgid "Requested data offset is too small." +msgstr "Le décalage de données demandé est trop petit." + +#: lib/luks2/luks2_json_format.c:271 +#, c-format +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:1075 +#: lib/luks2/luks2_json_metadata.c:1151 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:1168 +#, 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:1209 +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:1215 +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:1222 +#, c-format +msgid "Device %s %s%s%s%s" +msgstr "Périphérique %s %s%s%s%s" + +#: lib/luks2/luks2_json_metadata.c:1223 +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:1224 +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:1226 +msgid "" +"\n" +"WARNING: unknown LUKS2 requirements detected in real device header!\n" +"Replacing header with backup may corrupt the data on that device!" +msgstr "" +"\n" +"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:1228 +msgid "" +"\n" +"WARNING: Unfinished offline reencryption detected on the device!\n" +"Replacing header with backup may corrupt data." +msgstr "" +"\n" +"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:1324 +#, c-format +msgid "Ignored unknown flag %s." +msgstr "Fanion inconnu %s ignoré." + +#: lib/luks2/luks2_json_metadata.c:2011 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:2023 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:2029 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:2156 +msgid "Unsupported device integrity configuration." +msgstr "Configuration d'intégrité du périphérique non supportée." + +#: lib/luks2/luks2_json_metadata.c:2242 +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:2253 lib/luks2/luks2_reencrypt.c:3171 +#, 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:2333 +msgid "Failed to read LUKS2 requirements." +msgstr "Échec lors de la lecture des exigences LUKS2." + +#: lib/luks2/luks2_json_metadata.c:2340 +msgid "Unmet LUKS2 requirements detected." +msgstr "Des exigences LUKS2 non rencontrées ont été détectées." + +#: lib/luks2/luks2_json_metadata.c:2348 +msgid "Offline reencryption in progress. Aborting." +msgstr "Un rechiffrement hors-ligne est en cours. Interruption." + +#: lib/luks2/luks2_json_metadata.c:2350 +msgid "Online reencryption in progress. Aborting." +msgstr "Un rechiffrement en-ligne est en cours. Interruption." + +#: lib/luks2/luks2_keyslot.c:552 lib/luks2/luks2_keyslot.c:589 +msgid "Not enough available memory to open a keyslot." +msgstr "Pas assez de mémoire disponible pour ouvrir l'emplacement de clé." + +#: lib/luks2/luks2_keyslot.c:554 lib/luks2/luks2_keyslot.c:591 +msgid "Keyslot open failed." +msgstr "Échec de l'ouverture de l'emplacement de clé." + +#: 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 "Impossible d'utiliser le chiffrement %s-%s pour le chiffrement de l'emplacement de clé" + +#: lib/luks2/luks2_keyslot_luks2.c:480 +msgid "No space for new keyslot." +msgstr "Plus d'espace pour le nouvel emplacement de clé." + +#: lib/luks2/luks2_luks1_convert.c:481 +#, c-format +msgid "Cannot check status of device with uuid: %s." +msgstr "Ne peut vérifier le statut du périphérique avec le uuid : %s." + +#: lib/luks2/luks2_luks1_convert.c:507 +msgid "Unable to convert header with LUKSMETA additional metadata." +msgstr "Impossible de convertir un en-tête avec des métadonnées LUKSMETA supplémentaires." + +#: lib/luks2/luks2_luks1_convert.c:547 +msgid "Unable to move keyslot area. Not enough space." +msgstr "Impossible de déplacer la zone des emplacements de clés. Pas assez d'espace." + +#: lib/luks2/luks2_luks1_convert.c:590 lib/luks2/luks2_luks1_convert.c:872 +msgid "Unable to move keyslot area." +msgstr "Impossible de déplacer la zone des emplacements de clés." + +#: lib/luks2/luks2_luks1_convert.c:682 +msgid "Cannot convert to LUKS1 format - default segment encryption sector size is not 512 bytes." +msgstr "Impossible de convertir au format LUKS1 – la taille du secteur de chiffrement du segment par défaut n'est pas 512 octets." + +#: lib/luks2/luks2_luks1_convert.c:690 +msgid "Cannot convert to LUKS1 format - key slot digests are not LUKS1 compatible." +msgstr "Impossible de convertir au format LUKS1 – les résumés des emplacements de clés ne sont pas compatibles avec LUKS1." + +#: lib/luks2/luks2_luks1_convert.c:702 +#, c-format +msgid "Cannot convert to LUKS1 format - device uses wrapped key cipher %s." +msgstr "Impossible de convertir au format LUKS1 – le périphérique utilise des clés de chiffrement %s emballées." + +#: lib/luks2/luks2_luks1_convert.c:710 +#, c-format +msgid "Cannot convert to LUKS1 format - LUKS2 header contains %u token(s)." +msgstr "Impossible de convertir au format LUKS1 – l'en-tête LUKS2 contient %u jeton(s)." + +#: lib/luks2/luks2_luks1_convert.c:724 +#, c-format +msgid "Cannot convert to LUKS1 format - keyslot %u is in invalid state." +msgstr "Impossible de convertir au format LUKS1 – l'emplacement de clé %u est dans un état invalide." + +#: lib/luks2/luks2_luks1_convert.c:729 +#, c-format +msgid "Cannot convert to LUKS1 format - slot %u (over maximum slots) is still active." +msgstr "Impossible de convertir au format LUKS1 – l'emplacement %u (sur les emplacements maximum) est toujours actif." + +#: lib/luks2/luks2_luks1_convert.c:734 +#, c-format +msgid "Cannot convert to LUKS1 format - keyslot %u is not LUKS1 compatible." +msgstr "Impossible de convertir au format LUKS1 – l'emplacement de clé %u n'est pas compatible avec LUKS1." + +#: lib/luks2/luks2_reencrypt.c:892 +#, c-format +msgid "Hotzone size must be multiple of calculated zone alignment (%zu bytes)." +msgstr "La taille de la zone chaude doit être un multiple de l'alignement de zone calculé (%zu octets)." + +#: lib/luks2/luks2_reencrypt.c:897 +#, c-format +msgid "Device size must be multiple of calculated zone alignment (%zu bytes)." +msgstr "La taille du périphérique doit être un multiple de l'alignement de zone calculé (%zu octets)." + +#: lib/luks2/luks2_reencrypt.c:941 +#, c-format +msgid "Unsupported resilience mode %s" +msgstr "Mode de résilience %s non supporté" + +#: lib/luks2/luks2_reencrypt.c:1158 lib/luks2/luks2_reencrypt.c:1313 +#: lib/luks2/luks2_reencrypt.c:1396 lib/luks2/luks2_reencrypt.c:1430 +#: lib/luks2/luks2_reencrypt.c:3011 +msgid "Failed to initialize old segment storage wrapper." +msgstr "Impossible d'initialiser l'encapsulation pour le stockage de l'ancien segment." + +#: lib/luks2/luks2_reencrypt.c:1172 lib/luks2/luks2_reencrypt.c:1291 +msgid "Failed to initialize new segment storage wrapper." +msgstr "Impossible d'initialiser l'encapsulation pour le stockage du nouveau segment." + +#: lib/luks2/luks2_reencrypt.c:1340 +msgid "Failed to read checksums for current hotzone." +msgstr "Impossible de lire les sommes de contrôle pour la zone chaude actuelle." + +#: lib/luks2/luks2_reencrypt.c:1347 lib/luks2/luks2_reencrypt.c:3019 +#, c-format +msgid "Failed to read hotzone area starting at %." +msgstr "Échec de la lecture de la zone chaude démarrant à %." + +#: lib/luks2/luks2_reencrypt.c:1366 +#, c-format +msgid "Failed to decrypt sector %zu." +msgstr "Échec lors du déchiffrement du secteur %zu." + +#: lib/luks2/luks2_reencrypt.c:1372 +#, c-format +msgid "Failed to recover sector %zu." +msgstr "Échec lors de la récupération du secteur %zu." + +#: lib/luks2/luks2_reencrypt.c:1867 +#, c-format +msgid "Source and target device sizes don't match. Source %, target: %." +msgstr "Les tailles des périphériques source et cible ne correspondent pas. Source %, cible: %." + +#: lib/luks2/luks2_reencrypt.c:1965 +#, c-format +msgid "Failed to activate hotzone device %s." +msgstr "Échec de l'activation du périphérique de zone chaude %s." + +#: lib/luks2/luks2_reencrypt.c:1982 +#, c-format +msgid "Failed to activate overlay device %s with actual origin table." +msgstr "Impossible d'activer le périphérique de surcouche %s avec la table d'origine actuelle." + +#: lib/luks2/luks2_reencrypt.c:1989 +#, c-format +msgid "Failed to load new mapping for device %s." +msgstr "Impossible de charger la nouvelle cartographie du périphérique %s." + +#: lib/luks2/luks2_reencrypt.c:2060 +msgid "Failed to refresh reencryption devices stack." +msgstr "Impossible de rafraîchir la pile des périphériques de rechiffrement." + +#: lib/luks2/luks2_reencrypt.c:2216 +msgid "Failed to set new keyslots area size." +msgstr "Impossible de définir la taille de la nouvelle zone des emplacements de clés." + +#: lib/luks2/luks2_reencrypt.c:2318 +#, c-format +msgid "Data shift is not aligned to requested encryption sector size (% bytes)." +msgstr "Le décalage de données n'est pas aligné sur la taille de secteur de chiffrement demandée (% octets)." + +#: lib/luks2/luks2_reencrypt.c:2339 +#, c-format +msgid "Data device is not aligned to requested encryption sector size (% bytes)." +msgstr "Le périphérique de données n'est pas aligné sur la taille de secteur de chiffrement demandée (% octets)." + +#: lib/luks2/luks2_reencrypt.c:2360 +#, c-format +msgid "Data shift (% sectors) is less than future data offset (% sectors)." +msgstr "Le décalage de données (% secteurs) est plus petit que le décalage de données future (% secteurs)." + +#: lib/luks2/luks2_reencrypt.c:2366 lib/luks2/luks2_reencrypt.c:2760 +#: lib/luks2/luks2_reencrypt.c:2781 +#, c-format +msgid "Failed to open %s in exclusive mode (already mapped or mounted)." +msgstr "Erreur lors de l'ouverture de %s en mode exclusif (déjà mappé ou monté)." + +#: lib/luks2/luks2_reencrypt.c:2534 +msgid "No LUKS2 reencryption in progress." +msgstr "Pas de rechiffrement LUKS2 en cours." + +#: lib/luks2/luks2_reencrypt.c:2540 lib/luks2/luks2_reencrypt.c:3276 +msgid "Failed to load LUKS2 reencryption context." +msgstr "Échec du chargement du contexte de rechiffrement LUKS2" + +#: lib/luks2/luks2_reencrypt.c:2600 +msgid "Failed to get reencryption state." +msgstr "Impossible d'obtenir l'état de rechiffrement." + +#: lib/luks2/luks2_reencrypt.c:2604 +msgid "Device is not in reencryption." +msgstr "Le périphérique n'est pas en rechiffrement." + +#: lib/luks2/luks2_reencrypt.c:2611 +msgid "Reencryption process is already running." +msgstr "Le rechiffrement est déjà en cours." + +#: lib/luks2/luks2_reencrypt.c:2613 +msgid "Failed to acquire reencryption lock." +msgstr "Impossible d'acquérir le verrou de rechiffrement." + +#: lib/luks2/luks2_reencrypt.c:2631 +msgid "Cannot proceed with reencryption. Run reencryption recovery first." +msgstr "Impossible de réaliser le rechiffrement. Exécutez d'abord la récupération du rechiffrement." + +#: lib/luks2/luks2_reencrypt.c:2731 +msgid "Active device size and requested reencryption size don't match." +msgstr "La taille du périphérique actif et la taille de rechiffrement demandée ne correspondent pas." + +#: lib/luks2/luks2_reencrypt.c:2745 +msgid "Illegal device size requested in reencryption parameters." +msgstr "Taille de périphérique illégale demandée dans les paramètres de rechiffrement." + +#: lib/luks2/luks2_reencrypt.c:2815 +msgid "Reencryption in-progress. Cannot perform recovery." +msgstr "Rechiffrement en cours. La récupération ne peut pas être réalisée." + +#: lib/luks2/luks2_reencrypt.c:2887 +msgid "LUKS2 reencryption already initialized in metadata." +msgstr "Rechiffrement LUKS2 déjà initialisé dans les métadonnées." + +#: lib/luks2/luks2_reencrypt.c:2894 +msgid "Failed to initialize LUKS2 reencryption in metadata." +msgstr "Échec de l'initialisation du rechiffrement LUKS2 dans les métadonnées." + +#: lib/luks2/luks2_reencrypt.c:2985 +msgid "Failed to set device segments for next reencryption hotzone." +msgstr "Impossible de définir les segments du périphérique pour le rechiffrement suivant de la zone chaude." + +#: lib/luks2/luks2_reencrypt.c:3027 +msgid "Failed to write reencryption resilience metadata." +msgstr "Échec lors de l'écriture des métadonnées de la résilience du rechiffrement." + +#: lib/luks2/luks2_reencrypt.c:3034 +msgid "Decryption failed." +msgstr "Échec du déchiffrement." + +#: lib/luks2/luks2_reencrypt.c:3039 +#, c-format +msgid "Failed to write hotzone area starting at %." +msgstr "Échec de l'écriture de la zone chaude démarrant à %." + +#: lib/luks2/luks2_reencrypt.c:3044 +msgid "Failed to sync data." +msgstr "Erreur lors de la synchronisation des données." + +#: lib/luks2/luks2_reencrypt.c:3052 +msgid "Failed to update metadata after current reencryption hotzone completed." +msgstr "Échec de la mise à jour des métadonnées après la fin du rechiffrement de la zone chaude courante." + +#: lib/luks2/luks2_reencrypt.c:3119 +msgid "Failed to write LUKS2 metadata." +msgstr "Échec lors de l'écriture des métadonnées LUKS2" + +#: lib/luks2/luks2_reencrypt.c:3142 +msgid "Failed to wipe backup segment data." +msgstr "Échec lors de l'effacement des données du segment de sauvegarde." + +#: lib/luks2/luks2_reencrypt.c:3155 +msgid "Failed to disable reencryption requirement flag." +msgstr "Impossible de désactiver le fanion de demande de rechiffrement." + +#: lib/luks2/luks2_reencrypt.c:3163 +#, c-format +msgid "Fatal error while reencrypting chunk starting at %, % sectors long." +msgstr "Erreur fatale en rechiffrant le morceau commençant à % d'une longueur de % secteurs." + +# Frédéric: Je n'ai pas la moindre idée de ce que le développeur a voulu écrire. Qu'est-ce que "error target" dans ce contexte ? +#: lib/luks2/luks2_reencrypt.c:3172 +msgid "Do not resume the device unless replaced with error target manually." +msgstr "Ne pas redémarrer le périphérique à moins qu'il ait été remplacé manuellement par la cible en erreur." + +#: lib/luks2/luks2_reencrypt.c:3221 +msgid "Cannot proceed with reencryption. Unexpected reencryption status." +msgstr "Impossible de réaliser le rechiffrement. Statut de rechiffrement inattendu." + +#: lib/luks2/luks2_reencrypt.c:3227 +msgid "Missing or invalid reencrypt context." +msgstr "Contexte de rechiffrement manquant ou invalide." + +#: lib/luks2/luks2_reencrypt.c:3234 +msgid "Failed to initialize reencryption device stack." +msgstr "Impossible d'initialiser la pile du périphérique de rechiffrement." + +#: lib/luks2/luks2_reencrypt.c:3253 lib/luks2/luks2_reencrypt.c:3289 +msgid "Failed to update reencryption context." +msgstr "Échec de la mise à jour du contexte de rechiffrement." + +#: lib/luks2/luks2_token.c:262 +msgid "No free token slot." +msgstr "Aucun emplacement de jeton libre" + +#: lib/luks2/luks2_token.c:269 +#, c-format +msgid "Failed to create builtin token %s." +msgstr "Échec lors de la création du jeton intégré %s" + +#: src/cryptsetup.c:162 +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:215 +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:245 src/cryptsetup.c:893 src/cryptsetup.c:1212 +#: src/cryptsetup.c:3011 src/cryptsetup_reencrypt.c:715 +#: src/cryptsetup_reencrypt.c:785 +msgid "No known cipher specification pattern detected." +msgstr "Aucun motif connu d'algorithme de chiffrement n'a été détecté." + +#: src/cryptsetup.c:253 +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:261 +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:301 +#, 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:307 src/cryptsetup.c:1038 src/cryptsetup.c:1090 +#: src/cryptsetup.c:1189 src/cryptsetup.c:1262 src/cryptsetup.c:1913 +#: src/cryptsetup.c:2545 src/cryptsetup.c:2668 src/integritysetup.c:232 +msgid "Operation aborted.\n" +msgstr "Opération interrompue.\n" + +#: src/cryptsetup.c:375 +msgid "Option --key-file is required." +msgstr "L'option --key-file est requise." + +#: src/cryptsetup.c:428 +msgid "Enter VeraCrypt PIM: " +msgstr "Entrez le PIN VeraCrypt : " + +#: src/cryptsetup.c:437 +msgid "Invalid PIM value: parse error." +msgstr "Valeur PIN invalide : erreur d'analyse" + +#: src/cryptsetup.c:440 +msgid "Invalid PIM value: 0." +msgstr "Valeur PIN invalide: 0" + +#: src/cryptsetup.c:443 +msgid "Invalid PIM value: outside of range." +msgstr "Valeur PIN invalide: hors des limites." + +#: src/cryptsetup.c:466 +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:528 src/cryptsetup.c:1940 +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 "" +"Le contenu de l'en-tête avec la clé de volume est une information\n" +"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:607 +#, 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:635 +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:771 +msgid "Benchmark interrupted." +msgstr "Test de performance interrompu." + +#: src/cryptsetup.c:792 +#, c-format +msgid "PBKDF2-%-9s N/A\n" +msgstr "PBKDF2-%-9s N/A\n" + +#: src/cryptsetup.c:794 +#, 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:808 +#, c-format +msgid "%-10s N/A\n" +msgstr "%-10s N/A\n" + +#: src/cryptsetup.c:810 +#, 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:834 +msgid "Result of benchmark is not reliable." +msgstr "Le résultat de l'évaluation de performance n'est pas fiable." + +#: src/cryptsetup.c:885 +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:919 +#, c-format +msgid "#%*s Algorithm | Key | Encryption | Decryption\n" +msgstr "#%*s Algorithme | Clé | Chiffrement | Déchiffrement\n" + +#: src/cryptsetup.c:923 +#, c-format +msgid "Cipher %s is not available." +msgstr "Le chiffrement %s n'est pas disponible." + +#. TRANSLATORS: The string is header of a table and must be exactly (right side) aligned. +#: src/cryptsetup.c:943 +msgid "# Algorithm | Key | Encryption | Decryption\n" +msgstr "# Algorithme | Clé | Chiffrement | Déchiffrement\n" + +#: src/cryptsetup.c:952 +msgid "N/A" +msgstr "N/D" + +#: src/cryptsetup.c:1031 +msgid "" +"Seems device does not require reencryption recovery.\n" +"Do you want to proceed anyway?" +msgstr "" +"Le périphérique seems ne requière pas de récupération de rechiffrement.\n" +"Voulez-vous quand-même continuer ?" + +#: src/cryptsetup.c:1037 +msgid "Really proceed with LUKS2 reencryption recovery?" +msgstr "Réellement procéder à la récupération du rechiffrement LUKS2 ?" + +#: src/cryptsetup.c:1046 +msgid "Enter passphrase for reencryption recovery: " +msgstr "Entrez la phrase secrète pour la récupération du rechiffrement : " + +#: src/cryptsetup.c:1089 +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:1108 src/integritysetup.c:145 +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 "" +"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:1130 src/integritysetup.c:167 +#, c-format +msgid "Cannot deactivate temporary device %s." +msgstr "Impossible de désactiver le périphérique temporaire %s." + +#: src/cryptsetup.c:1174 +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:1179 src/cryptsetup.c:1239 +msgid "Unsupported LUKS2 metadata size options." +msgstr "Options de taille des métadonnées LUKS2 non supportées." + +#: src/cryptsetup.c:1196 +#, c-format +msgid "Cannot create header file %s." +msgstr "Impossible de créer le fichier d'en-tête %s." + +#: src/cryptsetup.c:1219 src/integritysetup.c:194 src/integritysetup.c:203 +#: src/integritysetup.c:212 src/integritysetup.c:279 src/integritysetup.c:288 +#: src/integritysetup.c:298 +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:1232 +#, c-format +msgid "Cannot use %s as on-disk header." +msgstr "Ne peut utiliser %s comme en-tête sur disque." + +#: src/cryptsetup.c:1256 src/integritysetup.c:226 +#, c-format +msgid "This will overwrite data on %s irrevocably." +msgstr "Cette action écrasera définitivement les données sur %s." + +#: src/cryptsetup.c:1297 src/cryptsetup.c:1627 src/cryptsetup.c:1694 +#: src/cryptsetup.c:1796 src/cryptsetup.c:1862 src/cryptsetup_reencrypt.c:545 +msgid "Failed to set pbkdf parameters." +msgstr "Impossible de définir les paramètres pbkdf." + +#: src/cryptsetup.c:1378 +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:1389 src/cryptsetup.c:1700 +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:1427 +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:1508 src/cryptsetup.c:1578 +#, c-format +msgid "Keyslot %d is selected for deletion." +msgstr "Emplacement de clé %d sélectionné pour suppression." + +#: src/cryptsetup.c:1520 src/cryptsetup.c:1581 +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:1521 +msgid "Enter any remaining passphrase: " +msgstr "Entrez toute phrase secrète restante : " + +#: src/cryptsetup.c:1522 src/cryptsetup.c:1583 +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:1560 +msgid "Enter passphrase to be deleted: " +msgstr "Entrez la phrase secrète à effacer : " + +#: src/cryptsetup.c:1641 src/cryptsetup.c:1715 src/cryptsetup.c:1749 +msgid "Enter new passphrase for key slot: " +msgstr "Entrez une nouvelle phrase secrète pour l'emplacement de clé : " + +#: src/cryptsetup.c:1732 src/cryptsetup_reencrypt.c:1327 +#, c-format +msgid "Enter any existing passphrase: " +msgstr "Entrez une phrase secrète existante : " + +#: src/cryptsetup.c:1800 +msgid "Enter passphrase to be changed: " +msgstr "Entrez la phrase secrète à changer : " + +#: src/cryptsetup.c:1816 src/cryptsetup_reencrypt.c:1313 +msgid "Enter new passphrase: " +msgstr "Entrez la nouvelle phrase secrète : " + +#: src/cryptsetup.c:1866 +msgid "Enter passphrase for keyslot to be converted: " +msgstr "Entrez la phrase secrète pour l'emplacement de clé à convertir: " + +#: src/cryptsetup.c:1890 +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:2074 src/cryptsetup.c:2095 +msgid "Option --header-backup-file is required." +msgstr "L'option --header-backup-file est requise." + +#: src/cryptsetup.c:2125 +#, 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:2136 +#, 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:2174 +#, c-format +msgid "Unrecognized metadata device type %s." +msgstr "Type de métadonnée du périphérique %s non reconnu." + +#: src/cryptsetup.c:2177 +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:2199 +#, c-format +msgid "" +"This operation will erase all keyslots on device %s.\n" +"Device will become unusable after this operation." +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:2206 +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:2243 +msgid "Invalid LUKS type, only luks1 and luks2 are supported." +msgstr "Type LUKS invalide, seuls luks1 et luks2 sont supportés." + +#: src/cryptsetup.c:2261 +#, c-format +msgid "Device is already %s type." +msgstr "Le périphérique est déjà du type %s." + +#: src/cryptsetup.c:2266 +#, 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:2272 +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:2312 +msgid "Option --priority, --label or --subsystem is missing." +msgstr "L'option --priority, --label ou --subsystem est manquante." + +#: src/cryptsetup.c:2346 src/cryptsetup.c:2379 src/cryptsetup.c:2402 +#, c-format +msgid "Token %d is invalid." +msgstr "Le jeton %d est invalide." + +#: src/cryptsetup.c:2349 src/cryptsetup.c:2405 +#, c-format +msgid "Token %d in use." +msgstr "Le jeton %d est utilisé." + +#: src/cryptsetup.c:2356 +#, 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:2365 src/cryptsetup.c:2427 +#, 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:2382 +#, c-format +msgid "Token %d is not in use." +msgstr "Le jeton %d n'est pas utilisé." + +#: src/cryptsetup.c:2417 +msgid "Failed to import token from file." +msgstr "Impossible d'importer le jeton depuis le fichier." + +#: src/cryptsetup.c:2442 +#, c-format +msgid "Failed to get token %d for export." +msgstr "Impossible d'obtenir le jeton %d pour l'export." + +#: src/cryptsetup.c:2457 +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:2463 src/cryptsetup.c:2471 +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:2476 +#, c-format +msgid "Invalid token operation %s." +msgstr "L'opération de jeton %s est invalide." + +#: src/cryptsetup.c:2531 +#, 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:2535 +#, 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:2537 +#, 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:2539 +#, 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 "" +"Impossible de décider si le périphérique %s est actif ou non.\n" +"Êtes-vous sûr de vouloir procéder au rechiffrement en mode hors-ligne ?\n" +"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:2619 +msgid "Invalid LUKS device type." +msgstr "Type de périphérique LUKS invalide." + +#: src/cryptsetup.c:2624 +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:2629 +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:2638 +#, 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:2642 +msgid "Encryption is supported only for LUKS2 format." +msgstr "Le chiffrement est uniquement supporté avec le format LUKS2." + +#: src/cryptsetup.c:2664 +#, 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:2679 +#, 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:2681 src/cryptsetup.c:2688 +#, 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:2752 +#, c-format +msgid "%s/%s is now active and ready for online encryption." +msgstr "%s/%s est maintenant actif et prêt pour un chiffrement en ligne." + +#: src/cryptsetup.c:2919 src/cryptsetup.c:2925 +msgid "Not enough free keyslots for reencryption." +msgstr "Pas assez d'emplacements de clés libres pour le rechiffrement." + +#: src/cryptsetup.c:2945 src/cryptsetup_reencrypt.c:1284 +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:2954 src/cryptsetup_reencrypt.c:1325 +#: src/cryptsetup_reencrypt.c:1336 +#, c-format +msgid "Enter passphrase for key slot %d: " +msgstr "Entrez la phrase secrète pour l'emplacement de clé %d : " + +#: src/cryptsetup.c:2962 +#, c-format +msgid "Enter passphrase for key slot %u: " +msgstr "Entrez la phrase secrète pour l'emplacement de clé %u : " + +#: src/cryptsetup.c:3129 +msgid "Command requires device as argument." +msgstr "La commande exige un périphérique comme argument." + +#: src/cryptsetup.c:3151 +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:3163 +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:3173 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:3181 +msgid "LUKS2 reencryption already initialized. Aborting operation." +msgstr "Rechiffrement LUKS2 déjà initialisé. Abandon de l'opération." + +#: src/cryptsetup.c:3185 +msgid "LUKS2 device is not in reencryption." +msgstr "Le périphérique LUKS2 n'est pas en rechiffrement." + +#: src/cryptsetup.c:3212 +msgid " [--type ] []" +msgstr " [--type ] []" + +#: src/cryptsetup.c:3212 src/veritysetup.c:358 src/integritysetup.c:470 +msgid "open device as " +msgstr "ouvrir le périphérique comme " + +#: src/cryptsetup.c:3213 src/cryptsetup.c:3214 src/cryptsetup.c:3215 +#: src/veritysetup.c:359 src/veritysetup.c:360 src/integritysetup.c:471 +#: src/integritysetup.c:472 +msgid "" +msgstr "" + +#: src/cryptsetup.c:3213 src/veritysetup.c:359 src/integritysetup.c:471 +msgid "close device (remove mapping)" +msgstr "fermeture du périphérique (supprime le « mapping »)" + +#: src/cryptsetup.c:3214 +msgid "resize active device" +msgstr "redimensionner le périphérique actif" + +#: src/cryptsetup.c:3215 +msgid "show device status" +msgstr "afficher le statut du périphérique" + +#: src/cryptsetup.c:3216 +msgid "[--cipher ]" +msgstr "[--cipher ]" + +#: src/cryptsetup.c:3216 +msgid "benchmark cipher" +msgstr "chiffrement pour test de performance" + +#: src/cryptsetup.c:3217 src/cryptsetup.c:3218 src/cryptsetup.c:3219 +#: src/cryptsetup.c:3220 src/cryptsetup.c:3221 src/cryptsetup.c:3228 +#: src/cryptsetup.c:3229 src/cryptsetup.c:3230 src/cryptsetup.c:3231 +#: src/cryptsetup.c:3232 src/cryptsetup.c:3233 src/cryptsetup.c:3234 +#: src/cryptsetup.c:3235 +msgid "" +msgstr "" + +#: src/cryptsetup.c:3217 +msgid "try to repair on-disk metadata" +msgstr "essayer de réparer les métadonnées sur le disque" + +#: src/cryptsetup.c:3218 +msgid "reencrypt LUKS2 device" +msgstr "rechiffrer le périphérique LUKS2" + +#: src/cryptsetup.c:3219 +msgid "erase all keyslots (remove encryption key)" +msgstr "supprimer tous les emplacements de clés (supprime la clé de chiffrement)" + +#: src/cryptsetup.c:3220 +msgid "convert LUKS from/to LUKS2 format" +msgstr "convertir LUKS depuis/vers le format LUKS2" + +#: src/cryptsetup.c:3221 +msgid "set permanent configuration options for LUKS2" +msgstr "définir les options de configuration permanentes pour LUKS2" + +#: src/cryptsetup.c:3222 src/cryptsetup.c:3223 +msgid " []" +msgstr " []" + +#: src/cryptsetup.c:3222 +msgid "formats a LUKS device" +msgstr "formater un périphérique LUKS" + +#: src/cryptsetup.c:3223 +msgid "add key to LUKS device" +msgstr "ajouter une clé au périphérique LUKS" + +#: src/cryptsetup.c:3224 src/cryptsetup.c:3225 src/cryptsetup.c:3226 +msgid " []" +msgstr " []" + +#: src/cryptsetup.c:3224 +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:3225 +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:3226 +msgid "converts a key to new pbkdf parameters" +msgstr "converti une clé vers les nouveaux paramètres pbkdf" + +#: src/cryptsetup.c:3227 +msgid " " +msgstr " " + +#: src/cryptsetup.c:3227 +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:3228 +msgid "print UUID of LUKS device" +msgstr "afficher l'UUID du périphérique LUKS" + +#: src/cryptsetup.c:3229 +msgid "tests for LUKS partition header" +msgstr "teste si a un en-tête de partition LUKS" + +#: src/cryptsetup.c:3230 +msgid "dump LUKS partition information" +msgstr "affiche les informations LUKS de la partition" + +#: src/cryptsetup.c:3231 +msgid "dump TCRYPT device information" +msgstr "affiche les informations du périphérique TCRYPT" + +#: src/cryptsetup.c:3232 +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:3233 +msgid "Resume suspended LUKS device" +msgstr "Remettre en service le périphérique LUKS suspendu" + +#: src/cryptsetup.c:3234 +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:3235 +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:3236 +msgid " " +msgstr " " + +#: src/cryptsetup.c:3236 +msgid "Manipulate LUKS2 tokens" +msgstr "Manipuler les jetons LUKS2" + +#: src/cryptsetup.c:3254 src/veritysetup.c:376 src/integritysetup.c:488 +msgid "" +"\n" +" is one of:\n" +msgstr "" +"\n" +" est l'une de :\n" + +#: src/cryptsetup.c:3260 +msgid "" +"\n" +"You can also use old syntax aliases:\n" +"\topen: create (plainOpen), luksOpen, loopaesOpen, tcryptOpen\n" +"\tclose: remove (plainClose), luksClose, loopaesClose, tcryptClose\n" +msgstr "" +"\n" +"Vous pouvez aussi utiliser les alias de l'ancienne syntaxe  :\n" +"\touvrir : create (plainOpen), luksOpen, loopaesOpen, tcryptOpen\n" +"\tfermer : remove (plainClose), luksClose, loopaesClose, tcryptClose\n" + +#: src/cryptsetup.c:3264 +#, c-format +msgid "" +"\n" +" is the device to create under %s\n" +" is the encrypted device\n" +" is the LUKS key slot number to modify\n" +" optional key file for the new key for luksAddKey action\n" +msgstr "" +"\n" +" est le périphérique à créer dans %s\n" +" est le périphérique chiffré\n" +" 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:3271 +#, c-format +msgid "" +"\n" +"Default compiled-in metadata format is %s (for luksFormat action).\n" +msgstr "" +"\n" +"Le format de métadonnées compilé par défaut est %s (pour l'action luksFormat).\n" + +#: src/cryptsetup.c:3276 +#, c-format +msgid "" +"\n" +"Default compiled-in key and passphrase parameters:\n" +"\tMaximum keyfile size: %dkB, Maximum interactive passphrase length %d (characters)\n" +"Default PBKDF for LUKS1: %s, iteration time: %d (ms)\n" +"Default PBKDF for LUKS2: %s\n" +"\tIteration time: %d, Memory required: %dkB, Parallel threads: %d\n" +msgstr "" +"\n" +"Clé compilée par défaut et paramètres de phrase secrète :\n" +"\tTaille max. fichier de clé : %d ko, longueur max. interactive de phrase secrète %d (caractères)\n" +"PBKDF par défaut pour LUKS1 : %s, temps d'itération : %d (ms)\n" +"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:3287 +#, c-format +msgid "" +"\n" +"Default compiled-in device cipher parameters:\n" +"\tloop-AES: %s, Key %d bits\n" +"\tplain: %s, Key: %d bits, Password hashing: %s\n" +"\tLUKS: %s, Key: %d bits, LUKS header hashing: %s, RNG: %s\n" +msgstr "" +"\n" +"Paramètres de chiffrement compilés par défaut :\n" +"\tloop-AES: %s, Clé %d bits\n" +"\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:3296 +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:3312 src/veritysetup.c:532 src/integritysetup.c:630 +#, c-format +msgid "%s: requires %s as arguments" +msgstr "%s : exige %s comme arguments." + +#: src/cryptsetup.c:3350 src/veritysetup.c:421 src/integritysetup.c:527 +#: src/cryptsetup_reencrypt.c:1591 +msgid "Show this help message" +msgstr "Afficher ce message d'aide" + +#: src/cryptsetup.c:3351 src/veritysetup.c:422 src/integritysetup.c:528 +#: src/cryptsetup_reencrypt.c:1592 +msgid "Display brief usage" +msgstr "Afficher, en résumé, la syntaxe d'invocation" + +#: src/cryptsetup.c:3352 src/veritysetup.c:423 src/integritysetup.c:529 +#: src/cryptsetup_reencrypt.c:1593 +msgid "Print package version" +msgstr "Afficher la version du paquet" + +#: src/cryptsetup.c:3356 src/veritysetup.c:427 src/integritysetup.c:533 +#: src/cryptsetup_reencrypt.c:1597 +msgid "Help options:" +msgstr "Options d'aide :" + +#: src/cryptsetup.c:3357 src/veritysetup.c:428 src/integritysetup.c:534 +#: src/cryptsetup_reencrypt.c:1598 +msgid "Shows more detailed error messages" +msgstr "Afficher des messages d'erreur plus détaillés" + +#: src/cryptsetup.c:3358 src/veritysetup.c:429 src/integritysetup.c:535 +#: src/cryptsetup_reencrypt.c:1599 +msgid "Show debug messages" +msgstr "Afficher les messages de débogage" + +#: src/cryptsetup.c:3359 +msgid "Show debug messages including JSON metadata" +msgstr "Montrer les messages de débogage incluant les métadonnées JSON" + +#: src/cryptsetup.c:3360 src/cryptsetup_reencrypt.c:1601 +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:3361 src/cryptsetup_reencrypt.c:1603 +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:3362 +msgid "Verifies the passphrase by asking for it twice" +msgstr "Vérifier la phrase secrète en la demandant deux fois" + +#: src/cryptsetup.c:3363 src/cryptsetup_reencrypt.c:1605 +msgid "Read the key from a file" +msgstr "Lire la clef depuis un fichier" + +#: src/cryptsetup.c:3364 +msgid "Read the volume (master) key from file." +msgstr "Lire la clé (maîtresse) du volume depuis un fichier." + +#: src/cryptsetup.c:3365 +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:3366 src/cryptsetup_reencrypt.c:1602 +msgid "The size of the encryption key" +msgstr "La taille de la clé de chiffrement" + +#: src/cryptsetup.c:3366 src/cryptsetup.c:3425 src/integritysetup.c:553 +#: src/integritysetup.c:557 src/integritysetup.c:561 +#: src/cryptsetup_reencrypt.c:1602 +msgid "BITS" +msgstr "BITS" + +#: src/cryptsetup.c:3367 src/cryptsetup_reencrypt.c:1618 +msgid "Limits the read from keyfile" +msgstr "Limite la lecture d'un fichier de clé" + +#: src/cryptsetup.c:3367 src/cryptsetup.c:3368 src/cryptsetup.c:3369 +#: src/cryptsetup.c:3370 src/cryptsetup.c:3373 src/cryptsetup.c:3422 +#: src/cryptsetup.c:3423 src/cryptsetup.c:3431 src/cryptsetup.c:3432 +#: src/veritysetup.c:432 src/veritysetup.c:433 src/veritysetup.c:434 +#: src/veritysetup.c:437 src/veritysetup.c:438 src/integritysetup.c:542 +#: src/integritysetup.c:548 src/integritysetup.c:549 +#: src/cryptsetup_reencrypt.c:1617 src/cryptsetup_reencrypt.c:1618 +#: src/cryptsetup_reencrypt.c:1619 src/cryptsetup_reencrypt.c:1620 +msgid "bytes" +msgstr "octets" + +#: src/cryptsetup.c:3368 src/cryptsetup_reencrypt.c:1617 +msgid "Number of bytes to skip in keyfile" +msgstr "Nombre d'octets à ignorer dans le fichier de clé" + +#: src/cryptsetup.c:3369 +msgid "Limits the read from newly added keyfile" +msgstr "Limite la lecture d'un nouveau fichier de clé ajouté" + +#: src/cryptsetup.c:3370 +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:3371 +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:3372 +msgid "The size of the device" +msgstr "La taille du périphérique" + +#: src/cryptsetup.c:3372 src/cryptsetup.c:3374 src/cryptsetup.c:3375 +#: src/cryptsetup.c:3381 src/integritysetup.c:543 src/integritysetup.c:550 +msgid "SECTORS" +msgstr "SECTEURS" + +#: src/cryptsetup.c:3373 src/cryptsetup_reencrypt.c:1620 +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:3374 +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:3375 +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:3376 +msgid "Create a readonly mapping" +msgstr "Crée une association en lecture seule" + +#: src/cryptsetup.c:3377 src/integritysetup.c:536 +#: src/cryptsetup_reencrypt.c:1608 +msgid "Do not ask for confirmation" +msgstr "Ne pas demander confirmation" + +#: src/cryptsetup.c:3378 +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:3378 src/cryptsetup.c:3379 src/integritysetup.c:537 +#: src/cryptsetup_reencrypt.c:1609 +msgid "secs" +msgstr "s" + +#: src/cryptsetup.c:3379 src/integritysetup.c:537 +#: src/cryptsetup_reencrypt.c:1609 +msgid "Progress line update (in seconds)" +msgstr "Mise à jour de la ligne de progression (en secondes)" + +#: src/cryptsetup.c:3380 src/cryptsetup_reencrypt.c:1610 +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:3381 +msgid "Align payload at sector boundaries - for luksFormat" +msgstr "Utiliser une limite de secteurs pour aligner les données – pour luksFormat" + +#: src/cryptsetup.c:3382 +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:3383 src/cryptsetup_reencrypt.c:1611 +msgid "Use /dev/random for generating volume key" +msgstr "Utiliser /dev/random pour générer la clé de volume" + +#: src/cryptsetup.c:3384 src/cryptsetup_reencrypt.c:1612 +msgid "Use /dev/urandom for generating volume key" +msgstr "Utiliser /dev/urandom pour générer la clé de volume" + +#: src/cryptsetup.c:3385 +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:3386 src/veritysetup.c:441 +msgid "UUID for device to use" +msgstr "UUID du périphérique à utiliser" + +#: src/cryptsetup.c:3387 +msgid "Allow discards (aka TRIM) requests for device" +msgstr "Autoriser les demandes d'abandon (TRIM) pour le périphérique" + +#: src/cryptsetup.c:3388 src/cryptsetup_reencrypt.c:1629 +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:3389 +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:3390 +msgid "Use hidden header (hidden TCRYPT device)" +msgstr "Utilise l'en-tête caché (périphérique TCRYPT caché)" + +#: src/cryptsetup.c:3391 +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:3392 +msgid "Use backup (secondary) TCRYPT header" +msgstr "Utiliser l'en-tête TCRYPT de secours (secondaire)" + +#: src/cryptsetup.c:3393 +msgid "Scan also for VeraCrypt compatible device" +msgstr "Recherche aussi des périphériques compatibles avec VeraCrypt" + +#: src/cryptsetup.c:3394 +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:3395 +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:3396 +msgid "Type of device metadata: luks, luks1, luks2, plain, loopaes, tcrypt" +msgstr "Type de métadonnées du périphérique : luks, luks1, luks2, plain, loopaes, tcrypt" + +#: src/cryptsetup.c:3397 +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:3398 +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:3399 +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:3400 +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:3401 +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:3402 +msgid "PBKDF iteration time for LUKS (in ms)" +msgstr "Temps d'itération de PBKDF pour LUKS (en ms)" + +#: src/cryptsetup.c:3402 src/cryptsetup_reencrypt.c:1607 +msgid "msecs" +msgstr "ms" + +#: src/cryptsetup.c:3403 src/cryptsetup_reencrypt.c:1625 +msgid "PBKDF algorithm (for LUKS2): argon2i, argon2id, pbkdf2" +msgstr "Algorithme PBKDF (pour LUKS2): argon2i, argon2id, pbkdf2" + +#: src/cryptsetup.c:3404 src/cryptsetup_reencrypt.c:1626 +msgid "PBKDF memory cost limit" +msgstr "Limite de coût mémoire PBKDF" + +#: src/cryptsetup.c:3404 src/cryptsetup_reencrypt.c:1626 +msgid "kilobytes" +msgstr "kilooctets" + +#: src/cryptsetup.c:3405 src/cryptsetup_reencrypt.c:1627 +msgid "PBKDF parallel cost" +msgstr "Coût parallèle PBKDF" + +#: src/cryptsetup.c:3405 src/cryptsetup_reencrypt.c:1627 +msgid "threads" +msgstr "threads" + +#: src/cryptsetup.c:3406 src/cryptsetup_reencrypt.c:1628 +msgid "PBKDF iterations cost (forced, disables benchmark)" +msgstr "Coût d'itération PBKDF (forcé, désactive l'étalon)" + +#: src/cryptsetup.c:3407 +msgid "Keyslot priority: ignore, normal, prefer" +msgstr "Priorité de l'emplacement de clé: ignore, normal, prefer" + +#: src/cryptsetup.c:3408 +msgid "Disable locking of on-disk metadata" +msgstr "Désactiver le verrouillage des métadonnées sur le disque" + +#: src/cryptsetup.c:3409 +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:3410 +msgid "Data integrity algorithm (LUKS2 only)" +msgstr "Algorithme d'intégrité des données (uniquement LUKS2)" + +#: src/cryptsetup.c:3411 src/integritysetup.c:564 +msgid "Disable journal for integrity device" +msgstr "Désactiver le journal pour le périphérique d'intégrité" + +#: src/cryptsetup.c:3412 src/integritysetup.c:538 +msgid "Do not wipe device after format" +msgstr "Ne pas effacer le périphérique après le formatage" + +#: src/cryptsetup.c:3413 +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:3414 +msgid "Token number (default: any)" +msgstr "Numéro de jeton (défaut: n'importe lequel)" + +#: src/cryptsetup.c:3415 +msgid "Key description" +msgstr "Description de clé" + +#: src/cryptsetup.c:3416 +msgid "Encryption sector size (default: 512 bytes)" +msgstr "Taille du secteur de chiffrement (défaut: 512 octets)" + +#: src/cryptsetup.c:3417 +msgid "Set activation flags persistent for device" +msgstr "Définir les fanions d'activation comme permanents pour le périphérique" + +#: src/cryptsetup.c:3418 +msgid "Set label for the LUKS2 device" +msgstr "Définir l'étiquette pour le périphérique LUKS2" + +#: src/cryptsetup.c:3419 +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:3420 +msgid "Create unbound (no assigned data segment) LUKS2 keyslot" +msgstr "Créer un emplacement de clé LUKS2 non lié (aucun segment de donnée assigné)" + +#: src/cryptsetup.c:3421 +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:3422 +msgid "LUKS2 header metadata area size" +msgstr "Taille de la zone de métadonnées de l'en-tête LUKS2" + +#: src/cryptsetup.c:3423 +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:3424 +msgid "Refresh (reactivate) device with new parameters" +msgstr "Rafraîchir (réactiver) le périphérique avec de nouveaux paramètres" + +#: src/cryptsetup.c:3425 +msgid "LUKS2 keyslot: The size of the encryption key" +msgstr "Emplacement de clé LUKS2: La taille de la clé de chiffrement" + +#: src/cryptsetup.c:3426 +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:3427 +msgid "Encrypt LUKS2 device (in-place encryption)." +msgstr "Chiffrer le périphérique LUKS2 (chiffrement sur place)." + +#: src/cryptsetup.c:3428 +msgid "Decrypt LUKS2 device (remove encryption)." +msgstr "Déchiffrer le périphérique LUKS2 (supprime le chiffrement)" + +#: src/cryptsetup.c:3429 +msgid "Initialize LUKS2 reencryption in metadata only." +msgstr "Initialiser le rechiffrement LUKS2 uniquement dans les métadonnées." + +#: src/cryptsetup.c:3430 +msgid "Resume initialized LUKS2 reencryption only." +msgstr "Redémarrer uniquement le rechiffrement LUKS2 initialisé." + +#: src/cryptsetup.c:3431 src/cryptsetup_reencrypt.c:1619 +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:3432 +msgid "Maximal reencryption hotzone size." +msgstr "Taille maximale de la zone chaude de rechiffrement." + +#: src/cryptsetup.c:3433 +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:3434 +msgid "Reencryption hotzone checksums hash" +msgstr "Rechiffrer le hachage des sommes de contrôle de la zone chaude" + +#: src/cryptsetup.c:3435 +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:3451 src/veritysetup.c:462 src/integritysetup.c:583 +msgid "[OPTION...] " +msgstr "[OPTION...] " + +#: src/cryptsetup.c:3502 src/veritysetup.c:496 src/integritysetup.c:594 +msgid "Argument missing." +msgstr "Il manque l'argument ." + +#: src/cryptsetup.c:3565 src/veritysetup.c:527 src/integritysetup.c:625 +msgid "Unknown action." +msgstr "Action inconnue." + +#: src/cryptsetup.c:3575 +msgid "Parameter --refresh is only allowed with open or refresh commands.\n" +msgstr "L'option --refresh est permise uniquement avec les commandes open ou refresh.\n" + +#: src/cryptsetup.c:3580 +msgid "Options --refresh and --test-passphrase are mutually exclusive.\n" +msgstr "Les options --refresh et --test-passphrase sont mutuellement exclusives.\n" + +#: src/cryptsetup.c:3585 +msgid "Option --deferred is allowed only for close command.\n" +msgstr "L'option --deferred est permise uniquement avec la commande close.\n" + +#: src/cryptsetup.c:3590 +msgid "Option --shared is allowed only for open of plain device.\n" +msgstr "L'option --shared est permise uniquement pour ouvrir un périphérique ordinaire.\n" + +#: src/cryptsetup.c:3595 +msgid "Option --allow-discards is allowed only for open operation.\n" +msgstr "L'option --allow-discards est permise uniquement pour une opération d'ouverture.\n" + +#: src/cryptsetup.c:3600 +msgid "Option --persistent is allowed only for open operation.\n" +msgstr "L'option --persistent est permise uniquement pour une opération d'ouverture.\n" + +#: src/cryptsetup.c:3605 +msgid "Option --serialize-memory-hard-pbkdf is allowed only for open operation.\n" +msgstr "L'option --serialize-memory-hard-pbkdf est permise uniquement pour une opération d'ouverture.\n" + +#: src/cryptsetup.c:3610 +msgid "Option --persistent is not allowed with --test-passphrase.\n" +msgstr "L'option --persistent n'est pas permise avec --test-passphrase.\n" + +#: src/cryptsetup.c:3620 +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 "" +"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:3626 +msgid "Option --integrity is allowed only for luksFormat (LUKS2).\n" +msgstr "L'option --integrity est autorisée uniquement avec luksFormat (LUKS2).\n" + +#: src/cryptsetup.c:3631 +msgid "Option --integrity-no-wipe can be used only for format action with integrity extension.\n" +msgstr "L'option --integrity-no-wipe peut uniquement être utilisée pour une action de formatage avec l'extension d'intégrité.\n" + +#: src/cryptsetup.c:3637 +msgid "Options --label and --subsystem are allowed only for luksFormat and config LUKS2 operations.\n" +msgstr "Les options --label et --subsystem sont permises uniquement pour les opérations luksFormat et config LUKS2.\n" + +#: src/cryptsetup.c:3643 +msgid "Option --test-passphrase is allowed only for open of LUKS and TCRYPT devices.\n" +msgstr "L'option --test-passphrase est autorisée uniquement pour ouvrir des périphériques LUKS et TCRYPT.\n" + +#: src/cryptsetup.c:3648 src/cryptsetup_reencrypt.c:1692 +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:3654 src/cryptsetup_reencrypt.c:1378 +#: src/cryptsetup_reencrypt.c:1697 +msgid "Key slot is invalid." +msgstr "Emplacement de clé non valide." + +#: src/cryptsetup.c:3661 +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:3668 src/veritysetup.c:539 src/integritysetup.c:649 +#: src/cryptsetup_reencrypt.c:1671 +msgid "Negative number for option not permitted." +msgstr "Nombre négatif non autorisé pour l'option." + +#: src/cryptsetup.c:3672 +msgid "Only one --key-file argument is allowed." +msgstr "Un seul argument --key-file est autorisé." + +#: src/cryptsetup.c:3676 src/cryptsetup_reencrypt.c:1663 +#: src/cryptsetup_reencrypt.c:1701 +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:3680 +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:3684 +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:3688 +msgid "Option --align-payload is allowed only for luksFormat." +msgstr "L'option --align-payload est autorisée uniquement avec luksFormat." + +#: src/cryptsetup.c:3692 +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:3697 +msgid "Invalid LUKS2 metadata size specification." +msgstr "Spécification de taille de métadonnées LUKS2 invalide." + +#: src/cryptsetup.c:3701 +msgid "Invalid LUKS2 keyslots size specification." +msgstr "Spécification de taille d'emplacements de clés LUKS2 invalide." + +#: src/cryptsetup.c:3705 +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:3711 +msgid "Option --skip is supported only for open of plain and loopaes devices.\n" +msgstr "L'option --skip est supportée uniquement pour ouvrir des périphériques ordinaires et loopaes.\n" + +#: src/cryptsetup.c:3718 +msgid "Option --offset is supported only for open of plain and loopaes devices, luksFormat and device reencryption.\n" +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.\n" + +#: src/cryptsetup.c:3724 +msgid "Option --tcrypt-hidden, --tcrypt-system or --tcrypt-backup is supported only for TCRYPT device.\n" +msgstr "Les options --tcrypt-hidden, --tcrypt-system ou --tcrypt-backup sont supportées seulement pour un périphérique TCRYPT.\n" + +#: src/cryptsetup.c:3729 +msgid "Option --tcrypt-hidden cannot be combined with --allow-discards.\n" +msgstr "L'option --tcrypt-hidden ne peut pas être combinée avec --allow-discards.\n" + +#: src/cryptsetup.c:3734 +msgid "Option --veracrypt is supported only for TCRYPT device type.\n" +msgstr "L'option --veracrypt est uniquement supportée pour un périphérique de type TCRYPT.\n" + +#: src/cryptsetup.c:3740 +msgid "Invalid argument for parameter --veracrypt-pim supplied.\n" +msgstr "Argument invalide fourni pour le paramètre --veracrypt-pim.\n" + +#: src/cryptsetup.c:3744 +msgid "Option --veracrypt-pim is supported only for VeraCrypt compatible devices.\n" +msgstr "L'option --veracrypt-pim est uniquement supportée pour un périphérique compatible avec VeraCrypt.\n" + +#: src/cryptsetup.c:3752 +msgid "Option --veracrypt-query-pim is supported only for VeraCrypt compatible devices.\n" +msgstr "L'option --veracrypt-query-pim est uniquement supportée pour un périphérique compatible avec VeraCrypt.\n" + +#: src/cryptsetup.c:3756 +msgid "The options --veracrypt-pim and --veracrypt-query-pim are mutually exclusive.\n" +msgstr "Les options --veracrypt-pim et --veracrypt-query-pim sont mutuellement exclusives.\n" + +#: src/cryptsetup.c:3763 +msgid "Option --priority can be only ignore/normal/prefer.\n" +msgstr "L'option --priority peut uniquement être ignore/normal/prefer.\n" + +#: src/cryptsetup.c:3768 +msgid "Keyslot specification is required.\n" +msgstr "Une spécification d'emplacement de clé est requise.\n" + +#: src/cryptsetup.c:3773 src/cryptsetup_reencrypt.c:1677 +msgid "Password-based key derivation function (PBKDF) can be only pbkdf2 or argon2i/argon2id.\n" +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.\n" + +#: src/cryptsetup.c:3778 src/cryptsetup_reencrypt.c:1682 +msgid "PBKDF forced iterations cannot be combined with iteration time option.\n" +msgstr "Les itérations forcées de PBKDF ne peuvent pas être combinées avec l'option de temps d'itération.\n" + +#: src/cryptsetup.c:3784 +msgid "Sector size option is not supported for this command.\n" +msgstr "L'option de taille de secteur n'est pas supportée pour cette commande.\n" + +#: src/cryptsetup.c:3790 +msgid "Unsupported encryption sector size.\n" +msgstr "Taille de secteur de chiffrement non supportée.\n" + +#: src/cryptsetup.c:3795 +msgid "Key size is required with --unbound option.\n" +msgstr "La taille de clé est requise avec l'option --unbound.\n" + +#: src/cryptsetup.c:3800 +msgid "Option --unbound may be used only with luksAddKey action.\n" +msgstr "L'option --unbound peut uniquement être utilisée avec l'action luksAddKey.\n" + +#: src/cryptsetup.c:3805 +msgid "Option --refresh may be used only with open action.\n" +msgstr "L'option --refresh peut uniquement être utilisée avec l'action open.\n" + +#: src/cryptsetup.c:3816 +msgid "Cannot disable metadata locking.\n" +msgstr "Impossible de désactiver le verrouillage des métadonnées.\n" + +#: src/cryptsetup.c:3826 +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:3834 src/cryptsetup_reencrypt.c:1706 +#: src/cryptsetup_reencrypt.c:1711 +msgid "Invalid device size specification." +msgstr "La taille de périphérique spécifiée est invalide." + +#: src/cryptsetup.c:3837 +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:3840 src/cryptsetup_reencrypt.c:1717 +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:3845 +msgid "Invalid data size specification." +msgstr "La taille des données spécifiée est invalide." + +#: src/cryptsetup.c:3850 +msgid "Reduce size overflow." +msgstr "Débordement de la taille de réduction." + +#: src/cryptsetup.c:3854 +msgid "LUKS2 decryption requires option --header." +msgstr "Le déchiffrement LUKS2 requiert l'option --header." + +#: src/cryptsetup.c:3858 +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:3862 +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:3866 +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:65 +msgid "Invalid salt string specified." +msgstr "Chaîne d'aléa spécifiée invalide." + +#: src/veritysetup.c:96 +#, 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:106 +#, c-format +msgid "Cannot create FEC image %s for writing." +msgstr "Impossible de créer l'image FEC %s en écriture." + +#: src/veritysetup.c:176 +msgid "Invalid root hash string specified." +msgstr "Chaîne de hachage racine invalide." + +#: src/veritysetup.c:356 +msgid " " +msgstr " " + +#: src/veritysetup.c:356 src/integritysetup.c:469 +msgid "format device" +msgstr "formater le périphérique" + +#: src/veritysetup.c:357 +msgid " " +msgstr " " + +#: src/veritysetup.c:357 +msgid "verify device" +msgstr "vérifier le périphérique" + +#: src/veritysetup.c:358 +msgid " " +msgstr " " + +#: src/veritysetup.c:360 src/integritysetup.c:472 +msgid "show active device status" +msgstr "afficher le statut du périphérique actif" + +#: src/veritysetup.c:361 +msgid "" +msgstr "" + +#: src/veritysetup.c:361 src/integritysetup.c:473 +msgid "show on-disk information" +msgstr "afficher les informations sur le disque" + +#: src/veritysetup.c:380 +#, c-format +msgid "" +"\n" +" is the device to create under %s\n" +" is the data device\n" +" is the device containing verification data\n" +" hash of the root node on \n" +msgstr "" +"\n" +" est le périphérique à créer sous %s\n" +" est le périphérique de données\n" +" est le périphérique contenant les données de vérification\n" +" hachage du nœud racine sur \n" + +#: src/veritysetup.c:387 +#, c-format +msgid "" +"\n" +"Default compiled-in dm-verity parameters:\n" +"\tHash: %s, Data block (bytes): %u, Hash block (bytes): %u, Salt size: %u, Hash format: %u\n" +msgstr "" +"\n" +"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:430 +msgid "Do not use verity superblock" +msgstr "Ne pas utiliser le superbloc de verity" + +#: src/veritysetup.c:431 +msgid "Format type (1 - normal, 0 - original Chrome OS)" +msgstr "Type de format (1: normal ; 0: Chrome OS)" + +#: src/veritysetup.c:431 +msgid "number" +msgstr "nombre" + +#: src/veritysetup.c:432 +msgid "Block size on the data device" +msgstr "Taille de bloc sur le périphérique de données" + +#: src/veritysetup.c:433 +msgid "Block size on the hash device" +msgstr "Taille de bloc sur le périphérique de hachage" + +#: src/veritysetup.c:434 +msgid "FEC parity bytes" +msgstr "Octets de parité FEC" + +#: src/veritysetup.c:435 +msgid "The number of blocks in the data file" +msgstr "Le nombre de blocs dans le fichier de données" + +#: src/veritysetup.c:435 +msgid "blocks" +msgstr "blocs" + +#: src/veritysetup.c:436 +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:436 src/integritysetup.c:540 +msgid "path" +msgstr "chemin" + +#: src/veritysetup.c:437 +msgid "Starting offset on the hash device" +msgstr "Décalage de départ sur le périphérique de hachage" + +#: src/veritysetup.c:438 +msgid "Starting offset on the FEC device" +msgstr "Décalage de départ sur le périphérique FEC" + +#: src/veritysetup.c:439 +msgid "Hash algorithm" +msgstr "Algorithme de hachage" + +#: src/veritysetup.c:439 +msgid "string" +msgstr "chaîne" + +#: src/veritysetup.c:440 +msgid "Salt" +msgstr "Aléa" + +#: src/veritysetup.c:440 +msgid "hex string" +msgstr "chaîne hexa" + +#: src/veritysetup.c:442 +msgid "Restart kernel if corruption is detected" +msgstr "Redémarrer le noyau si une corruption est détectée" + +#: src/veritysetup.c:443 +msgid "Ignore corruption, log it only" +msgstr "Ignore la corruption, elle est seulement enregistrée dans le journal" + +#: src/veritysetup.c:444 +msgid "Do not verify zeroed blocks" +msgstr "Ne pas vérifier les blocs mis à zéro" + +#: src/veritysetup.c:445 +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:545 +msgid "Option --ignore-corruption, --restart-on-corruption or --ignore-zero-blocks is allowed only for open operation.\n" +msgstr "L'option --ignore-corruption, --restart-on-corruption ou --ignore-zero-blocks est seulement permise pour une opération d'ouverture.\n" + +#: src/veritysetup.c:550 +msgid "Option --ignore-corruption and --restart-on-corruption cannot be used together.\n" +msgstr "Les options --ignore-corruption et --restart-on-corruption ne peuvent être utilisées ensembles.\n" + +#: src/integritysetup.c:83 src/utils_password.c:305 +#, c-format +msgid "Cannot read keyfile %s." +msgstr "Impossible de lire le fichier de clé %s." + +#: src/integritysetup.c:87 src/utils_password.c:310 +#, c-format +msgid "Cannot read %d bytes from keyfile %s." +msgstr "Échec à la lecture de %d octets du fichier de clé %s." + +#: src/integritysetup.c:250 +#, c-format +msgid "Formatted with tag size %u, internal integrity %s.\n" +msgstr "Formaté avec une taille de balise de %u, intégrité interne %s.\n" + +#: src/integritysetup.c:469 src/integritysetup.c:473 +msgid "" +msgstr "" + +#: src/integritysetup.c:470 +msgid " " +msgstr " " + +#: src/integritysetup.c:492 +#, c-format +msgid "" +"\n" +" is the device to create under %s\n" +" is the device containing data with integrity tags\n" +msgstr "" +"\n" +" est le périphérique à créer sous %s\n" +" est le périphérique contenant les données avec les balises d'intégrité\n" + +#: src/integritysetup.c:497 +#, c-format +msgid "" +"\n" +"Default compiled-in dm-integrity parameters:\n" +"\tTag size: %u bytes, Checksum algorithm: %s\n" +msgstr "" +"\n" +"Paramètres compilés par défaut dans dm-integrity :\n" +"\tTaille d'étiquette : %u octets, Algorithme de somme de contrôle : %s\n" + +#: src/integritysetup.c:540 +msgid "Path to data device (if separated)" +msgstr "Chemin vers le périphérique de données (si séparé)" + +#: src/integritysetup.c:542 +msgid "Journal size" +msgstr "Taille du journal" + +#: src/integritysetup.c:543 +msgid "Interleave sectors" +msgstr "Secteurs d'entrelacement" + +#: src/integritysetup.c:544 +msgid "Journal watermark" +msgstr "Filigrane du journal" + +#: src/integritysetup.c:544 +msgid "percent" +msgstr "pourcent" + +#: src/integritysetup.c:545 +msgid "Journal commit time" +msgstr "Temps pour écrire le journal" + +#: src/integritysetup.c:545 src/integritysetup.c:547 +msgid "ms" +msgstr "ms" + +#: src/integritysetup.c:546 +msgid "Number of 512-byte sectors per bit (bitmap mode)." +msgstr "Nombre de secteurs de 512 octets par bit (mode champ de bit)." + +#: src/integritysetup.c:547 +msgid "Bitmap mode flush time" +msgstr "Temps de purge du mode champ de bit" + +#: src/integritysetup.c:548 +msgid "Tag size (per-sector)" +msgstr "Taille de balise (par secteur)" + +#: src/integritysetup.c:549 +msgid "Sector size" +msgstr "Taille de secteur" + +#: src/integritysetup.c:550 +msgid "Buffers size" +msgstr "Taille des tampons" + +#: src/integritysetup.c:552 +msgid "Data integrity algorithm" +msgstr "Algorithme d'intégrité des données" + +#: src/integritysetup.c:553 +msgid "The size of the data integrity key" +msgstr "La taille de la clé d'intégrité des données" + +#: src/integritysetup.c:554 +msgid "Read the integrity key from a file" +msgstr "Lire la clef d'intégrité depuis un fichier" + +#: src/integritysetup.c:556 +msgid "Journal integrity algorithm" +msgstr "Algorithme d'intégrité du journal" + +#: src/integritysetup.c:557 +msgid "The size of the journal integrity key" +msgstr "La taille de la clé du journal d'intégrité" + +#: src/integritysetup.c:558 +msgid "Read the journal integrity key from a file" +msgstr "Lire la clé du journal d'intégrité depuis un fichier" + +#: src/integritysetup.c:560 +msgid "Journal encryption algorithm" +msgstr "Algorithme de chiffrement du journal" + +#: src/integritysetup.c:561 +msgid "The size of the journal encryption key" +msgstr "La taille de la clé de chiffrement du journal" + +#: src/integritysetup.c:562 +msgid "Read the journal encryption key from a file" +msgstr "Lire la clé de chiffrement du journal depuis un fichier" + +#: src/integritysetup.c:565 +msgid "Recovery mode (no journal, no tag checking)" +msgstr "Mode récupération (pas de journal, pas de vérification des balises)" + +#: src/integritysetup.c:566 +msgid "Use bitmap to track changes and disable journal for integrity device" +msgstr "Utiliser un champ de bits pour garder une trace des changements et désactiver le journal sur le périphérique d'intégrité" + +#: src/integritysetup.c:567 +msgid "Recalculate initial tags automatically." +msgstr "Recalculer les balises initiales automatiquement." + +#: src/integritysetup.c:640 +msgid "Option --integrity-recalculate can be used only for open action." +msgstr "L'option --integrity-recalculate peut uniquement être utilisée avec l'action open." + +#: src/integritysetup.c:655 +msgid "Options --journal-size, --interleave-sectors, --sector-size, --tag-size and --no-wipe can be used only for format action.\n" +msgstr "Les options --journal-size, --interleave-sectors, --sector-size, --tag-size et --no-wipe peuvent uniquement être utilisée avec l'action de format.\n" + +#: src/integritysetup.c:661 +msgid "Invalid journal size specification." +msgstr "La spécification de la taille du journal est invalide." + +#: src/integritysetup.c:666 +msgid "Both key file and key size options must be specified." +msgstr "Les options du fichier de clé et de la taille de la clé doivent être spécifiées toutes les deux." + +#: src/integritysetup.c:669 +msgid "Integrity algorithm must be specified if integrity key is used." +msgstr "L'algorithme d'intégrité doit être spécifié si la clé d'intégrité est utilisée." + +#: src/integritysetup.c:674 +msgid "Both journal integrity key file and key size options must be specified." +msgstr "Les options du fichier de clé de l'intégrité du journal et de la taille de la clé doivent être spécifiées toutes les deux." + +#: src/integritysetup.c:677 +msgid "Journal integrity algorithm must be specified if journal integrity key is used." +msgstr "L'algorithme d'intégrité du journal doit être spécifié si la clé d'intégrité du journal est utilisée." + +#: src/integritysetup.c:682 +msgid "Both journal encryption key file and key size options must be specified." +msgstr "Les options du fichier de clé de chiffrement du journal et de la taille de la clé doivent être spécifiées toutes les deux." + +#: src/integritysetup.c:685 +msgid "Journal encryption algorithm must be specified if journal encryption key is used." +msgstr "L'algorithme de chiffrement du journal doit être spécifié si la clé de chiffrement du journal est utilisée." + +#: src/integritysetup.c:689 +msgid "Recovery and bitmap mode options are mutually exclusive." +msgstr "Les options de mode récupération et champ de bits sont mutuellement exclusives." + +#: src/integritysetup.c:693 +msgid "Journal options cannot be used in bitmap mode." +msgstr "Les options de journal ne peuvent pas être utilisées en mode champ de bits." + +#: src/integritysetup.c:697 +msgid "Bitmap options can be used only in bitmap mode." +msgstr "Les options de champ de bits peuvent uniquement être utilisées en mode champ de bits." + +#: src/cryptsetup_reencrypt.c:172 +msgid "Reencryption already in-progress." +msgstr "Re-chiffrement déjà en cours." + +#: src/cryptsetup_reencrypt.c:201 +#, c-format +msgid "Cannot exclusively open %s, device in use." +msgstr "Impossible d'ouvrir exclusivement %s : périphérique utilisé." + +#: src/cryptsetup_reencrypt.c:215 src/cryptsetup_reencrypt.c:1127 +msgid "Allocation of aligned memory failed." +msgstr "La réservation de la mémoire alignée a échoué." + +#: src/cryptsetup_reencrypt.c:222 +#, c-format +msgid "Cannot read device %s." +msgstr "Impossible de lire le périphérique %s." + +#: src/cryptsetup_reencrypt.c:233 +#, c-format +msgid "Marking LUKS1 device %s unusable." +msgstr "Marque le périphérique LUKS1 %s comme inutilisable." + +#: src/cryptsetup_reencrypt.c:237 +#, c-format +msgid "Setting LUKS2 offline reencrypt flag on device %s." +msgstr "Activation du fanion de re-chiffrement hors-ligne de LUKS2 sur le périphérique %s." + +#: src/cryptsetup_reencrypt.c:254 +#, c-format +msgid "Cannot write device %s." +msgstr "Impossible d'écrire le périphérique %s." + +#: src/cryptsetup_reencrypt.c:302 +msgid "Cannot write reencryption log file." +msgstr "Impossible d'écrire le journal de re-chiffrement." + +#: src/cryptsetup_reencrypt.c:358 +msgid "Cannot read reencryption log file." +msgstr "Impossible de lire le journal de re-chiffrement." + +#: src/cryptsetup_reencrypt.c:396 +#, c-format +msgid "Log file %s exists, resuming reencryption.\n" +msgstr "Fichier journal %s existe. Reprise du re-chiffrement.\n" + +#: src/cryptsetup_reencrypt.c:445 +msgid "Activating temporary device using old LUKS header." +msgstr "Activation du périphérique temporaire en utilisant l'ancien en-tête LUKS." + +#: src/cryptsetup_reencrypt.c:455 +msgid "Activating temporary device using new LUKS header." +msgstr "Activation du périphérique temporaire un utilisant le nouvel en-tête LUKS." + +#: src/cryptsetup_reencrypt.c:465 +msgid "Activation of temporary devices failed." +msgstr "Échec de l'activation des périphériques temporaires." + +#: src/cryptsetup_reencrypt.c:551 +msgid "Failed to set data offset." +msgstr "Impossible de définir les offsets des données." + +#: src/cryptsetup_reencrypt.c:557 +msgid "Failed to set metadata size." +msgstr "Impossible de définir la taille des métadonnées." + +#: src/cryptsetup_reencrypt.c:565 +#, c-format +msgid "New LUKS header for device %s created." +msgstr "Nouvel en-tête LUKS créé pour le périphérique %s." + +#: src/cryptsetup_reencrypt.c:625 +#, c-format +msgid "This version of cryptsetup-reencrypt can't handle new internal token type %s." +msgstr "Cette version de cryptsetup-reencrypt ne gère pas le nouveau type de jeton interne %s." + +#: src/cryptsetup_reencrypt.c:647 +msgid "Failed to read activation flags from backup header." +msgstr "Échec lors de la lecture des fanions d'activation depuis l'en-tête de sauvegarde." + +#: src/cryptsetup_reencrypt.c:651 +msgid "Failed to write activation flags to new header." +msgstr "Échec lors de l'écriture des fanions d'activation dans le nouvel en-tête." + +#: src/cryptsetup_reencrypt.c:655 src/cryptsetup_reencrypt.c:659 +msgid "Failed to read requirements from backup header." +msgstr "Échec lors de la lecture des exigences de l'en-tête de sauvegarde." + +#: src/cryptsetup_reencrypt.c:697 +#, c-format +msgid "%s header backup of device %s created." +msgstr "Sauvegarde de l'en-tête %s du périphérique %s créée." + +#: src/cryptsetup_reencrypt.c:760 +msgid "Creation of LUKS backup headers failed." +msgstr "La création de la sauvegarde des en-têtes LUKS a échoué." + +#: src/cryptsetup_reencrypt.c:893 +#, c-format +msgid "Cannot restore %s header on device %s." +msgstr "Impossible de rétablir l'en-tête %s sur le périphérique %s." + +#: src/cryptsetup_reencrypt.c:895 +#, c-format +msgid "%s header on device %s restored." +msgstr "En-tête %s rétabli sur le périphérique %s." + +#: src/cryptsetup_reencrypt.c:1099 src/cryptsetup_reencrypt.c:1105 +msgid "Cannot open temporary LUKS device." +msgstr "Impossible d'ouvrir le périphérique LUKS temporaire." + +#: src/cryptsetup_reencrypt.c:1110 src/cryptsetup_reencrypt.c:1115 +msgid "Cannot get device size." +msgstr "Impossible d'obtenir la taille du périphérique." + +#: src/cryptsetup_reencrypt.c:1150 +msgid "IO error during reencryption." +msgstr "Erreur E/S pendant le re-chiffrement." + +#: src/cryptsetup_reencrypt.c:1181 +msgid "Provided UUID is invalid." +msgstr "Le UUID fourni est invalide." + +#: src/cryptsetup_reencrypt.c:1407 +msgid "Cannot open reencryption log file." +msgstr "Impossible d'ouvrir le journal de re-chiffrement." + +#: src/cryptsetup_reencrypt.c:1413 +msgid "No decryption in progress, provided UUID can be used only to resume suspended decryption process." +msgstr "Pas de déchiffrement en cours. Le UUID fourni ne peut être utilisé que pour reprendre un déchiffrement suspendu." + +#: src/cryptsetup_reencrypt.c:1488 +#, c-format +msgid "Changed pbkdf parameters in keyslot %i." +msgstr "Les paramètres pbkdf ont été changés dans l'emplacement de clé %i." + +#: src/cryptsetup_reencrypt.c:1600 +msgid "Reencryption block size" +msgstr "Taille de bloc de re-chiffrement" + +#: src/cryptsetup_reencrypt.c:1600 +msgid "MiB" +msgstr "MiB" + +#: src/cryptsetup_reencrypt.c:1604 +msgid "Do not change key, no data area reencryption" +msgstr "Ne pas changer la clé, pas de re-chiffrement de la zone de donnée" + +#: src/cryptsetup_reencrypt.c:1606 +msgid "Read new volume (master) key from file" +msgstr "Lire la nouvelle clé (maîtresse) du volume depuis un fichier" + +#: src/cryptsetup_reencrypt.c:1607 +msgid "PBKDF2 iteration time for LUKS (in ms)" +msgstr "Temps d'itération de PBKDF2 pour LUKS (en ms)" + +#: src/cryptsetup_reencrypt.c:1613 +msgid "Use direct-io when accessing devices" +msgstr "Utiliser direct-io pour accéder aux périphériques" + +#: src/cryptsetup_reencrypt.c:1614 +msgid "Use fsync after each block" +msgstr "Utiliser fsync après chaque bloc" + +#: src/cryptsetup_reencrypt.c:1615 +msgid "Update log file after every block" +msgstr "Mettre le journal à jour après chaque bloc" + +#: src/cryptsetup_reencrypt.c:1616 +msgid "Use only this slot (others will be disabled)" +msgstr "Utiliser uniquement cet emplacement (les autres seront désactivés)" + +#: src/cryptsetup_reencrypt.c:1621 +msgid "Create new header on not encrypted device" +msgstr "Créer un nouvel en-tête sur le périphérique non chiffré" + +#: src/cryptsetup_reencrypt.c:1622 +msgid "Permanently decrypt device (remove encryption)" +msgstr "Déchiffrer le périphérique de manière permanente (supprime le chiffrement)" + +#: src/cryptsetup_reencrypt.c:1623 +msgid "The UUID used to resume decryption" +msgstr "Le UUID utilisé pour poursuivre le déchiffrement" + +#: src/cryptsetup_reencrypt.c:1624 +msgid "Type of LUKS metadata: luks1, luks2" +msgstr "Type de métadonnées LUKS: luks1, luks2" + +#: src/cryptsetup_reencrypt.c:1643 +msgid "[OPTION...] " +msgstr "[OPTION...] " + +#: src/cryptsetup_reencrypt.c:1651 +#, c-format +msgid "Reencryption will change: %s%s%s%s%s%s." +msgstr "Le re-chiffrement va changer : %s%s%s%s%s%s." + +#: src/cryptsetup_reencrypt.c:1652 +msgid "volume key" +msgstr "clé de volume" + +#: src/cryptsetup_reencrypt.c:1654 +msgid "set hash to " +msgstr "change hachage en " + +#: src/cryptsetup_reencrypt.c:1655 +msgid ", set cipher to " +msgstr ", change chiffrement en " + +#: src/cryptsetup_reencrypt.c:1659 +msgid "Argument required." +msgstr "Argument requis." + +#: src/cryptsetup_reencrypt.c:1687 +msgid "Only values between 1 MiB and 64 MiB allowed for reencryption block size." +msgstr "Seules les valeurs entre 1 MiB et 64 MiB sont permises pour la taille des blocs de re-chiffrement." + +#: src/cryptsetup_reencrypt.c:1714 +msgid "Maximum device reduce size is 64 MiB." +msgstr "La taille maximum réduite pour le périphérique est 64 MiB." + +#: src/cryptsetup_reencrypt.c:1721 +msgid "Option --new must be used together with --reduce-device-size or --header." +msgstr "L'option --new doit être utilisée avec --reduce-device-size ou --header." + +#: src/cryptsetup_reencrypt.c:1725 +msgid "Option --keep-key can be used only with --hash, --iter-time or --pbkdf-force-iterations." +msgstr "L'option --keep-key ne peut être utilisée que avec --hash, --iter-time ou --pbkdf-force-iterations²." + +#: src/cryptsetup_reencrypt.c:1729 +msgid "Option --new cannot be used together with --decrypt." +msgstr "L'option --new ne peut pas être utilisée avec --decrypt." + +#: src/cryptsetup_reencrypt.c:1733 +msgid "Option --decrypt is incompatible with specified parameters." +msgstr "L'option --decrypt est incompatible avec les paramètres spécifiés." + +#: src/cryptsetup_reencrypt.c:1737 +msgid "Option --uuid is allowed only together with --decrypt." +msgstr "L'option --uuid ne peut être utilisée qu'avec --decrypt." + +#: src/cryptsetup_reencrypt.c:1741 +msgid "Invalid luks type. Use one of these: 'luks', 'luks1' or 'luks2'." +msgstr "Type luks invalide. Utilisez « luks », « luks1 » ou « luks2 »." + +#: src/utils_tools.c:151 +msgid "Error reading response from terminal." +msgstr "Erreur de lecture de la réponse depuis le terminal." + +#: src/utils_tools.c:186 +msgid "Command successful.\n" +msgstr "Opération réussie.\n" + +#: src/utils_tools.c:194 +msgid "wrong or missing parameters" +msgstr "paramètres erronés ou manquants" + +#: src/utils_tools.c:196 +msgid "no permission or bad passphrase" +msgstr "Aucune permission ou mauvais mot de passe" + +#: src/utils_tools.c:198 +msgid "out of memory" +msgstr "mémoire épuisée" + +#: src/utils_tools.c:200 +msgid "wrong device or file specified" +msgstr "mauvais périphérique ou fichier spécifié" + +#: src/utils_tools.c:202 +msgid "device already exists or device is busy" +msgstr "le périphérique existe déjà ou est utilisé" + +#: src/utils_tools.c:204 +msgid "unknown error" +msgstr "erreur inconnue" + +#: src/utils_tools.c:206 +#, c-format +msgid "Command failed with code %i (%s).\n" +msgstr "La commande a échoué avec le code %i (%s).\n" + +#: src/utils_tools.c:283 +#, c-format +msgid "Key slot %i created." +msgstr "Emplacement de clef %i créé." + +#: src/utils_tools.c:285 +#, c-format +msgid "Key slot %i unlocked." +msgstr "Emplacement de clé %i déverrouillé." + +#: src/utils_tools.c:287 +#, c-format +msgid "Key slot %i removed." +msgstr "Emplacement de clé %i supprimé." + +#: src/utils_tools.c:296 +#, c-format +msgid "Token %i created." +msgstr "Jeton %i créé." + +#: src/utils_tools.c:298 +#, c-format +msgid "Token %i removed." +msgstr "Jeton %i supprimé." + +#: src/utils_tools.c:464 +msgid "" +"\n" +"Wipe interrupted." +msgstr "" +"\n" +"Effacement interrompu." + +#: src/utils_tools.c:475 +#, c-format +msgid "WARNING: Device %s already contains a '%s' partition signature.\n" +msgstr "ATTENTION: Le périphérique %s contient déjà une signature pour une partition « %s ».\n" + +#: src/utils_tools.c:483 +#, c-format +msgid "WARNING: Device %s already contains a '%s' superblock signature.\n" +msgstr "ATTENTION: Le périphérique %s contient déjà une signature pour un superblock « %s ».\n" + +#: src/utils_tools.c:504 src/utils_tools.c:568 +msgid "Failed to initialize device signature probes." +msgstr "Impossible d'initialiser les sondes de la signature du périphérique." + +#: src/utils_tools.c:548 +#, c-format +msgid "Failed to stat device %s." +msgstr "Impossible d'exécuter « stat » sur le périphérique %s." + +#: src/utils_tools.c:561 +#, c-format +msgid "Device %s is in use. Can not proceed with format operation." +msgstr "Le périphérique %s est utilisé. Impossible de continuer avec l'opération de formatage." + +#: src/utils_tools.c:563 +#, c-format +msgid "Failed to open file %s in read/write mode." +msgstr "Impossible d'ouvrir le fichier %s en mode lecture/écriture." + +#: src/utils_tools.c:577 +#, c-format +msgid "Existing '%s' partition signature (offset: % bytes) on device %s will be wiped." +msgstr "La signature de partition « %s » existante (offset: % octets) sur le périphérique %s sera effacée." + +#: src/utils_tools.c:580 +#, c-format +msgid "Existing '%s' superblock signature (offset: % bytes) on device %s will be wiped." +msgstr "La signature de superbloc « %s » existante (offset: % octets) sur le périphérique %s sera effacée." + +#: src/utils_tools.c:583 +msgid "Failed to wipe device signature." +msgstr "Impossible d'effacer la signature du périphérique." + +#: src/utils_tools.c:590 +#, c-format +msgid "Failed to probe device %s for a signature." +msgstr "Impossible de sonder le périphérique %s pour une signature." + +#: src/utils_tools.c:629 +msgid "" +"\n" +"Reencryption interrupted." +msgstr "" +"\n" +"Rechiffrement interrompu." + +#: src/utils_password.c:43 src/utils_password.c:75 +#, c-format +msgid "Cannot check password quality: %s" +msgstr "Ne peut vérifier la qualité du mot de passe : %s" + +#: src/utils_password.c:51 +#, c-format +msgid "" +"Password quality check failed:\n" +" %s" +msgstr "" +"Échec de la vérification de la qualité du mot de passe :\n" +" %s" + +#: src/utils_password.c:83 +#, c-format +msgid "Password quality check failed: Bad passphrase (%s)" +msgstr "Échec de la vérification de la qualité du mot de passe : Mauvais mot de passe (%s)" + +#: src/utils_password.c:193 src/utils_password.c:208 +msgid "Error reading passphrase from terminal." +msgstr "Erreur de lecture de la phrase secrète depuis la console." + +#: src/utils_password.c:206 +msgid "Verify passphrase: " +msgstr "Vérifiez la phrase secrète : " + +#: src/utils_password.c:213 +msgid "Passphrases do not match." +msgstr "Les phrases secrètes ne sont pas identiques." + +#: src/utils_password.c:250 +msgid "Cannot use offset with terminal input." +msgstr "Le décalage n'est pas possible si l'entrée provient de la console." + +#: src/utils_password.c:253 +#, c-format +msgid "Enter passphrase: " +msgstr "Saisissez la phrase secrète : " + +#: src/utils_password.c:256 +#, c-format +msgid "Enter passphrase for %s: " +msgstr "Saisissez la phrase secrète pour %s : " + +#: src/utils_password.c:287 +msgid "No key available with this passphrase." +msgstr "Aucune clé disponible avec cette phrase secrète." + +#: src/utils_password.c:289 +msgid "No usable keyslot is available." +msgstr "Aucun emplacement de clé utilisable est disponible." + +#: src/utils_password.c:328 +#, c-format +msgid "Cannot open keyfile %s for write." +msgstr "Impossible d'ouvrir le fichier de clé %s en écriture." + +#: src/utils_password.c:335 +#, c-format +msgid "Cannot write to keyfile %s." +msgstr "Impossible d'écrire dans le fichier de clé %s." + +#: src/utils_luks2.c:47 +#, c-format +msgid "Failed to open file %s in read-only mode." +msgstr "Impossible d'ouvrir le fichier %s en lecture seule." + +#: src/utils_luks2.c:60 +msgid "Provide valid LUKS2 token JSON:\n" +msgstr "Fournissez le jeton LUKS valide au format JSON:\n" + +#: src/utils_luks2.c:67 +msgid "Failed to read JSON file." +msgstr "Impossible de lire le fichier JSON." + +#: src/utils_luks2.c:72 +msgid "" +"\n" +"Read interrupted." +msgstr "" +"\n" +"Lecture interrompue." + +#: src/utils_luks2.c:113 +#, c-format +msgid "Failed to open file %s in write mode." +msgstr "Impossible d'ouvrir le fichier %s en écriture seule." + +#: src/utils_luks2.c:122 +msgid "" +"\n" +"Write interrupted." +msgstr "" +"\n" +"Écriture interrompue." + +#: src/utils_luks2.c:126 +msgid "Failed to write JSON file." +msgstr "Erreur lors de l'écriture du fichier JSON." + +#~ msgid "Interrupted by a signal." +#~ msgstr "Interrompu par un signal." + +#~ msgid "Function not available in FIPS mode." +#~ msgstr "Fonction pas disponible en mode FIPS." + +#~ msgid "Failed to write hash." +#~ msgstr "Erreur lors de l'écriture du hachage." + +#~ msgid "Failed to finalize hash." +#~ msgstr "Impossible de terminer le hachage." + +#~ msgid "Invalid resilience parameters (internal error)." +#~ msgstr "Paramètres de résilience invalides (erreur interne)." + +#~ msgid "Failed to assign new enc segments." +#~ msgstr "Échec lors de l'assignation des nouveaux segments enc." + +#~ msgid "Failed to assign digest %u to segment %u." +#~ msgstr "Impossible d'affecter le résumé %u au segment %u." + +#~ msgid "Failed to set segments." +#~ msgstr "Échec lors de la définition des segments." + +#~ msgid "Failed to assign reencrypt previous backup segment." +#~ msgstr "Échec lors de l'assignation du segment de sauvegarde précédent rechiffré." + +#~ msgid "Failed to assign reencrypt final backup segment." +#~ msgstr "Échec lors de l'assignation du segment de sauvegarde final rechiffré." + +#~ msgid "Failed generate 2nd segment." +#~ msgstr "Échec lors de la génération du 2ème segment." + +#~ msgid "Failed generate 1st segment." +#~ msgstr "Échec lors de la génération du 1er segment." + +#~ msgid "Failed to allocate device %s." +#~ msgstr "Impossible d'allouer le périphérique %s." + +#~ msgid "Failed to allocate dm segments." +#~ msgstr "Échec de l'allocation des segments dm." + +#~ msgid "Failed to create dm segments." +#~ msgstr "Échec lors de la création des segments dm." + +#~ msgid "Failed to allocate device for new backing device." +#~ msgstr "Impossible d'allouer le périphérique pour le nouveau périphérique de soutien." + +#~ msgid "Failed to reload overlay device %s." +#~ msgstr "Impossible de recharger le périphérique de surcouche %s." + +#~ msgid "Failed to refresh helper devices." +#~ msgstr "Échec lors du rafraichissement des périphériques de support." + +#~ msgid "Failed to create reencryption backup segments." +#~ msgstr "Échec lors de la création des segments de sauvegarde du rechiffrement." + +#~ msgid "Failed to set online-reencryption requirement." +#~ msgstr "Impossible de définir les exigences du rechiffrement en ligne." + +#~ msgid "Failed to hash sector at offset %zu." +#~ msgstr "Échec du hachage du secteur à l'offset %zu." + +#~ msgid "Failed to read sector hash." +#~ msgstr "Erreur de lecture du hachage du secteur." + +#~ msgid "Error: Calculated reencryption offset % is beyond device size %." +#~ msgstr "Erreur: Le décalage de rechiffrement calculé % est au delà de la taille du périphérique %" + +#~ msgid "Device is not in clean reencryption state." +#~ msgstr "Le périphérique n'est pas dans un état de rechiffrement propre." + +#~ msgid "Failed to read device info from %s." +#~ msgstr "Impossible de lire les informations du périphérique dans %s." + +#~ msgid "Failed to calculate new segments." +#~ msgstr "Échec lors du calcul des nouveaux segments." + +#~ msgid "Failed to assign pre reenc segments." +#~ msgstr "Échec de l'affectation des segments pre reenc." + +#~ msgid "Failed finalize hotzone resilience, retval = %d" +#~ msgstr "Échec de finalisation de la résilience de la zone chaude, retval = %d" + +#~ msgid "Failed to write data." +#~ msgstr "Erreur lors de l'écriture des données." + +#~ msgid "Failed to update metadata or reassign device segments." +#~ msgstr "Échec de la mise à jour des métadonnées ou de la réaffectation des segments du périphérique." + +#~ msgid "Failed to reload %s device." +#~ msgstr "Erreur au rechargement du périphérique %s." + +#~ msgid "Failed to erase backup segments" +#~ msgstr "Échec lors de l'effacement des segments de sauvegarde." + +#~ msgid "Requested dmcrypt performance options are not supported." +#~ msgstr "Les options de performance dmcrypt demandées ne sont pas supportées." + +#~ msgid "Cannot format device %s which is still in use." +#~ msgstr "Impossible de formater le périphérique %s qui est déjà en cours d'utilisation." + +#~ msgid "Key slot %d is not used." +#~ msgstr "L'emplacement de clé %d n'est pas utilisé." + +#~ msgid "Key slot %d selected for deletion." +#~ msgstr "Emplacement de clé %d sélectionné pour suppression." + +#~ msgid "open device as mapping " +#~ msgstr "ouvrir un périphérique avec comme « mapping »" + +#~ msgid "close device (deactivate and remove mapping)" +#~ msgstr "fermeture du périphérique (désactive et supprime le « mapping »)" + +#~ msgid "Failed to set PBKDF parameters." +#~ msgstr "Impossible de définir les paramètres PBKDF." + +#~ msgid "Cannot seek to device offset.\n" +#~ msgstr "Impossible de se déplacer au décalage du périphérique.\n" + +#~ msgid "Device %s is too small. (LUKS2 requires at least % bytes.)" +#~ msgstr "Le périphérique %s est trop petit (LUKS2 a besoin d'au moins % octets)." + +#~ msgid "Replaced with key slot %d." +#~ msgstr "Remplacé par l'emplacement de clé %d." + +#~ msgid "Missing LUKS target type, option --type is required." +#~ msgstr "Type de cible LUKS manquant, l'option --type est requise." + +#~ msgid "Missing --token option specifying token for removal." +#~ msgstr "Il manque l'option --token pour spécifier le jeton à retirer." + +#~ msgid "Add or remove keyring token" +#~ msgstr "Ajoute ou retire le jeton du porte-clé" + +#~ msgid "Activated keyslot %i." +#~ msgstr "Emplacement de clé activé %i." + +#~ msgid "memory allocation error in action_luksFormat" +#~ msgstr "erreur d'allocation de mémoire dans action_luksFormat" + +#~ msgid "Key slot is invalid.\n" +#~ msgstr "Emplacement de clé non valide.\n" + +#~ msgid "Using default pbkdf parameters for new LUKS2 header.\n" +#~ msgstr "Utilisation des paramètres pbkdf par défaut pour le nouvel en-tête LUKS2.\n" + +#~ msgid "Too many tree levels for verity volume.\n" +#~ msgstr "Trop de niveaux dans l'arborescence du volume verity.\n" + +#~ msgid "Key %d not active. Can't wipe.\n" +#~ msgstr "La clé %d n'est pas active. Impossible de l'effacer.\n" + +#~ msgid " " +#~ msgstr " " + +#~ msgid "create active device" +#~ msgstr "créer le périphérique actif" + +#~ msgid "remove (deactivate) device" +#~ msgstr "supprime (désactive) le périphérique" + +#~ msgid "Progress: %5.1f%%, ETA %02llu:%02llu, %4llu MiB written, speed %5.1f MiB/s%s" +#~ msgstr "Progression: %5.1f%%, ETA %02llu:%02llu, %4llu MiB écrits, vitesse %5.1f MIB/s%s" + +#~ msgid "Cannot find a free loopback device.\n" +#~ msgstr "Impossible de trouver un périphérique loopback libre.\n" + +#~ msgid "Cannot open device %s\n" +#~ msgstr "Impossible d'ouvrir le périphérique %s\n" + +#~ msgid "Cannot use passed UUID unless decryption in progress.\n" +#~ msgstr "Le UUID passé ne peut pas être utilisé à moins qu'un déchiffrement ne soit en cours.\n" + +#~ msgid "Marking LUKS device %s usable.\n" +#~ msgstr "Marque le périphérique LUKS %s comme utilisable.\n" + +#~ msgid "WARNING: this is experimental code, it can completely break your data.\n" +#~ msgstr "ATTENTION : ce code est expérimental. Il peut complètement détruire vos données.\n" + +#~ msgid "FIPS checksum verification failed.\n" +#~ msgstr "La vérification de la somme de contrôle FIPS a échoué.\n" + +#~ msgid "WARNING: device %s is a partition, for TCRYPT system encryption you usually need to use whole block device path.\n" +#~ msgstr "ATTENTION : le périphérique %s est une partition. Pour le chiffrement de système TCRYPT, vous avez généralement besoin du chemin d'un périphérique bloc entier.\n" + +#~ msgid "Kernel doesn't support plain64 IV.\n" +#~ msgstr "Le noyau ne supporte pas plain64 IV.\n" + +#~ msgid "Enter LUKS passphrase: " +#~ msgstr "Saisissez la phrase secrète LUKS : " + +#~ msgid "Enter new LUKS passphrase: " +#~ msgstr "Entrez la nouvelle phrase secrète LUKS : " + +#~ msgid "Enter any LUKS passphrase: " +#~ msgstr "Entrez n'importe quelle phrase secrète LUKS : " + +#~ msgid "Backup file %s doesn't exist.\n" +#~ msgstr "Le fichier de sauvegarde %s n'existe pas.\n" + +#~ msgid "create device" +#~ msgstr "créer un périphérique" + +#~ msgid "remove device" +#~ msgstr "retirer le périphérique" + +#~ msgid "remove LUKS mapping" +#~ msgstr "retire une association LUKS" + +#~ msgid "open loop-AES device as mapping " +#~ msgstr "ouvre un périphérique loop-AES avec pour nom associé " + +#~ msgid "remove loop-AES mapping" +#~ msgstr "enlève une association loop-AES" + +#~ msgid "Key slot %d verified.\n" +#~ msgstr "L'emplacement de clé %d a été vérifié.\n" + +#~ msgid "Cannot open device %s for %s%s access.\n" +#~ msgstr "Impossible d'ouvrir le périphérique %s pour un accès %s%s.\n" + +#~ msgid "exclusive " +#~ msgstr "exclusif " + +#~ msgid "writable" +#~ msgstr "en écriture" + +#~ msgid "read-only" +#~ msgstr "en lecture seule" + +#~ msgid "WARNING!!! Possibly insecure memory. Are you root?\n" +#~ msgstr "ATTENTION !!! La mémoire n'est peut-être pas sécurisée. Êtes-vous super-utilisateur ?\n" + +#~ msgid "Negative keyfile size not permitted.\n" +#~ msgstr "Taille négative de fichier de clé non autorisée.\n" + +#~ msgid "Unable to obtain sector size for %s" +#~ msgstr "Impossible d'obtenir la taille de secteur de %s" + +#~ msgid "Block mode XTS is available since kernel 2.6.24.\n" +#~ msgstr "Le mode \"bloc\" XTS est disponible depuis le noyau 2.6.24.\n" + +#~ msgid "Key size in LRW mode must be 256 or 512 bits.\n" +#~ msgstr "La taille de la clé en mode LRW doit être un multiple de 256 ou 512 bits.\n" + +#~ msgid "Block mode LRW is available since kernel 2.6.20.\n" +#~ msgstr "Le mode \"bloc\" LRW est disponible depuis le noyau 2.6.20.\n" + +#~ msgid "Warning: exhausting read requested, but key file is not a regular file, function might never return.\n" +#~ msgstr "Attention : requête de lecture, mais le fichier de clef n'est pas régulier, la procédure peut rester bloquée.\n" + +#~ msgid "Cannot find compatible device-mapper kernel modules.\n" +#~ msgstr "Impossible de trouver des modules noyau compatibles avec device-mapper.\n" + +#~ msgid "Cannot open device: %s\n" +#~ msgstr "Impossible d'ouvrir le périphérique : %s\n" + +#~ msgid "BLKROGET failed on device %s.\n" +#~ msgstr "BLKROGET a échoué sur le périphérique %s.\n" + +#~ msgid "BLKGETSIZE failed on device %s.\n" +#~ msgstr "BLKGETSIZE a échoué sur le périphérique %s.\n" + +#~ msgid "identical to luksKillSlot - DEPRECATED - see man page" +#~ msgstr "identique à luksKillSlot - OBSOLÈTE - voir la page de man" + +#~ msgid "modify active device - DEPRECATED - see man page" +#~ msgstr "modifier le périphérique actif - OBSOLÈTE - voir la page de man" + +#~ msgid "" +#~ "The reload action is deprecated. Please use \"dmsetup reload\" in case you really need this functionality.\n" +#~ "WARNING: do not use reload to touch LUKS devices. If that is the case, hit Ctrl-C now.\n" +#~ msgstr "" +#~ "L'action « reload » est obsolète. Merci d'utiliser « dmsetup reload » si vous avez vraiment besoin de cette fonctionnalité.\n" +#~ "ATTENTION : n'utilisez pas « reload » sur des périphériques LUKS. Si c'est le cas, tapez Ctrl-C.\n" + +#~ msgid "Obsolete option --non-exclusive is ignored.\n" +#~ msgstr "L'option obsolète --non-exclusive est ignorée.\n" + +#~ msgid "Read the key from a file (can be /dev/random)" +#~ msgstr "Lit la clé depuis un fichier (qui peut être /dev/random)" + +#~ msgid "(Obsoleted, see man page.)" +#~ msgstr "(Obsolète, voir la page de man)." diff --git a/po/id.gmo b/po/id.gmo new file mode 100644 index 0000000000000000000000000000000000000000..474e367050c9e2eac1c0a686f6725cf402450f68 GIT binary patch literal 6416 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 UMj5zA-qEl+juL1=b{D>Hq)$ literal 0 HcmV?d00001 diff --git a/po/id.po b/po/id.po new file mode 100644 index 0000000..7496151 --- /dev/null +++ b/po/id.po @@ -0,0 +1,3847 @@ +# Pesan bahasa Indonesia untuk cryptsetup. +# Copyright (C) 2009 Free Software Foundation, Inc. +# This file is put in the public domain. +# Arif E. Nugroho , 2009, 2010. +# +msgid "" +msgstr "" +"Project-Id-Version: cryptsetup 1.1.0-rc4\n" +"Report-Msgid-Bugs-To: dm-crypt@saout.de\n" +"POT-Creation-Date: 2019-11-01 09:04+0100\n" +"PO-Revision-Date: 2010-01-27 07:30+0700\n" +"Last-Translator: Arif E. Nugroho \n" +"Language-Team: Indonesian \n" +"Language: id\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-1\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Bugs: Report translation errors to the Language-Team address.\n" + +#: lib/libdevmapper.c:384 +#, fuzzy +msgid "Cannot initialize device-mapper, running as non-root user." +msgstr "Tidak dapat menginisialisasi pemeta-perangkat. Apakah kernel modul dm_mod telah dimuat?\n" + +#: lib/libdevmapper.c:387 +#, fuzzy +msgid "Cannot initialize device-mapper. Is dm_mod kernel module loaded?" +msgstr "Tidak dapat menginisialisasi pemeta-perangkat. Apakah kernel modul dm_mod telah dimuat?\n" + +#: lib/libdevmapper.c:1082 +#, fuzzy +msgid "Requested deferred flag is not supported." +msgstr "Hash %s LUKS yang diminta tidak didukung.\n" + +#: lib/libdevmapper.c:1149 +#, fuzzy, c-format +msgid "DM-UUID for device %s was truncated." +msgstr "DM-UUID untuk perangkat %s telah terpotong.\n" + +#: lib/libdevmapper.c:1463 +msgid "Unknown dm target type." +msgstr "" + +#: lib/libdevmapper.c:1565 lib/libdevmapper.c:1617 +#, fuzzy +msgid "Requested dm-crypt performance options are not supported." +msgstr "Hash %s LUKS yang diminta tidak didukung.\n" + +#: lib/libdevmapper.c:1572 +msgid "Requested dm-verity data corruption handling options are not supported." +msgstr "" + +#: lib/libdevmapper.c:1576 +#, fuzzy +msgid "Requested dm-verity FEC options are not supported." +msgstr "Hash %s LUKS yang diminta tidak didukung.\n" + +#: lib/libdevmapper.c:1580 +#, fuzzy +msgid "Requested data integrity options are not supported." +msgstr "Hash %s LUKS yang diminta tidak didukung.\n" + +#: lib/libdevmapper.c:1582 +#, fuzzy +msgid "Requested sector_size option is not supported." +msgstr "Hash %s LUKS yang diminta tidak didukung.\n" + +#: lib/libdevmapper.c:1587 +msgid "Requested automatic recalculation of integrity tags is not supported." +msgstr "" + +#: lib/libdevmapper.c:1591 +#, fuzzy +msgid "Requested dm-integrity bitmap mode is not supported." +msgstr "Hash %s LUKS yang diminta tidak didukung.\n" + +#: lib/libdevmapper.c:1620 +msgid "Discard/TRIM is not supported." +msgstr "" + +#: lib/libdevmapper.c:2511 +#, c-format +msgid "Failed to query dm-%s segment." +msgstr "" + +#: lib/random.c:80 +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" +msgstr "" + +#: lib/random.c:84 +#, c-format +msgid "Generating key (%d%% done).\n" +msgstr "" + +#: lib/random.c:170 +msgid "Running in FIPS mode." +msgstr "" + +#: lib/random.c:176 +msgid "Fatal error during RNG initialisation." +msgstr "" + +#: lib/random.c:213 +#, fuzzy +msgid "Unknown RNG quality requested." +msgstr "Tipe perangkat sandi %s yang diminta tidak diketahui.\n" + +#: lib/random.c:218 +#, fuzzy +msgid "Error reading from RNG." +msgstr "Kesalahan dalam pembacaan kata sandi.\n" + +#: lib/setup.c:223 +#, fuzzy +msgid "Cannot initialize crypto RNG backend." +msgstr "Tidak dapat menginisialisasi backend crypto.\n" + +#: lib/setup.c:229 +#, fuzzy +msgid "Cannot initialize crypto backend." +msgstr "Tidak dapat menginisialisasi backend crypto.\n" + +#: lib/setup.c:260 lib/setup.c:1990 lib/verity/verity.c:120 +#, fuzzy, c-format +msgid "Hash algorithm %s not supported." +msgstr "Hash %s LUKS yang diminta tidak didukung.\n" + +#: lib/setup.c:263 lib/loopaes/loopaes.c:90 +#, fuzzy, c-format +msgid "Key processing error (using hash %s)." +msgstr "Terjadi kesalahan dalam pengolahan kunci.\n" + +#: lib/setup.c:324 lib/setup.c:351 +msgid "Cannot determine device type. Incompatible activation of device?" +msgstr "" + +#: lib/setup.c:330 lib/setup.c:2985 +#, fuzzy +msgid "This operation is supported only for LUKS device." +msgstr "Operasi ini hanya didukunga untuk perangkat LUKS.\n" + +#: lib/setup.c:357 +#, fuzzy +msgid "This operation is supported only for LUKS2 device." +msgstr "Operasi ini hanya didukunga untuk perangkat LUKS.\n" + +#: lib/setup.c:412 lib/luks2/luks2_reencrypt.c:2345 +#, fuzzy +msgid "All key slots full." +msgstr "Semua slot kunci telah penuh.\n" + +#: lib/setup.c:423 +#, fuzzy, c-format +msgid "Key slot %d is invalid, please select between 0 and %d." +msgstr "Slot kunci %d tidak valid, mohon pilih diantara 0 dan %d.\n" + +#: lib/setup.c:429 +#, fuzzy, c-format +msgid "Key slot %d is full, please select another one." +msgstr "Slot kunci %d penuh, mohon pilih yang lain.\n" + +#: lib/setup.c:514 lib/setup.c:2759 +msgid "Device size is not aligned to device logical block size." +msgstr "" + +#: lib/setup.c:610 +#, fuzzy, c-format +msgid "Header detected but device %s is too small." +msgstr "Header LUKS terdeteksi tetapi perangkat %s terlalu kecil.\n" + +#: lib/setup.c:647 +#, fuzzy +msgid "This operation is not supported for this device type." +msgstr "Operasi ini tidak didukung untuk perangkat crypt %s.\n" + +#: lib/setup.c:652 +msgid "Illegal operation with reencryption in-progress." +msgstr "" + +#: lib/setup.c:821 lib/luks1/keymanage.c:476 +#, fuzzy, c-format +msgid "Unsupported LUKS version %d." +msgstr "versi LUKS %d tidak didukung.\n" + +#: lib/setup.c:838 lib/setup.c:1483 lib/setup.c:1903 +#, fuzzy +msgid "Detached metadata device is not supported for this crypt type." +msgstr "Operasi ini tidak didukung untuk perangkat crypt %s.\n" + +#: lib/setup.c:1373 lib/setup.c:2479 lib/setup.c:2551 lib/setup.c:2563 +#: lib/setup.c:2712 lib/setup.c:4310 +#, fuzzy, c-format +msgid "Device %s is not active." +msgstr "Perangkat %s tidak aktif.\n" + +#: lib/setup.c:1390 +#, c-format +msgid "Underlying device for crypt device %s disappeared." +msgstr "" + +#: lib/setup.c:1468 +#, fuzzy +msgid "Invalid plain crypt parameters." +msgstr "Parameter crypt tidak valid.\n" + +#: lib/setup.c:1473 lib/setup.c:1893 src/integritysetup.c:73 +#, fuzzy +msgid "Invalid key size." +msgstr "Ukuran kunci tidak valid.\n" + +#: lib/setup.c:1478 lib/setup.c:1898 lib/setup.c:2100 +#, fuzzy +msgid "UUID is not supported for this crypt type." +msgstr "Operasi ini tidak didukung untuk perangkat crypt %s.\n" + +#: lib/setup.c:1493 lib/setup.c:1683 lib/luks2/luks2_reencrypt.c:2308 +#: src/cryptsetup.c:1169 +msgid "Unsupported encryption sector size." +msgstr "" + +#: lib/setup.c:1501 lib/setup.c:1808 lib/setup.c:2753 +msgid "Device size is not aligned to requested sector size." +msgstr "" + +#: lib/setup.c:1552 lib/setup.c:1671 +#, fuzzy +msgid "Can't format LUKS without device." +msgstr "Tidak dapat memformat LUKS tanpat perangkat.\n" + +#: lib/setup.c:1558 lib/setup.c:1677 +msgid "Requested data alignment is not compatible with data offset." +msgstr "" + +#: lib/setup.c:1626 lib/setup.c:1795 +msgid "WARNING: Data offset is outside of currently available data device.\n" +msgstr "" + +#: lib/setup.c:1636 lib/setup.c:1823 lib/setup.c:1844 lib/setup.c:2112 +#, fuzzy, c-format +msgid "Cannot wipe header on device %s." +msgstr "Tidak dapat menghapus kepala di perangkat %s.\n" + +#: lib/setup.c:1688 +msgid "WARNING: The device activation will fail, dm-crypt is missing support for requested encryption sector size.\n" +msgstr "" + +#: lib/setup.c:1710 +msgid "Volume key is too small for encryption with integrity extensions." +msgstr "" + +#: lib/setup.c:1765 +#, c-format +msgid "Cipher %s-%s (key size %zd bits) is not available." +msgstr "" + +#: lib/setup.c:1798 +#, c-format +msgid "WARNING: LUKS2 metadata size changed to % bytes.\n" +msgstr "" + +#: lib/setup.c:1802 +#, c-format +msgid "WARNING: LUKS2 keyslots area size changed to % bytes.\n" +msgstr "" + +#: lib/setup.c:1826 lib/utils_device.c:829 lib/luks1/keyencryption.c:256 +#: lib/luks2/luks2_reencrypt.c:2356 lib/luks2/luks2_reencrypt.c:3348 +#, fuzzy, c-format +msgid "Device %s is too small." +msgstr "Perangkat %s terlalu kecil.\n" + +#: lib/setup.c:1837 lib/setup.c:1863 +#, fuzzy, c-format +msgid "Cannot format device %s in use." +msgstr "Tidak dapat membaca perangkat %s.\n" + +#: lib/setup.c:1840 lib/setup.c:1866 +#, fuzzy, c-format +msgid "Cannot format device %s, permission denied." +msgstr "Tidak dapat membuka perangkat %s untuk akses %s%s.\n" + +#: lib/setup.c:1852 lib/setup.c:2164 +#, fuzzy, c-format +msgid "Cannot format integrity for device %s." +msgstr "Tidak dapat mendapatkan informasi mengenai perangkat %s.\n" + +#: lib/setup.c:1870 +#, fuzzy, c-format +msgid "Cannot format device %s." +msgstr "Tidak dapat membaca perangkat %s.\n" + +#: lib/setup.c:1888 +#, fuzzy +msgid "Can't format LOOPAES without device." +msgstr "Tidak dapat memformat LUKS tanpat perangkat.\n" + +#: lib/setup.c:1933 +#, fuzzy +msgid "Can't format VERITY without device." +msgstr "Tidak dapat memformat LUKS tanpat perangkat.\n" + +#: lib/setup.c:1944 lib/verity/verity.c:103 +#, c-format +msgid "Unsupported VERITY hash type %d." +msgstr "" + +#: lib/setup.c:1950 lib/verity/verity.c:111 +msgid "Unsupported VERITY block size." +msgstr "" + +#: lib/setup.c:1955 lib/verity/verity.c:75 +msgid "Unsupported VERITY hash offset." +msgstr "" + +#: lib/setup.c:1960 +msgid "Unsupported VERITY FEC offset." +msgstr "" + +#: lib/setup.c:1984 +msgid "Data area overlaps with hash area." +msgstr "" + +#: lib/setup.c:2009 +msgid "Hash area overlaps with FEC area." +msgstr "" + +#: lib/setup.c:2016 +msgid "Data area overlaps with FEC area." +msgstr "" + +#: lib/setup.c:2221 +#, fuzzy, c-format +msgid "Unknown crypt device type %s requested." +msgstr "Tipe perangkat sandi %s yang diminta tidak diketahui.\n" + +#: lib/setup.c:2485 lib/setup.c:2557 lib/setup.c:2570 +#, fuzzy, c-format +msgid "Unsupported parameters on device %s." +msgstr "Tidak dapat menghapus kepala di perangkat %s.\n" + +#: lib/setup.c:2491 lib/setup.c:2576 lib/luks2/luks2_reencrypt.c:2408 +#: lib/luks2/luks2_reencrypt.c:2718 +#, fuzzy, c-format +msgid "Mismatching parameters on device %s." +msgstr "Tidak dapat menghapus kepala di perangkat %s.\n" + +#: lib/setup.c:2596 +msgid "Crypt devices mismatch." +msgstr "" + +#: lib/setup.c:2633 lib/setup.c:2638 lib/luks2/luks2_reencrypt.c:2054 +#: lib/luks2/luks2_reencrypt.c:3126 +#, fuzzy, c-format +msgid "Failed to reload device %s." +msgstr "Tidak dapat membaca perangkat %s.\n" + +#: lib/setup.c:2643 lib/setup.c:2648 lib/luks2/luks2_reencrypt.c:2025 +#: lib/luks2/luks2_reencrypt.c:2032 +#, fuzzy, c-format +msgid "Failed to suspend device %s." +msgstr "Gagal membuka berkas kunci %s.\n" + +#: lib/setup.c:2653 lib/luks2/luks2_reencrypt.c:2039 +#: lib/luks2/luks2_reencrypt.c:3061 lib/luks2/luks2_reencrypt.c:3130 +#, fuzzy, c-format +msgid "Failed to resume device %s." +msgstr "Gagal membuka berkas kunci %s.\n" + +#: lib/setup.c:2667 +#, c-format +msgid "Fatal error while reloading device %s (on top of device %s)." +msgstr "" + +#: lib/setup.c:2670 lib/setup.c:2672 +#, fuzzy, c-format +msgid "Failed to switch device %s to dm-error." +msgstr "Gagal untuk memperoleh direktori pemeta-perangkat." + +#: lib/setup.c:2744 +#, fuzzy +msgid "Cannot resize loop device." +msgstr "Tidak dapat membaca perangkat %s.\n" + +#: lib/setup.c:2817 +msgid "Do you really want to change UUID of device?" +msgstr "" + +#: lib/setup.c:2893 +#, fuzzy +msgid "Header backup file does not contain compatible LUKS header." +msgstr "Berkas cadangan tidak berisi header LUKS yang valid.\n" + +#: lib/setup.c:2993 +#, fuzzy, c-format +msgid "Volume %s is not active." +msgstr "Volume %s tidak aktif.\n" + +#: lib/setup.c:3004 +#, fuzzy, c-format +msgid "Volume %s is already suspended." +msgstr "Volume %s telah disuspend.\n" + +#: lib/setup.c:3017 +#, fuzzy, c-format +msgid "Suspend is not supported for device %s." +msgstr "Operasi ini tidak didukung untuk perangkat crypt %s.\n" + +#: lib/setup.c:3019 +#, fuzzy, c-format +msgid "Error during suspending device %s." +msgstr "Error selama memperbarui header LUKS di perangkat %s.\n" + +#: lib/setup.c:3052 lib/setup.c:3119 +#, fuzzy, c-format +msgid "Volume %s is not suspended." +msgstr "Volume %s tidak disuspend.\n" + +#: lib/setup.c:3081 +#, fuzzy, c-format +msgid "Resume is not supported for device %s." +msgstr "Operasi ini tidak didukung untuk perangkat crypt %s.\n" + +#: lib/setup.c:3083 lib/setup.c:3151 +#, fuzzy, c-format +msgid "Error during resuming device %s." +msgstr "Error selama memperbarui header LUKS di perangkat %s.\n" + +#: lib/setup.c:3219 lib/setup.c:3407 +#, fuzzy +msgid "Cannot add key slot, all slots disabled and no volume key provided." +msgstr "Tidak dapat menambahkan slot kunci, seluruh slot tidak aktif dan tidak ada volume kunci yang disediakan.\n" + +#: lib/setup.c:3359 +#, fuzzy +msgid "Failed to swap new key slot." +msgstr "Gagal memperoleh data statistik berkas kunci %s.\n" + +#: lib/setup.c:3524 lib/setup.c:4161 lib/setup.c:4174 lib/setup.c:4182 +#: lib/setup.c:4195 lib/setup.c:4480 lib/setup.c:5593 +#, fuzzy +msgid "Volume key does not match the volume." +msgstr "Kunci volume tidak cocok dengan volume.\n" + +#: lib/setup.c:3545 +#, fuzzy, c-format +msgid "Key slot %d is invalid." +msgstr "Slot kunci %d tidak valid.\n" + +#: lib/setup.c:3551 src/cryptsetup.c:1511 src/cryptsetup.c:1856 +#, fuzzy, c-format +msgid "Keyslot %d is not active." +msgstr "Slot kunci %d tidak digunakan.\n" + +#: lib/setup.c:3570 +msgid "Device header overlaps with data area." +msgstr "" + +#: lib/setup.c:3836 +msgid "Reencryption in-progress. Cannot activate device." +msgstr "" + +#: lib/setup.c:3838 lib/luks2/luks2_json_metadata.c:2244 +#: lib/luks2/luks2_reencrypt.c:2817 +#, fuzzy +msgid "Failed to get reencryption lock." +msgstr "Besar dari kunci enkripsi" + +#: lib/setup.c:3851 lib/luks2/luks2_reencrypt.c:2836 +msgid "LUKS2 reencryption recovery failed." +msgstr "" + +#: lib/setup.c:3978 lib/setup.c:4248 +msgid "Device type is not properly initialised." +msgstr "" + +#: lib/setup.c:4022 +#, c-format +msgid "Cannot use device %s, name is invalid or still in use." +msgstr "" + +#: lib/setup.c:4025 +#, fuzzy, c-format +msgid "Device %s already exists." +msgstr "Perangkat %s telah ada.\n" + +#: lib/setup.c:4148 +#, fuzzy +msgid "Incorrect volume key specified for plain device." +msgstr "Tidak dapat mendapatkan kunci volume untuk perangkat.\n" + +#: lib/setup.c:4214 +msgid "Incorrect root hash specified for verity device." +msgstr "" + +#: lib/setup.c:4289 lib/setup.c:4305 lib/luks2/luks2_json_metadata.c:2297 +#: src/cryptsetup.c:2527 +#, fuzzy, c-format +msgid "Device %s is still in use." +msgstr "Perangkat %s sibuk.\n" + +#: lib/setup.c:4314 +#, fuzzy, c-format +msgid "Invalid device %s." +msgstr "Perangkat %s tidak valid.\n" + +#: lib/setup.c:4430 +#, fuzzy +msgid "Volume key buffer too small." +msgstr "Penyangga kunci volume terlalu kecil.\n" + +#: lib/setup.c:4438 +#, fuzzy +msgid "Cannot retrieve volume key for plain device." +msgstr "Tidak dapat mendapatkan kunci volume untuk perangkat.\n" + +#: lib/setup.c:4449 +#, fuzzy, c-format +msgid "This operation is not supported for %s crypt device." +msgstr "Operasi ini tidak didukung untuk perangkat crypt %s.\n" + +#: lib/setup.c:4636 +#, fuzzy +msgid "Dump operation is not supported for this device type." +msgstr "Operasi ini tidak didukung untuk perangkat crypt %s.\n" + +#: lib/setup.c:4947 +#, c-format +msgid "Data offset is not multiple of %u bytes." +msgstr "" + +#: lib/setup.c:5229 +#, fuzzy, c-format +msgid "Cannot convert device %s which is still in use." +msgstr "Tidak dapat membuka perangkat %s untuk akses %s%s.\n" + +#: lib/setup.c:5526 +#, c-format +msgid "Failed to assign keyslot %u as the new volume key." +msgstr "" + +#: lib/setup.c:5599 +msgid "Failed to initialise default LUKS2 keyslot parameters." +msgstr "" + +#: lib/setup.c:5605 +#, fuzzy, c-format +msgid "Failed to assign keyslot %d to digest." +msgstr "Gagal untuk mengakses perangkat penyimpan kunci sementara.\n" + +#: lib/setup.c:5690 +#, fuzzy +msgid "Failed to load key in kernel keyring." +msgstr "Gagal membuka berkas kunci %s.\n" + +#: lib/setup.c:5757 +msgid "Kernel keyring is not supported by the kernel." +msgstr "" + +#: lib/setup.c:5767 lib/luks2/luks2_reencrypt.c:2933 +#, fuzzy, c-format +msgid "Failed to read passphrase from keyring (error %d)." +msgstr "Gagal untuk membaca dari penyimpanan kunci.\n" + +#: lib/setup.c:5791 +msgid "Failed to acquire global memory-hard access serialization lock." +msgstr "" + +#: lib/utils.c:81 +#, fuzzy +msgid "Cannot get process priority." +msgstr "Tidak dapat mendapatkan prioritas proses.\n" + +#: lib/utils.c:95 +msgid "Cannot unlock memory." +msgstr "Tidak dapat membuka kunci memori." + +#: lib/utils.c:169 lib/tcrypt/tcrypt.c:498 +#, fuzzy +msgid "Failed to open key file." +msgstr "Gagal membuka berkas kunci %s.\n" + +#: lib/utils.c:174 +#, fuzzy +msgid "Cannot read keyfile from a terminal." +msgstr "Tidak dapat membaca %d bytes dari berkas kunci %s.\n" + +#: lib/utils.c:191 +#, fuzzy +msgid "Failed to stat key file." +msgstr "Gagal memperoleh data statistik berkas kunci %s.\n" + +#: lib/utils.c:199 lib/utils.c:220 +msgid "Cannot seek to requested keyfile offset." +msgstr "" + +#: lib/utils.c:214 lib/utils.c:229 src/utils_password.c:188 +#: src/utils_password.c:201 +#, fuzzy +msgid "Out of memory while reading passphrase." +msgstr "Kehabisan memori ketika membaca kata sandi.\n" + +#: lib/utils.c:249 +#, fuzzy +msgid "Error reading passphrase." +msgstr "Kesalahan dalam pembacaan kata sandi.\n" + +#: lib/utils.c:266 +msgid "Nothing to read on input." +msgstr "" + +#: lib/utils.c:273 +msgid "Maximum keyfile size exceeded." +msgstr "" + +#: lib/utils.c:278 +msgid "Cannot read requested amount of data." +msgstr "" + +#: lib/utils_device.c:188 lib/utils_storage_wrappers.c:111 +#: lib/luks1/keyencryption.c:92 +#, fuzzy, c-format +msgid "Device %s doesn't exist or access denied." +msgstr "Perangkat %s tidak ada atau akses ditolak.\n" + +#: lib/utils_device.c:198 +#, fuzzy, c-format +msgid "Device %s is not compatible." +msgstr "Perangkat %s tidak aktif.\n" + +#: lib/utils_device.c:643 +#, c-format +msgid "Device %s is too small. Need at least % bytes." +msgstr "" + +#: lib/utils_device.c:724 +#, c-format +msgid "Cannot use device %s which is in use (already mapped or mounted)." +msgstr "" + +#: lib/utils_device.c:728 +#, fuzzy, c-format +msgid "Cannot use device %s, permission denied." +msgstr "Tidak dapat membuka perangkat %s untuk akses %s%s.\n" + +#: lib/utils_device.c:731 +#, fuzzy, c-format +msgid "Cannot get info about device %s." +msgstr "Tidak dapat mendapatkan informasi mengenai perangkat %s.\n" + +#: lib/utils_device.c:754 +msgid "Cannot use a loopback device, running as non-root user." +msgstr "" + +#: lib/utils_device.c:764 +msgid "Attaching loopback device failed (loop device with autoclear flag is required)." +msgstr "" + +#: lib/utils_device.c:810 +#, c-format +msgid "Requested offset is beyond real size of device %s." +msgstr "" + +#: lib/utils_device.c:818 +#, fuzzy, c-format +msgid "Device %s has zero size." +msgstr "Perangkat %s memiliki ukuran nol.\n" + +#: lib/utils_pbkdf.c:100 +msgid "Requested PBKDF target time cannot be zero." +msgstr "" + +#: lib/utils_pbkdf.c:106 +#, c-format +msgid "Unknown PBKDF type %s." +msgstr "" + +#: lib/utils_pbkdf.c:111 +#, fuzzy, c-format +msgid "Requested hash %s is not supported." +msgstr "Hash %s LUKS yang diminta tidak didukung.\n" + +#: lib/utils_pbkdf.c:122 +#, fuzzy +msgid "Requested PBKDF type is not supported for LUKS1." +msgstr "Hash %s LUKS yang diminta tidak didukung.\n" + +#: lib/utils_pbkdf.c:128 +msgid "PBKDF max memory or parallel threads must not be set with pbkdf2." +msgstr "" + +#: lib/utils_pbkdf.c:133 lib/utils_pbkdf.c:143 +#, c-format +msgid "Forced iteration count is too low for %s (minimum is %u)." +msgstr "" + +#: lib/utils_pbkdf.c:148 +#, c-format +msgid "Forced memory cost is too low for %s (minimum is %u kilobytes)." +msgstr "" + +#: lib/utils_pbkdf.c:155 +#, c-format +msgid "Requested maximum PBKDF memory cost is too high (maximum is %d kilobytes)." +msgstr "" + +#: lib/utils_pbkdf.c:160 +msgid "Requested maximum PBKDF memory cannot be zero." +msgstr "" + +#: lib/utils_pbkdf.c:164 +msgid "Requested PBKDF parallel threads cannot be zero." +msgstr "" + +#: lib/utils_pbkdf.c:184 +msgid "Only PBKDF2 is supported in FIPS mode." +msgstr "" + +#: lib/utils_benchmark.c:166 +msgid "PBKDF benchmark disabled but iterations not set." +msgstr "" + +#: lib/utils_benchmark.c:185 +#, c-format +msgid "Not compatible PBKDF2 options (using hash algorithm %s)." +msgstr "Pilihan PBKDF2 tidak kompatibel (menggunakan algoritma hash %s)." + +#: lib/utils_benchmark.c:205 +#, fuzzy +msgid "Not compatible PBKDF options." +msgstr "Pilihan PBKDF2 tidak kompatibel (menggunakan algoritma hash %s)." + +#: lib/utils_device_locking.c:103 +#, c-format +msgid "Locking aborted. The locking path %s/%s is unusable (not a directory or missing)." +msgstr "" + +#: lib/utils_device_locking.c:110 +#, c-format +msgid "WARNING: Locking directory %s/%s is missing!\n" +msgstr "" + +#: lib/utils_device_locking.c:120 +#, c-format +msgid "Locking aborted. The locking path %s/%s is unusable (%s is not a directory)." +msgstr "" + +#: lib/utils_wipe.c:185 src/cryptsetup_reencrypt.c:933 +#: src/cryptsetup_reencrypt.c:1017 +#, fuzzy +msgid "Cannot seek to device offset." +msgstr "Tidak dapat membaca perangkat %s.\n" + +#: lib/utils_wipe.c:209 +#, c-format +msgid "Device wipe error, offset %." +msgstr "" + +#: lib/luks1/keyencryption.c:40 +#, fuzzy, c-format +msgid "" +"Failed to setup dm-crypt key mapping for device %s.\n" +"Check that kernel supports %s cipher (check syslog for more info)." +msgstr "" +"Gagal untuk mengkonfigurasi pemetaan kunci dm-crypt untuk perangkat %s.\n" +"Periksa apakah kernel mendukung cipher %s (periksa syslog untuk informasi lebih lanjut).\n" +"%s" + +#: lib/luks1/keyencryption.c:45 +#, fuzzy +msgid "Key size in XTS mode must be 256 or 512 bits." +msgstr "Kunci harus kelipatan dari 8 bit" + +#: lib/luks1/keyencryption.c:47 +msgid "Cipher specification should be in [cipher]-[mode]-[iv] format." +msgstr "" + +#: lib/luks1/keyencryption.c:98 lib/luks1/keymanage.c:345 +#: lib/luks1/keymanage.c:636 lib/luks1/keymanage.c:1074 +#: lib/luks2/luks2_json_metadata.c:1253 lib/luks2/luks2_keyslot.c:739 +#, fuzzy, c-format +msgid "Cannot write to device %s, permission denied." +msgstr "Tidak dapat menghapus perangkat %s.\n" + +#: lib/luks1/keyencryption.c:121 +#, fuzzy +msgid "Failed to open temporary keystore device." +msgstr "Gagal untuk membuka perangkat penyimpan kunci sementara.\n" + +#: lib/luks1/keyencryption.c:128 +#, fuzzy +msgid "Failed to access temporary keystore device." +msgstr "Gagal untuk mengakses perangkat penyimpan kunci sementara.\n" + +#: lib/luks1/keyencryption.c:201 lib/luks2/luks2_keyslot_luks2.c:60 +#: lib/luks2/luks2_keyslot_luks2.c:78 lib/luks2/luks2_keyslot_reenc.c:134 +#, fuzzy +msgid "IO error while encrypting keyslot." +msgstr "Besar dari kunci enkripsi" + +#: lib/luks1/keyencryption.c:247 lib/luks1/keymanage.c:348 +#: lib/luks1/keymanage.c:589 lib/luks1/keymanage.c:639 lib/tcrypt/tcrypt.c:661 +#: lib/verity/verity.c:81 lib/verity/verity.c:179 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:1256 +#: src/cryptsetup_reencrypt.c:205 +#, fuzzy, c-format +msgid "Cannot open device %s." +msgstr "Tidak dapat membuka perangkat %s.\n" + +#: lib/luks1/keyencryption.c:258 lib/luks2/luks2_keyslot_luks2.c:137 +msgid "IO error while decrypting keyslot." +msgstr "" + +#: lib/luks1/keymanage.c:111 +#, c-format +msgid "Device %s is too small. (LUKS1 requires at least % bytes.)" +msgstr "" + +#: 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 +#, fuzzy, c-format +msgid "LUKS keyslot %u is invalid." +msgstr "Slot kunci %d tidak valid.\n" + +#: lib/luks1/keymanage.c:229 lib/luks1/keymanage.c:473 +#: lib/luks2/luks2_json_metadata.c:1084 src/cryptsetup.c:1372 +#: src/cryptsetup.c:1498 src/cryptsetup.c:1555 src/cryptsetup.c:1611 +#: src/cryptsetup.c:1678 src/cryptsetup.c:1781 src/cryptsetup.c:1845 +#: src/cryptsetup.c:2005 src/cryptsetup.c:2194 src/cryptsetup.c:2254 +#: src/cryptsetup.c:2320 src/cryptsetup.c:2484 src/cryptsetup.c:3137 +#: src/cryptsetup.c:3146 src/cryptsetup_reencrypt.c:1372 +#, fuzzy, c-format +msgid "Device %s is not a valid LUKS device." +msgstr "Perangkat %s bukan perangkat LUKS.\n" + +#: lib/luks1/keymanage.c:247 lib/luks2/luks2_json_metadata.c:1101 +#, fuzzy, c-format +msgid "Requested header backup file %s already exists." +msgstr "Berkas %s yang diminta telah ada.\n" + +#: lib/luks1/keymanage.c:249 lib/luks2/luks2_json_metadata.c:1103 +#, fuzzy, c-format +msgid "Cannot create header backup file %s." +msgstr "Tidak dapat membaca berkas cadangan header %s.\n" + +#: lib/luks1/keymanage.c:256 lib/luks2/luks2_json_metadata.c:1110 +#, fuzzy, c-format +msgid "Cannot write header backup file %s." +msgstr "Tidak dapat menulis berkas cadangan header %s.\n" + +#: lib/luks1/keymanage.c:287 lib/luks2/luks2_json_metadata.c:1162 +#, fuzzy +msgid "Backup file doesn't contain valid LUKS header." +msgstr "Berkas cadangan tidak berisi header LUKS yang valid.\n" + +#: lib/luks1/keymanage.c:300 lib/luks1/keymanage.c:550 +#: lib/luks2/luks2_json_metadata.c:1183 +#, fuzzy, c-format +msgid "Cannot open header backup file %s." +msgstr "Tidak dapat membuka berkas cadangan header %s.\n" + +#: lib/luks1/keymanage.c:308 lib/luks2/luks2_json_metadata.c:1191 +#, fuzzy, c-format +msgid "Cannot read header backup file %s." +msgstr "Tidak dapat membaca berkas cadangan header %s.\n" + +#: lib/luks1/keymanage.c:318 +#, fuzzy +msgid "Data offset or key size differs on device and backup, restore failed." +msgstr "Data offset atau ukuran kunci berbeda di perangkat dan cadangan, pengembalian gagal.\n" + +#: lib/luks1/keymanage.c:326 +#, c-format +msgid "Device %s %s%s" +msgstr "Perangkat %s %s%s" + +#: lib/luks1/keymanage.c:327 +msgid "does not contain LUKS header. Replacing header can destroy data on that device." +msgstr "tidak berisi header LUKS. Mengganti header dapat menghancurkan data di perangkat itu." + +#: lib/luks1/keymanage.c:328 +msgid "already contains LUKS header. Replacing header will destroy existing keyslots." +msgstr "telah berisi header LUKS. Mengganti header dapat mengganti slot kunci yang telah ada." + +#: lib/luks1/keymanage.c:329 lib/luks2/luks2_json_metadata.c:1225 +msgid "" +"\n" +"WARNING: real device header has different UUID than backup!" +msgstr "" +"\n" +"PERINGATAN: header perangkat ril memiliki UUID berbeda dengan cadangan!" + +#: lib/luks1/keymanage.c:376 +msgid "Non standard key size, manual repair required." +msgstr "" + +#: lib/luks1/keymanage.c:381 +msgid "Non standard keyslots alignment, manual repair required." +msgstr "" + +#: lib/luks1/keymanage.c:391 +msgid "Repairing keyslots." +msgstr "" + +#: lib/luks1/keymanage.c:410 +#, c-format +msgid "Keyslot %i: offset repaired (%u -> %u)." +msgstr "" + +#: lib/luks1/keymanage.c:418 +#, c-format +msgid "Keyslot %i: stripes repaired (%u -> %u)." +msgstr "" + +#: lib/luks1/keymanage.c:427 +#, c-format +msgid "Keyslot %i: bogus partition signature." +msgstr "" + +#: lib/luks1/keymanage.c:432 +#, fuzzy, c-format +msgid "Keyslot %i: salt wiped." +msgstr "Slot kunci %d tidak valid.\n" + +#: lib/luks1/keymanage.c:449 +msgid "Writing LUKS header to disk." +msgstr "" + +#: lib/luks1/keymanage.c:454 +msgid "Repair failed." +msgstr "" + +#: lib/luks1/keymanage.c:482 lib/luks1/keymanage.c:751 +#, fuzzy, c-format +msgid "Requested LUKS hash %s is not supported." +msgstr "Hash %s LUKS yang diminta tidak didukung.\n" + +#: lib/luks1/keymanage.c:510 src/cryptsetup.c:1081 +msgid "No known problems detected for LUKS header." +msgstr "" + +#: lib/luks1/keymanage.c:661 +#, fuzzy, c-format +msgid "Error during update of LUKS header on device %s." +msgstr "Error selama memperbarui header LUKS di perangkat %s.\n" + +#: lib/luks1/keymanage.c:669 +#, fuzzy, c-format +msgid "Error re-reading LUKS header after update on device %s." +msgstr "Error membaca-kembali header LUKS setelah memperbarui di perangkat %s.\n" + +#: lib/luks1/keymanage.c:745 +msgid "Data offset for LUKS header must be either 0 or higher than header size." +msgstr "" + +#: lib/luks1/keymanage.c:756 lib/luks1/keymanage.c:821 +#: lib/luks2/luks2_json_format.c:283 lib/luks2/luks2_json_metadata.c:1002 +#: src/cryptsetup.c:2647 +#, fuzzy +msgid "Wrong LUKS UUID format provided." +msgstr "Format UUID yang disediakan berbeda, membuat yang baru.\n" + +#: lib/luks1/keymanage.c:779 +#, fuzzy +msgid "Cannot create LUKS header: reading random salt failed." +msgstr "Tidak dapat membuat header LUKS: pembacaan garam acak gagal.\n" + +#: lib/luks1/keymanage.c:800 +#, fuzzy, c-format +msgid "Cannot create LUKS header: header digest failed (using hash %s)." +msgstr "Tidak dapat membuat header LUKS: digest header gagal (menggunakan hash %s).\n" + +#: lib/luks1/keymanage.c:844 +#, fuzzy, c-format +msgid "Key slot %d active, purge first." +msgstr "Slot kunci %d aktif, hapus terlebih dahulu.\n" + +#: lib/luks1/keymanage.c:850 +#, fuzzy, c-format +msgid "Key slot %d material includes too few stripes. Header manipulation?" +msgstr "Slot kunci %d material terdapat terlalu sedikit stripes. Manipulasi header?\n" + +#: lib/luks1/keymanage.c:1060 +#, fuzzy, c-format +msgid "Key slot %d is invalid, please select keyslot between 0 and %d." +msgstr "Slot kunci %d tidak valid, mohon pilih slot kunci diantara 0 dan %d.\n" + +#: lib/luks1/keymanage.c:1078 lib/luks2/luks2_keyslot.c:743 +#, fuzzy, c-format +msgid "Cannot wipe device %s." +msgstr "Tidak dapat menghapus perangkat %s.\n" + +#: lib/loopaes/loopaes.c:146 +msgid "Detected not yet supported GPG encrypted keyfile." +msgstr "" + +#: lib/loopaes/loopaes.c:147 +msgid "Please use gpg --decrypt | cryptsetup --keyfile=- ...\n" +msgstr "" + +#: lib/loopaes/loopaes.c:168 lib/loopaes/loopaes.c:188 +msgid "Incompatible loop-AES keyfile detected." +msgstr "" + +#: lib/loopaes/loopaes.c:245 +msgid "Kernel doesn't support loop-AES compatible mapping." +msgstr "" + +#: lib/tcrypt/tcrypt.c:505 +#, fuzzy, c-format +msgid "Error reading keyfile %s." +msgstr "Kesalahan dalam pembacaan kata sandi.\n" + +#: lib/tcrypt/tcrypt.c:545 +#, c-format +msgid "Maximum TCRYPT passphrase length (%d) exceeded." +msgstr "" + +#: lib/tcrypt/tcrypt.c:586 +#, c-format +msgid "PBKDF2 hash algorithm %s not available, skipping." +msgstr "" + +#: lib/tcrypt/tcrypt.c:602 src/cryptsetup.c:959 +msgid "Required kernel crypto interface not available." +msgstr "" + +#: lib/tcrypt/tcrypt.c:604 src/cryptsetup.c:961 +msgid "Ensure you have algif_skcipher kernel module loaded." +msgstr "" + +#: lib/tcrypt/tcrypt.c:744 +#, fuzzy, c-format +msgid "Activation is not supported for %d sector size." +msgstr "Operasi ini tidak didukung untuk perangkat crypt %s.\n" + +#: lib/tcrypt/tcrypt.c:750 +msgid "Kernel doesn't support activation for this TCRYPT legacy mode." +msgstr "" + +#: lib/tcrypt/tcrypt.c:784 +#, c-format +msgid "Activating TCRYPT system encryption for partition %s." +msgstr "" + +#: lib/tcrypt/tcrypt.c:862 +msgid "Kernel doesn't support TCRYPT compatible mapping." +msgstr "" + +#: lib/tcrypt/tcrypt.c:1084 +#, fuzzy +msgid "This function is not supported without TCRYPT header load." +msgstr "Operasi ini tidak didukung untuk perangkat crypt %s.\n" + +#: lib/verity/verity.c:69 lib/verity/verity.c:172 +#, c-format +msgid "Verity device %s doesn't use on-disk header." +msgstr "" + +#: lib/verity/verity.c:91 +#, fuzzy, c-format +msgid "Device %s is not a valid VERITY device." +msgstr "Perangkat %s bukan perangkat LUKS.\n" + +#: lib/verity/verity.c:98 +#, fuzzy, c-format +msgid "Unsupported VERITY version %d." +msgstr "versi LUKS %d tidak didukung.\n" + +#: lib/verity/verity.c:129 +msgid "VERITY header corrupted." +msgstr "" + +#: lib/verity/verity.c:166 +#, fuzzy, c-format +msgid "Wrong VERITY UUID format provided on device %s." +msgstr "Format UUID yang disediakan berbeda, membuat yang baru.\n" + +#: lib/verity/verity.c:199 +#, fuzzy, c-format +msgid "Error during update of verity header on device %s." +msgstr "Error selama memperbarui header LUKS di perangkat %s.\n" + +#: lib/verity/verity.c:262 +msgid "Errors cannot be repaired with FEC device." +msgstr "" + +#: lib/verity/verity.c:264 +#, c-format +msgid "Found %u repairable errors with FEC device." +msgstr "" + +#: lib/verity/verity.c:302 +msgid "Kernel doesn't support dm-verity mapping." +msgstr "" + +#: lib/verity/verity.c:313 +msgid "Verity device detected corruption after activation." +msgstr "" + +#: lib/verity/verity_hash.c:59 +#, c-format +msgid "Spare area is not zeroed at position %." +msgstr "" + +#: lib/verity/verity_hash.c:160 lib/verity/verity_hash.c:287 +#: lib/verity/verity_hash.c:300 +msgid "Device offset overflow." +msgstr "" + +#: lib/verity/verity_hash.c:200 +#, c-format +msgid "Verification failed at position %." +msgstr "" + +#: lib/verity/verity_hash.c:273 +msgid "Invalid size parameters for verity device." +msgstr "" + +#: lib/verity/verity_hash.c:293 +msgid "Hash area overflow." +msgstr "" + +#: lib/verity/verity_hash.c:370 +msgid "Verification of data area failed." +msgstr "" + +#: lib/verity/verity_hash.c:375 +msgid "Verification of root hash failed." +msgstr "" + +#: lib/verity/verity_hash.c:381 +#, fuzzy +msgid "Input/output error while creating hash area." +msgstr "Kehabisan memori ketika membaca kata sandi.\n" + +#: lib/verity/verity_hash.c:383 +msgid "Creation of hash area failed." +msgstr "" + +#: lib/verity/verity_hash.c:430 +#, c-format +msgid "WARNING: Kernel cannot activate device if data block size exceeds page size (%u)." +msgstr "" + +#: lib/verity/verity_fec.c:132 +msgid "Failed to allocate RS context." +msgstr "" + +#: lib/verity/verity_fec.c:147 +#, fuzzy +msgid "Failed to allocate buffer." +msgstr "Gagal memperoleh data statistik berkas kunci %s.\n" + +#: lib/verity/verity_fec.c:157 +#, c-format +msgid "Failed to read RS block % byte %d." +msgstr "" + +#: lib/verity/verity_fec.c:170 +#, c-format +msgid "Failed to read parity for RS block %." +msgstr "" + +#: lib/verity/verity_fec.c:178 +#, c-format +msgid "Failed to repair parity for block %." +msgstr "" + +#: lib/verity/verity_fec.c:189 +#, c-format +msgid "Failed to write parity for RS block %." +msgstr "" + +#: lib/verity/verity_fec.c:224 +msgid "Block sizes must match for FEC." +msgstr "" + +#: lib/verity/verity_fec.c:230 +msgid "Invalid number of parity bytes." +msgstr "" + +#: lib/verity/verity_fec.c:266 +#, fuzzy, c-format +msgid "Failed to determine size for device %s." +msgstr "Gagal membuka berkas kunci %s.\n" + +#: lib/integrity/integrity.c:241 lib/integrity/integrity.c:306 +msgid "Kernel doesn't support dm-integrity mapping." +msgstr "" + +#: lib/luks2/luks2_disk_metadata.c:383 lib/luks2/luks2_json_metadata.c:959 +#: lib/luks2/luks2_json_metadata.c:1245 +#, fuzzy, c-format +msgid "Failed to acquire write lock on device %s." +msgstr "Gagal untuk mengakses perangkat penyimpan kunci sementara.\n" + +#: lib/luks2/luks2_disk_metadata.c:392 +msgid "Detected attempt for concurrent LUKS2 metadata update. Aborting operation." +msgstr "" + +#: 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 "" + +#: lib/luks2/luks2_json_format.c:227 +#, fuzzy +msgid "Requested data offset is too small." +msgstr "Perangkat %s terlalu kecil.\n" + +#: 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 "" + +#: lib/luks2/luks2_json_metadata.c:946 lib/luks2/luks2_json_metadata.c:1075 +#: lib/luks2/luks2_json_metadata.c:1151 lib/luks2/luks2_keyslot_luks2.c:92 +#: lib/luks2/luks2_keyslot_luks2.c:114 +#, fuzzy, c-format +msgid "Failed to acquire read lock on device %s." +msgstr "Gagal untuk mengakses perangkat penyimpan kunci sementara.\n" + +#: lib/luks2/luks2_json_metadata.c:1168 +#, c-format +msgid "Forbidden LUKS2 requirements detected in backup %s." +msgstr "" + +#: lib/luks2/luks2_json_metadata.c:1209 +#, fuzzy +msgid "Data offset differ on device and backup, restore failed." +msgstr "Data offset atau ukuran kunci berbeda di perangkat dan cadangan, pengembalian gagal.\n" + +#: lib/luks2/luks2_json_metadata.c:1215 +#, fuzzy +msgid "Binary header with keyslot areas size differ on device and backup, restore failed." +msgstr "Data offset atau ukuran kunci berbeda di perangkat dan cadangan, pengembalian gagal.\n" + +#: lib/luks2/luks2_json_metadata.c:1222 +#, fuzzy, c-format +msgid "Device %s %s%s%s%s" +msgstr "Perangkat %s %s%s" + +#: lib/luks2/luks2_json_metadata.c:1223 +#, fuzzy +msgid "does not contain LUKS2 header. Replacing header can destroy data on that device." +msgstr "tidak berisi header LUKS. Mengganti header dapat menghancurkan data di perangkat itu." + +#: lib/luks2/luks2_json_metadata.c:1224 +#, fuzzy +msgid "already contains LUKS2 header. Replacing header will destroy existing keyslots." +msgstr "telah berisi header LUKS. Mengganti header dapat mengganti slot kunci yang telah ada." + +#: lib/luks2/luks2_json_metadata.c:1226 +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:1228 +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:1324 +#, c-format +msgid "Ignored unknown flag %s." +msgstr "" + +#: lib/luks2/luks2_json_metadata.c:2011 lib/luks2/luks2_reencrypt.c:1746 +#, c-format +msgid "Missing key for dm-crypt segment %u" +msgstr "" + +#: lib/luks2/luks2_json_metadata.c:2023 lib/luks2/luks2_reencrypt.c:1764 +#, fuzzy +msgid "Failed to set dm-crypt segment." +msgstr "Gagal untuk menulis di penyimpanan kunci.\n" + +#: lib/luks2/luks2_json_metadata.c:2029 lib/luks2/luks2_reencrypt.c:1770 +#, fuzzy +msgid "Failed to set dm-linear segment." +msgstr "Gagal memperoleh data statistik berkas kunci %s.\n" + +#: lib/luks2/luks2_json_metadata.c:2156 +msgid "Unsupported device integrity configuration." +msgstr "" + +#: lib/luks2/luks2_json_metadata.c:2242 +msgid "Reencryption in-progress. Cannot deactivate device." +msgstr "" + +#: lib/luks2/luks2_json_metadata.c:2253 lib/luks2/luks2_reencrypt.c:3171 +#, c-format +msgid "Failed to replace suspended device %s with dm-error target." +msgstr "" + +#: lib/luks2/luks2_json_metadata.c:2333 +msgid "Failed to read LUKS2 requirements." +msgstr "" + +#: lib/luks2/luks2_json_metadata.c:2340 +msgid "Unmet LUKS2 requirements detected." +msgstr "" + +#: lib/luks2/luks2_json_metadata.c:2348 +msgid "Offline reencryption in progress. Aborting." +msgstr "" + +#: lib/luks2/luks2_json_metadata.c:2350 +msgid "Online reencryption in progress. Aborting." +msgstr "" + +#: lib/luks2/luks2_keyslot.c:552 lib/luks2/luks2_keyslot.c:589 +msgid "Not enough available memory to open a keyslot." +msgstr "" + +#: lib/luks2/luks2_keyslot.c:554 lib/luks2/luks2_keyslot.c:591 +#, fuzzy +msgid "Keyslot open failed." +msgstr "Slot kunci %d telah terverifikasi.\n" + +#: 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 "" + +#: lib/luks2/luks2_keyslot_luks2.c:480 +msgid "No space for new keyslot." +msgstr "" + +#: lib/luks2/luks2_luks1_convert.c:481 +#, c-format +msgid "Cannot check status of device with uuid: %s." +msgstr "" + +#: lib/luks2/luks2_luks1_convert.c:507 +msgid "Unable to convert header with LUKSMETA additional metadata." +msgstr "" + +#: lib/luks2/luks2_luks1_convert.c:547 +msgid "Unable to move keyslot area. Not enough space." +msgstr "" + +#: lib/luks2/luks2_luks1_convert.c:590 lib/luks2/luks2_luks1_convert.c:872 +msgid "Unable to move keyslot area." +msgstr "" + +#: lib/luks2/luks2_luks1_convert.c:682 +msgid "Cannot convert to LUKS1 format - default segment encryption sector size is not 512 bytes." +msgstr "" + +#: lib/luks2/luks2_luks1_convert.c:690 +msgid "Cannot convert to LUKS1 format - key slot digests are not LUKS1 compatible." +msgstr "" + +#: lib/luks2/luks2_luks1_convert.c:702 +#, c-format +msgid "Cannot convert to LUKS1 format - device uses wrapped key cipher %s." +msgstr "" + +#: lib/luks2/luks2_luks1_convert.c:710 +#, c-format +msgid "Cannot convert to LUKS1 format - LUKS2 header contains %u token(s)." +msgstr "" + +#: lib/luks2/luks2_luks1_convert.c:724 +#, c-format +msgid "Cannot convert to LUKS1 format - keyslot %u is in invalid state." +msgstr "" + +#: lib/luks2/luks2_luks1_convert.c:729 +#, c-format +msgid "Cannot convert to LUKS1 format - slot %u (over maximum slots) is still active." +msgstr "" + +#: lib/luks2/luks2_luks1_convert.c:734 +#, c-format +msgid "Cannot convert to LUKS1 format - keyslot %u is not LUKS1 compatible." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:892 +#, c-format +msgid "Hotzone size must be multiple of calculated zone alignment (%zu bytes)." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:897 +#, c-format +msgid "Device size must be multiple of calculated zone alignment (%zu bytes)." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:941 +#, fuzzy, c-format +msgid "Unsupported resilience mode %s" +msgstr "versi LUKS %d tidak didukung.\n" + +#: lib/luks2/luks2_reencrypt.c:1158 lib/luks2/luks2_reencrypt.c:1313 +#: lib/luks2/luks2_reencrypt.c:1396 lib/luks2/luks2_reencrypt.c:1430 +#: lib/luks2/luks2_reencrypt.c:3011 +#, fuzzy +msgid "Failed to initialize old segment storage wrapper." +msgstr "Gagal untuk menulis di penyimpanan kunci.\n" + +#: lib/luks2/luks2_reencrypt.c:1172 lib/luks2/luks2_reencrypt.c:1291 +#, fuzzy +msgid "Failed to initialize new segment storage wrapper." +msgstr "Gagal untuk menulis di penyimpanan kunci.\n" + +#: lib/luks2/luks2_reencrypt.c:1340 +#, fuzzy +msgid "Failed to read checksums for current hotzone." +msgstr "Gagal untuk membaca dari penyimpanan kunci.\n" + +#: lib/luks2/luks2_reencrypt.c:1347 lib/luks2/luks2_reencrypt.c:3019 +#, c-format +msgid "Failed to read hotzone area starting at %." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:1366 +#, fuzzy, c-format +msgid "Failed to decrypt sector %zu." +msgstr "Gagal untuk membaca dari penyimpanan kunci.\n" + +#: lib/luks2/luks2_reencrypt.c:1372 +#, fuzzy, c-format +msgid "Failed to recover sector %zu." +msgstr "Gagal untuk menulis di penyimpanan kunci.\n" + +#: lib/luks2/luks2_reencrypt.c:1867 +#, c-format +msgid "Source and target device sizes don't match. Source %, target: %." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:1965 +#, fuzzy, c-format +msgid "Failed to activate hotzone device %s." +msgstr "Gagal memperoleh data statistik berkas kunci %s.\n" + +#: lib/luks2/luks2_reencrypt.c:1982 +#, c-format +msgid "Failed to activate overlay device %s with actual origin table." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:1989 +#, fuzzy, c-format +msgid "Failed to load new mapping for device %s." +msgstr "Gagal untuk membuka perangkat penyimpan kunci sementara.\n" + +#: lib/luks2/luks2_reencrypt.c:2060 +msgid "Failed to refresh reencryption devices stack." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:2216 +#, fuzzy +msgid "Failed to set new keyslots area size." +msgstr "Gagal memperoleh data statistik berkas kunci %s.\n" + +#: lib/luks2/luks2_reencrypt.c:2318 +#, c-format +msgid "Data shift is not aligned to requested encryption sector size (% bytes)." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:2339 +#, c-format +msgid "Data device is not aligned to requested encryption sector size (% bytes)." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:2360 +#, c-format +msgid "Data shift (% sectors) is less than future data offset (% sectors)." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:2366 lib/luks2/luks2_reencrypt.c:2760 +#: lib/luks2/luks2_reencrypt.c:2781 +#, c-format +msgid "Failed to open %s in exclusive mode (already mapped or mounted)." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:2534 +msgid "No LUKS2 reencryption in progress." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:2540 lib/luks2/luks2_reencrypt.c:3276 +msgid "Failed to load LUKS2 reencryption context." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:2600 +#, fuzzy +msgid "Failed to get reencryption state." +msgstr "Gagal untuk menulis di penyimpanan kunci.\n" + +#: lib/luks2/luks2_reencrypt.c:2604 +#, fuzzy +msgid "Device is not in reencryption." +msgstr "Perangkat %s tidak aktif.\n" + +#: lib/luks2/luks2_reencrypt.c:2611 +msgid "Reencryption process is already running." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:2613 +msgid "Failed to acquire reencryption lock." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:2631 +msgid "Cannot proceed with reencryption. Run reencryption recovery first." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:2731 +msgid "Active device size and requested reencryption size don't match." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:2745 +msgid "Illegal device size requested in reencryption parameters." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:2815 +msgid "Reencryption in-progress. Cannot perform recovery." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:2887 +msgid "LUKS2 reencryption already initialized in metadata." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:2894 +msgid "Failed to initialize LUKS2 reencryption in metadata." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:2985 +msgid "Failed to set device segments for next reencryption hotzone." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:3027 +msgid "Failed to write reencryption resilience metadata." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:3034 +msgid "Decryption failed." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:3039 +#, fuzzy, c-format +msgid "Failed to write hotzone area starting at %." +msgstr "Gagal untuk menulis di penyimpanan kunci.\n" + +#: lib/luks2/luks2_reencrypt.c:3044 +msgid "Failed to sync data." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:3052 +msgid "Failed to update metadata after current reencryption hotzone completed." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:3119 +#, fuzzy +msgid "Failed to write LUKS2 metadata." +msgstr "Gagal untuk menulis di penyimpanan kunci.\n" + +#: lib/luks2/luks2_reencrypt.c:3142 +msgid "Failed to wipe backup segment data." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:3155 +msgid "Failed to disable reencryption requirement flag." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:3163 +#, c-format +msgid "Fatal error while reencrypting chunk starting at %, % sectors long." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:3172 +msgid "Do not resume the device unless replaced with error target manually." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:3221 +msgid "Cannot proceed with reencryption. Unexpected reencryption status." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:3227 +msgid "Missing or invalid reencrypt context." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:3234 +#, fuzzy +msgid "Failed to initialize reencryption device stack." +msgstr "Tidak dapat menginisialisasi backend crypto.\n" + +#: lib/luks2/luks2_reencrypt.c:3253 lib/luks2/luks2_reencrypt.c:3289 +msgid "Failed to update reencryption context." +msgstr "" + +#: lib/luks2/luks2_token.c:262 +msgid "No free token slot." +msgstr "" + +#: lib/luks2/luks2_token.c:269 +#, fuzzy, c-format +msgid "Failed to create builtin token %s." +msgstr "Gagal memperoleh data statistik berkas kunci %s.\n" + +#: src/cryptsetup.c:162 +#, fuzzy +msgid "Can't do passphrase verification on non-tty inputs." +msgstr "Tidak dapat melakukan verifikasi kata sandi di masukan bukan tty.\n" + +#: src/cryptsetup.c:215 +#, fuzzy +msgid "Keyslot encryption parameters can be set only for LUKS2 device." +msgstr "Operasi ini hanya didukunga untuk perangkat LUKS.\n" + +#: src/cryptsetup.c:245 src/cryptsetup.c:893 src/cryptsetup.c:1212 +#: src/cryptsetup.c:3011 src/cryptsetup_reencrypt.c:715 +#: src/cryptsetup_reencrypt.c:785 +#, fuzzy +msgid "No known cipher specification pattern detected." +msgstr "Tidak ada pola spesifikasi cipher yang dikenal terdeteksi.\n" + +#: src/cryptsetup.c:253 +msgid "WARNING: The --hash parameter is being ignored in plain mode with keyfile specified.\n" +msgstr "" + +#: src/cryptsetup.c:261 +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:301 +#, c-format +msgid "Detected device signature(s) on %s. Proceeding further may damage existing data." +msgstr "" + +#: src/cryptsetup.c:307 src/cryptsetup.c:1038 src/cryptsetup.c:1090 +#: src/cryptsetup.c:1189 src/cryptsetup.c:1262 src/cryptsetup.c:1913 +#: src/cryptsetup.c:2545 src/cryptsetup.c:2668 src/integritysetup.c:232 +msgid "Operation aborted.\n" +msgstr "" + +#: src/cryptsetup.c:375 +#, fuzzy +msgid "Option --key-file is required." +msgstr "Pilihan --header-backup-file dibutuhkan.\n" + +#: src/cryptsetup.c:428 +msgid "Enter VeraCrypt PIM: " +msgstr "" + +#: src/cryptsetup.c:437 +msgid "Invalid PIM value: parse error." +msgstr "" + +#: src/cryptsetup.c:440 +#, fuzzy +msgid "Invalid PIM value: 0." +msgstr "Perangkat %s tidak valid.\n" + +#: src/cryptsetup.c:443 +msgid "Invalid PIM value: outside of range." +msgstr "" + +#: src/cryptsetup.c:466 +#, fuzzy +msgid "No device header detected with this passphrase." +msgstr "Tidak ada kunci tersedia dengan kata sandi ini.\n" + +#: src/cryptsetup.c:528 src/cryptsetup.c:1940 +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:607 +#, c-format +msgid "Device %s is still active and scheduled for deferred removal.\n" +msgstr "" + +#: src/cryptsetup.c:635 +msgid "Resize of active device requires volume key in keyring but --disable-keyring option is set." +msgstr "" + +#: src/cryptsetup.c:771 +msgid "Benchmark interrupted." +msgstr "" + +#: src/cryptsetup.c:792 +#, c-format +msgid "PBKDF2-%-9s N/A\n" +msgstr "" + +#: src/cryptsetup.c:794 +#, c-format +msgid "PBKDF2-%-9s %7u iterations per second for %zu-bit key\n" +msgstr "" + +#: src/cryptsetup.c:808 +#, c-format +msgid "%-10s N/A\n" +msgstr "" + +#: src/cryptsetup.c:810 +#, 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:834 +msgid "Result of benchmark is not reliable." +msgstr "" + +#: src/cryptsetup.c:885 +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:919 +#, c-format +msgid "#%*s Algorithm | Key | Encryption | Decryption\n" +msgstr "" + +#: src/cryptsetup.c:923 +#, fuzzy, c-format +msgid "Cipher %s is not available." +msgstr "Perangkat %s tidak aktif.\n" + +#. TRANSLATORS: The string is header of a table and must be exactly (right side) aligned. +#: src/cryptsetup.c:943 +msgid "# Algorithm | Key | Encryption | Decryption\n" +msgstr "" + +#: src/cryptsetup.c:952 +msgid "N/A" +msgstr "" + +#: src/cryptsetup.c:1031 +msgid "" +"Seems device does not require reencryption recovery.\n" +"Do you want to proceed anyway?" +msgstr "" + +#: src/cryptsetup.c:1037 +msgid "Really proceed with LUKS2 reencryption recovery?" +msgstr "" + +#: src/cryptsetup.c:1046 +#, fuzzy +msgid "Enter passphrase for reencryption recovery: " +msgstr "Masukan kasa sandi baru untuk slot kunci: " + +#: src/cryptsetup.c:1089 +#, fuzzy +msgid "Really try to repair LUKS device header?" +msgstr "Kembalikan header perangkat LUKS dan slot kunci" + +#: src/cryptsetup.c:1108 src/integritysetup.c:145 +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:1130 src/integritysetup.c:167 +#, fuzzy, c-format +msgid "Cannot deactivate temporary device %s." +msgstr "Tidak dapat membaca perangkat %s.\n" + +#: src/cryptsetup.c:1174 +msgid "Integrity option can be used only for LUKS2 format." +msgstr "" + +#: src/cryptsetup.c:1179 src/cryptsetup.c:1239 +#, fuzzy +msgid "Unsupported LUKS2 metadata size options." +msgstr "versi LUKS %d tidak didukung.\n" + +#: src/cryptsetup.c:1196 +#, fuzzy, c-format +msgid "Cannot create header file %s." +msgstr "Tidak dapat membaca berkas cadangan header %s.\n" + +#: src/cryptsetup.c:1219 src/integritysetup.c:194 src/integritysetup.c:203 +#: src/integritysetup.c:212 src/integritysetup.c:279 src/integritysetup.c:288 +#: src/integritysetup.c:298 +#, fuzzy +msgid "No known integrity specification pattern detected." +msgstr "Tidak ada pola spesifikasi cipher yang dikenal terdeteksi.\n" + +#: src/cryptsetup.c:1232 +#, c-format +msgid "Cannot use %s as on-disk header." +msgstr "" + +#: src/cryptsetup.c:1256 src/integritysetup.c:226 +#, c-format +msgid "This will overwrite data on %s irrevocably." +msgstr "Ini akan memaksa menulis data di %s secara permanen." + +#: src/cryptsetup.c:1297 src/cryptsetup.c:1627 src/cryptsetup.c:1694 +#: src/cryptsetup.c:1796 src/cryptsetup.c:1862 src/cryptsetup_reencrypt.c:545 +#, fuzzy +msgid "Failed to set pbkdf parameters." +msgstr "Gagal memperoleh data statistik berkas kunci %s.\n" + +#: src/cryptsetup.c:1378 +msgid "Reduced data offset is allowed only for detached LUKS header." +msgstr "" + +#: src/cryptsetup.c:1389 src/cryptsetup.c:1700 +msgid "Cannot determine volume key size for LUKS without keyslots, please use --key-size option." +msgstr "" + +#: src/cryptsetup.c:1427 +msgid "Device activated but cannot make flags persistent." +msgstr "" + +#: src/cryptsetup.c:1508 src/cryptsetup.c:1578 +#, fuzzy, c-format +msgid "Keyslot %d is selected for deletion." +msgstr "slot kunci %d terpilih untuk penghapusan.\n" + +#: src/cryptsetup.c:1520 src/cryptsetup.c:1581 +msgid "This is the last keyslot. Device will become unusable after purging this key." +msgstr "Ini adalah slot kunci terakhir. Perangkat mungkin akan menjadi tidak stabil setelah menghapus kunci ini." + +#: src/cryptsetup.c:1521 +#, fuzzy +msgid "Enter any remaining passphrase: " +msgstr "Masukan kata sandi LUKS yang tersisa: " + +#: src/cryptsetup.c:1522 src/cryptsetup.c:1583 +msgid "Operation aborted, the keyslot was NOT wiped.\n" +msgstr "" + +#: src/cryptsetup.c:1560 +#, fuzzy +msgid "Enter passphrase to be deleted: " +msgstr "Masukan kata sandi LUKS yang akan dihapus: " + +#: src/cryptsetup.c:1641 src/cryptsetup.c:1715 src/cryptsetup.c:1749 +msgid "Enter new passphrase for key slot: " +msgstr "Masukan kasa sandi baru untuk slot kunci: " + +#: src/cryptsetup.c:1732 src/cryptsetup_reencrypt.c:1327 +#, fuzzy, c-format +msgid "Enter any existing passphrase: " +msgstr "Masukan kata sandi: " + +#: src/cryptsetup.c:1800 +#, fuzzy +msgid "Enter passphrase to be changed: " +msgstr "Masukan kata sandi LUKS yang akan dihapus: " + +#: src/cryptsetup.c:1816 src/cryptsetup_reencrypt.c:1313 +#, fuzzy +msgid "Enter new passphrase: " +msgstr "Masukan kata sandi: " + +#: src/cryptsetup.c:1866 +#, fuzzy +msgid "Enter passphrase for keyslot to be converted: " +msgstr "Masukan kasa sandi baru untuk slot kunci: " + +#: src/cryptsetup.c:1890 +msgid "Only one device argument for isLuks operation is supported." +msgstr "" + +#: src/cryptsetup.c:2074 src/cryptsetup.c:2095 +#, fuzzy +msgid "Option --header-backup-file is required." +msgstr "Pilihan --header-backup-file dibutuhkan.\n" + +#: src/cryptsetup.c:2125 +#, fuzzy, c-format +msgid "%s is not cryptsetup managed device." +msgstr "%s bukan perangkat LUKS." + +#: src/cryptsetup.c:2136 +#, fuzzy, c-format +msgid "Refresh is not supported for device type %s" +msgstr "Operasi ini tidak didukung untuk perangkat crypt %s.\n" + +#: src/cryptsetup.c:2174 +#, c-format +msgid "Unrecognized metadata device type %s." +msgstr "" + +#: src/cryptsetup.c:2177 +msgid "Command requires device and mapped name as arguments." +msgstr "" + +#: src/cryptsetup.c:2199 +#, fuzzy, c-format +msgid "" +"This operation will erase all keyslots on device %s.\n" +"Device will become unusable after this operation." +msgstr "Ini adalah slot kunci terakhir. Perangkat mungkin akan menjadi tidak stabil setelah menghapus kunci ini." + +#: src/cryptsetup.c:2206 +msgid "Operation aborted, keyslots were NOT wiped.\n" +msgstr "" + +#: src/cryptsetup.c:2243 +msgid "Invalid LUKS type, only luks1 and luks2 are supported." +msgstr "" + +#: src/cryptsetup.c:2261 +#, fuzzy, c-format +msgid "Device is already %s type." +msgstr "Perangkat %s telah ada.\n" + +#: src/cryptsetup.c:2266 +#, fuzzy, c-format +msgid "This operation will convert %s to %s format.\n" +msgstr "Operasi ini tidak didukung untuk perangkat crypt %s.\n" + +#: src/cryptsetup.c:2272 +msgid "Operation aborted, device was NOT converted.\n" +msgstr "" + +#: src/cryptsetup.c:2312 +msgid "Option --priority, --label or --subsystem is missing." +msgstr "" + +#: src/cryptsetup.c:2346 src/cryptsetup.c:2379 src/cryptsetup.c:2402 +#, fuzzy, c-format +msgid "Token %d is invalid." +msgstr "Slot kunci %d tidak valid.\n" + +#: src/cryptsetup.c:2349 src/cryptsetup.c:2405 +#, c-format +msgid "Token %d in use." +msgstr "" + +#: src/cryptsetup.c:2356 +#, fuzzy, c-format +msgid "Failed to add luks2-keyring token %d." +msgstr "Gagal memperoleh data statistik berkas kunci %s.\n" + +#: src/cryptsetup.c:2365 src/cryptsetup.c:2427 +#, fuzzy, c-format +msgid "Failed to assign token %d to keyslot %d." +msgstr "Gagal untuk menulis di penyimpanan kunci.\n" + +#: src/cryptsetup.c:2382 +#, fuzzy, c-format +msgid "Token %d is not in use." +msgstr "Slot kunci %d tidak digunakan.\n" + +#: src/cryptsetup.c:2417 +#, fuzzy +msgid "Failed to import token from file." +msgstr "Gagal membuka berkas kunci %s.\n" + +#: src/cryptsetup.c:2442 +#, fuzzy, c-format +msgid "Failed to get token %d for export." +msgstr "Gagal untuk menulis di penyimpanan kunci.\n" + +#: src/cryptsetup.c:2457 +msgid "--key-description parameter is mandatory for token add action." +msgstr "" + +#: src/cryptsetup.c:2463 src/cryptsetup.c:2471 +msgid "Action requires specific token. Use --token-id parameter." +msgstr "" + +#: src/cryptsetup.c:2476 +#, fuzzy, c-format +msgid "Invalid token operation %s." +msgstr "Besar kunci %d tidak valid.\n" + +#: src/cryptsetup.c:2531 +#, c-format +msgid "Auto-detected active dm device '%s' for data device %s.\n" +msgstr "" + +#: src/cryptsetup.c:2535 +#, fuzzy, c-format +msgid "Device %s is not a block device.\n" +msgstr "Perangkat %s bukan perangkat LUKS.\n" + +#: src/cryptsetup.c:2537 +#, fuzzy, c-format +msgid "Failed to auto-detect device %s holders." +msgstr "Gagal untuk memperoleh direktori pemeta-perangkat." + +#: src/cryptsetup.c:2539 +#, 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 "" + +#: src/cryptsetup.c:2619 +#, fuzzy +msgid "Invalid LUKS device type." +msgstr "Perangkat %s tidak valid.\n" + +#: src/cryptsetup.c:2624 +msgid "Encryption without detached header (--header) is not possible without data device size reduction (--reduce-device-size)." +msgstr "" + +#: src/cryptsetup.c:2629 +msgid "Requested data offset must be less than or equal to half of --reduce-device-size parameter." +msgstr "" + +#: src/cryptsetup.c:2638 +#, c-format +msgid "Adjusting --reduce-device-size value to twice the --offset % (sectors).\n" +msgstr "" + +#: src/cryptsetup.c:2642 +#, fuzzy +msgid "Encryption is supported only for LUKS2 format." +msgstr "Operasi ini hanya didukunga untuk perangkat LUKS.\n" + +#: src/cryptsetup.c:2664 +#, c-format +msgid "Detected LUKS device on %s. Do you want to encrypt that LUKS device again?" +msgstr "" + +#: src/cryptsetup.c:2679 +#, fuzzy, c-format +msgid "Temporary header file %s already exists. Aborting." +msgstr "Berkas %s yang diminta telah ada.\n" + +#: src/cryptsetup.c:2681 src/cryptsetup.c:2688 +#, fuzzy, c-format +msgid "Cannot create temporary header file %s." +msgstr "Tidak dapat membaca berkas cadangan header %s.\n" + +#: src/cryptsetup.c:2752 +#, c-format +msgid "%s/%s is now active and ready for online encryption." +msgstr "" + +#: src/cryptsetup.c:2919 src/cryptsetup.c:2925 +msgid "Not enough free keyslots for reencryption." +msgstr "" + +#: src/cryptsetup.c:2945 src/cryptsetup_reencrypt.c:1284 +msgid "Key file can be used only with --key-slot or with exactly one key slot active." +msgstr "" + +#: src/cryptsetup.c:2954 src/cryptsetup_reencrypt.c:1325 +#: src/cryptsetup_reencrypt.c:1336 +#, fuzzy, c-format +msgid "Enter passphrase for key slot %d: " +msgstr "Masukan kasa sandi baru untuk slot kunci: " + +#: src/cryptsetup.c:2962 +#, fuzzy, c-format +msgid "Enter passphrase for key slot %u: " +msgstr "Masukan kasa sandi baru untuk slot kunci: " + +#: src/cryptsetup.c:3129 +#, fuzzy +msgid "Command requires device as argument." +msgstr "%s: membutuhkan %s sebagai argumen" + +#: src/cryptsetup.c:3151 +msgid "Only LUKS2 format is currently supported. Please use cryptsetup-reencrypt tool for LUKS1." +msgstr "" + +#: src/cryptsetup.c:3163 +msgid "Legacy offline reencryption already in-progress. Use cryptsetup-reencrypt utility." +msgstr "" + +#: src/cryptsetup.c:3173 src/cryptsetup_reencrypt.c:178 +msgid "Reencryption of device with integrity profile is not supported." +msgstr "" + +#: src/cryptsetup.c:3181 +msgid "LUKS2 reencryption already initialized. Aborting operation." +msgstr "" + +#: src/cryptsetup.c:3185 +msgid "LUKS2 device is not in reencryption." +msgstr "" + +#: src/cryptsetup.c:3212 +#, fuzzy +msgid " [--type ] []" +msgstr " " + +#: src/cryptsetup.c:3212 src/veritysetup.c:358 src/integritysetup.c:470 +#, fuzzy +msgid "open device as " +msgstr "buka perangkat LUKS sebagai pemetaan " + +#: src/cryptsetup.c:3213 src/cryptsetup.c:3214 src/cryptsetup.c:3215 +#: src/veritysetup.c:359 src/veritysetup.c:360 src/integritysetup.c:471 +#: src/integritysetup.c:472 +msgid "" +msgstr "" + +#: src/cryptsetup.c:3213 src/veritysetup.c:359 src/integritysetup.c:471 +msgid "close device (remove mapping)" +msgstr "" + +#: src/cryptsetup.c:3214 +msgid "resize active device" +msgstr "ubah ukuran perangkat aktif" + +#: src/cryptsetup.c:3215 +msgid "show device status" +msgstr "tampilkan status perangkat" + +#: src/cryptsetup.c:3216 +msgid "[--cipher ]" +msgstr "" + +#: src/cryptsetup.c:3216 +msgid "benchmark cipher" +msgstr "" + +#: src/cryptsetup.c:3217 src/cryptsetup.c:3218 src/cryptsetup.c:3219 +#: src/cryptsetup.c:3220 src/cryptsetup.c:3221 src/cryptsetup.c:3228 +#: src/cryptsetup.c:3229 src/cryptsetup.c:3230 src/cryptsetup.c:3231 +#: src/cryptsetup.c:3232 src/cryptsetup.c:3233 src/cryptsetup.c:3234 +#: src/cryptsetup.c:3235 +msgid "" +msgstr "" + +#: src/cryptsetup.c:3217 +msgid "try to repair on-disk metadata" +msgstr "" + +#: src/cryptsetup.c:3218 +#, fuzzy +msgid "reencrypt LUKS2 device" +msgstr "tambahkan kunci ke perangkat LUKS" + +#: src/cryptsetup.c:3219 +#, fuzzy +msgid "erase all keyslots (remove encryption key)" +msgstr "Besar dari kunci enkripsi" + +#: src/cryptsetup.c:3220 +msgid "convert LUKS from/to LUKS2 format" +msgstr "" + +#: src/cryptsetup.c:3221 +msgid "set permanent configuration options for LUKS2" +msgstr "" + +#: src/cryptsetup.c:3222 src/cryptsetup.c:3223 +msgid " []" +msgstr " []" + +#: src/cryptsetup.c:3222 +msgid "formats a LUKS device" +msgstr "format sebuah perangkat LUKS" + +#: src/cryptsetup.c:3223 +msgid "add key to LUKS device" +msgstr "tambahkan kunci ke perangkat LUKS" + +#: src/cryptsetup.c:3224 src/cryptsetup.c:3225 src/cryptsetup.c:3226 +msgid " []" +msgstr " []" + +#: src/cryptsetup.c:3224 +msgid "removes supplied key or key file from LUKS device" +msgstr "hapus kunci yang diberikan atau berkas kunci dari perangkat LUKS" + +#: src/cryptsetup.c:3225 +#, fuzzy +msgid "changes supplied key or key file of LUKS device" +msgstr "hapus kunci yang diberikan atau berkas kunci dari perangkat LUKS" + +#: src/cryptsetup.c:3226 +msgid "converts a key to new pbkdf parameters" +msgstr "" + +#: src/cryptsetup.c:3227 +msgid " " +msgstr " " + +#: src/cryptsetup.c:3227 +msgid "wipes key with number from LUKS device" +msgstr "hapus kunci dengan nomor dari perangkat LUKS" + +#: src/cryptsetup.c:3228 +msgid "print UUID of LUKS device" +msgstr "tampilkan UUID dari perangkat LUKS" + +#: src/cryptsetup.c:3229 +msgid "tests for LUKS partition header" +msgstr "periksa untuk header partisi LUKS" + +#: src/cryptsetup.c:3230 +msgid "dump LUKS partition information" +msgstr "dump informasi partisi LUKS" + +#: src/cryptsetup.c:3231 +#, fuzzy +msgid "dump TCRYPT device information" +msgstr "dump informasi partisi LUKS" + +#: src/cryptsetup.c:3232 +#, fuzzy +msgid "Suspend LUKS device and wipe key (all IOs are frozen)" +msgstr "Hentikan perangkat LUKS dan hapus kunci (semua IO dihentikan)." + +#: src/cryptsetup.c:3233 +#, fuzzy +msgid "Resume suspended LUKS device" +msgstr "Lanjutkan perangkat LUKS yang dihentikan." + +#: src/cryptsetup.c:3234 +msgid "Backup LUKS device header and keyslots" +msgstr "Buat cadangan header perangkat LUKS dan slot kunci" + +#: src/cryptsetup.c:3235 +msgid "Restore LUKS device header and keyslots" +msgstr "Kembalikan header perangkat LUKS dan slot kunci" + +#: src/cryptsetup.c:3236 +msgid " " +msgstr "" + +#: src/cryptsetup.c:3236 +msgid "Manipulate LUKS2 tokens" +msgstr "" + +#: src/cryptsetup.c:3254 src/veritysetup.c:376 src/integritysetup.c:488 +msgid "" +"\n" +" is one of:\n" +msgstr "" +"\n" +" adalah salah satu dari:\n" + +#: src/cryptsetup.c:3260 +msgid "" +"\n" +"You can also use old syntax aliases:\n" +"\topen: create (plainOpen), luksOpen, loopaesOpen, tcryptOpen\n" +"\tclose: remove (plainClose), luksClose, loopaesClose, tcryptClose\n" +msgstr "" + +#: src/cryptsetup.c:3264 +#, c-format +msgid "" +"\n" +" is the device to create under %s\n" +" is the encrypted device\n" +" is the LUKS key slot number to modify\n" +" optional key file for the new key for luksAddKey action\n" +msgstr "" +"\n" +" adalah perangkat untuk dibuat dibawah %s\n" +" adalah perangkat terenkripsi\n" +" adalah nomor slot kunci LUKS untuk dimodifikasi\n" +" adalah berkas kunci opsional untuk kunci baru untuk aksi luksAddKey\n" + +#: src/cryptsetup.c:3271 +#, c-format +msgid "" +"\n" +"Default compiled-in metadata format is %s (for luksFormat action).\n" +msgstr "" + +#: src/cryptsetup.c:3276 +#, c-format +msgid "" +"\n" +"Default compiled-in key and passphrase parameters:\n" +"\tMaximum keyfile size: %dkB, Maximum interactive passphrase length %d (characters)\n" +"Default PBKDF for LUKS1: %s, iteration time: %d (ms)\n" +"Default PBKDF for LUKS2: %s\n" +"\tIteration time: %d, Memory required: %dkB, Parallel threads: %d\n" +msgstr "" + +#: src/cryptsetup.c:3287 +#, fuzzy, c-format +msgid "" +"\n" +"Default compiled-in device cipher parameters:\n" +"\tloop-AES: %s, Key %d bits\n" +"\tplain: %s, Key: %d bits, Password hashing: %s\n" +"\tLUKS: %s, Key: %d bits, LUKS header hashing: %s, RNG: %s\n" +msgstr "" +"\n" +"Parameter baku yang terkompilasi dalam perangkat penyandi:\n" +"\tterbuka: %s, Kunci: %d bits, Hash kata sandi : %s\n" +"\tLUKS1 : %s, Kunci: %d bits, Hash kepala LUKS: %s\n" + +#: src/cryptsetup.c:3296 +msgid "\tLUKS: Default keysize with XTS mode (two internal keys) will be doubled.\n" +msgstr "" + +#: src/cryptsetup.c:3312 src/veritysetup.c:532 src/integritysetup.c:630 +#, c-format +msgid "%s: requires %s as arguments" +msgstr "%s: membutuhkan %s sebagai argumen" + +#: src/cryptsetup.c:3350 src/veritysetup.c:421 src/integritysetup.c:527 +#: src/cryptsetup_reencrypt.c:1591 +msgid "Show this help message" +msgstr "Tampilkan pesan bantuan ini" + +#: src/cryptsetup.c:3351 src/veritysetup.c:422 src/integritysetup.c:528 +#: src/cryptsetup_reencrypt.c:1592 +msgid "Display brief usage" +msgstr "Tampilkan penggunaan singkat" + +#: src/cryptsetup.c:3352 src/veritysetup.c:423 src/integritysetup.c:529 +#: src/cryptsetup_reencrypt.c:1593 +msgid "Print package version" +msgstr "Tampilkan versi paket" + +#: src/cryptsetup.c:3356 src/veritysetup.c:427 src/integritysetup.c:533 +#: src/cryptsetup_reencrypt.c:1597 +msgid "Help options:" +msgstr "Pilihan bantuan:" + +#: src/cryptsetup.c:3357 src/veritysetup.c:428 src/integritysetup.c:534 +#: src/cryptsetup_reencrypt.c:1598 +msgid "Shows more detailed error messages" +msgstr "Tampilkan pesan kesalahan secara lebih detail" + +#: src/cryptsetup.c:3358 src/veritysetup.c:429 src/integritysetup.c:535 +#: src/cryptsetup_reencrypt.c:1599 +msgid "Show debug messages" +msgstr "Tampilkan pesan penelusuran" + +#: src/cryptsetup.c:3359 +#, fuzzy +msgid "Show debug messages including JSON metadata" +msgstr "Tampilkan pesan penelusuran" + +#: src/cryptsetup.c:3360 src/cryptsetup_reencrypt.c:1601 +msgid "The cipher used to encrypt the disk (see /proc/crypto)" +msgstr "Cipher yang digunakan untuk mengenkripsi ke disk (lihat /proc/crypto)" + +#: src/cryptsetup.c:3361 src/cryptsetup_reencrypt.c:1603 +msgid "The hash used to create the encryption key from the passphrase" +msgstr "Hash yang digunakan untuk membuat kunci enkripsi dari kata sandi" + +#: src/cryptsetup.c:3362 +msgid "Verifies the passphrase by asking for it twice" +msgstr "Verifikasi kata sandi dengan menanyakan itu dua kali" + +#: src/cryptsetup.c:3363 src/cryptsetup_reencrypt.c:1605 +#, fuzzy +msgid "Read the key from a file" +msgstr "Baca volume (master) kunci dari berkas." + +#: src/cryptsetup.c:3364 +msgid "Read the volume (master) key from file." +msgstr "Baca volume (master) kunci dari berkas." + +#: src/cryptsetup.c:3365 +msgid "Dump volume (master) key instead of keyslots info" +msgstr "" + +#: src/cryptsetup.c:3366 src/cryptsetup_reencrypt.c:1602 +msgid "The size of the encryption key" +msgstr "Besar dari kunci enkripsi" + +#: src/cryptsetup.c:3366 src/cryptsetup.c:3425 src/integritysetup.c:553 +#: src/integritysetup.c:557 src/integritysetup.c:561 +#: src/cryptsetup_reencrypt.c:1602 +msgid "BITS" +msgstr "BITS" + +#: src/cryptsetup.c:3367 src/cryptsetup_reencrypt.c:1618 +msgid "Limits the read from keyfile" +msgstr "" + +#: src/cryptsetup.c:3367 src/cryptsetup.c:3368 src/cryptsetup.c:3369 +#: src/cryptsetup.c:3370 src/cryptsetup.c:3373 src/cryptsetup.c:3422 +#: src/cryptsetup.c:3423 src/cryptsetup.c:3431 src/cryptsetup.c:3432 +#: src/veritysetup.c:432 src/veritysetup.c:433 src/veritysetup.c:434 +#: src/veritysetup.c:437 src/veritysetup.c:438 src/integritysetup.c:542 +#: src/integritysetup.c:548 src/integritysetup.c:549 +#: src/cryptsetup_reencrypt.c:1617 src/cryptsetup_reencrypt.c:1618 +#: src/cryptsetup_reencrypt.c:1619 src/cryptsetup_reencrypt.c:1620 +msgid "bytes" +msgstr "" + +#: src/cryptsetup.c:3368 src/cryptsetup_reencrypt.c:1617 +msgid "Number of bytes to skip in keyfile" +msgstr "" + +#: src/cryptsetup.c:3369 +msgid "Limits the read from newly added keyfile" +msgstr "" + +#: src/cryptsetup.c:3370 +msgid "Number of bytes to skip in newly added keyfile" +msgstr "" + +#: src/cryptsetup.c:3371 +msgid "Slot number for new key (default is first free)" +msgstr "Nomor slot untuk kunci baru (baku adalah yang kosong pertama)" + +#: src/cryptsetup.c:3372 +msgid "The size of the device" +msgstr "Besar dari perangkat" + +#: src/cryptsetup.c:3372 src/cryptsetup.c:3374 src/cryptsetup.c:3375 +#: src/cryptsetup.c:3381 src/integritysetup.c:543 src/integritysetup.c:550 +msgid "SECTORS" +msgstr "SEKTOR" + +#: src/cryptsetup.c:3373 src/cryptsetup_reencrypt.c:1620 +msgid "Use only specified device size (ignore rest of device). DANGEROUS!" +msgstr "" + +#: src/cryptsetup.c:3374 +msgid "The start offset in the backend device" +msgstr "Awal ofset dalam perangkat backend" + +#: src/cryptsetup.c:3375 +msgid "How many sectors of the encrypted data to skip at the beginning" +msgstr "Berapa banyak sektor dari data terenkripsi yang dilewatkan di awal" + +#: src/cryptsetup.c:3376 +msgid "Create a readonly mapping" +msgstr "Buat pemetaan baca-saja" + +#: src/cryptsetup.c:3377 src/integritysetup.c:536 +#: src/cryptsetup_reencrypt.c:1608 +msgid "Do not ask for confirmation" +msgstr "Jangan tanya untuk konfirmasi" + +#: src/cryptsetup.c:3378 +msgid "Timeout for interactive passphrase prompt (in seconds)" +msgstr "Waktu habis untuk pertanyaan interaktif kata sandi (dalam detik)" + +#: src/cryptsetup.c:3378 src/cryptsetup.c:3379 src/integritysetup.c:537 +#: src/cryptsetup_reencrypt.c:1609 +msgid "secs" +msgstr "detik" + +#: src/cryptsetup.c:3379 src/integritysetup.c:537 +#: src/cryptsetup_reencrypt.c:1609 +msgid "Progress line update (in seconds)" +msgstr "" + +#: src/cryptsetup.c:3380 src/cryptsetup_reencrypt.c:1610 +msgid "How often the input of the passphrase can be retried" +msgstr "Seberapa sering masukan dari kata sandi dapat dicoba" + +#: src/cryptsetup.c:3381 +msgid "Align payload at sector boundaries - for luksFormat" +msgstr "Sesuaikan muatan di batas sektor - untuk luksFormat" + +#: src/cryptsetup.c:3382 +#, fuzzy +msgid "File with LUKS header and keyslots backup" +msgstr "Berkas dengan header LUKS dan cadangan slot kunci." + +#: src/cryptsetup.c:3383 src/cryptsetup_reencrypt.c:1611 +msgid "Use /dev/random for generating volume key" +msgstr "" + +#: src/cryptsetup.c:3384 src/cryptsetup_reencrypt.c:1612 +msgid "Use /dev/urandom for generating volume key" +msgstr "" + +#: src/cryptsetup.c:3385 +msgid "Share device with another non-overlapping crypt segment" +msgstr "" + +#: src/cryptsetup.c:3386 src/veritysetup.c:441 +#, fuzzy +msgid "UUID for device to use" +msgstr "DM-UUID untuk perangkat %s telah terpotong.\n" + +#: src/cryptsetup.c:3387 +msgid "Allow discards (aka TRIM) requests for device" +msgstr "" + +#: src/cryptsetup.c:3388 src/cryptsetup_reencrypt.c:1629 +msgid "Device or file with separated LUKS header" +msgstr "" + +#: src/cryptsetup.c:3389 +msgid "Do not activate device, just check passphrase" +msgstr "" + +#: src/cryptsetup.c:3390 +msgid "Use hidden header (hidden TCRYPT device)" +msgstr "" + +#: src/cryptsetup.c:3391 +msgid "Device is system TCRYPT drive (with bootloader)" +msgstr "" + +#: src/cryptsetup.c:3392 +msgid "Use backup (secondary) TCRYPT header" +msgstr "" + +#: src/cryptsetup.c:3393 +msgid "Scan also for VeraCrypt compatible device" +msgstr "" + +#: src/cryptsetup.c:3394 +msgid "Personal Iteration Multiplier for VeraCrypt compatible device" +msgstr "" + +#: src/cryptsetup.c:3395 +msgid "Query Personal Iteration Multiplier for VeraCrypt compatible device" +msgstr "" + +#: src/cryptsetup.c:3396 +msgid "Type of device metadata: luks, luks1, luks2, plain, loopaes, tcrypt" +msgstr "" + +#: src/cryptsetup.c:3397 +msgid "Disable password quality check (if enabled)" +msgstr "" + +#: src/cryptsetup.c:3398 +msgid "Use dm-crypt same_cpu_crypt performance compatibility option" +msgstr "" + +#: src/cryptsetup.c:3399 +msgid "Use dm-crypt submit_from_crypt_cpus performance compatibility option" +msgstr "" + +#: src/cryptsetup.c:3400 +msgid "Device removal is deferred until the last user closes it" +msgstr "" + +#: src/cryptsetup.c:3401 +msgid "Use global lock to serialize memory hard PBKDF (OOM workaround)" +msgstr "" + +#: src/cryptsetup.c:3402 +#, fuzzy +msgid "PBKDF iteration time for LUKS (in ms)" +msgstr "waktu iterasi PBKDF2 untuk LUKS (dalam mdet)" + +#: src/cryptsetup.c:3402 src/cryptsetup_reencrypt.c:1607 +msgid "msecs" +msgstr "mdetik" + +#: src/cryptsetup.c:3403 src/cryptsetup_reencrypt.c:1625 +msgid "PBKDF algorithm (for LUKS2): argon2i, argon2id, pbkdf2" +msgstr "" + +#: src/cryptsetup.c:3404 src/cryptsetup_reencrypt.c:1626 +msgid "PBKDF memory cost limit" +msgstr "" + +#: src/cryptsetup.c:3404 src/cryptsetup_reencrypt.c:1626 +msgid "kilobytes" +msgstr "" + +#: src/cryptsetup.c:3405 src/cryptsetup_reencrypt.c:1627 +msgid "PBKDF parallel cost" +msgstr "" + +#: src/cryptsetup.c:3405 src/cryptsetup_reencrypt.c:1627 +msgid "threads" +msgstr "" + +#: src/cryptsetup.c:3406 src/cryptsetup_reencrypt.c:1628 +msgid "PBKDF iterations cost (forced, disables benchmark)" +msgstr "" + +#: src/cryptsetup.c:3407 +msgid "Keyslot priority: ignore, normal, prefer" +msgstr "" + +#: src/cryptsetup.c:3408 +msgid "Disable locking of on-disk metadata" +msgstr "" + +#: src/cryptsetup.c:3409 +msgid "Disable loading volume keys via kernel keyring" +msgstr "" + +#: src/cryptsetup.c:3410 +msgid "Data integrity algorithm (LUKS2 only)" +msgstr "" + +#: src/cryptsetup.c:3411 src/integritysetup.c:564 +msgid "Disable journal for integrity device" +msgstr "" + +#: src/cryptsetup.c:3412 src/integritysetup.c:538 +msgid "Do not wipe device after format" +msgstr "" + +#: src/cryptsetup.c:3413 +msgid "Do not ask for passphrase if activation by token fails" +msgstr "" + +#: src/cryptsetup.c:3414 +msgid "Token number (default: any)" +msgstr "" + +#: src/cryptsetup.c:3415 +msgid "Key description" +msgstr "" + +#: src/cryptsetup.c:3416 +msgid "Encryption sector size (default: 512 bytes)" +msgstr "" + +#: src/cryptsetup.c:3417 +msgid "Set activation flags persistent for device" +msgstr "" + +#: src/cryptsetup.c:3418 +#, fuzzy +msgid "Set label for the LUKS2 device" +msgstr "format sebuah perangkat LUKS" + +#: src/cryptsetup.c:3419 +msgid "Set subsystem label for the LUKS2 device" +msgstr "" + +#: src/cryptsetup.c:3420 +msgid "Create unbound (no assigned data segment) LUKS2 keyslot" +msgstr "" + +#: src/cryptsetup.c:3421 +msgid "Read or write the json from or to a file" +msgstr "" + +#: src/cryptsetup.c:3422 +msgid "LUKS2 header metadata area size" +msgstr "" + +#: src/cryptsetup.c:3423 +#, fuzzy +msgid "LUKS2 header keyslots area size" +msgstr "Berkas dengan header LUKS dan cadangan slot kunci." + +#: src/cryptsetup.c:3424 +msgid "Refresh (reactivate) device with new parameters" +msgstr "" + +#: src/cryptsetup.c:3425 +#, fuzzy +msgid "LUKS2 keyslot: The size of the encryption key" +msgstr "Besar dari kunci enkripsi" + +#: src/cryptsetup.c:3426 +msgid "LUKS2 keyslot: The cipher used for keyslot encryption" +msgstr "" + +#: src/cryptsetup.c:3427 +msgid "Encrypt LUKS2 device (in-place encryption)." +msgstr "" + +#: src/cryptsetup.c:3428 +msgid "Decrypt LUKS2 device (remove encryption)." +msgstr "" + +#: src/cryptsetup.c:3429 +msgid "Initialize LUKS2 reencryption in metadata only." +msgstr "" + +#: src/cryptsetup.c:3430 +msgid "Resume initialized LUKS2 reencryption only." +msgstr "" + +#: src/cryptsetup.c:3431 src/cryptsetup_reencrypt.c:1619 +msgid "Reduce data device size (move data offset). DANGEROUS!" +msgstr "" + +#: src/cryptsetup.c:3432 +msgid "Maximal reencryption hotzone size." +msgstr "" + +#: src/cryptsetup.c:3433 +msgid "Reencryption hotzone resilience type (checksum,journal,none)" +msgstr "" + +#: src/cryptsetup.c:3434 +msgid "Reencryption hotzone checksums hash" +msgstr "" + +#: src/cryptsetup.c:3435 +msgid "Override device autodetection of dm device to be reencrypted" +msgstr "" + +#: src/cryptsetup.c:3451 src/veritysetup.c:462 src/integritysetup.c:583 +#, fuzzy +msgid "[OPTION...] " +msgstr "[PILIHAN...] ]" + +#: src/cryptsetup.c:3502 src/veritysetup.c:496 src/integritysetup.c:594 +msgid "Argument missing." +msgstr "Argumen hilang." + +#: src/cryptsetup.c:3565 src/veritysetup.c:527 src/integritysetup.c:625 +msgid "Unknown action." +msgstr "Aksi tidak diketahui." + +#: src/cryptsetup.c:3575 +msgid "Parameter --refresh is only allowed with open or refresh commands.\n" +msgstr "" + +#: src/cryptsetup.c:3580 +msgid "Options --refresh and --test-passphrase are mutually exclusive.\n" +msgstr "" + +#: src/cryptsetup.c:3585 +msgid "Option --deferred is allowed only for close command.\n" +msgstr "" + +#: src/cryptsetup.c:3590 +msgid "Option --shared is allowed only for open of plain device.\n" +msgstr "" + +#: src/cryptsetup.c:3595 +msgid "Option --allow-discards is allowed only for open operation.\n" +msgstr "" + +#: src/cryptsetup.c:3600 +msgid "Option --persistent is allowed only for open operation.\n" +msgstr "" + +#: src/cryptsetup.c:3605 +msgid "Option --serialize-memory-hard-pbkdf is allowed only for open operation.\n" +msgstr "" + +#: src/cryptsetup.c:3610 +msgid "Option --persistent is not allowed with --test-passphrase.\n" +msgstr "" + +#: src/cryptsetup.c:3620 +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:3626 +msgid "Option --integrity is allowed only for luksFormat (LUKS2).\n" +msgstr "" + +#: src/cryptsetup.c:3631 +msgid "Option --integrity-no-wipe can be used only for format action with integrity extension.\n" +msgstr "" + +#: src/cryptsetup.c:3637 +msgid "Options --label and --subsystem are allowed only for luksFormat and config LUKS2 operations.\n" +msgstr "" + +#: src/cryptsetup.c:3643 +msgid "Option --test-passphrase is allowed only for open of LUKS and TCRYPT devices.\n" +msgstr "" + +#: src/cryptsetup.c:3648 src/cryptsetup_reencrypt.c:1692 +msgid "Key size must be a multiple of 8 bits" +msgstr "Kunci harus kelipatan dari 8 bit" + +#: src/cryptsetup.c:3654 src/cryptsetup_reencrypt.c:1378 +#: src/cryptsetup_reencrypt.c:1697 +#, fuzzy +msgid "Key slot is invalid." +msgstr "Slot kunci %d tidak valid.\n" + +#: src/cryptsetup.c:3661 +msgid "Option --key-file takes precedence over specified key file argument." +msgstr "" + +#: src/cryptsetup.c:3668 src/veritysetup.c:539 src/integritysetup.c:649 +#: src/cryptsetup_reencrypt.c:1671 +msgid "Negative number for option not permitted." +msgstr "" + +#: src/cryptsetup.c:3672 +msgid "Only one --key-file argument is allowed." +msgstr "" + +#: src/cryptsetup.c:3676 src/cryptsetup_reencrypt.c:1663 +#: src/cryptsetup_reencrypt.c:1701 +msgid "Only one of --use-[u]random options is allowed." +msgstr "" + +#: src/cryptsetup.c:3680 +msgid "Option --use-[u]random is allowed only for luksFormat." +msgstr "" + +#: src/cryptsetup.c:3684 +msgid "Option --uuid is allowed only for luksFormat and luksUUID." +msgstr "" + +#: src/cryptsetup.c:3688 +msgid "Option --align-payload is allowed only for luksFormat." +msgstr "" + +#: src/cryptsetup.c:3692 +msgid "Options --luks2-metadata-size and --opt-luks2-keyslots-size are allowed only for luksFormat with LUKS2." +msgstr "" + +#: src/cryptsetup.c:3697 +msgid "Invalid LUKS2 metadata size specification." +msgstr "" + +#: src/cryptsetup.c:3701 +msgid "Invalid LUKS2 keyslots size specification." +msgstr "" + +#: src/cryptsetup.c:3705 +msgid "Options --align-payload and --offset cannot be combined." +msgstr "" + +#: src/cryptsetup.c:3711 +#, fuzzy +msgid "Option --skip is supported only for open of plain and loopaes devices.\n" +msgstr "Operasi ini hanya didukunga untuk perangkat LUKS.\n" + +#: src/cryptsetup.c:3718 +msgid "Option --offset is supported only for open of plain and loopaes devices, luksFormat and device reencryption.\n" +msgstr "" + +#: src/cryptsetup.c:3724 +msgid "Option --tcrypt-hidden, --tcrypt-system or --tcrypt-backup is supported only for TCRYPT device.\n" +msgstr "" + +#: src/cryptsetup.c:3729 +msgid "Option --tcrypt-hidden cannot be combined with --allow-discards.\n" +msgstr "" + +#: src/cryptsetup.c:3734 +#, fuzzy +msgid "Option --veracrypt is supported only for TCRYPT device type.\n" +msgstr "Operasi ini hanya didukunga untuk perangkat LUKS.\n" + +#: src/cryptsetup.c:3740 +msgid "Invalid argument for parameter --veracrypt-pim supplied.\n" +msgstr "" + +#: src/cryptsetup.c:3744 +#, fuzzy +msgid "Option --veracrypt-pim is supported only for VeraCrypt compatible devices.\n" +msgstr "Operasi ini hanya didukunga untuk perangkat LUKS.\n" + +#: src/cryptsetup.c:3752 +msgid "Option --veracrypt-query-pim is supported only for VeraCrypt compatible devices.\n" +msgstr "" + +#: src/cryptsetup.c:3756 +msgid "The options --veracrypt-pim and --veracrypt-query-pim are mutually exclusive.\n" +msgstr "" + +#: src/cryptsetup.c:3763 +msgid "Option --priority can be only ignore/normal/prefer.\n" +msgstr "" + +#: src/cryptsetup.c:3768 +msgid "Keyslot specification is required.\n" +msgstr "" + +#: src/cryptsetup.c:3773 src/cryptsetup_reencrypt.c:1677 +msgid "Password-based key derivation function (PBKDF) can be only pbkdf2 or argon2i/argon2id.\n" +msgstr "" + +#: src/cryptsetup.c:3778 src/cryptsetup_reencrypt.c:1682 +msgid "PBKDF forced iterations cannot be combined with iteration time option.\n" +msgstr "" + +#: src/cryptsetup.c:3784 +#, fuzzy +msgid "Sector size option is not supported for this command.\n" +msgstr "Operasi ini tidak didukung untuk perangkat crypt %s.\n" + +#: src/cryptsetup.c:3790 +#, fuzzy +msgid "Unsupported encryption sector size.\n" +msgstr "versi LUKS %d tidak didukung.\n" + +#: src/cryptsetup.c:3795 +msgid "Key size is required with --unbound option.\n" +msgstr "" + +#: src/cryptsetup.c:3800 +msgid "Option --unbound may be used only with luksAddKey action.\n" +msgstr "" + +#: src/cryptsetup.c:3805 +msgid "Option --refresh may be used only with open action.\n" +msgstr "" + +#: src/cryptsetup.c:3816 +msgid "Cannot disable metadata locking.\n" +msgstr "" + +#: src/cryptsetup.c:3826 +msgid "Invalid max reencryption hotzone size specification." +msgstr "" + +#: src/cryptsetup.c:3834 src/cryptsetup_reencrypt.c:1706 +#: src/cryptsetup_reencrypt.c:1711 +#, fuzzy +msgid "Invalid device size specification." +msgstr "Perangkat %s tidak valid.\n" + +#: src/cryptsetup.c:3837 +msgid "Maximum device reduce size is 1 GiB." +msgstr "" + +#: src/cryptsetup.c:3840 src/cryptsetup_reencrypt.c:1717 +#, fuzzy +msgid "Reduce size must be multiple of 512 bytes sector." +msgstr "Kunci harus kelipatan dari 8 bit" + +#: src/cryptsetup.c:3845 +msgid "Invalid data size specification." +msgstr "" + +#: src/cryptsetup.c:3850 +msgid "Reduce size overflow." +msgstr "" + +#: src/cryptsetup.c:3854 +msgid "LUKS2 decryption requires option --header." +msgstr "" + +#: src/cryptsetup.c:3858 +#, fuzzy +msgid "Device size must be multiple of 512 bytes sector." +msgstr "Kunci harus kelipatan dari 8 bit" + +#: src/cryptsetup.c:3862 +msgid "Options --reduce-device-size and --data-size cannot be combined." +msgstr "" + +#: src/cryptsetup.c:3866 +msgid "Options --device-size and --size cannot be combined." +msgstr "" + +#: src/veritysetup.c:65 +msgid "Invalid salt string specified." +msgstr "" + +#: src/veritysetup.c:96 +#, c-format +msgid "Cannot create hash image %s for writing." +msgstr "" + +#: src/veritysetup.c:106 +#, c-format +msgid "Cannot create FEC image %s for writing." +msgstr "" + +#: src/veritysetup.c:176 +msgid "Invalid root hash string specified." +msgstr "" + +#: src/veritysetup.c:356 +#, fuzzy +msgid " " +msgstr " " + +#: src/veritysetup.c:356 src/integritysetup.c:469 +#, fuzzy +msgid "format device" +msgstr "buat perangkat" + +#: src/veritysetup.c:357 +msgid " " +msgstr "" + +#: src/veritysetup.c:357 +#, fuzzy +msgid "verify device" +msgstr "hapus perangkat" + +#: src/veritysetup.c:358 +msgid " " +msgstr "" + +#: src/veritysetup.c:360 src/integritysetup.c:472 +#, fuzzy +msgid "show active device status" +msgstr "tampilkan status perangkat" + +#: src/veritysetup.c:361 +#, fuzzy +msgid "" +msgstr "" + +#: src/veritysetup.c:361 src/integritysetup.c:473 +msgid "show on-disk information" +msgstr "" + +#: src/veritysetup.c:380 +#, c-format +msgid "" +"\n" +" is the device to create under %s\n" +" is the data device\n" +" is the device containing verification data\n" +" hash of the root node on \n" +msgstr "" + +#: src/veritysetup.c:387 +#, c-format +msgid "" +"\n" +"Default compiled-in dm-verity parameters:\n" +"\tHash: %s, Data block (bytes): %u, Hash block (bytes): %u, Salt size: %u, Hash format: %u\n" +msgstr "" + +#: src/veritysetup.c:430 +msgid "Do not use verity superblock" +msgstr "" + +#: src/veritysetup.c:431 +msgid "Format type (1 - normal, 0 - original Chrome OS)" +msgstr "" + +#: src/veritysetup.c:431 +msgid "number" +msgstr "" + +#: src/veritysetup.c:432 +#, fuzzy +msgid "Block size on the data device" +msgstr "Besar dari perangkat" + +#: src/veritysetup.c:433 +#, fuzzy +msgid "Block size on the hash device" +msgstr "Besar dari perangkat" + +#: src/veritysetup.c:434 +msgid "FEC parity bytes" +msgstr "" + +#: src/veritysetup.c:435 +msgid "The number of blocks in the data file" +msgstr "" + +#: src/veritysetup.c:435 +msgid "blocks" +msgstr "" + +#: src/veritysetup.c:436 +msgid "Path to device with error correction data" +msgstr "" + +#: src/veritysetup.c:436 src/integritysetup.c:540 +msgid "path" +msgstr "" + +#: src/veritysetup.c:437 +#, fuzzy +msgid "Starting offset on the hash device" +msgstr "Awal ofset dalam perangkat backend" + +#: src/veritysetup.c:438 +#, fuzzy +msgid "Starting offset on the FEC device" +msgstr "Awal ofset dalam perangkat backend" + +#: src/veritysetup.c:439 +msgid "Hash algorithm" +msgstr "" + +#: src/veritysetup.c:439 +msgid "string" +msgstr "" + +#: src/veritysetup.c:440 +msgid "Salt" +msgstr "" + +#: src/veritysetup.c:440 +msgid "hex string" +msgstr "" + +#: src/veritysetup.c:442 +msgid "Restart kernel if corruption is detected" +msgstr "" + +#: src/veritysetup.c:443 +msgid "Ignore corruption, log it only" +msgstr "" + +#: src/veritysetup.c:444 +msgid "Do not verify zeroed blocks" +msgstr "" + +#: src/veritysetup.c:445 +msgid "Verify data block only the first time it is read" +msgstr "" + +#: src/veritysetup.c:545 +msgid "Option --ignore-corruption, --restart-on-corruption or --ignore-zero-blocks is allowed only for open operation.\n" +msgstr "" + +#: src/veritysetup.c:550 +msgid "Option --ignore-corruption and --restart-on-corruption cannot be used together.\n" +msgstr "" + +#: src/integritysetup.c:83 src/utils_password.c:305 +#, fuzzy, c-format +msgid "Cannot read keyfile %s." +msgstr "Tidak dapat membaca perangkat %s.\n" + +#: src/integritysetup.c:87 src/utils_password.c:310 +#, fuzzy, c-format +msgid "Cannot read %d bytes from keyfile %s." +msgstr "Tidak dapat membaca %d bytes dari berkas kunci %s.\n" + +#: src/integritysetup.c:250 +#, c-format +msgid "Formatted with tag size %u, internal integrity %s.\n" +msgstr "" + +#: src/integritysetup.c:469 src/integritysetup.c:473 +#, fuzzy +msgid "" +msgstr "" + +#: src/integritysetup.c:470 +#, fuzzy +msgid " " +msgstr " " + +#: src/integritysetup.c:492 +#, c-format +msgid "" +"\n" +" is the device to create under %s\n" +" is the device containing data with integrity tags\n" +msgstr "" + +#: src/integritysetup.c:497 +#, c-format +msgid "" +"\n" +"Default compiled-in dm-integrity parameters:\n" +"\tTag size: %u bytes, Checksum algorithm: %s\n" +msgstr "" + +#: src/integritysetup.c:540 +msgid "Path to data device (if separated)" +msgstr "" + +#: src/integritysetup.c:542 +msgid "Journal size" +msgstr "" + +#: src/integritysetup.c:543 +msgid "Interleave sectors" +msgstr "" + +#: src/integritysetup.c:544 +msgid "Journal watermark" +msgstr "" + +#: src/integritysetup.c:544 +msgid "percent" +msgstr "" + +#: src/integritysetup.c:545 +msgid "Journal commit time" +msgstr "" + +#: src/integritysetup.c:545 src/integritysetup.c:547 +msgid "ms" +msgstr "" + +#: src/integritysetup.c:546 +msgid "Number of 512-byte sectors per bit (bitmap mode)." +msgstr "" + +#: src/integritysetup.c:547 +msgid "Bitmap mode flush time" +msgstr "" + +#: src/integritysetup.c:548 +msgid "Tag size (per-sector)" +msgstr "" + +#: src/integritysetup.c:549 +msgid "Sector size" +msgstr "" + +#: src/integritysetup.c:550 +msgid "Buffers size" +msgstr "" + +#: src/integritysetup.c:552 +msgid "Data integrity algorithm" +msgstr "" + +#: src/integritysetup.c:553 +#, fuzzy +msgid "The size of the data integrity key" +msgstr "Besar dari kunci enkripsi" + +#: src/integritysetup.c:554 +#, fuzzy +msgid "Read the integrity key from a file" +msgstr "Baca volume (master) kunci dari berkas." + +#: src/integritysetup.c:556 +msgid "Journal integrity algorithm" +msgstr "" + +#: src/integritysetup.c:557 +#, fuzzy +msgid "The size of the journal integrity key" +msgstr "Besar dari kunci enkripsi" + +#: src/integritysetup.c:558 +#, fuzzy +msgid "Read the journal integrity key from a file" +msgstr "Baca volume (master) kunci dari berkas." + +#: src/integritysetup.c:560 +msgid "Journal encryption algorithm" +msgstr "" + +#: src/integritysetup.c:561 +#, fuzzy +msgid "The size of the journal encryption key" +msgstr "Besar dari kunci enkripsi" + +#: src/integritysetup.c:562 +#, fuzzy +msgid "Read the journal encryption key from a file" +msgstr "Baca volume (master) kunci dari berkas." + +#: src/integritysetup.c:565 +msgid "Recovery mode (no journal, no tag checking)" +msgstr "" + +#: src/integritysetup.c:566 +msgid "Use bitmap to track changes and disable journal for integrity device" +msgstr "" + +#: src/integritysetup.c:567 +msgid "Recalculate initial tags automatically." +msgstr "" + +#: src/integritysetup.c:640 +msgid "Option --integrity-recalculate can be used only for open action." +msgstr "" + +#: src/integritysetup.c:655 +msgid "Options --journal-size, --interleave-sectors, --sector-size, --tag-size and --no-wipe can be used only for format action.\n" +msgstr "" + +#: src/integritysetup.c:661 +msgid "Invalid journal size specification." +msgstr "" + +#: src/integritysetup.c:666 +msgid "Both key file and key size options must be specified." +msgstr "" + +#: src/integritysetup.c:669 +msgid "Integrity algorithm must be specified if integrity key is used." +msgstr "" + +#: src/integritysetup.c:674 +msgid "Both journal integrity key file and key size options must be specified." +msgstr "" + +#: src/integritysetup.c:677 +msgid "Journal integrity algorithm must be specified if journal integrity key is used." +msgstr "" + +#: src/integritysetup.c:682 +msgid "Both journal encryption key file and key size options must be specified." +msgstr "" + +#: src/integritysetup.c:685 +msgid "Journal encryption algorithm must be specified if journal encryption key is used." +msgstr "" + +#: src/integritysetup.c:689 +msgid "Recovery and bitmap mode options are mutually exclusive." +msgstr "" + +#: src/integritysetup.c:693 +msgid "Journal options cannot be used in bitmap mode." +msgstr "" + +#: src/integritysetup.c:697 +msgid "Bitmap options can be used only in bitmap mode." +msgstr "" + +#: src/cryptsetup_reencrypt.c:172 +msgid "Reencryption already in-progress." +msgstr "" + +#: src/cryptsetup_reencrypt.c:201 +#, fuzzy, c-format +msgid "Cannot exclusively open %s, device in use." +msgstr "Tidak dapat membuka perangkat %s.\n" + +#: src/cryptsetup_reencrypt.c:215 src/cryptsetup_reencrypt.c:1127 +msgid "Allocation of aligned memory failed." +msgstr "" + +#: src/cryptsetup_reencrypt.c:222 +#, fuzzy, c-format +msgid "Cannot read device %s." +msgstr "Tidak dapat membaca perangkat %s.\n" + +#: src/cryptsetup_reencrypt.c:233 +#, c-format +msgid "Marking LUKS1 device %s unusable." +msgstr "" + +#: src/cryptsetup_reencrypt.c:237 +#, c-format +msgid "Setting LUKS2 offline reencrypt flag on device %s." +msgstr "" + +#: src/cryptsetup_reencrypt.c:254 +#, fuzzy, c-format +msgid "Cannot write device %s." +msgstr "Tidak dapat menghapus perangkat %s.\n" + +#: src/cryptsetup_reencrypt.c:302 +#, fuzzy +msgid "Cannot write reencryption log file." +msgstr "Tidak dapat menulis berkas cadangan header %s.\n" + +#: src/cryptsetup_reencrypt.c:358 +#, fuzzy +msgid "Cannot read reencryption log file." +msgstr "Tidak dapat membaca berkas cadangan header %s.\n" + +#: src/cryptsetup_reencrypt.c:396 +#, c-format +msgid "Log file %s exists, resuming reencryption.\n" +msgstr "" + +#: src/cryptsetup_reencrypt.c:445 +msgid "Activating temporary device using old LUKS header." +msgstr "" + +#: src/cryptsetup_reencrypt.c:455 +msgid "Activating temporary device using new LUKS header." +msgstr "" + +#: src/cryptsetup_reencrypt.c:465 +msgid "Activation of temporary devices failed." +msgstr "" + +#: src/cryptsetup_reencrypt.c:551 +#, fuzzy +msgid "Failed to set data offset." +msgstr "Gagal memperoleh data statistik berkas kunci %s.\n" + +#: src/cryptsetup_reencrypt.c:557 +#, fuzzy +msgid "Failed to set metadata size." +msgstr "Gagal memperoleh data statistik berkas kunci %s.\n" + +#: src/cryptsetup_reencrypt.c:565 +#, fuzzy, c-format +msgid "New LUKS header for device %s created." +msgstr "Tidak dapat menghapus kepala di perangkat %s.\n" + +#: src/cryptsetup_reencrypt.c:625 +#, c-format +msgid "This version of cryptsetup-reencrypt can't handle new internal token type %s." +msgstr "" + +#: src/cryptsetup_reencrypt.c:647 +msgid "Failed to read activation flags from backup header." +msgstr "" + +#: src/cryptsetup_reencrypt.c:651 +#, fuzzy +msgid "Failed to write activation flags to new header." +msgstr "Gagal untuk menulis di penyimpanan kunci.\n" + +#: src/cryptsetup_reencrypt.c:655 src/cryptsetup_reencrypt.c:659 +#, fuzzy +msgid "Failed to read requirements from backup header." +msgstr "Gagal untuk membaca dari penyimpanan kunci.\n" + +#: src/cryptsetup_reencrypt.c:697 +#, fuzzy, c-format +msgid "%s header backup of device %s created." +msgstr "Pilihan --header-backup-file dibutuhkan.\n" + +#: src/cryptsetup_reencrypt.c:760 +msgid "Creation of LUKS backup headers failed." +msgstr "" + +#: src/cryptsetup_reencrypt.c:893 +#, fuzzy, c-format +msgid "Cannot restore %s header on device %s." +msgstr "Tidak dapat menghapus kepala di perangkat %s.\n" + +#: src/cryptsetup_reencrypt.c:895 +#, fuzzy, c-format +msgid "%s header on device %s restored." +msgstr "Tidak dapat menghapus kepala di perangkat %s.\n" + +#: src/cryptsetup_reencrypt.c:1099 src/cryptsetup_reencrypt.c:1105 +#, fuzzy +msgid "Cannot open temporary LUKS device." +msgstr "Gagal untuk membuka perangkat penyimpan kunci sementara.\n" + +#: src/cryptsetup_reencrypt.c:1110 src/cryptsetup_reencrypt.c:1115 +#, fuzzy +msgid "Cannot get device size." +msgstr "Tidak dapat membaca perangkat %s.\n" + +#: src/cryptsetup_reencrypt.c:1150 +msgid "IO error during reencryption." +msgstr "" + +#: src/cryptsetup_reencrypt.c:1181 +msgid "Provided UUID is invalid." +msgstr "" + +#: src/cryptsetup_reencrypt.c:1407 +#, fuzzy +msgid "Cannot open reencryption log file." +msgstr "Tidak dapat membuka berkas cadangan header %s.\n" + +#: src/cryptsetup_reencrypt.c:1413 +msgid "No decryption in progress, provided UUID can be used only to resume suspended decryption process." +msgstr "" + +#: src/cryptsetup_reencrypt.c:1488 +#, c-format +msgid "Changed pbkdf parameters in keyslot %i." +msgstr "" + +#: src/cryptsetup_reencrypt.c:1600 +msgid "Reencryption block size" +msgstr "" + +#: src/cryptsetup_reencrypt.c:1600 +msgid "MiB" +msgstr "" + +#: src/cryptsetup_reencrypt.c:1604 +msgid "Do not change key, no data area reencryption" +msgstr "" + +#: src/cryptsetup_reencrypt.c:1606 +#, fuzzy +msgid "Read new volume (master) key from file" +msgstr "Baca volume (master) kunci dari berkas." + +#: src/cryptsetup_reencrypt.c:1607 +msgid "PBKDF2 iteration time for LUKS (in ms)" +msgstr "waktu iterasi PBKDF2 untuk LUKS (dalam mdet)" + +#: src/cryptsetup_reencrypt.c:1613 +msgid "Use direct-io when accessing devices" +msgstr "" + +#: src/cryptsetup_reencrypt.c:1614 +msgid "Use fsync after each block" +msgstr "" + +#: src/cryptsetup_reencrypt.c:1615 +msgid "Update log file after every block" +msgstr "" + +#: src/cryptsetup_reencrypt.c:1616 +msgid "Use only this slot (others will be disabled)" +msgstr "" + +#: src/cryptsetup_reencrypt.c:1621 +#, fuzzy +msgid "Create new header on not encrypted device" +msgstr "Tidak dapat menghapus kepala di perangkat %s.\n" + +#: src/cryptsetup_reencrypt.c:1622 +msgid "Permanently decrypt device (remove encryption)" +msgstr "" + +#: src/cryptsetup_reencrypt.c:1623 +#, fuzzy +msgid "The UUID used to resume decryption" +msgstr "Besar dari kunci enkripsi" + +#: src/cryptsetup_reencrypt.c:1624 +msgid "Type of LUKS metadata: luks1, luks2" +msgstr "" + +#: src/cryptsetup_reencrypt.c:1643 +msgid "[OPTION...] " +msgstr "" + +#: src/cryptsetup_reencrypt.c:1651 +#, c-format +msgid "Reencryption will change: %s%s%s%s%s%s." +msgstr "" + +#: src/cryptsetup_reencrypt.c:1652 +msgid "volume key" +msgstr "" + +#: src/cryptsetup_reencrypt.c:1654 +msgid "set hash to " +msgstr "" + +#: src/cryptsetup_reencrypt.c:1655 +msgid ", set cipher to " +msgstr "" + +#: src/cryptsetup_reencrypt.c:1659 +msgid "Argument required." +msgstr "" + +#: src/cryptsetup_reencrypt.c:1687 +msgid "Only values between 1 MiB and 64 MiB allowed for reencryption block size." +msgstr "" + +#: src/cryptsetup_reencrypt.c:1714 +msgid "Maximum device reduce size is 64 MiB." +msgstr "" + +#: src/cryptsetup_reencrypt.c:1721 +msgid "Option --new must be used together with --reduce-device-size or --header." +msgstr "" + +#: src/cryptsetup_reencrypt.c:1725 +msgid "Option --keep-key can be used only with --hash, --iter-time or --pbkdf-force-iterations." +msgstr "" + +#: src/cryptsetup_reencrypt.c:1729 +msgid "Option --new cannot be used together with --decrypt." +msgstr "" + +#: src/cryptsetup_reencrypt.c:1733 +msgid "Option --decrypt is incompatible with specified parameters." +msgstr "" + +#: src/cryptsetup_reencrypt.c:1737 +msgid "Option --uuid is allowed only together with --decrypt." +msgstr "" + +#: src/cryptsetup_reencrypt.c:1741 +msgid "Invalid luks type. Use one of these: 'luks', 'luks1' or 'luks2'." +msgstr "" + +#: src/utils_tools.c:151 +#, fuzzy +msgid "Error reading response from terminal." +msgstr "Kesalahan dalam pembacaan kata sandi dari terminal.\n" + +#: src/utils_tools.c:186 +msgid "Command successful.\n" +msgstr "Perintah berhasil.\n" + +#: src/utils_tools.c:194 +msgid "wrong or missing parameters" +msgstr "" + +#: src/utils_tools.c:196 +#, fuzzy +msgid "no permission or bad passphrase" +msgstr "Masukan kata sandi: " + +#: src/utils_tools.c:198 +#, fuzzy +msgid "out of memory" +msgstr "Tidak dapat membuka kunci memori." + +#: src/utils_tools.c:200 +msgid "wrong device or file specified" +msgstr "" + +#: src/utils_tools.c:202 +#, fuzzy +msgid "device already exists or device is busy" +msgstr "Perangkat %s telah ada.\n" + +#: src/utils_tools.c:204 +msgid "unknown error" +msgstr "" + +#: src/utils_tools.c:206 +#, fuzzy, c-format +msgid "Command failed with code %i (%s).\n" +msgstr "Perintah gagal dengan kode %i" + +#: src/utils_tools.c:283 +#, fuzzy, c-format +msgid "Key slot %i created." +msgstr "Slot kunci %d telah terverifikasi.\n" + +#: src/utils_tools.c:285 +#, fuzzy, c-format +msgid "Key slot %i unlocked." +msgstr "Slot kunci %d tidak terkunci.\n" + +#: src/utils_tools.c:287 +#, fuzzy, c-format +msgid "Key slot %i removed." +msgstr "Slot kunci %d telah terverifikasi.\n" + +#: src/utils_tools.c:296 +#, c-format +msgid "Token %i created." +msgstr "" + +#: src/utils_tools.c:298 +#, c-format +msgid "Token %i removed." +msgstr "" + +#: src/utils_tools.c:464 +msgid "" +"\n" +"Wipe interrupted." +msgstr "" + +#: src/utils_tools.c:475 +#, c-format +msgid "WARNING: Device %s already contains a '%s' partition signature.\n" +msgstr "" + +#: src/utils_tools.c:483 +#, c-format +msgid "WARNING: Device %s already contains a '%s' superblock signature.\n" +msgstr "" + +#: src/utils_tools.c:504 src/utils_tools.c:568 +#, fuzzy +msgid "Failed to initialize device signature probes." +msgstr "Gagal untuk memperoleh direktori pemeta-perangkat." + +#: src/utils_tools.c:548 +#, fuzzy, c-format +msgid "Failed to stat device %s." +msgstr "Gagal memperoleh data statistik berkas kunci %s.\n" + +#: src/utils_tools.c:561 +#, c-format +msgid "Device %s is in use. Can not proceed with format operation." +msgstr "" + +#: src/utils_tools.c:563 +#, fuzzy, c-format +msgid "Failed to open file %s in read/write mode." +msgstr "Gagal membuka berkas kunci %s.\n" + +#: src/utils_tools.c:577 +#, c-format +msgid "Existing '%s' partition signature (offset: % bytes) on device %s will be wiped." +msgstr "" + +#: src/utils_tools.c:580 +#, c-format +msgid "Existing '%s' superblock signature (offset: % bytes) on device %s will be wiped." +msgstr "" + +#: src/utils_tools.c:583 +#, fuzzy +msgid "Failed to wipe device signature." +msgstr "Gagal untuk menulis di penyimpanan kunci.\n" + +#: src/utils_tools.c:590 +#, fuzzy, c-format +msgid "Failed to probe device %s for a signature." +msgstr "Gagal untuk memperoleh direktori pemeta-perangkat." + +#: src/utils_tools.c:629 +msgid "" +"\n" +"Reencryption interrupted." +msgstr "" + +#: src/utils_password.c:43 src/utils_password.c:75 +#, c-format +msgid "Cannot check password quality: %s" +msgstr "" + +#: src/utils_password.c:51 +#, fuzzy, c-format +msgid "" +"Password quality check failed:\n" +" %s" +msgstr "setpriority %u gagal: %s" + +#: src/utils_password.c:83 +#, c-format +msgid "Password quality check failed: Bad passphrase (%s)" +msgstr "" + +#: src/utils_password.c:193 src/utils_password.c:208 +#, fuzzy +msgid "Error reading passphrase from terminal." +msgstr "Kesalahan dalam pembacaan kata sandi dari terminal.\n" + +#: src/utils_password.c:206 +msgid "Verify passphrase: " +msgstr "Memverifikasi kata sandi: " + +#: src/utils_password.c:213 +#, fuzzy +msgid "Passphrases do not match." +msgstr "Kata sandi tidak cocok.\n" + +#: src/utils_password.c:250 +msgid "Cannot use offset with terminal input." +msgstr "" + +#: src/utils_password.c:253 +#, c-format +msgid "Enter passphrase: " +msgstr "Masukan kata sandi: " + +#: src/utils_password.c:256 +#, c-format +msgid "Enter passphrase for %s: " +msgstr "Masukan kata sandi untuk %s: " + +#: src/utils_password.c:287 +#, fuzzy +msgid "No key available with this passphrase." +msgstr "Tidak ada kunci tersedia dengan kata sandi ini.\n" + +#: src/utils_password.c:289 +msgid "No usable keyslot is available." +msgstr "" + +#: src/utils_password.c:328 +#, fuzzy, c-format +msgid "Cannot open keyfile %s for write." +msgstr "Tidak dapat membuka berkas %s.\n" + +#: src/utils_password.c:335 +#, fuzzy, c-format +msgid "Cannot write to keyfile %s." +msgstr "Tidak dapat menulis berkas cadangan header %s.\n" + +#: src/utils_luks2.c:47 +#, fuzzy, c-format +msgid "Failed to open file %s in read-only mode." +msgstr "Gagal membuka berkas kunci %s.\n" + +#: src/utils_luks2.c:60 +msgid "Provide valid LUKS2 token JSON:\n" +msgstr "" + +#: src/utils_luks2.c:67 +#, fuzzy +msgid "Failed to read JSON file." +msgstr "Gagal membuka berkas kunci %s.\n" + +#: src/utils_luks2.c:72 +msgid "" +"\n" +"Read interrupted." +msgstr "" + +#: src/utils_luks2.c:113 +#, fuzzy, c-format +msgid "Failed to open file %s in write mode." +msgstr "Gagal membuka berkas kunci %s.\n" + +#: src/utils_luks2.c:122 +msgid "" +"\n" +"Write interrupted." +msgstr "" + +#: src/utils_luks2.c:126 +#, fuzzy +msgid "Failed to write JSON file." +msgstr "Gagal membuka berkas kunci %s.\n" + +#~ msgid "Key %d not active. Can't wipe.\n" +#~ msgstr "Kunci %d tidak aktif. Tidak dapat menghapus.\n" + +#~ msgid "Enter LUKS passphrase: " +#~ msgstr "Masukan kata sandi LUKS: " + +#~ msgid "Warning: exhausting read requested, but key file %s is not a regular file, function might never return.\n" +#~ msgstr "Peringatan: pembacaan yang melelahkan diminta, tetapi berkas kunci %s bukan sebuah berkas biasa, fungsi mungkin tidak pernah kembali.\n" + +#~ msgid "exclusive " +#~ msgstr "ekslusif " + +#~ msgid "writable" +#~ msgstr "dapat-ditulis" + +#~ msgid "read-only" +#~ msgstr "baca-saja" + +#~ msgid "Cannot open device: %s\n" +#~ msgstr "Tidak dapat membuka perangkat: %s\n" + +#~ msgid "BLKROGET failed on device %s.\n" +#~ msgstr "BLKROGET gagal di perangkat %s.\n" + +#~ msgid "BLKGETSIZE failed on device %s.\n" +#~ msgstr "BLKGETSIZE gagal di perangkat %s.\n" + +#~ msgid "WARNING!!! Possibly insecure memory. Are you root?\n" +#~ msgstr "PERINGATAN!!! Kemungkinan menggunakan memori tidak aman. Apakah anda root?\n" + +#~ msgid "Unable to obtain sector size for %s" +#~ msgstr "Tidak dapat mendapatkan ukuran sektor untuk %s" + +#~ msgid "Backup file %s doesn't exist.\n" +#~ msgstr "Berkas cadangan %s tidak ada.\n" + +#~ msgid "%s is not LUKS device.\n" +#~ msgstr "%s bukan perangkat LUKS.\n" + +#~ msgid "remove LUKS mapping" +#~ msgstr "hapus pemetaan LUKS" + +#~ msgid "identical to luksKillSlot - DEPRECATED - see man page" +#~ msgstr "identik ke luksKillSlot - DITINGGALKAN - lihat halaman petunjuk penggunaan" + +#~ msgid "modify active device - DEPRECATED - see man page" +#~ msgstr "modifikasi perangkat aktif - DITINGGALKAN - lihat halaman petunjuk penggunaan" + +#~ msgid "" +#~ "The reload action is deprecated. Please use \"dmsetup reload\" in case you really need this functionality.\n" +#~ "WARNING: do not use reload to touch LUKS devices. If that is the case, hit Ctrl-C now.\n" +#~ msgstr "" +#~ "Aksi muat kembali telah ditinggalkan. Mohon gunakan \"dmsetup reload\" dalam kasus anda benar benar membutuhkan fungsi ini.\n" +#~ "PERINGATAN: jangan gunakan muat-kembali untuk menyentuk perangkat LUKS. Jika itu masalahnya, tekan Ctrl-C sekarang.\n" + +#~ msgid "memory allocation error in action_luksFormat" +#~ msgstr "alokasi memori error dalam action_luksFormat" + +#~ msgid "Obsolete option --non-exclusive is ignored.\n" +#~ msgstr "Pilihan sudah ditinggalkan --no-exclusive diabaikan.\n" + +#~ msgid "Read the key from a file (can be /dev/random)" +#~ msgstr "Baca kunci dari sebuah berkas (dapat berupa /dev/random)" + +#~ msgid "(Obsoleted, see man page.)" +#~ msgstr "(Ditinggalkan, lihat halaman petunjuk penggunaan.)" diff --git a/po/insert-header.sin b/po/insert-header.sin new file mode 100644 index 0000000..b26de01 --- /dev/null +++ b/po/insert-header.sin @@ -0,0 +1,23 @@ +# Sed script that inserts the file called HEADER before the header entry. +# +# At each occurrence of a line starting with "msgid ", we execute the following +# commands. At the first occurrence, insert the file. At the following +# occurrences, do nothing. The distinction between the first and the following +# occurrences is achieved by looking at the hold space. +/^msgid /{ +x +# Test if the hold space is empty. +s/m/m/ +ta +# Yes it was empty. First occurrence. Read the file. +r HEADER +# Output the file's contents by reading the next line. But don't lose the +# current line while doing this. +g +N +bb +:a +# The hold space was nonempty. Following occurrences. Do nothing. +x +:b +} diff --git a/po/it.gmo b/po/it.gmo new file mode 100644 index 0000000000000000000000000000000000000000..15d368d8590eeac702f9633a77e3f9811562dd36 GIT binary patch literal 82166 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

g&j?|Sdq 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, 2010, 2011, 2012. +# Milo Casagrande , 2013, 2014, 2015, 2016, 2018, 2019. +# +msgid "" +msgstr "" +"Project-Id-Version: cryptsetup-2.1.0\n" +"Report-Msgid-Bugs-To: dm-crypt@saout.de\n" +"POT-Creation-Date: 2019-11-01 09:04+0100\n" +"PO-Revision-Date: 2019-01-28 09:18+0100\n" +"Last-Translator: Milo Casagrande \n" +"Language-Team: Italian \n" +"Language: it\n" +"MIME-Version: 1.0\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" +"Plural-Forms: nplurals=2; plural=(n!=1);\n" +"X-Generator: Poedit 2.2.1\n" + +#: lib/libdevmapper.c:384 +msgid "Cannot initialize device-mapper, running as non-root user." +msgstr "Impossibile inizializzare device-mapper: in esecuzione come utente non-root." + +#: lib/libdevmapper.c:387 +msgid "Cannot initialize device-mapper. Is dm_mod kernel module loaded?" +msgstr "Impossibile inizializzare device-mapper. Forse il modulo kernel dm_mod non è caricato." + +#: lib/libdevmapper.c:1082 +msgid "Requested deferred flag is not supported." +msgstr "Il flag posticipato richiesto non è supportato." + +#: lib/libdevmapper.c:1149 +#, c-format +msgid "DM-UUID for device %s was truncated." +msgstr "Il DM-UUID per il dispositivo %s è stato troncato." + +#: lib/libdevmapper.c:1463 +#, fuzzy +msgid "Unknown dm target type." +msgstr "Tipo PBKDF %s non riconosciuto." + +#: lib/libdevmapper.c:1565 lib/libdevmapper.c:1617 +msgid "Requested dm-crypt performance options are not supported." +msgstr "Le opzioni di prestazioni richieste per dm-crypt non sono supportate." + +#: lib/libdevmapper.c:1572 +msgid "Requested dm-verity data corruption handling options are not supported." +msgstr "Le opzioni di gestione dei dati rovinati richieste per dm-verity non sono supportate." + +#: lib/libdevmapper.c:1576 +msgid "Requested dm-verity FEC options are not supported." +msgstr "Le opzioni FEC dm-verity richieste non sono supportate." + +#: lib/libdevmapper.c:1580 +msgid "Requested data integrity options are not supported." +msgstr "Le opzioni di integrità dei dati richieste non sono supportate." + +#: lib/libdevmapper.c:1582 +msgid "Requested sector_size option is not supported." +msgstr "L'opzione sector_size richiesta non è supportata." + +#: lib/libdevmapper.c:1587 +msgid "Requested automatic recalculation of integrity tags is not supported." +msgstr "Il ricalcolo automatico dei tag d'integrità non è supportato." + +#: lib/libdevmapper.c:1591 +#, fuzzy +msgid "Requested dm-integrity bitmap mode is not supported." +msgstr "Le opzioni di integrità dei dati richieste non sono supportate." + +#: lib/libdevmapper.c:1620 +msgid "Discard/TRIM is not supported." +msgstr "Discard/TRIM non è supportato." + +#: lib/libdevmapper.c:2511 +#, c-format +msgid "Failed to query dm-%s segment." +msgstr "Interrogazione del segmento dm-%s non riuscita." + +#: lib/random.c:80 +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" +msgstr "" +"Il sistema non ha un'entropia sufficiente mentre viene generata la chiave di volume.\n" +"Muovere il mouse o digitare del testo in un'altra finestra per accumulare più eventi casuali.\n" + +#: lib/random.c:84 +#, c-format +msgid "Generating key (%d%% done).\n" +msgstr "Generazione chiave (%d%% completato).\n" + +#: lib/random.c:170 +msgid "Running in FIPS mode." +msgstr "Esecuzione in modalità FIPS." + +#: lib/random.c:176 +msgid "Fatal error during RNG initialisation." +msgstr "Errore fatale durante l'inizializzazione dell'RNG." + +#: lib/random.c:213 +msgid "Unknown RNG quality requested." +msgstr "Qualità richiesta per l'RNG sconosciuta." + +#: lib/random.c:218 +msgid "Error reading from RNG." +msgstr "Errore nel leggere dall'RNG." + +#: lib/setup.c:223 +msgid "Cannot initialize crypto RNG backend." +msgstr "Impossibile inizializzare il backend crypto RNG." + +#: lib/setup.c:229 +msgid "Cannot initialize crypto backend." +msgstr "Impossibile inizializzare il backend crypto." + +#: lib/setup.c:260 lib/setup.c:1990 lib/verity/verity.c:120 +#, c-format +msgid "Hash algorithm %s not supported." +msgstr "Algoritmo di hash %s non supportato." + +#: lib/setup.c:263 lib/loopaes/loopaes.c:90 +#, c-format +msgid "Key processing error (using hash %s)." +msgstr "Errore nell'elaborazione della chiave (usando l'hash %s)." + +#: lib/setup.c:324 lib/setup.c:351 +msgid "Cannot determine device type. Incompatible activation of device?" +msgstr "Impossibile determinare il tipo di dispositivo. Attivazione incompatibile del dispositivo?" + +#: lib/setup.c:330 lib/setup.c:2985 +msgid "This operation is supported only for LUKS device." +msgstr "Questa operazione è supportata solo per il dispositivo LUKS." + +#: lib/setup.c:357 +msgid "This operation is supported only for LUKS2 device." +msgstr "Questa operazione è supportata solo per il dispositivo LUKS2." + +#: lib/setup.c:412 lib/luks2/luks2_reencrypt.c:2345 +msgid "All key slots full." +msgstr "Tutti gli slot di chiave sono pieni." + +#: lib/setup.c:423 +#, c-format +msgid "Key slot %d is invalid, please select between 0 and %d." +msgstr "Lo slot di chiave %d non è valido, selezionarne uno tra 0 e %d." + +#: lib/setup.c:429 +#, c-format +msgid "Key slot %d is full, please select another one." +msgstr "Lo slot di chiave %d è pieno, selezionarne un altro." + +#: lib/setup.c:514 lib/setup.c:2759 +#, fuzzy +msgid "Device size is not aligned to device logical block size." +msgstr "La dimensione del dispositivo non è allineata con la dimensione del settore richiesta." + +#: lib/setup.c:610 +#, c-format +msgid "Header detected but device %s is too small." +msgstr "Rilevato un header, ma il dispositivo %s è troppo piccolo." + +#: lib/setup.c:647 +msgid "This operation is not supported for this device type." +msgstr "Questa operazione non è supportata per questo tipo di dispositivo." + +#: lib/setup.c:652 +#, fuzzy +msgid "Illegal operation with reencryption in-progress." +msgstr "Re-cifratura offline in corso. Terminato." + +#: lib/setup.c:821 lib/luks1/keymanage.c:476 +#, c-format +msgid "Unsupported LUKS version %d." +msgstr "Versione %d di LUKS non supportata." + +#: lib/setup.c:838 lib/setup.c:1483 lib/setup.c:1903 +msgid "Detached metadata device is not supported for this crypt type." +msgstr "Il dispositivo di metadati scollegato non è supportato per questo tipo di cifratura." + +#: lib/setup.c:1373 lib/setup.c:2479 lib/setup.c:2551 lib/setup.c:2563 +#: lib/setup.c:2712 lib/setup.c:4310 +#, c-format +msgid "Device %s is not active." +msgstr "Il dispositivo %s non è attivo." + +#: lib/setup.c:1390 +#, c-format +msgid "Underlying device for crypt device %s disappeared." +msgstr "Device sottostante a quello cifrato %s scomparso." + +#: lib/setup.c:1468 +msgid "Invalid plain crypt parameters." +msgstr "Parametri di cifratura in chiaro non validi." + +#: lib/setup.c:1473 lib/setup.c:1893 src/integritysetup.c:73 +msgid "Invalid key size." +msgstr "Dimensione della chiave non valida." + +#: lib/setup.c:1478 lib/setup.c:1898 lib/setup.c:2100 +msgid "UUID is not supported for this crypt type." +msgstr "UUID non è supportato per questo tipo di cifratura." + +#: lib/setup.c:1493 lib/setup.c:1683 lib/luks2/luks2_reencrypt.c:2308 +#: src/cryptsetup.c:1169 +msgid "Unsupported encryption sector size." +msgstr "Dimensione settore di cifratura non supportato." + +#: lib/setup.c:1501 lib/setup.c:1808 lib/setup.c:2753 +msgid "Device size is not aligned to requested sector size." +msgstr "La dimensione del dispositivo non è allineata con la dimensione del settore richiesta." + +#: lib/setup.c:1552 lib/setup.c:1671 +msgid "Can't format LUKS without device." +msgstr "Impossibile formattare LUKS senza dispositivo." + +#: lib/setup.c:1558 lib/setup.c:1677 +msgid "Requested data alignment is not compatible with data offset." +msgstr "L'allineamento dei dati richiesti non è compatibile con l'offset dei dati." + +#: lib/setup.c:1626 lib/setup.c:1795 +msgid "WARNING: Data offset is outside of currently available data device.\n" +msgstr "Attenzione: l'offset dei dati è al di fuori del dispositivo dati attualmente disponibile.\n" + +#: lib/setup.c:1636 lib/setup.c:1823 lib/setup.c:1844 lib/setup.c:2112 +#, c-format +msgid "Cannot wipe header on device %s." +msgstr "Impossibile ripulire l'header sul dispositivo %s." + +#: lib/setup.c:1688 +msgid "WARNING: The device activation will fail, dm-crypt is missing support for requested encryption sector size.\n" +msgstr "Attenzione: l'attivazione del dispositivo non riuscirà, dm-crypt manca il supporto per la dimensione del settore di crittografia richiesta.\n" + +#: lib/setup.c:1710 +msgid "Volume key is too small for encryption with integrity extensions." +msgstr "La chiave di volume è troppo piccola per la cifratura con estensioni di integrità." + +#: lib/setup.c:1765 +#, c-format +msgid "Cipher %s-%s (key size %zd bits) is not available." +msgstr "Il cifrario %s-%s (dimensione chiave di %zd byte) non è disponibile." + +#: lib/setup.c:1798 +#, c-format +msgid "WARNING: LUKS2 metadata size changed to % bytes.\n" +msgstr "" + +#: lib/setup.c:1802 +#, c-format +msgid "WARNING: LUKS2 keyslots area size changed to % bytes.\n" +msgstr "" + +#: lib/setup.c:1826 lib/utils_device.c:829 lib/luks1/keyencryption.c:256 +#: lib/luks2/luks2_reencrypt.c:2356 lib/luks2/luks2_reencrypt.c:3348 +#, c-format +msgid "Device %s is too small." +msgstr "Il dispositivo %s è troppo piccolo." + +#: lib/setup.c:1837 lib/setup.c:1863 +#, c-format +msgid "Cannot format device %s in use." +msgstr "Impossibile formattare il dispositivo %s che risulta ancora in uso." + +#: lib/setup.c:1840 lib/setup.c:1866 +#, c-format +msgid "Cannot format device %s, permission denied." +msgstr "Impossibile formattare il dispositivo %s, permessi non concessi." + +#: lib/setup.c:1852 lib/setup.c:2164 +#, c-format +msgid "Cannot format integrity for device %s." +msgstr "Impossibile formattare l'integrità per il dispositivo %s." + +#: lib/setup.c:1870 +#, c-format +msgid "Cannot format device %s." +msgstr "Impossibile formattare il dispositivo %s." + +#: lib/setup.c:1888 +msgid "Can't format LOOPAES without device." +msgstr "Impossibile formattare LOOPAES senza dispositivo." + +#: lib/setup.c:1933 +msgid "Can't format VERITY without device." +msgstr "Impossibile formattare VERITY senza dispositivo." + +#: lib/setup.c:1944 lib/verity/verity.c:103 +#, c-format +msgid "Unsupported VERITY hash type %d." +msgstr "Tipo di hash %d VERITY non supportato." + +#: lib/setup.c:1950 lib/verity/verity.c:111 +msgid "Unsupported VERITY block size." +msgstr "Dimensione blocco VERITY non supportata." + +#: lib/setup.c:1955 lib/verity/verity.c:75 +msgid "Unsupported VERITY hash offset." +msgstr "Offset hash VERITY non supportato." + +#: lib/setup.c:1960 +msgid "Unsupported VERITY FEC offset." +msgstr "Offset FEC VERITY non supportato." + +#: lib/setup.c:1984 +msgid "Data area overlaps with hash area." +msgstr "L'area dati si sovrappone a quella di hash." + +#: lib/setup.c:2009 +msgid "Hash area overlaps with FEC area." +msgstr "L'area di hash si sovrappone a quella FEC." + +#: lib/setup.c:2016 +msgid "Data area overlaps with FEC area." +msgstr "L'area dati si sovrappone a quella FEC." + +#: lib/setup.c:2221 +#, c-format +msgid "Unknown crypt device type %s requested." +msgstr "Richiesto dispositivo cifrato di tipo %s sconosciuto." + +#: lib/setup.c:2485 lib/setup.c:2557 lib/setup.c:2570 +#, c-format +msgid "Unsupported parameters on device %s." +msgstr "Parametri non supportati sul dispositivo %s." + +#: lib/setup.c:2491 lib/setup.c:2576 lib/luks2/luks2_reencrypt.c:2408 +#: lib/luks2/luks2_reencrypt.c:2718 +#, c-format +msgid "Mismatching parameters on device %s." +msgstr "Parametri non corrispondenti sul dispositivo %s." + +#: lib/setup.c:2596 +msgid "Crypt devices mismatch." +msgstr "" + +#: lib/setup.c:2633 lib/setup.c:2638 lib/luks2/luks2_reencrypt.c:2054 +#: lib/luks2/luks2_reencrypt.c:3126 +#, fuzzy, c-format +msgid "Failed to reload device %s." +msgstr "Stat del dispositivo %s non riuscita." + +#: lib/setup.c:2643 lib/setup.c:2648 lib/luks2/luks2_reencrypt.c:2025 +#: lib/luks2/luks2_reencrypt.c:2032 +#, fuzzy, c-format +msgid "Failed to suspend device %s." +msgstr "Stat del dispositivo %s non riuscita." + +#: lib/setup.c:2653 lib/luks2/luks2_reencrypt.c:2039 +#: lib/luks2/luks2_reencrypt.c:3061 lib/luks2/luks2_reencrypt.c:3130 +#, fuzzy, c-format +msgid "Failed to resume device %s." +msgstr "Stat del dispositivo %s non riuscita." + +#: lib/setup.c:2667 +#, c-format +msgid "Fatal error while reloading device %s (on top of device %s)." +msgstr "" + +#: lib/setup.c:2670 lib/setup.c:2672 +#, fuzzy, c-format +msgid "Failed to switch device %s to dm-error." +msgstr "Stat del dispositivo %s non riuscita." + +#: lib/setup.c:2744 +msgid "Cannot resize loop device." +msgstr "Impossibile ridimensionare un dispositivo di loopback." + +#: lib/setup.c:2817 +msgid "Do you really want to change UUID of device?" +msgstr "Cambiare veramente l'UUID del dispositivo?" + +#: lib/setup.c:2893 +msgid "Header backup file does not contain compatible LUKS header." +msgstr "Il file di backup dell'header non contiene un header LUKS compatibile." + +#: lib/setup.c:2993 +#, c-format +msgid "Volume %s is not active." +msgstr "Il volume %s non è attivo." + +#: lib/setup.c:3004 +#, c-format +msgid "Volume %s is already suspended." +msgstr "Il volume %s è già sospeso." + +#: lib/setup.c:3017 +#, c-format +msgid "Suspend is not supported for device %s." +msgstr "La sospensione non è supportata per il dispositivo %s." + +#: lib/setup.c:3019 +#, c-format +msgid "Error during suspending device %s." +msgstr "Errore durante la sospensione del dispositivo %s." + +#: lib/setup.c:3052 lib/setup.c:3119 +#, c-format +msgid "Volume %s is not suspended." +msgstr "Il volume %s non è sospeso." + +#: lib/setup.c:3081 +#, c-format +msgid "Resume is not supported for device %s." +msgstr "Il ripristino non è supportato per il dispositivo %s." + +#: lib/setup.c:3083 lib/setup.c:3151 +#, c-format +msgid "Error during resuming device %s." +msgstr "Errore durante il ripristino del dispositivo %s." + +#: lib/setup.c:3219 lib/setup.c:3407 +msgid "Cannot add key slot, all slots disabled and no volume key provided." +msgstr "Impossibile aggiungere uno slot di chiave, tutti gli slot sono disabilitati e nessuna chiave di volume è stata fornita." + +#: lib/setup.c:3359 +msgid "Failed to swap new key slot." +msgstr "Sostituzione del nuovo slot di chiave non riuscita." + +#: lib/setup.c:3524 lib/setup.c:4161 lib/setup.c:4174 lib/setup.c:4182 +#: lib/setup.c:4195 lib/setup.c:4480 lib/setup.c:5593 +msgid "Volume key does not match the volume." +msgstr "La chiave di volume non corrisponde al volume." + +#: lib/setup.c:3545 +#, c-format +msgid "Key slot %d is invalid." +msgstr "Lo slot di chiave %d non è valido." + +#: lib/setup.c:3551 src/cryptsetup.c:1511 src/cryptsetup.c:1856 +#, c-format +msgid "Keyslot %d is not active." +msgstr "Lo slot di chiave %d non è attivo." + +#: lib/setup.c:3570 +msgid "Device header overlaps with data area." +msgstr "L'header del dispositivo si sovrappone all'area dati." + +#: lib/setup.c:3836 +#, fuzzy +msgid "Reencryption in-progress. Cannot activate device." +msgstr "Re-cifratura in corso." + +#: lib/setup.c:3838 lib/luks2/luks2_json_metadata.c:2244 +#: lib/luks2/luks2_reencrypt.c:2817 +#, fuzzy +msgid "Failed to get reencryption lock." +msgstr "Impossibile acquisire blocco del dispositivo di scrittura." + +#: lib/setup.c:3851 lib/luks2/luks2_reencrypt.c:2836 +#, fuzzy +msgid "LUKS2 reencryption recovery failed." +msgstr "Dimensione settore di cifratura non supportato." + +#: lib/setup.c:3978 lib/setup.c:4248 +msgid "Device type is not properly initialised." +msgstr "Il tipo di dispositivo non è inizializzato correttamente." + +#: lib/setup.c:4022 +#, c-format +msgid "Cannot use device %s, name is invalid or still in use." +msgstr "Impossibile formattare il dispositivo %s che risulta ancora in uso." + +#: lib/setup.c:4025 +#, c-format +msgid "Device %s already exists." +msgstr "Esiste già un dispositivo %s." + +#: lib/setup.c:4148 +msgid "Incorrect volume key specified for plain device." +msgstr "Specificata una chiave di volume non corretta per il dispositivo in chiaro." + +#: lib/setup.c:4214 +msgid "Incorrect root hash specified for verity device." +msgstr "Specificato un hash root non corretto per il dispositivo verity." + +#: lib/setup.c:4289 lib/setup.c:4305 lib/luks2/luks2_json_metadata.c:2297 +#: src/cryptsetup.c:2527 +#, c-format +msgid "Device %s is still in use." +msgstr "Il dispositivo %s è ancora in uso." + +#: lib/setup.c:4314 +#, c-format +msgid "Invalid device %s." +msgstr "Device %s non valido." + +#: lib/setup.c:4430 +msgid "Volume key buffer too small." +msgstr "Buffer di chiave del volume troppo piccolo." + +#: lib/setup.c:4438 +msgid "Cannot retrieve volume key for plain device." +msgstr "Impossibile recuperare la chiave di volume per il dispositivo in chiaro." + +#: lib/setup.c:4449 +#, c-format +msgid "This operation is not supported for %s crypt device." +msgstr "Questa operazione non è supportata per il dispositivo cifrato %s." + +#: lib/setup.c:4636 +msgid "Dump operation is not supported for this device type." +msgstr "L'operazione di dump non è supportata per questo tipo di dispositivo." + +#: lib/setup.c:4947 +#, c-format +msgid "Data offset is not multiple of %u bytes." +msgstr "" + +#: lib/setup.c:5229 +#, c-format +msgid "Cannot convert device %s which is still in use." +msgstr "Impossibile convertire il dispositivo %s che risulta ancora in uso." + +#: lib/setup.c:5526 +#, c-format +msgid "Failed to assign keyslot %u as the new volume key." +msgstr "Assegnamento slot di chiave %u come nuova chiave del volume non riuscito." + +#: lib/setup.c:5599 +msgid "Failed to initialise default LUKS2 keyslot parameters." +msgstr "Inizializzazione parametri predefiniti per lo slot di chiave LUKS2 non riuscita." + +#: lib/setup.c:5605 +#, c-format +msgid "Failed to assign keyslot %d to digest." +msgstr "Assegnazione slot di chiave %d al digest non riuscita." + +#: lib/setup.c:5690 +msgid "Failed to load key in kernel keyring." +msgstr "Caricamento chiave nel portachiavi del kernel non riuscito." + +#: lib/setup.c:5757 +msgid "Kernel keyring is not supported by the kernel." +msgstr "Il portachiavi del kernel non è supportato dal kernel." + +#: lib/setup.c:5767 lib/luks2/luks2_reencrypt.c:2933 +#, c-format +msgid "Failed to read passphrase from keyring (error %d)." +msgstr "Lettura della passphrase dal portachiavi non riuscita (errore %d)." + +#: lib/setup.c:5791 +msgid "Failed to acquire global memory-hard access serialization lock." +msgstr "" + +#: lib/utils.c:81 +msgid "Cannot get process priority." +msgstr "Impossibile ottenere la priorità del processo." + +#: lib/utils.c:95 +msgid "Cannot unlock memory." +msgstr "Impossibile sbloccare la memoria." + +#: lib/utils.c:169 lib/tcrypt/tcrypt.c:498 +msgid "Failed to open key file." +msgstr "Apertura del file chiave non riuscita." + +#: lib/utils.c:174 +msgid "Cannot read keyfile from a terminal." +msgstr "Impossibile leggere il file chiave dal terminale." + +#: lib/utils.c:191 +msgid "Failed to stat key file." +msgstr "Stat del file chiave non riuscito." + +#: lib/utils.c:199 lib/utils.c:220 +msgid "Cannot seek to requested keyfile offset." +msgstr "Impossibile posizionarsi all'offset del file di chiave richiesto." + +#: lib/utils.c:214 lib/utils.c:229 src/utils_password.c:188 +#: src/utils_password.c:201 +msgid "Out of memory while reading passphrase." +msgstr "Memoria esaurita durante la lettura della passphrase." + +#: lib/utils.c:249 +msgid "Error reading passphrase." +msgstr "Errore nel leggere la passphrase." + +#: lib/utils.c:266 +msgid "Nothing to read on input." +msgstr "Nessun dato da leggere sull'input." + +#: lib/utils.c:273 +msgid "Maximum keyfile size exceeded." +msgstr "Dimensione massima del file chiave superata." + +#: lib/utils.c:278 +msgid "Cannot read requested amount of data." +msgstr "Impossibile leggere la quantità richiesta di dati." + +#: lib/utils_device.c:188 lib/utils_storage_wrappers.c:111 +#: lib/luks1/keyencryption.c:92 +#, c-format +msgid "Device %s doesn't exist or access denied." +msgstr "Il dispositivo %s non esiste oppure è negato l'accesso." + +#: lib/utils_device.c:198 +#, c-format +msgid "Device %s is not compatible." +msgstr "Il dispositivo %s non è compatibile." + +#: lib/utils_device.c:643 +#, c-format +msgid "Device %s is too small. Need at least % bytes." +msgstr "Il dispositivo %s è troppo piccolo, sono necessari almeno % byte." + +#: lib/utils_device.c:724 +#, c-format +msgid "Cannot use device %s which is in use (already mapped or mounted)." +msgstr "Impossibile utilizzare il dispositivo %s il quale è in uso (già mappato o montato)." + +#: lib/utils_device.c:728 +#, c-format +msgid "Cannot use device %s, permission denied." +msgstr "Impossibile usare il dispositivo %s, permessi negati." + +#: lib/utils_device.c:731 +#, c-format +msgid "Cannot get info about device %s." +msgstr "Impossibile ottenere informazioni sul dispositivo %s." + +#: lib/utils_device.c:754 +msgid "Cannot use a loopback device, running as non-root user." +msgstr "Impossibile usare un dispositivo di loopback, in esecuzione come utente non root." + +#: lib/utils_device.c:764 +msgid "Attaching loopback device failed (loop device with autoclear flag is required)." +msgstr "Collegamento del dispositivo di loopback non riuscito (è richiesto un dispositivo di loop con flag autoclear)." + +#: lib/utils_device.c:810 +#, c-format +msgid "Requested offset is beyond real size of device %s." +msgstr "L'offset richiesto è oltre la dimensione reale del dispositivo %s." + +#: lib/utils_device.c:818 +#, c-format +msgid "Device %s has zero size." +msgstr "Il dispositivo %s ha dimensione zero." + +#: lib/utils_pbkdf.c:100 +msgid "Requested PBKDF target time cannot be zero." +msgstr "Il tempo PBKDF richiesto non può essere zero." + +#: lib/utils_pbkdf.c:106 +#, c-format +msgid "Unknown PBKDF type %s." +msgstr "Tipo PBKDF %s non riconosciuto." + +#: lib/utils_pbkdf.c:111 +#, c-format +msgid "Requested hash %s is not supported." +msgstr "L'hash %s richiesto non è supportato." + +#: lib/utils_pbkdf.c:122 +msgid "Requested PBKDF type is not supported for LUKS1." +msgstr "Il tipo PBKDF richiesto non è supportato per LUKS1." + +#: lib/utils_pbkdf.c:128 +msgid "PBKDF max memory or parallel threads must not be set with pbkdf2." +msgstr "Memoria massima o thread paralleli PBKDF non devono essere impostati con pbkdf2." + +#: lib/utils_pbkdf.c:133 lib/utils_pbkdf.c:143 +#, c-format +msgid "Forced iteration count is too low for %s (minimum is %u)." +msgstr "Il conteggio delle iterazioni forzate è troppo basso per %s (minimo è %u)." + +#: lib/utils_pbkdf.c:148 +#, c-format +msgid "Forced memory cost is too low for %s (minimum is %u kilobytes)." +msgstr "Il costo della memoria forzata è troppo basso per %s (minimo è %u kilobyte)." + +#: lib/utils_pbkdf.c:155 +#, c-format +msgid "Requested maximum PBKDF memory cost is too high (maximum is %d kilobytes)." +msgstr "Il costo massimo richiesto per la memoria PBKDF è troppo elevato (massimo è %d kilobyte)." + +#: lib/utils_pbkdf.c:160 +msgid "Requested maximum PBKDF memory cannot be zero." +msgstr "La memoria PBKDF massima richiesta non può essere zero." + +#: lib/utils_pbkdf.c:164 +msgid "Requested PBKDF parallel threads cannot be zero." +msgstr "I thread paralleli PBKDF richiesti non possono essere zero." + +#: lib/utils_pbkdf.c:184 +msgid "Only PBKDF2 is supported in FIPS mode." +msgstr "" + +#: lib/utils_benchmark.c:166 +msgid "PBKDF benchmark disabled but iterations not set." +msgstr "Benchmark PBKDF disabilitato, ma iterazioni non impostate." + +#: lib/utils_benchmark.c:185 +#, c-format +msgid "Not compatible PBKDF2 options (using hash algorithm %s)." +msgstr "Opzioni PBKDF2 non compatibili (usando l'algoritmo di hash %s)." + +#: lib/utils_benchmark.c:205 +msgid "Not compatible PBKDF options." +msgstr "Opzioni PBKDF non compatibili." + +#: lib/utils_device_locking.c:103 +#, c-format +msgid "Locking aborted. The locking path %s/%s is unusable (not a directory or missing)." +msgstr "Blocco interrotto. Il percorso di blocco %s/%s è inutilizzabile (non una directory o mancante)." + +#: lib/utils_device_locking.c:110 +#, c-format +msgid "WARNING: Locking directory %s/%s is missing!\n" +msgstr "Attenzione: la directory di blocco %s/%s non esiste.\n" + +#: lib/utils_device_locking.c:120 +#, c-format +msgid "Locking aborted. The locking path %s/%s is unusable (%s is not a directory)." +msgstr "Blocco interrotto. Il percorso di blocco %s/%s è inutilizzabile (%s non è una directory)." + +#: lib/utils_wipe.c:185 src/cryptsetup_reencrypt.c:933 +#: src/cryptsetup_reencrypt.c:1017 +msgid "Cannot seek to device offset." +msgstr "Impossibile posizionarsi all'offset del dispositivo." + +#: lib/utils_wipe.c:209 +#, c-format +msgid "Device wipe error, offset %." +msgstr "" + +#: lib/luks1/keyencryption.c:40 +#, c-format +msgid "" +"Failed to setup dm-crypt key mapping for device %s.\n" +"Check that kernel supports %s cipher (check syslog for more info)." +msgstr "" +"Impostazione mappatura di chiave dm-crypt non riuscita per il dispositivo %s.\n" +"Controllare che il kernel supporti il cifrario %s (controllare syslog per maggiori informazioni)." + +#: lib/luks1/keyencryption.c:45 +msgid "Key size in XTS mode must be 256 or 512 bits." +msgstr "La dimensione della chiave in modalità XTS deve essere 256 o 512 bit." + +#: lib/luks1/keyencryption.c:47 +msgid "Cipher specification should be in [cipher]-[mode]-[iv] format." +msgstr "La specifica del cifrario dovrebbe essere nel formato [cifrario]-[modalità]-[iv]." + +#: lib/luks1/keyencryption.c:98 lib/luks1/keymanage.c:345 +#: lib/luks1/keymanage.c:636 lib/luks1/keymanage.c:1074 +#: lib/luks2/luks2_json_metadata.c:1253 lib/luks2/luks2_keyslot.c:739 +#, c-format +msgid "Cannot write to device %s, permission denied." +msgstr "Impossibile scrivere sul dispositivo %s, permessi negati." + +#: lib/luks1/keyencryption.c:121 +msgid "Failed to open temporary keystore device." +msgstr "Apertura del dispositivo temporaneo di deposito chiavi non riuscita." + +#: lib/luks1/keyencryption.c:128 +msgid "Failed to access temporary keystore device." +msgstr "Accesso al dispositivo temporaneo di deposito chiavi non riuscito." + +#: lib/luks1/keyencryption.c:201 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 "Errore di IO durante la cifratura dello slot di chiave." + +#: lib/luks1/keyencryption.c:247 lib/luks1/keymanage.c:348 +#: lib/luks1/keymanage.c:589 lib/luks1/keymanage.c:639 lib/tcrypt/tcrypt.c:661 +#: lib/verity/verity.c:81 lib/verity/verity.c:179 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:1256 +#: src/cryptsetup_reencrypt.c:205 +#, c-format +msgid "Cannot open device %s." +msgstr "Impossibile aprire il dispositivo %s." + +#: lib/luks1/keyencryption.c:258 lib/luks2/luks2_keyslot_luks2.c:137 +msgid "IO error while decrypting keyslot." +msgstr "Errore di IO durante la decifratura dello slot di chiave." + +#: lib/luks1/keymanage.c:111 +#, c-format +msgid "Device %s is too small. (LUKS1 requires at least % bytes.)" +msgstr "Il dispositivo %s è troppo piccolo (LUKS1 richiede almeno % 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 +#, c-format +msgid "LUKS keyslot %u is invalid." +msgstr "Lo slot di chiave LUKS %u non è valido." + +#: lib/luks1/keymanage.c:229 lib/luks1/keymanage.c:473 +#: lib/luks2/luks2_json_metadata.c:1084 src/cryptsetup.c:1372 +#: src/cryptsetup.c:1498 src/cryptsetup.c:1555 src/cryptsetup.c:1611 +#: src/cryptsetup.c:1678 src/cryptsetup.c:1781 src/cryptsetup.c:1845 +#: src/cryptsetup.c:2005 src/cryptsetup.c:2194 src/cryptsetup.c:2254 +#: src/cryptsetup.c:2320 src/cryptsetup.c:2484 src/cryptsetup.c:3137 +#: src/cryptsetup.c:3146 src/cryptsetup_reencrypt.c:1372 +#, c-format +msgid "Device %s is not a valid LUKS device." +msgstr "Il dispositivo %s non è un dispositivo LUKS valido." + +#: lib/luks1/keymanage.c:247 lib/luks2/luks2_json_metadata.c:1101 +#, c-format +msgid "Requested header backup file %s already exists." +msgstr "Il file di backup dell'header %s richiesto esiste già." + +#: lib/luks1/keymanage.c:249 lib/luks2/luks2_json_metadata.c:1103 +#, c-format +msgid "Cannot create header backup file %s." +msgstr "Impossibile creare il file di backup dell'header %s." + +#: lib/luks1/keymanage.c:256 lib/luks2/luks2_json_metadata.c:1110 +#, c-format +msgid "Cannot write header backup file %s." +msgstr "Impossibile scrivere il file di backup dell'header %s." + +#: lib/luks1/keymanage.c:287 lib/luks2/luks2_json_metadata.c:1162 +msgid "Backup file doesn't contain valid LUKS header." +msgstr "Il file di backup non contiene un header LUKS valido." + +#: lib/luks1/keymanage.c:300 lib/luks1/keymanage.c:550 +#: lib/luks2/luks2_json_metadata.c:1183 +#, c-format +msgid "Cannot open header backup file %s." +msgstr "Impossibile aprire il file di backup dell'header %s." + +#: lib/luks1/keymanage.c:308 lib/luks2/luks2_json_metadata.c:1191 +#, c-format +msgid "Cannot read header backup file %s." +msgstr "Impossibile leggere il file di backup dell'header %s." + +#: lib/luks1/keymanage.c:318 +msgid "Data offset or key size differs on device and backup, restore failed." +msgstr "L'offset di dati oppure la dimensione della chiave sono diversi tra il dispositivo e il backup, ripristino non riuscito." + +#: lib/luks1/keymanage.c:326 +#, c-format +msgid "Device %s %s%s" +msgstr "Il dispositivo %s %s%s" + +#: lib/luks1/keymanage.c:327 +msgid "does not contain LUKS header. Replacing header can destroy data on that device." +msgstr "non contiene un header LUKS. La sostituzione dell'header può distruggere i dati in quel dispositivo." + +#: lib/luks1/keymanage.c:328 +msgid "already contains LUKS header. Replacing header will destroy existing keyslots." +msgstr "contiene già un header LUKS. La sostituzione dell'header distruggerà gli slot di chiave esistenti." + +#: lib/luks1/keymanage.c:329 lib/luks2/luks2_json_metadata.c:1225 +msgid "" +"\n" +"WARNING: real device header has different UUID than backup!" +msgstr "" +"\n" +"Attenzione: l'header reale del dispositivo ha un UUID diverso da quello di backup." + +#: lib/luks1/keymanage.c:376 +msgid "Non standard key size, manual repair required." +msgstr "Dimensione non standard della chiave, è richiesta una riparazione manuale." + +#: lib/luks1/keymanage.c:381 +msgid "Non standard keyslots alignment, manual repair required." +msgstr "Allineamento slot di chiave non standard, richiesta riparazione manuale." + +#: lib/luks1/keymanage.c:391 +msgid "Repairing keyslots." +msgstr "Riparazione degli slot di chiave." + +#: lib/luks1/keymanage.c:410 +#, c-format +msgid "Keyslot %i: offset repaired (%u -> %u)." +msgstr "Slot di chiave %i: offset riparato (%u -> %u)." + +#: lib/luks1/keymanage.c:418 +#, c-format +msgid "Keyslot %i: stripes repaired (%u -> %u)." +msgstr "Slot di chiave %i: strisce riparate (%u -> %u)." + +#: lib/luks1/keymanage.c:427 +#, c-format +msgid "Keyslot %i: bogus partition signature." +msgstr "Slot di chiave %i: firma della partizione non corretta." + +#: lib/luks1/keymanage.c:432 +#, c-format +msgid "Keyslot %i: salt wiped." +msgstr "Slot di chiave %i: salt ripulito." + +#: lib/luks1/keymanage.c:449 +msgid "Writing LUKS header to disk." +msgstr "Scrittura dell'header LUKS sul disco." + +#: lib/luks1/keymanage.c:454 +msgid "Repair failed." +msgstr "Riparazione non riuscita." + +#: lib/luks1/keymanage.c:482 lib/luks1/keymanage.c:751 +#, c-format +msgid "Requested LUKS hash %s is not supported." +msgstr "L'hash %s di LUKS richiesto non è supportato." + +#: lib/luks1/keymanage.c:510 src/cryptsetup.c:1081 +msgid "No known problems detected for LUKS header." +msgstr "Nessun problema conosciuto rilevato per l'header LUKS." + +#: lib/luks1/keymanage.c:661 +#, c-format +msgid "Error during update of LUKS header on device %s." +msgstr "Errore durante l'aggiornamento dell'header LUKS sul dispositivo %s." + +#: lib/luks1/keymanage.c:669 +#, c-format +msgid "Error re-reading LUKS header after update on device %s." +msgstr "Errore nel rileggere l'header LUKS dopo l'aggiornamento sul dispositivo %s." + +#: lib/luks1/keymanage.c:745 +msgid "Data offset for LUKS header must be either 0 or higher than header size." +msgstr "L'offset dei dati per l'header LUKS deve essere 0 o maggiore della dimensione dell'header." + +#: lib/luks1/keymanage.c:756 lib/luks1/keymanage.c:821 +#: lib/luks2/luks2_json_format.c:283 lib/luks2/luks2_json_metadata.c:1002 +#: src/cryptsetup.c:2647 +msgid "Wrong LUKS UUID format provided." +msgstr "Fornito un formato UUID per LUKS errato." + +#: lib/luks1/keymanage.c:779 +msgid "Cannot create LUKS header: reading random salt failed." +msgstr "Impossibile creare l'header LUKS: lettura salt casuale non riuscita." + +#: lib/luks1/keymanage.c:800 +#, c-format +msgid "Cannot create LUKS header: header digest failed (using hash %s)." +msgstr "Impossibile creare l'header LUKS: digest dell'header non riuscito (usando l'hash %s)." + +#: lib/luks1/keymanage.c:844 +#, c-format +msgid "Key slot %d active, purge first." +msgstr "Slot di chiave %d attivo, eliminarlo prima." + +#: lib/luks1/keymanage.c:850 +#, c-format +msgid "Key slot %d material includes too few stripes. Header manipulation?" +msgstr "Il materiale dello slot di chiave %d contiene troppe poche strisce. Manipolazione dell'header?" + +#: lib/luks1/keymanage.c:1060 +#, c-format +msgid "Key slot %d is invalid, please select keyslot between 0 and %d." +msgstr "Lo slot di chiave %d non è valido, selezionarne uno tra 0 e %d." + +#: lib/luks1/keymanage.c:1078 lib/luks2/luks2_keyslot.c:743 +#, c-format +msgid "Cannot wipe device %s." +msgstr "Impossibile ripulire il dispositivo %s." + +#: lib/loopaes/loopaes.c:146 +msgid "Detected not yet supported GPG encrypted keyfile." +msgstr "Rilevato un file chiave cifrato con GPG non ancora supportato." + +#: lib/loopaes/loopaes.c:147 +msgid "Please use gpg --decrypt | cryptsetup --keyfile=- ...\n" +msgstr "Usare gpg --decrypt | cryptsetup --keyfile=- ...\n" + +#: lib/loopaes/loopaes.c:168 lib/loopaes/loopaes.c:188 +msgid "Incompatible loop-AES keyfile detected." +msgstr "Rilevato file chiave loop-AES non compatibile." + +#: lib/loopaes/loopaes.c:245 +msgid "Kernel doesn't support loop-AES compatible mapping." +msgstr "Il kernel non supporta la mappatura compatibile loop-AES." + +#: lib/tcrypt/tcrypt.c:505 +#, c-format +msgid "Error reading keyfile %s." +msgstr "Errore nel leggere il file chiave %s." + +#: lib/tcrypt/tcrypt.c:545 +#, c-format +msgid "Maximum TCRYPT passphrase length (%d) exceeded." +msgstr "Lunghezza massima (%d) della passphrase TCRYPT superata." + +#: lib/tcrypt/tcrypt.c:586 +#, c-format +msgid "PBKDF2 hash algorithm %s not available, skipping." +msgstr "L'algoritmo di hash PBKDF2 %s non è disponibile, viene saltato." + +#: lib/tcrypt/tcrypt.c:602 src/cryptsetup.c:959 +msgid "Required kernel crypto interface not available." +msgstr "L'interfaccia kernel richiesta del cifrario non è disponibile." + +#: lib/tcrypt/tcrypt.c:604 src/cryptsetup.c:961 +msgid "Ensure you have algif_skcipher kernel module loaded." +msgstr "Assicurarsi di avere il modulo del kernel algif_skcipher caricato." + +#: lib/tcrypt/tcrypt.c:744 +#, c-format +msgid "Activation is not supported for %d sector size." +msgstr "Attivazione non supportata per la dimensione del settore di %d." + +#: lib/tcrypt/tcrypt.c:750 +msgid "Kernel doesn't support activation for this TCRYPT legacy mode." +msgstr "Il kernel non supporta l'attivazione per questa modalità legacy TCRYPT." + +#: lib/tcrypt/tcrypt.c:784 +#, c-format +msgid "Activating TCRYPT system encryption for partition %s." +msgstr "Attivazione sistema di cifratura TCRYPT per la partizione %s." + +#: lib/tcrypt/tcrypt.c:862 +msgid "Kernel doesn't support TCRYPT compatible mapping." +msgstr "Il kernel non supporta la mappatura compatibile TCYPRT." + +#: lib/tcrypt/tcrypt.c:1084 +msgid "This function is not supported without TCRYPT header load." +msgstr "Questa funzione non è supportata senza l'header TCRYPT caricato." + +#: lib/verity/verity.c:69 lib/verity/verity.c:172 +#, c-format +msgid "Verity device %s doesn't use on-disk header." +msgstr "Il dispositivo verity %s non usa header su disco." + +#: lib/verity/verity.c:91 +#, c-format +msgid "Device %s is not a valid VERITY device." +msgstr "Il dispositivo %s non è un dispositivo VERITY valido." + +#: lib/verity/verity.c:98 +#, c-format +msgid "Unsupported VERITY version %d." +msgstr "Versione %d di VERITY non supportata." + +#: lib/verity/verity.c:129 +msgid "VERITY header corrupted." +msgstr "Header VERITY danneggiato." + +#: lib/verity/verity.c:166 +#, c-format +msgid "Wrong VERITY UUID format provided on device %s." +msgstr "Fornito un formato UUID per VERITY errato sul dispositivo %s." + +#: lib/verity/verity.c:199 +#, c-format +msgid "Error during update of verity header on device %s." +msgstr "Errore durante l'aggiornamento dell'header verity sul dispositivo %s." + +#: lib/verity/verity.c:262 +msgid "Errors cannot be repaired with FEC device." +msgstr "Impossibile risolvere gli errori con dispositivo FEC." + +#: lib/verity/verity.c:264 +#, c-format +msgid "Found %u repairable errors with FEC device." +msgstr "Trovati %u errori risolubili con dispositivo FEC." + +#: lib/verity/verity.c:302 +msgid "Kernel doesn't support dm-verity mapping." +msgstr "Il kernel non supporta la mappatura dm-verity." + +#: lib/verity/verity.c:313 +msgid "Verity device detected corruption after activation." +msgstr "Il dispositivo verity ha rilevato un'anomalia dopo l'attivazione." + +#: lib/verity/verity_hash.c:59 +#, c-format +msgid "Spare area is not zeroed at position %." +msgstr "L'area spare non risulta essere a zero alla posizione %." + +#: lib/verity/verity_hash.c:160 lib/verity/verity_hash.c:287 +#: lib/verity/verity_hash.c:300 +msgid "Device offset overflow." +msgstr "Overflow offset del dispositivo." + +#: lib/verity/verity_hash.c:200 +#, c-format +msgid "Verification failed at position %." +msgstr "Verifica alla posizione % non riuscita." + +#: lib/verity/verity_hash.c:273 +msgid "Invalid size parameters for verity device." +msgstr "Parametri della dimensione non validi per il dispositivo verity." + +#: lib/verity/verity_hash.c:293 +msgid "Hash area overflow." +msgstr "Overflow dell'area di hash." + +#: lib/verity/verity_hash.c:370 +msgid "Verification of data area failed." +msgstr "Verifica dell'area dati non riuscita." + +#: lib/verity/verity_hash.c:375 +msgid "Verification of root hash failed." +msgstr "Verifica dall'hash root non riuscita." + +#: lib/verity/verity_hash.c:381 +msgid "Input/output error while creating hash area." +msgstr "Errore di input/output nel creare l'area hash." + +#: lib/verity/verity_hash.c:383 +msgid "Creation of hash area failed." +msgstr "Creazione dell'area hash non riuscita." + +#: lib/verity/verity_hash.c:430 +#, c-format +msgid "WARNING: Kernel cannot activate device if data block size exceeds page size (%u)." +msgstr "Attenzione: il kernel non può attivare il dispositivo se la dimensione del blocco dati supera la dimensione di pagina (%u)." + +#: lib/verity/verity_fec.c:132 +msgid "Failed to allocate RS context." +msgstr "Allocazione contesto RS non riuscita." + +#: lib/verity/verity_fec.c:147 +msgid "Failed to allocate buffer." +msgstr "Allocazione buffer non riuscita." + +#: lib/verity/verity_fec.c:157 +#, c-format +msgid "Failed to read RS block % byte %d." +msgstr "Lettura del blocco RS % byte %d non riuscita." + +#: lib/verity/verity_fec.c:170 +#, c-format +msgid "Failed to read parity for RS block %." +msgstr "Lettura bit di parità per il blocco RS % non riuscita." + +#: lib/verity/verity_fec.c:178 +#, c-format +msgid "Failed to repair parity for block %." +msgstr "Ripristino della parità per il blocco % non riuscito." + +#: lib/verity/verity_fec.c:189 +#, c-format +msgid "Failed to write parity for RS block %." +msgstr "Scrittura della parità per il blocco RS % non riuscita." + +#: lib/verity/verity_fec.c:224 +msgid "Block sizes must match for FEC." +msgstr "Le dimensioni del blocco devono corrispondere per FEC." + +#: lib/verity/verity_fec.c:230 +msgid "Invalid number of parity bytes." +msgstr "Numero di byte di parità non valido." + +#: lib/verity/verity_fec.c:266 +#, c-format +msgid "Failed to determine size for device %s." +msgstr "Impossibile determinare la dimensione per il dispositivo %s." + +#: lib/integrity/integrity.c:241 lib/integrity/integrity.c:306 +msgid "Kernel doesn't support dm-integrity mapping." +msgstr "Il kernel non supporta la mappatura dm-integrity." + +#: lib/luks2/luks2_disk_metadata.c:383 lib/luks2/luks2_json_metadata.c:959 +#: lib/luks2/luks2_json_metadata.c:1245 +#, c-format +msgid "Failed to acquire write lock on device %s." +msgstr "Impossibile acquisire il blocco di scrittura sul dispositivo %s." + +#: lib/luks2/luks2_disk_metadata.c:392 +msgid "Detected attempt for concurrent LUKS2 metadata update. Aborting operation." +msgstr "" + +#: 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 "" +"Il dispositivo contiene firme ambigue, impossibile recuperare automaticamente LUKS2.\n" +"Eseguire \"cryptsetup repair\" per il recupero." + +#: lib/luks2/luks2_json_format.c:227 +msgid "Requested data offset is too small." +msgstr "L'offset dati richiesto è troppo piccolo." + +#: 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 "Attenzione: l'area degli slot di chiave è molto piccola (% byte), il conteggio degli slot di chiave LUKS2 disponibili è limitato.\n" + +#: lib/luks2/luks2_json_metadata.c:946 lib/luks2/luks2_json_metadata.c:1075 +#: lib/luks2/luks2_json_metadata.c:1151 lib/luks2/luks2_keyslot_luks2.c:92 +#: lib/luks2/luks2_keyslot_luks2.c:114 +#, c-format +msgid "Failed to acquire read lock on device %s." +msgstr "Impossibile acquisire il blocco di lettura sul dispositivo %s." + +#: lib/luks2/luks2_json_metadata.c:1168 +#, c-format +msgid "Forbidden LUKS2 requirements detected in backup %s." +msgstr "Rilevati requisiti LUKS2 proibiti nel backup %s." + +#: lib/luks2/luks2_json_metadata.c:1209 +msgid "Data offset differ on device and backup, restore failed." +msgstr "L'offset di dati è diverso tra il dispositivo e il backup, ripristino non riuscito." + +#: lib/luks2/luks2_json_metadata.c:1215 +msgid "Binary header with keyslot areas size differ on device and backup, restore failed." +msgstr "L'header binario con dimensione aree dello slot di chiave è diverso tra il dispositivo e il backup, ripristino non riuscito." + +#: lib/luks2/luks2_json_metadata.c:1222 +#, c-format +msgid "Device %s %s%s%s%s" +msgstr "Il dispositivo %s %s%s%s%s" + +#: lib/luks2/luks2_json_metadata.c:1223 +msgid "does not contain LUKS2 header. Replacing header can destroy data on that device." +msgstr "non contiene un header LUKS2. La sostituzione dell'header può distruggere i dati su quel dispositivo." + +#: lib/luks2/luks2_json_metadata.c:1224 +msgid "already contains LUKS2 header. Replacing header will destroy existing keyslots." +msgstr "contiene già un header LUKS2. La sostituzione dell'header distruggerà gli slot di chiave esistenti." + +#: lib/luks2/luks2_json_metadata.c:1226 +msgid "" +"\n" +"WARNING: unknown LUKS2 requirements detected in real device header!\n" +"Replacing header with backup may corrupt the data on that device!" +msgstr "" +"\n" +"Attenzione: requisiti LUKS2 sconosciuti rilevati nell'header del dispositivo reale.\n" +"La sostituzione dell'header con il backup può danneggiare i dati su quel dispositivo." + +#: lib/luks2/luks2_json_metadata.c:1228 +msgid "" +"\n" +"WARNING: Unfinished offline reencryption detected on the device!\n" +"Replacing header with backup may corrupt data." +msgstr "" +"\n" +"Attenzione: rilevata re-cifratura non completata sul dispositivo.\n" +"La sostituzione dell'header con il backup potrebbe danneggiare i dati." + +#: lib/luks2/luks2_json_metadata.c:1324 +#, c-format +msgid "Ignored unknown flag %s." +msgstr "Flag %s sconosciuto ignorato." + +#: lib/luks2/luks2_json_metadata.c:2011 lib/luks2/luks2_reencrypt.c:1746 +#, c-format +msgid "Missing key for dm-crypt segment %u" +msgstr "" + +#: lib/luks2/luks2_json_metadata.c:2023 lib/luks2/luks2_reencrypt.c:1764 +#, fuzzy +msgid "Failed to set dm-crypt segment." +msgstr "Interrogazione del segmento dm-%s non riuscita." + +#: lib/luks2/luks2_json_metadata.c:2029 lib/luks2/luks2_reencrypt.c:1770 +#, fuzzy +msgid "Failed to set dm-linear segment." +msgstr "Interrogazione del segmento dm-%s non riuscita." + +#: lib/luks2/luks2_json_metadata.c:2156 +msgid "Unsupported device integrity configuration." +msgstr "" + +#: lib/luks2/luks2_json_metadata.c:2242 +msgid "Reencryption in-progress. Cannot deactivate device." +msgstr "" + +#: lib/luks2/luks2_json_metadata.c:2253 lib/luks2/luks2_reencrypt.c:3171 +#, c-format +msgid "Failed to replace suspended device %s with dm-error target." +msgstr "" + +#: lib/luks2/luks2_json_metadata.c:2333 +msgid "Failed to read LUKS2 requirements." +msgstr "Letture dei requisiti LUKS2 non riuscita." + +#: lib/luks2/luks2_json_metadata.c:2340 +msgid "Unmet LUKS2 requirements detected." +msgstr "Rilevati requisiti LUKS2 non soddisfatti." + +#: lib/luks2/luks2_json_metadata.c:2348 +msgid "Offline reencryption in progress. Aborting." +msgstr "Re-cifratura offline in corso. Terminato." + +#: lib/luks2/luks2_json_metadata.c:2350 +#, fuzzy +msgid "Online reencryption in progress. Aborting." +msgstr "Re-cifratura offline in corso. Terminato." + +#: lib/luks2/luks2_keyslot.c:552 lib/luks2/luks2_keyslot.c:589 +msgid "Not enough available memory to open a keyslot." +msgstr "" + +#: lib/luks2/luks2_keyslot.c:554 lib/luks2/luks2_keyslot.c:591 +#, fuzzy +msgid "Keyslot open failed." +msgstr "Slot di chiave %i: salt ripulito." + +#: lib/luks2/luks2_keyslot_luks2.c:53 lib/luks2/luks2_keyslot_luks2.c:108 +#, fuzzy, c-format +msgid "Cannot use %s-%s cipher for keyslot encryption." +msgstr "Slot di chiave LUKS2: il cifrario usato per la cifratura dello slot di chiave" + +#: lib/luks2/luks2_keyslot_luks2.c:480 +msgid "No space for new keyslot." +msgstr "Spazio insufficiente per il nuovo slot di chiave." + +#: lib/luks2/luks2_luks1_convert.c:481 +#, fuzzy, c-format +msgid "Cannot check status of device with uuid: %s." +msgstr "Impossibile controllare lo stato del dispositivo con UUID: %s." + +#: lib/luks2/luks2_luks1_convert.c:507 +msgid "Unable to convert header with LUKSMETA additional metadata." +msgstr "Impossibile convertire l'header con metadati LUKSMETA aggiuntivi." + +#: lib/luks2/luks2_luks1_convert.c:547 +msgid "Unable to move keyslot area. Not enough space." +msgstr "Impossibile spostare l'area dello slot di chiave: spazio insufficiente." + +#: lib/luks2/luks2_luks1_convert.c:590 lib/luks2/luks2_luks1_convert.c:872 +msgid "Unable to move keyslot area." +msgstr "Impossibile spostare l'area dello slot di chiave." + +#: lib/luks2/luks2_luks1_convert.c:682 +#, fuzzy +msgid "Cannot convert to LUKS1 format - default segment encryption sector size is not 512 bytes." +msgstr "Impossibile convertire al formato LUKS1: lo slot di chiave %u non è compatibile con LUKS1." + +#: lib/luks2/luks2_luks1_convert.c:690 +msgid "Cannot convert to LUKS1 format - key slot digests are not LUKS1 compatible." +msgstr "Impossibile convertire al formato LUKS1: i digest dello slot di chiave non sono compatibili con LUKS1." + +#: lib/luks2/luks2_luks1_convert.c:702 +#, c-format +msgid "Cannot convert to LUKS1 format - device uses wrapped key cipher %s." +msgstr "Impossibile convertire al formato LUKS1: il dispositivo utilizza una chiave di cifrario %s con wrapper." + +#: lib/luks2/luks2_luks1_convert.c:710 +#, c-format +msgid "Cannot convert to LUKS1 format - LUKS2 header contains %u token(s)." +msgstr "Impossibile convertire al formato LUKS1: l'header LUKS2 contiene %u token." + +#: lib/luks2/luks2_luks1_convert.c:724 +#, c-format +msgid "Cannot convert to LUKS1 format - keyslot %u is in invalid state." +msgstr "Impossibile convertire al formato LUKS1: lo slot di chiave %u è in uno stato non valido." + +#: lib/luks2/luks2_luks1_convert.c:729 +#, c-format +msgid "Cannot convert to LUKS1 format - slot %u (over maximum slots) is still active." +msgstr "Impossibile convertire al formato LUKS1: lo slot %u (oltre gli slot massimi) è ancora attivo." + +#: lib/luks2/luks2_luks1_convert.c:734 +#, c-format +msgid "Cannot convert to LUKS1 format - keyslot %u is not LUKS1 compatible." +msgstr "Impossibile convertire al formato LUKS1: lo slot di chiave %u non è compatibile con LUKS1." + +#: lib/luks2/luks2_reencrypt.c:892 +#, c-format +msgid "Hotzone size must be multiple of calculated zone alignment (%zu bytes)." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:897 +#, fuzzy, c-format +msgid "Device size must be multiple of calculated zone alignment (%zu bytes)." +msgstr "La dimensione del dispositivo %s non è allineata con la dimensione del settore richiesta (%u byte)." + +#: lib/luks2/luks2_reencrypt.c:941 +#, fuzzy, c-format +msgid "Unsupported resilience mode %s" +msgstr "Parametri non supportati sul dispositivo %s." + +#: lib/luks2/luks2_reencrypt.c:1158 lib/luks2/luks2_reencrypt.c:1313 +#: lib/luks2/luks2_reencrypt.c:1396 lib/luks2/luks2_reencrypt.c:1430 +#: lib/luks2/luks2_reencrypt.c:3011 +#, fuzzy +msgid "Failed to initialize old segment storage wrapper." +msgstr "Inizializzazione sonde per la firma del dispositivo non riuscita." + +#: lib/luks2/luks2_reencrypt.c:1172 lib/luks2/luks2_reencrypt.c:1291 +#, fuzzy +msgid "Failed to initialize new segment storage wrapper." +msgstr "Inizializzazione sonde per la firma del dispositivo non riuscita." + +#: lib/luks2/luks2_reencrypt.c:1340 +#, fuzzy +msgid "Failed to read checksums for current hotzone." +msgstr "Lettura dei requisiti dall'header di backup non riuscita." + +#: lib/luks2/luks2_reencrypt.c:1347 lib/luks2/luks2_reencrypt.c:3019 +#, fuzzy, c-format +msgid "Failed to read hotzone area starting at %." +msgstr "Lettura bit di parità per il blocco RS % non riuscita." + +#: lib/luks2/luks2_reencrypt.c:1366 +#, fuzzy, c-format +msgid "Failed to decrypt sector %zu." +msgstr "Stat del dispositivo %s non riuscita." + +#: lib/luks2/luks2_reencrypt.c:1372 +#, fuzzy, c-format +msgid "Failed to recover sector %zu." +msgstr "Impossibile determinare la dimensione per il dispositivo %s." + +#: lib/luks2/luks2_reencrypt.c:1867 +#, c-format +msgid "Source and target device sizes don't match. Source %, target: %." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:1965 +#, fuzzy, c-format +msgid "Failed to activate hotzone device %s." +msgstr "Stat del dispositivo %s non riuscita." + +#: lib/luks2/luks2_reencrypt.c:1982 +#, fuzzy, c-format +msgid "Failed to activate overlay device %s with actual origin table." +msgstr "Esame del dispositivo %s per una firma non riuscito." + +#: lib/luks2/luks2_reencrypt.c:1989 +#, fuzzy, c-format +msgid "Failed to load new mapping for device %s." +msgstr "Impossibile determinare la dimensione per il dispositivo %s." + +#: lib/luks2/luks2_reencrypt.c:2060 +#, fuzzy +msgid "Failed to refresh reencryption devices stack." +msgstr "Impossibile acquisire il blocco di lettura sul dispositivo %s." + +#: lib/luks2/luks2_reencrypt.c:2216 +#, fuzzy +msgid "Failed to set new keyslots area size." +msgstr "Sostituzione del nuovo slot di chiave non riuscita." + +#: lib/luks2/luks2_reencrypt.c:2318 +#, fuzzy, c-format +msgid "Data shift is not aligned to requested encryption sector size (% bytes)." +msgstr "La dimensione del dispositivo %s non è allineata con la dimensione del settore richiesta (%u byte)." + +#: lib/luks2/luks2_reencrypt.c:2339 +#, fuzzy, c-format +msgid "Data device is not aligned to requested encryption sector size (% bytes)." +msgstr "La dimensione del dispositivo %s non è allineata con la dimensione del settore richiesta (%u byte)." + +#: lib/luks2/luks2_reencrypt.c:2360 +#, c-format +msgid "Data shift (% sectors) is less than future data offset (% sectors)." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:2366 lib/luks2/luks2_reencrypt.c:2760 +#: lib/luks2/luks2_reencrypt.c:2781 +#, fuzzy, c-format +msgid "Failed to open %s in exclusive mode (already mapped or mounted)." +msgstr "Impossibile utilizzare il dispositivo %s il quale è in uso (già mappato o montato)." + +#: lib/luks2/luks2_reencrypt.c:2534 +#, fuzzy +msgid "No LUKS2 reencryption in progress." +msgstr "Re-cifratura in corso." + +#: lib/luks2/luks2_reencrypt.c:2540 lib/luks2/luks2_reencrypt.c:3276 +#, fuzzy +msgid "Failed to load LUKS2 reencryption context." +msgstr "Allocazione contesto RS non riuscita." + +#: lib/luks2/luks2_reencrypt.c:2600 +#, fuzzy +msgid "Failed to get reencryption state." +msgstr "Recupero del token %d per l'esportazione non riuscito." + +#: lib/luks2/luks2_reencrypt.c:2604 +#, fuzzy +msgid "Device is not in reencryption." +msgstr "Il dispositivo %s non è attivo." + +#: lib/luks2/luks2_reencrypt.c:2611 +#, fuzzy +msgid "Reencryption process is already running." +msgstr "Re-cifratura in corso." + +#: lib/luks2/luks2_reencrypt.c:2613 +#, fuzzy +msgid "Failed to acquire reencryption lock." +msgstr "Impossibile acquisire blocco del dispositivo di scrittura." + +#: lib/luks2/luks2_reencrypt.c:2631 +msgid "Cannot proceed with reencryption. Run reencryption recovery first." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:2731 +#, fuzzy +msgid "Active device size and requested reencryption size don't match." +msgstr "La dimensione del dispositivo non è allineata con la dimensione del settore richiesta." + +#: lib/luks2/luks2_reencrypt.c:2745 +msgid "Illegal device size requested in reencryption parameters." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:2815 +#, fuzzy +msgid "Reencryption in-progress. Cannot perform recovery." +msgstr "Re-cifratura in corso." + +#: lib/luks2/luks2_reencrypt.c:2887 +msgid "LUKS2 reencryption already initialized in metadata." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:2894 +#, fuzzy +msgid "Failed to initialize LUKS2 reencryption in metadata." +msgstr "Inizializzazione parametri predefiniti per lo slot di chiave LUKS2 non riuscita." + +#: lib/luks2/luks2_reencrypt.c:2985 +#, fuzzy +msgid "Failed to set device segments for next reencryption hotzone." +msgstr "Esame del dispositivo %s per una firma non riuscito." + +#: lib/luks2/luks2_reencrypt.c:3027 +#, fuzzy +msgid "Failed to write reencryption resilience metadata." +msgstr "Scrittura dei flag di attivazione sul nuovo header non riuscita." + +#: lib/luks2/luks2_reencrypt.c:3034 +#, fuzzy +msgid "Decryption failed." +msgstr "Riparazione non riuscita." + +#: lib/luks2/luks2_reencrypt.c:3039 +#, fuzzy, c-format +msgid "Failed to write hotzone area starting at %." +msgstr "Scrittura della parità per il blocco RS % non riuscita." + +#: lib/luks2/luks2_reencrypt.c:3044 +#, fuzzy +msgid "Failed to sync data." +msgstr "Impostazione offset dei dati non riuscita." + +#: lib/luks2/luks2_reencrypt.c:3052 +msgid "Failed to update metadata after current reencryption hotzone completed." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:3119 +#, fuzzy +msgid "Failed to write LUKS2 metadata." +msgstr "Letture dei requisiti LUKS2 non riuscita." + +#: lib/luks2/luks2_reencrypt.c:3142 +#, fuzzy +msgid "Failed to wipe backup segment data." +msgstr "Pulizia della firma del dispositivo non riuscita." + +#: lib/luks2/luks2_reencrypt.c:3155 +#, fuzzy +msgid "Failed to disable reencryption requirement flag." +msgstr "Letture dei requisiti LUKS2 non riuscita." + +#: lib/luks2/luks2_reencrypt.c:3163 +#, c-format +msgid "Fatal error while reencrypting chunk starting at %, % sectors long." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:3172 +msgid "Do not resume the device unless replaced with error target manually." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:3221 +msgid "Cannot proceed with reencryption. Unexpected reencryption status." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:3227 +msgid "Missing or invalid reencrypt context." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:3234 +#, fuzzy +msgid "Failed to initialize reencryption device stack." +msgstr "Inizializzazione sonde per la firma del dispositivo non riuscita." + +#: lib/luks2/luks2_reencrypt.c:3253 lib/luks2/luks2_reencrypt.c:3289 +#, fuzzy +msgid "Failed to update reencryption context." +msgstr "Allocazione contesto RS non riuscita." + +#: lib/luks2/luks2_token.c:262 +msgid "No free token slot." +msgstr "Nessun slot token libero." + +#: lib/luks2/luks2_token.c:269 +#, c-format +msgid "Failed to create builtin token %s." +msgstr "Impossibile creare token integrato %s." + +#: src/cryptsetup.c:162 +msgid "Can't do passphrase verification on non-tty inputs." +msgstr "Impossibile verificare la passphrase su input non tty." + +#: src/cryptsetup.c:215 +msgid "Keyslot encryption parameters can be set only for LUKS2 device." +msgstr "I parametri di cifratura dello slot di chiave possono essere impostati solo per dispositivi LUKS2." + +#: src/cryptsetup.c:245 src/cryptsetup.c:893 src/cryptsetup.c:1212 +#: src/cryptsetup.c:3011 src/cryptsetup_reencrypt.c:715 +#: src/cryptsetup_reencrypt.c:785 +msgid "No known cipher specification pattern detected." +msgstr "Non è stato rilevato alcun modello noto di specifica di cifrario." + +#: src/cryptsetup.c:253 +msgid "WARNING: The --hash parameter is being ignored in plain mode with keyfile specified.\n" +msgstr "Attenzione: il parametro --hash viene ignorato in modalità normale con file di chiave specificato.\n" + +#: src/cryptsetup.c:261 +msgid "WARNING: The --keyfile-size option is being ignored, the read size is the same as the encryption key size.\n" +msgstr "Attenzione: l'opzione --keyfile-size viene ignorata, la dimensione di lettura è la stessa della dimensione della chiave di cifratura.\n" + +#: src/cryptsetup.c:301 +#, c-format +msgid "Detected device signature(s) on %s. Proceeding further may damage existing data." +msgstr "Rilevata firma dispositivo su %s. Attenzione: continuare potrebbe danneggiare i dati esistenti." + +#: src/cryptsetup.c:307 src/cryptsetup.c:1038 src/cryptsetup.c:1090 +#: src/cryptsetup.c:1189 src/cryptsetup.c:1262 src/cryptsetup.c:1913 +#: src/cryptsetup.c:2545 src/cryptsetup.c:2668 src/integritysetup.c:232 +msgid "Operation aborted.\n" +msgstr "Operazione interrotta.\n" + +#: src/cryptsetup.c:375 +msgid "Option --key-file is required." +msgstr "È richiesta l'opzione --key-file." + +#: src/cryptsetup.c:428 +msgid "Enter VeraCrypt PIM: " +msgstr "Inserire PIM VeraCrypt: " + +#: src/cryptsetup.c:437 +msgid "Invalid PIM value: parse error." +msgstr "Valore PIM non valido: errore di lettura." + +#: src/cryptsetup.c:440 +msgid "Invalid PIM value: 0." +msgstr "Valore PIM non valido: 0." + +#: src/cryptsetup.c:443 +msgid "Invalid PIM value: outside of range." +msgstr "Valore PIM non valido: fuori dall'intervallo." + +#: src/cryptsetup.c:466 +msgid "No device header detected with this passphrase." +msgstr "Nessun header di dispositivo rilevato con questa passphrase." + +#: src/cryptsetup.c:528 src/cryptsetup.c:1940 +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 "" +"Il dump dell'header con la chiave di volume contiene informazioni\n" +"confidenziali che permettono di accedere alla partizione cifrata senza passphrase.\n" +"Questo dump dovrebbe sempre essere salvato in modo cifrato in un luogo sicuro." + +#: src/cryptsetup.c:607 +#, c-format +msgid "Device %s is still active and scheduled for deferred removal.\n" +msgstr "Il dispositivo %s è ancora attivo ed è pianificato per essere rimosso.\n" + +#: src/cryptsetup.c:635 +msgid "Resize of active device requires volume key in keyring but --disable-keyring option is set." +msgstr "Il ridimensionamento di un dispositivo attivo richiede la chiave del volume nel portachiavi, ma l'opzione --disable-keyring è impostata." + +#: src/cryptsetup.c:771 +msgid "Benchmark interrupted." +msgstr "Benchmark interrotto." + +#: src/cryptsetup.c:792 +#, c-format +msgid "PBKDF2-%-9s N/A\n" +msgstr "PBKDF2-%-9s N/D\n" + +#: src/cryptsetup.c:794 +#, c-format +msgid "PBKDF2-%-9s %7u iterations per second for %zu-bit key\n" +msgstr "PBKDF2-%-9s %7u iterazioni per secondo per chiave di %zu-bit\n" + +#: src/cryptsetup.c:808 +#, c-format +msgid "%-10s N/A\n" +msgstr "%-10s N/D\n" + +#: src/cryptsetup.c:810 +#, c-format +msgid "%-10s %4u iterations, %5u memory, %1u parallel threads (CPUs) for %zu-bit key (requested %u ms time)\n" +msgstr "%-10s %4u iterazioni, %5u memoria, %1u thread paralleli (CPU) per chiave di %zu-bit (tempo richiesto %u ms)\n" + +#: src/cryptsetup.c:834 +msgid "Result of benchmark is not reliable." +msgstr "Il risultato del benchmark non è attendibile." + +#: src/cryptsetup.c:885 +msgid "# Tests are approximate using memory only (no storage IO).\n" +msgstr "# I test sono approssimati usando solo la memoria (nessun IO dall'archivio).\n" + +#. TRANSLATORS: The string is header of a table and must be exactly (right side) aligned. +#: src/cryptsetup.c:919 +#, c-format +msgid "#%*s Algorithm | Key | Encryption | Decryption\n" +msgstr "" +"#%*s Algoritmo | Chiave | Cifratura | Decrifrazione\n" +"\n" + +#: src/cryptsetup.c:923 +#, c-format +msgid "Cipher %s is not available." +msgstr "Il cifrario %s non è disponibile." + +#. TRANSLATORS: The string is header of a table and must be exactly (right side) aligned. +#: src/cryptsetup.c:943 +msgid "# Algorithm | Key | Encryption | Decryption\n" +msgstr "" +"# Algoritmo | Chiave | Cifratura | Decrifrazione\n" +"\n" + +#: src/cryptsetup.c:952 +msgid "N/A" +msgstr "N/D" + +#: src/cryptsetup.c:1031 +msgid "" +"Seems device does not require reencryption recovery.\n" +"Do you want to proceed anyway?" +msgstr "" + +#: src/cryptsetup.c:1037 +msgid "Really proceed with LUKS2 reencryption recovery?" +msgstr "" + +#: src/cryptsetup.c:1046 +#, fuzzy +msgid "Enter passphrase for reencryption recovery: " +msgstr "Inserire la passphrase per lo slot da convertire: " + +#: src/cryptsetup.c:1089 +msgid "Really try to repair LUKS device header?" +msgstr "Provare a riparare l'header del dispositivo LUKS?" + +#: src/cryptsetup.c:1108 src/integritysetup.c:145 +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 "" +"Pulizia del dispositivo per inizializzare il controllo dell'integrità.\n" +"È possibile interrompere questa operazione premendo Ctrl+C: la parte del dispositivo non pulita\n" +"conterrà dati di controllo non validi.\n" + +#: src/cryptsetup.c:1130 src/integritysetup.c:167 +#, c-format +msgid "Cannot deactivate temporary device %s." +msgstr "Impossibile disattivare il dispositivo %s temporaneo." + +#: src/cryptsetup.c:1174 +msgid "Integrity option can be used only for LUKS2 format." +msgstr "L'opzione di integrità può essere usata solo col formato LUKS2." + +#: src/cryptsetup.c:1179 src/cryptsetup.c:1239 +msgid "Unsupported LUKS2 metadata size options." +msgstr "Opzioni dimensione metadati LUKS2 non supportate." + +#: src/cryptsetup.c:1196 +#, c-format +msgid "Cannot create header file %s." +msgstr "Impossibile creare il file header %s." + +#: src/cryptsetup.c:1219 src/integritysetup.c:194 src/integritysetup.c:203 +#: src/integritysetup.c:212 src/integritysetup.c:279 src/integritysetup.c:288 +#: src/integritysetup.c:298 +msgid "No known integrity specification pattern detected." +msgstr "Non è stato rilevato alcun modello noto di specifica di integrità." + +#: src/cryptsetup.c:1232 +#, c-format +msgid "Cannot use %s as on-disk header." +msgstr "Impossibile usare %s come header on-disk." + +#: src/cryptsetup.c:1256 src/integritysetup.c:226 +#, c-format +msgid "This will overwrite data on %s irrevocably." +msgstr "Ciò sovrascriverà i dati in %s in modo irreversibile." + +#: src/cryptsetup.c:1297 src/cryptsetup.c:1627 src/cryptsetup.c:1694 +#: src/cryptsetup.c:1796 src/cryptsetup.c:1862 src/cryptsetup_reencrypt.c:545 +msgid "Failed to set pbkdf parameters." +msgstr "Impostazione dei parametri pbkdf non riuscita." + +#: src/cryptsetup.c:1378 +msgid "Reduced data offset is allowed only for detached LUKS header." +msgstr "L'offset di dati ridotti è ammesso solo per l'header LUKS scollegato." + +#: src/cryptsetup.c:1389 src/cryptsetup.c:1700 +msgid "Cannot determine volume key size for LUKS without keyslots, please use --key-size option." +msgstr "" + +#: src/cryptsetup.c:1427 +msgid "Device activated but cannot make flags persistent." +msgstr "Dispositivo attivato, ma non è possibile rendere i flag permanenti." + +#: src/cryptsetup.c:1508 src/cryptsetup.c:1578 +#, c-format +msgid "Keyslot %d is selected for deletion." +msgstr "Slot di chiave %d selezionato per l'eliminazione." + +#: src/cryptsetup.c:1520 src/cryptsetup.c:1581 +msgid "This is the last keyslot. Device will become unusable after purging this key." +msgstr "Questo è l'ultimo slot di chiave. Il dispositivo sarà inutilizzabile dopo aver eliminato questa chiave." + +#: src/cryptsetup.c:1521 +msgid "Enter any remaining passphrase: " +msgstr "Inserire una delle passphrase rimanenti: " + +#: src/cryptsetup.c:1522 src/cryptsetup.c:1583 +msgid "Operation aborted, the keyslot was NOT wiped.\n" +msgstr "Operazione terminata, lo slot di chiave NON è stato pulito.\n" + +#: src/cryptsetup.c:1560 +msgid "Enter passphrase to be deleted: " +msgstr "Inserire la passphrase da eliminare: " + +#: src/cryptsetup.c:1641 src/cryptsetup.c:1715 src/cryptsetup.c:1749 +msgid "Enter new passphrase for key slot: " +msgstr "Inserire la nuova passphrase per lo slot di chiave: " + +#: src/cryptsetup.c:1732 src/cryptsetup_reencrypt.c:1327 +#, c-format +msgid "Enter any existing passphrase: " +msgstr "Inserire una delle passphrase esistenti: " + +#: src/cryptsetup.c:1800 +msgid "Enter passphrase to be changed: " +msgstr "Inserire la passphrase da cambiare: " + +#: src/cryptsetup.c:1816 src/cryptsetup_reencrypt.c:1313 +msgid "Enter new passphrase: " +msgstr "Inserire la nuova passphrase: " + +#: src/cryptsetup.c:1866 +msgid "Enter passphrase for keyslot to be converted: " +msgstr "Inserire la passphrase per lo slot da convertire: " + +#: src/cryptsetup.c:1890 +msgid "Only one device argument for isLuks operation is supported." +msgstr "È supportato un solo argomento dispositivo per ogni operazione isLuks." + +#: src/cryptsetup.c:2074 src/cryptsetup.c:2095 +msgid "Option --header-backup-file is required." +msgstr "È richiesta l'opzione --header-backup-file." + +#: src/cryptsetup.c:2125 +#, c-format +msgid "%s is not cryptsetup managed device." +msgstr "%s non è un dispositivo gestito via cryptsetup." + +#: src/cryptsetup.c:2136 +#, c-format +msgid "Refresh is not supported for device type %s" +msgstr "L'aggiornamento non è supportato per dispositivi di tipo %s" + +#: src/cryptsetup.c:2174 +#, c-format +msgid "Unrecognized metadata device type %s." +msgstr "Tipo di dispositivo metadati %s non riconosciuto." + +#: src/cryptsetup.c:2177 +msgid "Command requires device and mapped name as arguments." +msgstr "Il comando richiede un dispositivo e un nome di mappatura come argomenti." + +#: src/cryptsetup.c:2199 +#, c-format +msgid "" +"This operation will erase all keyslots on device %s.\n" +"Device will become unusable after this operation." +msgstr "" +"Questa operazione eliminerà tutti gli slot di chiave sul dispositivo %s.\n" +"Il dispositivo sarà inutilizzabile dopo questa operazione." + +#: src/cryptsetup.c:2206 +msgid "Operation aborted, keyslots were NOT wiped.\n" +msgstr "Operazione terminata, gli slot di chiave NON sono stati puliti.\n" + +#: src/cryptsetup.c:2243 +msgid "Invalid LUKS type, only luks1 and luks2 are supported." +msgstr "Tipo LUKS non valido, solo «luks1» o «luks2» sono supportati." + +#: src/cryptsetup.c:2261 +#, c-format +msgid "Device is already %s type." +msgstr "Il dispositivo è già di tipo %s." + +#: src/cryptsetup.c:2266 +#, c-format +msgid "This operation will convert %s to %s format.\n" +msgstr "" +"Questa operazione converte %s nel formato %s.\n" +"\n" + +#: src/cryptsetup.c:2272 +msgid "Operation aborted, device was NOT converted.\n" +msgstr "Operazione terminata, il dispositivo NON è stato convertito.\n" + +#: src/cryptsetup.c:2312 +msgid "Option --priority, --label or --subsystem is missing." +msgstr "Manca l'opzione --priority, --label o --subsystem." + +#: src/cryptsetup.c:2346 src/cryptsetup.c:2379 src/cryptsetup.c:2402 +#, c-format +msgid "Token %d is invalid." +msgstr "Il token %d non è valido." + +#: src/cryptsetup.c:2349 src/cryptsetup.c:2405 +#, c-format +msgid "Token %d in use." +msgstr "Il token %d è in uso." + +#: src/cryptsetup.c:2356 +#, c-format +msgid "Failed to add luks2-keyring token %d." +msgstr "Aggiunta del token luks2-keyring %d non riuscita." + +#: src/cryptsetup.c:2365 src/cryptsetup.c:2427 +#, c-format +msgid "Failed to assign token %d to keyslot %d." +msgstr "Assegnazione del token %d allo slot di chiave %d non riuscita." + +#: src/cryptsetup.c:2382 +#, c-format +msgid "Token %d is not in use." +msgstr "Il token %d non è in uso." + +#: src/cryptsetup.c:2417 +msgid "Failed to import token from file." +msgstr "Importazione del token da file non riuscita." + +#: src/cryptsetup.c:2442 +#, c-format +msgid "Failed to get token %d for export." +msgstr "Recupero del token %d per l'esportazione non riuscito." + +#: src/cryptsetup.c:2457 +msgid "--key-description parameter is mandatory for token add action." +msgstr "Il parametro --key-description è obbligatorio per l'azione di aggiunta token." + +#: src/cryptsetup.c:2463 src/cryptsetup.c:2471 +msgid "Action requires specific token. Use --token-id parameter." +msgstr "L'azione richiede un token specifico. Utilizzare il parametro --token-id." + +#: src/cryptsetup.c:2476 +#, c-format +msgid "Invalid token operation %s." +msgstr "Operazione token %s non valida." + +#: src/cryptsetup.c:2531 +#, c-format +msgid "Auto-detected active dm device '%s' for data device %s.\n" +msgstr "" + +#: src/cryptsetup.c:2535 +#, fuzzy, c-format +msgid "Device %s is not a block device.\n" +msgstr "Il dispositivo %s non è un dispositivo LUKS valido." + +#: src/cryptsetup.c:2537 +#, fuzzy, c-format +msgid "Failed to auto-detect device %s holders." +msgstr "Stat del dispositivo %s non riuscita." + +#: src/cryptsetup.c:2539 +#, 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 "" + +#: src/cryptsetup.c:2619 +#, fuzzy +msgid "Invalid LUKS device type." +msgstr "Device %s non valido." + +#: src/cryptsetup.c:2624 +msgid "Encryption without detached header (--header) is not possible without data device size reduction (--reduce-device-size)." +msgstr "" + +#: src/cryptsetup.c:2629 +msgid "Requested data offset must be less than or equal to half of --reduce-device-size parameter." +msgstr "" + +#: src/cryptsetup.c:2638 +#, c-format +msgid "Adjusting --reduce-device-size value to twice the --offset % (sectors).\n" +msgstr "" + +#: src/cryptsetup.c:2642 +#, fuzzy +msgid "Encryption is supported only for LUKS2 format." +msgstr "L'opzione di integrità può essere usata solo col formato LUKS2." + +#: src/cryptsetup.c:2664 +#, c-format +msgid "Detected LUKS device on %s. Do you want to encrypt that LUKS device again?" +msgstr "" + +#: src/cryptsetup.c:2679 +#, fuzzy, c-format +msgid "Temporary header file %s already exists. Aborting." +msgstr "Il file di backup dell'header %s richiesto esiste già." + +#: src/cryptsetup.c:2681 src/cryptsetup.c:2688 +#, fuzzy, c-format +msgid "Cannot create temporary header file %s." +msgstr "Impossibile creare il file header %s." + +#: src/cryptsetup.c:2752 +#, c-format +msgid "%s/%s is now active and ready for online encryption." +msgstr "" + +#: src/cryptsetup.c:2919 src/cryptsetup.c:2925 +#, fuzzy +msgid "Not enough free keyslots for reencryption." +msgstr "Non cambia chiave, nessuna re-cifratura dei dati" + +#: src/cryptsetup.c:2945 src/cryptsetup_reencrypt.c:1284 +msgid "Key file can be used only with --key-slot or with exactly one key slot active." +msgstr "Il file chiave può essere usato solamente con --key-slot o con esattamente uno slot di chiave attivo." + +#: src/cryptsetup.c:2954 src/cryptsetup_reencrypt.c:1325 +#: src/cryptsetup_reencrypt.c:1336 +#, fuzzy, c-format +msgid "Enter passphrase for key slot %d: " +msgstr "Inserire la passphrase per lo slot di chiave %u: " + +#: src/cryptsetup.c:2962 +#, c-format +msgid "Enter passphrase for key slot %u: " +msgstr "Inserire la passphrase per lo slot di chiave %u: " + +#: src/cryptsetup.c:3129 +#, fuzzy +msgid "Command requires device as argument." +msgstr "Il comando richiede un dispositivo e un nome di mappatura come argomenti." + +#: src/cryptsetup.c:3151 +msgid "Only LUKS2 format is currently supported. Please use cryptsetup-reencrypt tool for LUKS1." +msgstr "" + +#: src/cryptsetup.c:3163 +msgid "Legacy offline reencryption already in-progress. Use cryptsetup-reencrypt utility." +msgstr "" + +#: src/cryptsetup.c:3173 src/cryptsetup_reencrypt.c:178 +msgid "Reencryption of device with integrity profile is not supported." +msgstr "La re-cifratura del dispositivo con un profilo di integrità non è supportata." + +#: src/cryptsetup.c:3181 +msgid "LUKS2 reencryption already initialized. Aborting operation." +msgstr "" + +#: src/cryptsetup.c:3185 +#, fuzzy +msgid "LUKS2 device is not in reencryption." +msgstr "Il file di registro %s esiste, viene ripristinata la re-cifratura.\n" + +#: src/cryptsetup.c:3212 +msgid " [--type ] []" +msgstr " [--type ] []" + +#: src/cryptsetup.c:3212 src/veritysetup.c:358 src/integritysetup.c:470 +msgid "open device as " +msgstr "Apre il dispositivo come " + +#: src/cryptsetup.c:3213 src/cryptsetup.c:3214 src/cryptsetup.c:3215 +#: src/veritysetup.c:359 src/veritysetup.c:360 src/integritysetup.c:471 +#: src/integritysetup.c:472 +msgid "" +msgstr "" + +#: src/cryptsetup.c:3213 src/veritysetup.c:359 src/integritysetup.c:471 +msgid "close device (remove mapping)" +msgstr "Chiude il dispositivo (rimuove la mappatura)" + +#: src/cryptsetup.c:3214 +msgid "resize active device" +msgstr "Ridimensiona il dispositivo attivo" + +#: src/cryptsetup.c:3215 +msgid "show device status" +msgstr "Mostra lo stato del dispositivo" + +#: src/cryptsetup.c:3216 +msgid "[--cipher ]" +msgstr "[--cipher ]" + +#: src/cryptsetup.c:3216 +msgid "benchmark cipher" +msgstr "Esegue benchmark del cifrario" + +#: src/cryptsetup.c:3217 src/cryptsetup.c:3218 src/cryptsetup.c:3219 +#: src/cryptsetup.c:3220 src/cryptsetup.c:3221 src/cryptsetup.c:3228 +#: src/cryptsetup.c:3229 src/cryptsetup.c:3230 src/cryptsetup.c:3231 +#: src/cryptsetup.c:3232 src/cryptsetup.c:3233 src/cryptsetup.c:3234 +#: src/cryptsetup.c:3235 +msgid "" +msgstr "" + +#: src/cryptsetup.c:3217 +msgid "try to repair on-disk metadata" +msgstr "Prova a riparare i metadati on-disk" + +#: src/cryptsetup.c:3218 +#, fuzzy +msgid "reencrypt LUKS2 device" +msgstr "Aggiunge chiave al dispositivo LUKS" + +#: src/cryptsetup.c:3219 +msgid "erase all keyslots (remove encryption key)" +msgstr "Elimina tutti gli slot di chiavi (rimuove chiave di cifratura)" + +#: src/cryptsetup.c:3220 +msgid "convert LUKS from/to LUKS2 format" +msgstr "Converte LUKS dal/al formato LUKS2" + +#: src/cryptsetup.c:3221 +msgid "set permanent configuration options for LUKS2" +msgstr "Imposta opzioni di configurazione permanenti per LUKS2" + +#: src/cryptsetup.c:3222 src/cryptsetup.c:3223 +msgid " []" +msgstr " []" + +#: src/cryptsetup.c:3222 +msgid "formats a LUKS device" +msgstr "Formatta un dispositivo LUKS" + +#: src/cryptsetup.c:3223 +msgid "add key to LUKS device" +msgstr "Aggiunge chiave al dispositivo LUKS" + +#: src/cryptsetup.c:3224 src/cryptsetup.c:3225 src/cryptsetup.c:3226 +msgid " []" +msgstr " []" + +#: src/cryptsetup.c:3224 +msgid "removes supplied key or key file from LUKS device" +msgstr "Rimuove la chiave fornita o il file chiave dal dispositivo LUKS" + +#: src/cryptsetup.c:3225 +msgid "changes supplied key or key file of LUKS device" +msgstr "Cambia la chiave fornita o il file chiave del dispositivo LUKS" + +#: src/cryptsetup.c:3226 +msgid "converts a key to new pbkdf parameters" +msgstr "Converte una chiave nei nuovi parametri pbkdf" + +#: src/cryptsetup.c:3227 +msgid " " +msgstr " " + +#: src/cryptsetup.c:3227 +msgid "wipes key with number from LUKS device" +msgstr "Ripulisce la chiave con numero dal dispositivo LUKS" + +#: src/cryptsetup.c:3228 +msgid "print UUID of LUKS device" +msgstr "Stampa l'UUID del dispositivo LUKS" + +#: src/cryptsetup.c:3229 +msgid "tests for LUKS partition header" +msgstr "Verifica l'header della partizione LUKS di " + +#: src/cryptsetup.c:3230 +msgid "dump LUKS partition information" +msgstr "Esegue il dump delle informazioni della partizione LUKS" + +#: src/cryptsetup.c:3231 +msgid "dump TCRYPT device information" +msgstr "Esegue il dump delle informazioni TCRYPT del dispositivo" + +#: src/cryptsetup.c:3232 +msgid "Suspend LUKS device and wipe key (all IOs are frozen)" +msgstr "Sospende il dispositivo LUKS e ripulisce la chiave (operazioni I/O bloccate)" + +#: src/cryptsetup.c:3233 +msgid "Resume suspended LUKS device" +msgstr "Ripristina il dispositivo LUKS sospeso" + +#: src/cryptsetup.c:3234 +msgid "Backup LUKS device header and keyslots" +msgstr "Fa il backup dell'header del dispositivo e degli slot di chiave" + +#: src/cryptsetup.c:3235 +msgid "Restore LUKS device header and keyslots" +msgstr "Ripristina l'header del dispositivo LUKS e gli slot di chiave" + +#: src/cryptsetup.c:3236 +msgid " " +msgstr " " + +#: src/cryptsetup.c:3236 +msgid "Manipulate LUKS2 tokens" +msgstr "Gestisce token LUKS2" + +#: src/cryptsetup.c:3254 src/veritysetup.c:376 src/integritysetup.c:488 +msgid "" +"\n" +" is one of:\n" +msgstr "" +"\n" +" è una tra:\n" + +#: src/cryptsetup.c:3260 +msgid "" +"\n" +"You can also use old syntax aliases:\n" +"\topen: create (plainOpen), luksOpen, loopaesOpen, tcryptOpen\n" +"\tclose: remove (plainClose), luksClose, loopaesClose, tcryptClose\n" +msgstr "" +"\n" +"È possibile usare anche la vecchia sintassi :\n" +"\topen: create (plainOpen), luksOpen, loopaesOpen, tcryptOpen\n" +"\tclose: remove (plainClose), luksClose, loopaesClose, tcryptClose\n" + +#: src/cryptsetup.c:3264 +#, c-format +msgid "" +"\n" +" is the device to create under %s\n" +" is the encrypted device\n" +" is the LUKS key slot number to modify\n" +" optional key file for the new key for luksAddKey action\n" +msgstr "" +"\n" +" è il dispositivo da creare in %s\n" +" è il dispositivo cifrato\n" +" è il numero dello slot di chiave LUKS da modificare\n" +" è il file chiave opzionale per la nuova chiave per l'azione luksAddKey\n" + +#: src/cryptsetup.c:3271 +#, c-format +msgid "" +"\n" +"Default compiled-in metadata format is %s (for luksFormat action).\n" +msgstr "" +"\n" +"Formato predefinito metadati compilati: %s (per azione luksFormat).\n" + +#: src/cryptsetup.c:3276 +#, c-format +msgid "" +"\n" +"Default compiled-in key and passphrase parameters:\n" +"\tMaximum keyfile size: %dkB, Maximum interactive passphrase length %d (characters)\n" +"Default PBKDF for LUKS1: %s, iteration time: %d (ms)\n" +"Default PBKDF for LUKS2: %s\n" +"\tIteration time: %d, Memory required: %dkB, Parallel threads: %d\n" +msgstr "" +"\n" +"Parametri predefiniti compilati di chiave e passphrase:\n" +"\tdimensione massima file chiave: %dkB, lunghezza massima della passphrase interattiva %d (caratteri)\n" +"PBKDF predefinito per LUKS1: %s, tempo iterazione: %d (ms)\n" +"PBKDF predefinito per LUKS2: %s\n" +"\tTempo iterazione: %d, memoria richiesta: %dkB, thread paralleli: %d\n" + +#: src/cryptsetup.c:3287 +#, c-format +msgid "" +"\n" +"Default compiled-in device cipher parameters:\n" +"\tloop-AES: %s, Key %d bits\n" +"\tplain: %s, Key: %d bits, Password hashing: %s\n" +"\tLUKS: %s, Key: %d bits, LUKS header hashing: %s, RNG: %s\n" +msgstr "" +"\n" +"Parametri predefiniti compilati del cifrario del dispositivo:\n" +"\tloop-AES: %s, chiave: %d bit\n" +"\tin chiaro: %s, chiave: %d bit, hash della password: %s\n" +"\tLUKS: %s, chiave: %d bit, hash dell'header LUKS: %s, RNG: %s\n" + +#: src/cryptsetup.c:3296 +msgid "\tLUKS: Default keysize with XTS mode (two internal keys) will be doubled.\n" +msgstr "\tLUKS: la dimensione predefinita della chiave in modalità XTS (due chiavi interne) viene raddoppiata.\n" + +#: src/cryptsetup.c:3312 src/veritysetup.c:532 src/integritysetup.c:630 +#, c-format +msgid "%s: requires %s as arguments" +msgstr "%s: richiede %s come argomenti" + +#: src/cryptsetup.c:3350 src/veritysetup.c:421 src/integritysetup.c:527 +#: src/cryptsetup_reencrypt.c:1591 +msgid "Show this help message" +msgstr "Mostra questo messaggio d'aiuto" + +#: src/cryptsetup.c:3351 src/veritysetup.c:422 src/integritysetup.c:528 +#: src/cryptsetup_reencrypt.c:1592 +msgid "Display brief usage" +msgstr "Mostra il modo d'uso sintetico" + +#: src/cryptsetup.c:3352 src/veritysetup.c:423 src/integritysetup.c:529 +#: src/cryptsetup_reencrypt.c:1593 +msgid "Print package version" +msgstr "Stampa la versione del pacchetto" + +#: src/cryptsetup.c:3356 src/veritysetup.c:427 src/integritysetup.c:533 +#: src/cryptsetup_reencrypt.c:1597 +msgid "Help options:" +msgstr "Opzioni di aiuto:" + +#: src/cryptsetup.c:3357 src/veritysetup.c:428 src/integritysetup.c:534 +#: src/cryptsetup_reencrypt.c:1598 +msgid "Shows more detailed error messages" +msgstr "Mostra i messaggi di errore con maggior dettaglio" + +#: src/cryptsetup.c:3358 src/veritysetup.c:429 src/integritysetup.c:535 +#: src/cryptsetup_reencrypt.c:1599 +msgid "Show debug messages" +msgstr "Mostra i messaggi di debug" + +#: src/cryptsetup.c:3359 +msgid "Show debug messages including JSON metadata" +msgstr "Mostra i messaggi di debug compresi i metadati JSON" + +#: src/cryptsetup.c:3360 src/cryptsetup_reencrypt.c:1601 +msgid "The cipher used to encrypt the disk (see /proc/crypto)" +msgstr "Il cifrario usato per cifrare il disco (vedere /proc/crypto)" + +#: src/cryptsetup.c:3361 src/cryptsetup_reencrypt.c:1603 +msgid "The hash used to create the encryption key from the passphrase" +msgstr "L'hash usato per creare la chiave di cifratura dalla passphrase" + +#: src/cryptsetup.c:3362 +msgid "Verifies the passphrase by asking for it twice" +msgstr "Verifica la passphrase chiedendola due volte" + +#: src/cryptsetup.c:3363 src/cryptsetup_reencrypt.c:1605 +msgid "Read the key from a file" +msgstr "Legge la chiave da un file" + +#: src/cryptsetup.c:3364 +msgid "Read the volume (master) key from file." +msgstr "Legge la chiave (master) del volume dal file." + +#: src/cryptsetup.c:3365 +msgid "Dump volume (master) key instead of keyslots info" +msgstr "Esegue il dump della chiave (master) del volume invece delle informazioni sugli slot di chiave" + +#: src/cryptsetup.c:3366 src/cryptsetup_reencrypt.c:1602 +msgid "The size of the encryption key" +msgstr "La dimensione della chiave di cifratura" + +#: src/cryptsetup.c:3366 src/cryptsetup.c:3425 src/integritysetup.c:553 +#: src/integritysetup.c:557 src/integritysetup.c:561 +#: src/cryptsetup_reencrypt.c:1602 +msgid "BITS" +msgstr "BIT" + +#: src/cryptsetup.c:3367 src/cryptsetup_reencrypt.c:1618 +msgid "Limits the read from keyfile" +msgstr "Limita la lettura dal file di chiave" + +#: src/cryptsetup.c:3367 src/cryptsetup.c:3368 src/cryptsetup.c:3369 +#: src/cryptsetup.c:3370 src/cryptsetup.c:3373 src/cryptsetup.c:3422 +#: src/cryptsetup.c:3423 src/cryptsetup.c:3431 src/cryptsetup.c:3432 +#: src/veritysetup.c:432 src/veritysetup.c:433 src/veritysetup.c:434 +#: src/veritysetup.c:437 src/veritysetup.c:438 src/integritysetup.c:542 +#: src/integritysetup.c:548 src/integritysetup.c:549 +#: src/cryptsetup_reencrypt.c:1617 src/cryptsetup_reencrypt.c:1618 +#: src/cryptsetup_reencrypt.c:1619 src/cryptsetup_reencrypt.c:1620 +msgid "bytes" +msgstr "byte" + +#: src/cryptsetup.c:3368 src/cryptsetup_reencrypt.c:1617 +msgid "Number of bytes to skip in keyfile" +msgstr "Numero di byte da saltare nel file di chiave" + +#: src/cryptsetup.c:3369 +msgid "Limits the read from newly added keyfile" +msgstr "Limita la lettura dal file di chiave appena aggiunto" + +#: src/cryptsetup.c:3370 +msgid "Number of bytes to skip in newly added keyfile" +msgstr "Numero di byte da saltare nel file di chiave appena aggiunto" + +#: src/cryptsetup.c:3371 +msgid "Slot number for new key (default is first free)" +msgstr "Numero dello slot per la nuova chiave (il primo libero è quello predefinito)" + +#: src/cryptsetup.c:3372 +msgid "The size of the device" +msgstr "La dimensione del dispositivo" + +#: src/cryptsetup.c:3372 src/cryptsetup.c:3374 src/cryptsetup.c:3375 +#: src/cryptsetup.c:3381 src/integritysetup.c:543 src/integritysetup.c:550 +msgid "SECTORS" +msgstr "SETTORI" + +#: src/cryptsetup.c:3373 src/cryptsetup_reencrypt.c:1620 +msgid "Use only specified device size (ignore rest of device). DANGEROUS!" +msgstr "Usa solo la dimensione specificata del dispositivo (ignora il resto del dispositivo) PERICOLOSO" + +#: src/cryptsetup.c:3374 +msgid "The start offset in the backend device" +msgstr "L'offset iniziale del dispositivo di backend" + +#: src/cryptsetup.c:3375 +msgid "How many sectors of the encrypted data to skip at the beginning" +msgstr "Quanti settori dei dati cifrati saltare dall'inizio" + +#: src/cryptsetup.c:3376 +msgid "Create a readonly mapping" +msgstr "Crea una mappatura in sola lettura" + +#: src/cryptsetup.c:3377 src/integritysetup.c:536 +#: src/cryptsetup_reencrypt.c:1608 +msgid "Do not ask for confirmation" +msgstr "Non chiede conferma" + +#: src/cryptsetup.c:3378 +msgid "Timeout for interactive passphrase prompt (in seconds)" +msgstr "Timeout per il prompt interattivo della passphrase (in secondi)" + +#: src/cryptsetup.c:3378 src/cryptsetup.c:3379 src/integritysetup.c:537 +#: src/cryptsetup_reencrypt.c:1609 +msgid "secs" +msgstr "sec" + +#: src/cryptsetup.c:3379 src/integritysetup.c:537 +#: src/cryptsetup_reencrypt.c:1609 +msgid "Progress line update (in seconds)" +msgstr "Aggiornamento linea di avanzamento (in secondi)" + +# (NDT) Descrizione dell'opzione +# --tries, indica il numero di tentativi per richiesta +#: src/cryptsetup.c:3380 src/cryptsetup_reencrypt.c:1610 +msgid "How often the input of the passphrase can be retried" +msgstr "Quante volte può essere ritentato l'inserimento della passphrase" + +#: src/cryptsetup.c:3381 +msgid "Align payload at sector boundaries - for luksFormat" +msgstr "Allinea il payload agli estremi del settore - per luksFormat" + +#: src/cryptsetup.c:3382 +msgid "File with LUKS header and keyslots backup" +msgstr "File con header LUKS e backup degli slot di chiave" + +#: src/cryptsetup.c:3383 src/cryptsetup_reencrypt.c:1611 +msgid "Use /dev/random for generating volume key" +msgstr "Usa /dev/random per generare la chiave di volume" + +#: src/cryptsetup.c:3384 src/cryptsetup_reencrypt.c:1612 +msgid "Use /dev/urandom for generating volume key" +msgstr "Usa /dev/urandom per generare la chiave di volume" + +#: src/cryptsetup.c:3385 +msgid "Share device with another non-overlapping crypt segment" +msgstr "Condivide il dispositivo con un altro segmento cifrato non sovrapposto" + +#: src/cryptsetup.c:3386 src/veritysetup.c:441 +msgid "UUID for device to use" +msgstr "UUID per il dispositivo da usare" + +#: src/cryptsetup.c:3387 +msgid "Allow discards (aka TRIM) requests for device" +msgstr "Ammette le richieste di scarto (funzione TRIM) per il dispositivo" + +#: src/cryptsetup.c:3388 src/cryptsetup_reencrypt.c:1629 +msgid "Device or file with separated LUKS header" +msgstr "Device o file con header LUKS separato" + +#: src/cryptsetup.c:3389 +msgid "Do not activate device, just check passphrase" +msgstr "Non attiva il dispositivo, verifica solamente la passphrase" + +#: src/cryptsetup.c:3390 +msgid "Use hidden header (hidden TCRYPT device)" +msgstr "Usa header nascosto (dispositivo TCRYPT nascosto)" + +#: src/cryptsetup.c:3391 +msgid "Device is system TCRYPT drive (with bootloader)" +msgstr "Il dispositivo è l'unità TCRYPT di sistema (con bootloader)" + +#: src/cryptsetup.c:3392 +msgid "Use backup (secondary) TCRYPT header" +msgstr "Usa header TCRYPT di backup (secondario)" + +#: src/cryptsetup.c:3393 +msgid "Scan also for VeraCrypt compatible device" +msgstr "Ricerca anche dispositivo compatibile VeraCrypt" + +#: src/cryptsetup.c:3394 +msgid "Personal Iteration Multiplier for VeraCrypt compatible device" +msgstr "PIM (Personal Iteration Multiplier) per dispositivo VeraCrypt compatibile" + +#: src/cryptsetup.c:3395 +msgid "Query Personal Iteration Multiplier for VeraCrypt compatible device" +msgstr "Interroga PIM (Personal Iteration Multiplier) per dispositivo VeraCrypt compatibile" + +#: src/cryptsetup.c:3396 +#, fuzzy +msgid "Type of device metadata: luks, luks1, luks2, plain, loopaes, tcrypt" +msgstr "Tipo di metadati del dispositivo: luks, plain, loopaes, tcrypt" + +#: src/cryptsetup.c:3397 +msgid "Disable password quality check (if enabled)" +msgstr "Disabilita la verifica della qualità della password (se abilitata)" + +#: src/cryptsetup.c:3398 +msgid "Use dm-crypt same_cpu_crypt performance compatibility option" +msgstr "Usa l'opzione compatibile per prestazioni same_cpu_crypt di dm-crypt" + +#: src/cryptsetup.c:3399 +msgid "Use dm-crypt submit_from_crypt_cpus performance compatibility option" +msgstr "Usa l'opzione compatibile per prestazioni submit_from_crypt_cpus di dm-crypt" + +#: src/cryptsetup.c:3400 +msgid "Device removal is deferred until the last user closes it" +msgstr "La rimozione del dispositivo è posticipata fino a quando l'ultimo utente lo chiude" + +#: src/cryptsetup.c:3401 +msgid "Use global lock to serialize memory hard PBKDF (OOM workaround)" +msgstr "" + +#: src/cryptsetup.c:3402 +msgid "PBKDF iteration time for LUKS (in ms)" +msgstr "Tempo di iterazione di PBKDF per LUKS (in ms)" + +#: src/cryptsetup.c:3402 src/cryptsetup_reencrypt.c:1607 +msgid "msecs" +msgstr "msec" + +#: src/cryptsetup.c:3403 src/cryptsetup_reencrypt.c:1625 +msgid "PBKDF algorithm (for LUKS2): argon2i, argon2id, pbkdf2" +msgstr "Algoritmo PBKDF (per LUKS2): argon2i, argon2id, pbkdf2" + +#: src/cryptsetup.c:3404 src/cryptsetup_reencrypt.c:1626 +msgid "PBKDF memory cost limit" +msgstr "Limite costo memoria PBKDF" + +#: src/cryptsetup.c:3404 src/cryptsetup_reencrypt.c:1626 +msgid "kilobytes" +msgstr "kilobyte" + +#: src/cryptsetup.c:3405 src/cryptsetup_reencrypt.c:1627 +msgid "PBKDF parallel cost" +msgstr "Costo PBKDF parallelo" + +#: src/cryptsetup.c:3405 src/cryptsetup_reencrypt.c:1627 +msgid "threads" +msgstr "thread" + +#: src/cryptsetup.c:3406 src/cryptsetup_reencrypt.c:1628 +msgid "PBKDF iterations cost (forced, disables benchmark)" +msgstr "Costo iterazioni PBKDF (forzato, disabilita benchmark)" + +#: src/cryptsetup.c:3407 +msgid "Keyslot priority: ignore, normal, prefer" +msgstr "Priorità slot di chiave: ignore, normal, prefer" + +#: src/cryptsetup.c:3408 +msgid "Disable locking of on-disk metadata" +msgstr "Disabilita il blocco dei metadati su disco" + +#: src/cryptsetup.c:3409 +msgid "Disable loading volume keys via kernel keyring" +msgstr "Disabilita il caricamento delle chiavi di volume tramite il portachiavi del kernel" + +#: src/cryptsetup.c:3410 +msgid "Data integrity algorithm (LUKS2 only)" +msgstr "Algoritmo integrità dei dati (solo LUKS2)" + +#: src/cryptsetup.c:3411 src/integritysetup.c:564 +msgid "Disable journal for integrity device" +msgstr "Disabilita il journal per il dispositivo di integrità" + +#: src/cryptsetup.c:3412 src/integritysetup.c:538 +msgid "Do not wipe device after format" +msgstr "Non pulisce il dispositivo dopo la formattazione" + +#: src/cryptsetup.c:3413 +msgid "Do not ask for passphrase if activation by token fails" +msgstr "Non chiede la passphrase se l'attivazione con token non riesce" + +#: src/cryptsetup.c:3414 +msgid "Token number (default: any)" +msgstr "Numero token (predefinito: any)" + +#: src/cryptsetup.c:3415 +msgid "Key description" +msgstr "Descrizione chiave" + +#: src/cryptsetup.c:3416 +msgid "Encryption sector size (default: 512 bytes)" +msgstr "Dimensione settore di cifratura (predefinito: 512 byte)" + +#: src/cryptsetup.c:3417 +msgid "Set activation flags persistent for device" +msgstr "Imposta flag attivazione persistente per il dispositivo" + +#: src/cryptsetup.c:3418 +msgid "Set label for the LUKS2 device" +msgstr "Imposta l'etichetta per il dispositivo LUKS2" + +#: src/cryptsetup.c:3419 +msgid "Set subsystem label for the LUKS2 device" +msgstr "Imposta l'etichetta del sottosistema per il dispositivo LUKS2" + +#: src/cryptsetup.c:3420 +msgid "Create unbound (no assigned data segment) LUKS2 keyslot" +msgstr "Crea slot di chiave LUKS2 non vincolato (segmento dati non assegnato)" + +#: src/cryptsetup.c:3421 +msgid "Read or write the json from or to a file" +msgstr "Legge/Scrive JSON da/su file" + +#: src/cryptsetup.c:3422 +msgid "LUKS2 header metadata area size" +msgstr "Dimensione area metadati header LUKS2" + +#: src/cryptsetup.c:3423 +msgid "LUKS2 header keyslots area size" +msgstr "Dimensione area slot di chiave header LUKS2" + +#: src/cryptsetup.c:3424 +msgid "Refresh (reactivate) device with new parameters" +msgstr "Aggiorna (riattiva) il dispositivo con nuovi parametri" + +#: src/cryptsetup.c:3425 +msgid "LUKS2 keyslot: The size of the encryption key" +msgstr "Slot di chiave LUKS2: la dimensione della chiave di cifratura" + +#: src/cryptsetup.c:3426 +msgid "LUKS2 keyslot: The cipher used for keyslot encryption" +msgstr "Slot di chiave LUKS2: il cifrario usato per la cifratura dello slot di chiave" + +#: src/cryptsetup.c:3427 +#, fuzzy +msgid "Encrypt LUKS2 device (in-place encryption)." +msgstr "Decifra definitivamente il dispositivo (rimuove la cifratura)" + +#: src/cryptsetup.c:3428 +#, fuzzy +msgid "Decrypt LUKS2 device (remove encryption)." +msgstr "Decifra definitivamente il dispositivo (rimuove la cifratura)" + +#: src/cryptsetup.c:3429 +msgid "Initialize LUKS2 reencryption in metadata only." +msgstr "" + +#: src/cryptsetup.c:3430 +msgid "Resume initialized LUKS2 reencryption only." +msgstr "" + +#: src/cryptsetup.c:3431 src/cryptsetup_reencrypt.c:1619 +msgid "Reduce data device size (move data offset). DANGEROUS!" +msgstr "Riduce la dimensione dei dati del dispositivo (muove l'offset dei dati) PERICOLOSO" + +#: src/cryptsetup.c:3432 +#, fuzzy +msgid "Maximal reencryption hotzone size." +msgstr "Dimensione blocco re-cifratura" + +#: src/cryptsetup.c:3433 +msgid "Reencryption hotzone resilience type (checksum,journal,none)" +msgstr "" + +#: src/cryptsetup.c:3434 +#, fuzzy +msgid "Reencryption hotzone checksums hash" +msgstr "Dimensione blocco re-cifratura" + +#: src/cryptsetup.c:3435 +msgid "Override device autodetection of dm device to be reencrypted" +msgstr "" + +#: src/cryptsetup.c:3451 src/veritysetup.c:462 src/integritysetup.c:583 +msgid "[OPTION...] " +msgstr "[OPZIONE...] ]" + +#: src/cryptsetup.c:3502 src/veritysetup.c:496 src/integritysetup.c:594 +msgid "Argument missing." +msgstr "Argomento mancante." + +#: src/cryptsetup.c:3565 src/veritysetup.c:527 src/integritysetup.c:625 +msgid "Unknown action." +msgstr "Azione sconosciuta." + +#: src/cryptsetup.c:3575 +msgid "Parameter --refresh is only allowed with open or refresh commands.\n" +msgstr "" +"Il parametro --refresh è consentito solo col comando open o refresh.\n" +"\n" + +#: src/cryptsetup.c:3580 +msgid "Options --refresh and --test-passphrase are mutually exclusive.\n" +msgstr "" +"Solo un'opzione tra --refresh e --test-passphrase può essere usata.\n" +"\n" + +#: src/cryptsetup.c:3585 +msgid "Option --deferred is allowed only for close command.\n" +msgstr "" +"L'opzione --deferred è consentita solo per il comando close.\n" +"\n" + +#: src/cryptsetup.c:3590 +msgid "Option --shared is allowed only for open of plain device.\n" +msgstr "L'opzione --shared è consentita solo per l'azione open di dispositivo in chiaro.\n" + +#: src/cryptsetup.c:3595 +msgid "Option --allow-discards is allowed only for open operation.\n" +msgstr "L'opzione --allow-discards è consentita solo per l'azione open.\n" + +#: src/cryptsetup.c:3600 +msgid "Option --persistent is allowed only for open operation.\n" +msgstr "L'opzione --persistent è consentita solo per l'azione open.\n" + +#: src/cryptsetup.c:3605 +#, fuzzy +msgid "Option --serialize-memory-hard-pbkdf is allowed only for open operation.\n" +msgstr "L'opzione --allow-discards è consentita solo per l'azione open.\n" + +#: src/cryptsetup.c:3610 +msgid "Option --persistent is not allowed with --test-passphrase.\n" +msgstr "L'opzione --persistent non è consentita con --test-passphrase.\n" + +#: src/cryptsetup.c:3620 +#, fuzzy +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 "" +"L'opzione --key-size è consentita solo per le azioni luksFormat, luksAddKey (con --unbound),\n" +"open e benchmark. Per limitare la lettura dal file chiave usare --keyfile-size=(byte)." + +#: src/cryptsetup.c:3626 +msgid "Option --integrity is allowed only for luksFormat (LUKS2).\n" +msgstr "L'opzione --integrity è consentita solo per luksFormat (LUKS2).\n" + +#: src/cryptsetup.c:3631 +msgid "Option --integrity-no-wipe can be used only for format action with integrity extension.\n" +msgstr "" +"L'opzione --integrity-no-wipe può essere usata solo con l'azione format con estensione di integrità.\n" +"\n" + +#: src/cryptsetup.c:3637 +msgid "Options --label and --subsystem are allowed only for luksFormat and config LUKS2 operations.\n" +msgstr "Le opzioni --label e --subsystem sono consentite solo per operazioni LUKS2 luksFormat e config.\n" + +#: src/cryptsetup.c:3643 +msgid "Option --test-passphrase is allowed only for open of LUKS and TCRYPT devices.\n" +msgstr "L'opzione --test-passphrase è consentita solo per l'operazione open di dispositivo LUKS e TCRYPT.\n" + +#: src/cryptsetup.c:3648 src/cryptsetup_reencrypt.c:1692 +msgid "Key size must be a multiple of 8 bits" +msgstr "La dimensione della chiave deve essere un multiplo di 8 bit" + +#: src/cryptsetup.c:3654 src/cryptsetup_reencrypt.c:1378 +#: src/cryptsetup_reencrypt.c:1697 +msgid "Key slot is invalid." +msgstr "Lo slot di chiave non è valido." + +#: src/cryptsetup.c:3661 +msgid "Option --key-file takes precedence over specified key file argument." +msgstr "L'opzione --key-file ha la precedenza sull'argomento specificato per il file chiave." + +#: src/cryptsetup.c:3668 src/veritysetup.c:539 src/integritysetup.c:649 +#: src/cryptsetup_reencrypt.c:1671 +msgid "Negative number for option not permitted." +msgstr "Non è ammesso un numero negativo per l'opzione." + +#: src/cryptsetup.c:3672 +msgid "Only one --key-file argument is allowed." +msgstr "È consentito solo un argomento --key-file." + +#: src/cryptsetup.c:3676 src/cryptsetup_reencrypt.c:1663 +#: src/cryptsetup_reencrypt.c:1701 +msgid "Only one of --use-[u]random options is allowed." +msgstr "È consentita solo una tra le opzioni --use-[u]random." + +#: src/cryptsetup.c:3680 +msgid "Option --use-[u]random is allowed only for luksFormat." +msgstr "L'opzione --use-[u]random è consentita solo per luksFormat." + +#: src/cryptsetup.c:3684 +msgid "Option --uuid is allowed only for luksFormat and luksUUID." +msgstr "L'opzione --uuid è consentita solo per luksFormat e luksUUID." + +#: src/cryptsetup.c:3688 +msgid "Option --align-payload is allowed only for luksFormat." +msgstr "L'opzione --align-payload è consentita solo per luksFormat." + +#: src/cryptsetup.c:3692 +msgid "Options --luks2-metadata-size and --opt-luks2-keyslots-size are allowed only for luksFormat with LUKS2." +msgstr "Le opzioni --luks2-metadata-size e --opt-luks2-keyslots-size sono consentite solo luksFormat con LUKS2." + +#: src/cryptsetup.c:3697 +msgid "Invalid LUKS2 metadata size specification." +msgstr "Specifica di dimensione dei metadati LUKS2 non valida." + +#: src/cryptsetup.c:3701 +msgid "Invalid LUKS2 keyslots size specification." +msgstr "Specifica di dimensione dello slot di chiave LUKS2 non valida." + +#: src/cryptsetup.c:3705 +#, fuzzy +msgid "Options --align-payload and --offset cannot be combined." +msgstr "Le opzioni --align-payload --offset cannot non possono essere utilizzate assieme." + +#: src/cryptsetup.c:3711 +msgid "Option --skip is supported only for open of plain and loopaes devices.\n" +msgstr "L'opzione --skip è supportata solo per l'azione open di dispositivi in chiaro e loopaes.\n" + +#: src/cryptsetup.c:3718 +#, fuzzy +msgid "Option --offset is supported only for open of plain and loopaes devices, luksFormat and device reencryption.\n" +msgstr "L'opzione --offset è supportata solo per l'azione open di dispositivi in chiaro e loopaes e per luksFormat.\n" + +#: src/cryptsetup.c:3724 +msgid "Option --tcrypt-hidden, --tcrypt-system or --tcrypt-backup is supported only for TCRYPT device.\n" +msgstr "L'opzione --tcrypt-hidden, --tcrypt-system o --tcrypt-backup è supportata solo per dispositivo TCRYPT.\n" + +#: src/cryptsetup.c:3729 +msgid "Option --tcrypt-hidden cannot be combined with --allow-discards.\n" +msgstr "L'opzione --tcrypt-hidden non può essere utilizzata con --allow-discards.\n" + +#: src/cryptsetup.c:3734 +msgid "Option --veracrypt is supported only for TCRYPT device type.\n" +msgstr "L'opzione --veracrypt è supportata solo per dispositivo TCRYPT.\n" + +#: src/cryptsetup.c:3740 +msgid "Invalid argument for parameter --veracrypt-pim supplied.\n" +msgstr "Argomento fornito per il parametro --veracrypt-pim non valido.\n" + +#: src/cryptsetup.c:3744 +msgid "Option --veracrypt-pim is supported only for VeraCrypt compatible devices.\n" +msgstr "" +"L'opzione --veracrypt-pim è supportata solo per dispositivi compatibili VeraCrypt.\n" +"\n" + +#: src/cryptsetup.c:3752 +msgid "Option --veracrypt-query-pim is supported only for VeraCrypt compatible devices.\n" +msgstr "L'opzione --veracrypt-query-pim è supportata solo per dispositivi compatibili VeraCrypt.\n" + +#: src/cryptsetup.c:3756 +msgid "The options --veracrypt-pim and --veracrypt-query-pim are mutually exclusive.\n" +msgstr "" +"Solo un'opzione tra --veracrypt-pim e --veracrypt-query-pim può essere usata.\n" +"\n" + +#: src/cryptsetup.c:3763 +msgid "Option --priority can be only ignore/normal/prefer.\n" +msgstr "L'opzione --priority può essere solamente ignore/normal/prefer.\n" + +#: src/cryptsetup.c:3768 +msgid "Keyslot specification is required.\n" +msgstr "È richiesta la specifica dello slot di chiave.\n" + +#: src/cryptsetup.c:3773 src/cryptsetup_reencrypt.c:1677 +msgid "Password-based key derivation function (PBKDF) can be only pbkdf2 or argon2i/argon2id.\n" +msgstr "La funzione di derivazione della chiave basata su password (PBKDF) può essere solamente pbkdf2 oppure argon2i/argon2id.\n" + +#: src/cryptsetup.c:3778 src/cryptsetup_reencrypt.c:1682 +msgid "PBKDF forced iterations cannot be combined with iteration time option.\n" +msgstr "Le iterazioni forzate PBKDF non possono essere usate assieme all'opzione del tempo delle iterazioni.\n" + +#: src/cryptsetup.c:3784 +msgid "Sector size option is not supported for this command.\n" +msgstr "L'opzione della dimensione del settore non è supportata con questo comando.\n" + +#: src/cryptsetup.c:3790 +msgid "Unsupported encryption sector size.\n" +msgstr "Dimensione settore di cifratura non supportata.\n" + +#: src/cryptsetup.c:3795 +msgid "Key size is required with --unbound option.\n" +msgstr "La dimensione della chiave è richiesta con l'opzione --unbound.\n" + +#: src/cryptsetup.c:3800 +msgid "Option --unbound may be used only with luksAddKey action.\n" +msgstr "L'opzione --unbound può essere usata solamente con l'azione luksAddKey.\n" + +#: src/cryptsetup.c:3805 +msgid "Option --refresh may be used only with open action.\n" +msgstr "L'opzione --refresh può essere usata solamente con l'azione open.\n" + +#: src/cryptsetup.c:3816 +msgid "Cannot disable metadata locking.\n" +msgstr "Impossibile disabilitare il blocco dei metadati.\n" + +#: src/cryptsetup.c:3826 +#, fuzzy +msgid "Invalid max reencryption hotzone size specification." +msgstr "Specifica di dimensione del dispositivo non valida." + +#: src/cryptsetup.c:3834 src/cryptsetup_reencrypt.c:1706 +#: src/cryptsetup_reencrypt.c:1711 +msgid "Invalid device size specification." +msgstr "Specifica di dimensione del dispositivo non valida." + +#: src/cryptsetup.c:3837 +#, fuzzy +msgid "Maximum device reduce size is 1 GiB." +msgstr "La dimensione massima di riduzione del dispositivo è 64 MiB." + +#: src/cryptsetup.c:3840 src/cryptsetup_reencrypt.c:1717 +msgid "Reduce size must be multiple of 512 bytes sector." +msgstr "La dimensione di riduzione deve essere un multiplo di 512 byte." + +#: src/cryptsetup.c:3845 +#, fuzzy +msgid "Invalid data size specification." +msgstr "Specifica di dimensione del dispositivo non valida." + +#: src/cryptsetup.c:3850 +#, fuzzy +msgid "Reduce size overflow." +msgstr "Overflow offset del dispositivo." + +#: src/cryptsetup.c:3854 +msgid "LUKS2 decryption requires option --header." +msgstr "" + +#: src/cryptsetup.c:3858 +#, fuzzy +msgid "Device size must be multiple of 512 bytes sector." +msgstr "La dimensione di riduzione deve essere un multiplo di 512 byte." + +#: src/cryptsetup.c:3862 +#, fuzzy +msgid "Options --reduce-device-size and --data-size cannot be combined." +msgstr "Le opzioni --align-payload --offset cannot non possono essere utilizzate assieme." + +#: src/cryptsetup.c:3866 +#, fuzzy +msgid "Options --device-size and --size cannot be combined." +msgstr "Le opzioni --align-payload --offset cannot non possono essere utilizzate assieme." + +#: src/veritysetup.c:65 +msgid "Invalid salt string specified." +msgstr "Stringa salt specificata non valida." + +#: src/veritysetup.c:96 +#, c-format +msgid "Cannot create hash image %s for writing." +msgstr "Impossibile creare l'immagine hash %s per la scrittura." + +#: src/veritysetup.c:106 +#, c-format +msgid "Cannot create FEC image %s for writing." +msgstr "Impossibile creare l'immagine FEC %s per la scrittura." + +#: src/veritysetup.c:176 +msgid "Invalid root hash string specified." +msgstr "Stringa hash root specificata non valida." + +#: src/veritysetup.c:356 +msgid " " +msgstr " " + +#: src/veritysetup.c:356 src/integritysetup.c:469 +msgid "format device" +msgstr "Formatta il dispositivo" + +#: src/veritysetup.c:357 +msgid " " +msgstr " " + +#: src/veritysetup.c:357 +msgid "verify device" +msgstr "Verifica il dispositivo" + +#: src/veritysetup.c:358 +msgid " " +msgstr " " + +#: src/veritysetup.c:360 src/integritysetup.c:472 +msgid "show active device status" +msgstr "Mostra lo stato del dispositivo attivo" + +#: src/veritysetup.c:361 +msgid "" +msgstr "" + +#: src/veritysetup.c:361 src/integritysetup.c:473 +msgid "show on-disk information" +msgstr "Mostra informazioni on-disk" + +#: src/veritysetup.c:380 +#, c-format +msgid "" +"\n" +" is the device to create under %s\n" +" is the data device\n" +" is the device containing verification data\n" +" hash of the root node on \n" +msgstr "" +"\n" +" è il dispositivo da creare in %s\n" +" è il dispositivo dei dati\n" +" è il dispositivo che contiene i dati di verifica\n" +" è l'hash del nodo radice nel \n" + +#: src/veritysetup.c:387 +#, c-format +msgid "" +"\n" +"Default compiled-in dm-verity parameters:\n" +"\tHash: %s, Data block (bytes): %u, Hash block (bytes): %u, Salt size: %u, Hash format: %u\n" +msgstr "" +"\n" +"Parametri predefiniti compilati in dm-verity:\n" +"\tHash: %s, Blocco dati (byte): %u, Blocco hash (byte): %u, Dimensione salt: %u, Formato hash: %u\n" + +#: src/veritysetup.c:430 +msgid "Do not use verity superblock" +msgstr "Non usa il super-blocco verity" + +#: src/veritysetup.c:431 +msgid "Format type (1 - normal, 0 - original Chrome OS)" +msgstr "Tipo di formato (1 - normale, 0 - ChromeOS originale)" + +#: src/veritysetup.c:431 +msgid "number" +msgstr "numero" + +#: src/veritysetup.c:432 +msgid "Block size on the data device" +msgstr "La dimensione del blocco sul dispositivo dati" + +#: src/veritysetup.c:433 +msgid "Block size on the hash device" +msgstr "La dimensione del blocco sul dispositivo hash" + +#: src/veritysetup.c:434 +msgid "FEC parity bytes" +msgstr "Byte di parità FEC" + +#: src/veritysetup.c:435 +msgid "The number of blocks in the data file" +msgstr "Il numero di blocchi nel file dati" + +#: src/veritysetup.c:435 +msgid "blocks" +msgstr "blocchi" + +#: src/veritysetup.c:436 +msgid "Path to device with error correction data" +msgstr "Percorso al dispositivo con i dati di correzione degli errori" + +#: src/veritysetup.c:436 src/integritysetup.c:540 +msgid "path" +msgstr "percorso" + +#: src/veritysetup.c:437 +msgid "Starting offset on the hash device" +msgstr "L'offset iniziale del dispositivo di hash" + +#: src/veritysetup.c:438 +msgid "Starting offset on the FEC device" +msgstr "L'offset iniziale del dispositivo FEC" + +#: src/veritysetup.c:439 +msgid "Hash algorithm" +msgstr "Algoritmo di hash" + +#: src/veritysetup.c:439 +msgid "string" +msgstr "stringa" + +#: src/veritysetup.c:440 +msgid "Salt" +msgstr "Salt" + +#: src/veritysetup.c:440 +msgid "hex string" +msgstr "stringa esadecimale" + +#: src/veritysetup.c:442 +msgid "Restart kernel if corruption is detected" +msgstr "Riavvia il kernel se sono rilevati dati rovinati" + +#: src/veritysetup.c:443 +msgid "Ignore corruption, log it only" +msgstr "Ignora i dati rovinati, li registra solamente" + +#: src/veritysetup.c:444 +msgid "Do not verify zeroed blocks" +msgstr "Non verifica i blocchi azzerati" + +#: src/veritysetup.c:445 +msgid "Verify data block only the first time it is read" +msgstr "Verifica i blocchi dati solo alla prima lettura" + +#: src/veritysetup.c:545 +msgid "Option --ignore-corruption, --restart-on-corruption or --ignore-zero-blocks is allowed only for open operation.\n" +msgstr "L'opzione --ignore-corruption, --restart-on-corruption o --ignore-zero-blocks è consentita solo per l'operazione di apertura.\n" + +#: src/veritysetup.c:550 +msgid "Option --ignore-corruption and --restart-on-corruption cannot be used together.\n" +msgstr "Le opzioni --ignore-corruption e --restart-on-corruption non possono essere utilizzate assieme.\n" + +#: src/integritysetup.c:83 src/utils_password.c:305 +#, c-format +msgid "Cannot read keyfile %s." +msgstr "Impossibile leggere il file chiave %s." + +#: src/integritysetup.c:87 src/utils_password.c:310 +#, c-format +msgid "Cannot read %d bytes from keyfile %s." +msgstr "Impossibile leggere %d byte dal file chiave %s." + +#: src/integritysetup.c:250 +#, c-format +msgid "Formatted with tag size %u, internal integrity %s.\n" +msgstr "Formattato con dimensione tag di %u, integrità interna %s.\n" + +#: src/integritysetup.c:469 src/integritysetup.c:473 +msgid "" +msgstr "" + +#: src/integritysetup.c:470 +msgid " " +msgstr " " + +#: src/integritysetup.c:492 +#, c-format +msgid "" +"\n" +" is the device to create under %s\n" +" is the device containing data with integrity tags\n" +msgstr "" +"\n" +" è il dispositivo da creare in %s\n" +" è il dispositivo che contiene dai con i tag di integrità\n" + +#: src/integritysetup.c:497 +#, c-format +msgid "" +"\n" +"Default compiled-in dm-integrity parameters:\n" +"\tTag size: %u bytes, Checksum algorithm: %s\n" +msgstr "" +"\n" +"Parametri predefiniti compilati in dm-integrity:\n" +"\tDimensione tag: %u byte - Algoritmo di controllo: %s\n" + +#: src/integritysetup.c:540 +msgid "Path to data device (if separated)" +msgstr "Percorso al dispositivo dati (se scollegato)" + +#: src/integritysetup.c:542 +msgid "Journal size" +msgstr "Dimensione journal" + +#: src/integritysetup.c:543 +msgid "Interleave sectors" +msgstr "Settori di interfogliazione" + +#: src/integritysetup.c:544 +msgid "Journal watermark" +msgstr "Watermark del journal" + +#: src/integritysetup.c:544 +msgid "percent" +msgstr "percento" + +#: src/integritysetup.c:545 +msgid "Journal commit time" +msgstr "Tempo scrittura del journal" + +#: src/integritysetup.c:545 src/integritysetup.c:547 +msgid "ms" +msgstr "ms" + +#: src/integritysetup.c:546 +msgid "Number of 512-byte sectors per bit (bitmap mode)." +msgstr "" + +#: src/integritysetup.c:547 +msgid "Bitmap mode flush time" +msgstr "" + +#: src/integritysetup.c:548 +msgid "Tag size (per-sector)" +msgstr "Dimensione tag (per settore)" + +#: src/integritysetup.c:549 +msgid "Sector size" +msgstr "Dimensione settore" + +#: src/integritysetup.c:550 +msgid "Buffers size" +msgstr "Dimensione buffer" + +#: src/integritysetup.c:552 +msgid "Data integrity algorithm" +msgstr "Algoritmo integrità dati" + +#: src/integritysetup.c:553 +msgid "The size of the data integrity key" +msgstr "La dimensione della chiave di integrità dei dati" + +#: src/integritysetup.c:554 +msgid "Read the integrity key from a file" +msgstr "Legge la chiave di integrità da un file" + +#: src/integritysetup.c:556 +msgid "Journal integrity algorithm" +msgstr "Algoritmo integrità journal" + +#: src/integritysetup.c:557 +msgid "The size of the journal integrity key" +msgstr "La dimensione della chiave di integrità del journal" + +#: src/integritysetup.c:558 +msgid "Read the journal integrity key from a file" +msgstr "Legge la chiave di integrità del journal da un file" + +#: src/integritysetup.c:560 +msgid "Journal encryption algorithm" +msgstr "Algoritmo cifratura journal" + +#: src/integritysetup.c:561 +msgid "The size of the journal encryption key" +msgstr "La dimensione della chiave di cifratura del journal" + +#: src/integritysetup.c:562 +msgid "Read the journal encryption key from a file" +msgstr "Legge la chiave di cifratura del journal da un file" + +#: src/integritysetup.c:565 +msgid "Recovery mode (no journal, no tag checking)" +msgstr "Modalità ripristino (jorunal e verifica tag disattivai)" + +#: src/integritysetup.c:566 +#, fuzzy +msgid "Use bitmap to track changes and disable journal for integrity device" +msgstr "Disabilita il journal per il dispositivo di integrità" + +#: src/integritysetup.c:567 +msgid "Recalculate initial tags automatically." +msgstr "Ricalcola i tag iniziali automaticamente" + +#: src/integritysetup.c:640 +msgid "Option --integrity-recalculate can be used only for open action." +msgstr "L'opzione --integrity-recalculate può essere usata solo con l'azione open." + +#: src/integritysetup.c:655 +msgid "Options --journal-size, --interleave-sectors, --sector-size, --tag-size and --no-wipe can be used only for format action.\n" +msgstr "Le opzioni --journal-size, --interleave-sectors, --sector-size, --tag-size e --no-wipe possono essere usate solamente per azioni di formattazione.\n" + +#: src/integritysetup.c:661 +msgid "Invalid journal size specification." +msgstr "Specifica di dimensione del journal non valida." + +#: src/integritysetup.c:666 +msgid "Both key file and key size options must be specified." +msgstr "Devono essere specificate entrambe le opzioni file della chiave e dimensione delle chiave." + +#: src/integritysetup.c:669 +msgid "Integrity algorithm must be specified if integrity key is used." +msgstr "L'algoritmo di integrità deve essere specificato se viene usata la chiave di integrità." + +#: src/integritysetup.c:674 +msgid "Both journal integrity key file and key size options must be specified." +msgstr "Devono essere specificate entrambe le opzioni file della chiave e dimensione della chiave di integrità del journal." + +#: src/integritysetup.c:677 +msgid "Journal integrity algorithm must be specified if journal integrity key is used." +msgstr "L'algoritmo di integrità del journal deve essere specificato se viene usata la chiave di integrità del journal." + +#: src/integritysetup.c:682 +msgid "Both journal encryption key file and key size options must be specified." +msgstr "Devono essere specificate entrambe le opzioni file della chiave e dimensione della chiave di cifratura del journal." + +#: src/integritysetup.c:685 +msgid "Journal encryption algorithm must be specified if journal encryption key is used." +msgstr "L'algoritmo di cifratura del journal deve essere specificato se viene usata la chiave di cifratura del journal." + +#: src/integritysetup.c:689 +#, fuzzy +msgid "Recovery and bitmap mode options are mutually exclusive." +msgstr "" +"Solo un'opzione tra --refresh e --test-passphrase può essere usata.\n" +"\n" + +#: src/integritysetup.c:693 +msgid "Journal options cannot be used in bitmap mode." +msgstr "" + +#: src/integritysetup.c:697 +#, fuzzy +msgid "Bitmap options can be used only in bitmap mode." +msgstr "L'opzione di integrità può essere usata solo col formato LUKS2." + +#: src/cryptsetup_reencrypt.c:172 +msgid "Reencryption already in-progress." +msgstr "Re-cifratura in corso." + +#: src/cryptsetup_reencrypt.c:201 +#, c-format +msgid "Cannot exclusively open %s, device in use." +msgstr "Impossibile aprire esclusivamente il dispositivo %s, già in uso." + +#: src/cryptsetup_reencrypt.c:215 src/cryptsetup_reencrypt.c:1127 +msgid "Allocation of aligned memory failed." +msgstr "Allocazione di memoria allineata non riuscita." + +#: src/cryptsetup_reencrypt.c:222 +#, c-format +msgid "Cannot read device %s." +msgstr "Impossibile leggere il dispositivo %s." + +#: src/cryptsetup_reencrypt.c:233 +#, c-format +msgid "Marking LUKS1 device %s unusable." +msgstr "Impostazione dispositivo LUKS %s come inutilizzabile." + +#: src/cryptsetup_reencrypt.c:237 +#, c-format +msgid "Setting LUKS2 offline reencrypt flag on device %s." +msgstr "Impostazione flag re-cifratura offline LUKS2 sul dispositivo %s." + +#: src/cryptsetup_reencrypt.c:254 +#, c-format +msgid "Cannot write device %s." +msgstr "Impossibile scrivere il dispositivo %s." + +#: src/cryptsetup_reencrypt.c:302 +msgid "Cannot write reencryption log file." +msgstr "Impossibile scrivere il file di registro di re-cifratura." + +#: src/cryptsetup_reencrypt.c:358 +msgid "Cannot read reencryption log file." +msgstr "Impossibile leggere il file di registro di re-cifratura." + +#: src/cryptsetup_reencrypt.c:396 +#, c-format +msgid "Log file %s exists, resuming reencryption.\n" +msgstr "Il file di registro %s esiste, viene ripristinata la re-cifratura.\n" + +#: src/cryptsetup_reencrypt.c:445 +msgid "Activating temporary device using old LUKS header." +msgstr "Attivazione dispositivo temporaneo usando il vecchio header LUKS." + +#: src/cryptsetup_reencrypt.c:455 +msgid "Activating temporary device using new LUKS header." +msgstr "Attivazione dispositivo temporaneo usando il nuovo header LUKS." + +#: src/cryptsetup_reencrypt.c:465 +msgid "Activation of temporary devices failed." +msgstr "Attivazione del dispositivo temporaneo non riuscita." + +#: src/cryptsetup_reencrypt.c:551 +msgid "Failed to set data offset." +msgstr "Impostazione offset dei dati non riuscita." + +#: src/cryptsetup_reencrypt.c:557 +#, fuzzy +msgid "Failed to set metadata size." +msgstr "Impostazione offset dei dati non riuscita." + +#: src/cryptsetup_reencrypt.c:565 +#, c-format +msgid "New LUKS header for device %s created." +msgstr "Creato nuovo header LUKS per il dispositivo %s." + +#: src/cryptsetup_reencrypt.c:625 +#, c-format +msgid "This version of cryptsetup-reencrypt can't handle new internal token type %s." +msgstr "Questa versione di cryptsetup-reencrypt non può gestire token interni di tipo %s." + +#: src/cryptsetup_reencrypt.c:647 +msgid "Failed to read activation flags from backup header." +msgstr "Lettura dei flag di attivazione dall'header di backup non riuscita." + +#: src/cryptsetup_reencrypt.c:651 +msgid "Failed to write activation flags to new header." +msgstr "Scrittura dei flag di attivazione sul nuovo header non riuscita." + +#: src/cryptsetup_reencrypt.c:655 src/cryptsetup_reencrypt.c:659 +msgid "Failed to read requirements from backup header." +msgstr "Lettura dei requisiti dall'header di backup non riuscita." + +#: src/cryptsetup_reencrypt.c:697 +#, c-format +msgid "%s header backup of device %s created." +msgstr "Header %s di backup del dispositivo %s creato." + +#: src/cryptsetup_reencrypt.c:760 +msgid "Creation of LUKS backup headers failed." +msgstr "Creazione degli header di backup LUKS non riuscita." + +#: src/cryptsetup_reencrypt.c:893 +#, c-format +msgid "Cannot restore %s header on device %s." +msgstr "Impossibile ripristinare l'header %s sul dispositivo %s." + +#: src/cryptsetup_reencrypt.c:895 +#, c-format +msgid "%s header on device %s restored." +msgstr "Ripristinato l'header %s sul dispositivo %s." + +#: src/cryptsetup_reencrypt.c:1099 src/cryptsetup_reencrypt.c:1105 +msgid "Cannot open temporary LUKS device." +msgstr "Impossibile aprire il dispositivo temporaneo LUKS." + +#: src/cryptsetup_reencrypt.c:1110 src/cryptsetup_reencrypt.c:1115 +msgid "Cannot get device size." +msgstr "Impossibile ottenere la dimensione del dispositivo." + +#: src/cryptsetup_reencrypt.c:1150 +msgid "IO error during reencryption." +msgstr "Errore di IO durante la re-cifratura." + +#: src/cryptsetup_reencrypt.c:1181 +msgid "Provided UUID is invalid." +msgstr "Lo UUID fornito non è valido." + +#: src/cryptsetup_reencrypt.c:1407 +msgid "Cannot open reencryption log file." +msgstr "Impossibile aprire il file di registro di re-cifratura." + +#: src/cryptsetup_reencrypt.c:1413 +msgid "No decryption in progress, provided UUID can be used only to resume suspended decryption process." +msgstr "Nessuna decifrazione in corso: lo UUID fornito può essere usato solamente per riprendere un processo di decifrazione." + +#: src/cryptsetup_reencrypt.c:1488 +#, c-format +msgid "Changed pbkdf parameters in keyslot %i." +msgstr "Parametri pbkdf modificati nello slot di chiave %i." + +#: src/cryptsetup_reencrypt.c:1600 +msgid "Reencryption block size" +msgstr "Dimensione blocco re-cifratura" + +#: src/cryptsetup_reencrypt.c:1600 +msgid "MiB" +msgstr "MiB" + +#: src/cryptsetup_reencrypt.c:1604 +msgid "Do not change key, no data area reencryption" +msgstr "Non cambia chiave, nessuna re-cifratura dei dati" + +#: src/cryptsetup_reencrypt.c:1606 +msgid "Read new volume (master) key from file" +msgstr "Legge la chiave (master) del volume da file" + +#: src/cryptsetup_reencrypt.c:1607 +msgid "PBKDF2 iteration time for LUKS (in ms)" +msgstr "Tempo di iterazione di PBKDF2 per LUKS (in ms)" + +#: src/cryptsetup_reencrypt.c:1613 +msgid "Use direct-io when accessing devices" +msgstr "Usa IO diretto negli accessi ai dispositivi" + +#: src/cryptsetup_reencrypt.c:1614 +msgid "Use fsync after each block" +msgstr "Usa fsync dopo ogni blocco" + +#: src/cryptsetup_reencrypt.c:1615 +msgid "Update log file after every block" +msgstr "Aggiorna il registro a ogni blocco" + +#: src/cryptsetup_reencrypt.c:1616 +msgid "Use only this slot (others will be disabled)" +msgstr "Usa solo questo slot (gli altri vengono disabilitati)" + +#: src/cryptsetup_reencrypt.c:1621 +msgid "Create new header on not encrypted device" +msgstr "Crea un nuovo header su un dispositivo non cifrato" + +#: src/cryptsetup_reencrypt.c:1622 +msgid "Permanently decrypt device (remove encryption)" +msgstr "Decifra definitivamente il dispositivo (rimuove la cifratura)" + +#: src/cryptsetup_reencrypt.c:1623 +msgid "The UUID used to resume decryption" +msgstr "Lo UUID utilizzato per riprendere la decifrazione" + +#: src/cryptsetup_reencrypt.c:1624 +msgid "Type of LUKS metadata: luks1, luks2" +msgstr "Metadati di tipo LUKS: luks1, luks2" + +#: src/cryptsetup_reencrypt.c:1643 +msgid "[OPTION...] " +msgstr "[OPZIONI...] " + +#: src/cryptsetup_reencrypt.c:1651 +#, c-format +msgid "Reencryption will change: %s%s%s%s%s%s." +msgstr "La re-cifratura modificherà: %s%s%s%s%s%s." + +#: src/cryptsetup_reencrypt.c:1652 +msgid "volume key" +msgstr "chiave volume" + +#: src/cryptsetup_reencrypt.c:1654 +msgid "set hash to " +msgstr "imposta l'hash a " + +#: src/cryptsetup_reencrypt.c:1655 +msgid ", set cipher to " +msgstr ", imposta il cifrario a " + +#: src/cryptsetup_reencrypt.c:1659 +msgid "Argument required." +msgstr "Argomento richiesto." + +#: src/cryptsetup_reencrypt.c:1687 +msgid "Only values between 1 MiB and 64 MiB allowed for reencryption block size." +msgstr "Solo valori tra 1 MiB e 64 MiB sono consentiti per la dimensione del blocco di re-cifratura." + +#: src/cryptsetup_reencrypt.c:1714 +msgid "Maximum device reduce size is 64 MiB." +msgstr "La dimensione massima di riduzione del dispositivo è 64 MiB." + +#: src/cryptsetup_reencrypt.c:1721 +msgid "Option --new must be used together with --reduce-device-size or --header." +msgstr "L'opzione --new deve essere usata con --reduce-device-size o --header." + +#: src/cryptsetup_reencrypt.c:1725 +msgid "Option --keep-key can be used only with --hash, --iter-time or --pbkdf-force-iterations." +msgstr "L'opzione --keep-key può essere usata solo con --hash, --iter-time --pbkdf-force-iterations." + +#: src/cryptsetup_reencrypt.c:1729 +msgid "Option --new cannot be used together with --decrypt." +msgstr "L'opzione --new non può essere usata con --decrypt." + +#: src/cryptsetup_reencrypt.c:1733 +msgid "Option --decrypt is incompatible with specified parameters." +msgstr "L'opzione --decrypt non è compatibile con i parametri specificati." + +#: src/cryptsetup_reencrypt.c:1737 +msgid "Option --uuid is allowed only together with --decrypt." +msgstr "L'opzione --uuid può essere usata solo con --decrypt." + +#: src/cryptsetup_reencrypt.c:1741 +msgid "Invalid luks type. Use one of these: 'luks', 'luks1' or 'luks2'." +msgstr "Tipo luks non valido. Usare uno tra: \"luks\", \"luks1\" o \"luks2\"." + +#: src/utils_tools.c:151 +msgid "Error reading response from terminal." +msgstr "Errore nel leggere la risposta dal terminale." + +#: src/utils_tools.c:186 +msgid "Command successful.\n" +msgstr "Comando eseguito con successo.\n" + +#: src/utils_tools.c:194 +msgid "wrong or missing parameters" +msgstr "parametri errati o mancanti" + +#: src/utils_tools.c:196 +msgid "no permission or bad passphrase" +msgstr "permessi mancanti o passphrase errata" + +#: src/utils_tools.c:198 +msgid "out of memory" +msgstr "memoria esaurita" + +#: src/utils_tools.c:200 +msgid "wrong device or file specified" +msgstr "dispositivo o file specificato errato" + +#: src/utils_tools.c:202 +msgid "device already exists or device is busy" +msgstr "il dispositivo esiste già o è occupato" + +#: src/utils_tools.c:204 +msgid "unknown error" +msgstr "errore sconosciuto" + +#: src/utils_tools.c:206 +#, c-format +msgid "Command failed with code %i (%s).\n" +msgstr "Comando non riuscito con codice %i (%s).\n" + +#: src/utils_tools.c:283 +#, c-format +msgid "Key slot %i created." +msgstr "Slot di chiave %i creato." + +#: src/utils_tools.c:285 +#, c-format +msgid "Key slot %i unlocked." +msgstr "Slot di chiave %i sbloccato." + +#: src/utils_tools.c:287 +#, c-format +msgid "Key slot %i removed." +msgstr "Slot di chiave %i rimosso." + +#: src/utils_tools.c:296 +#, c-format +msgid "Token %i created." +msgstr "Token %i creato." + +#: src/utils_tools.c:298 +#, c-format +msgid "Token %i removed." +msgstr "Token %i rimosso." + +#: src/utils_tools.c:464 +#, fuzzy +msgid "" +"\n" +"Wipe interrupted." +msgstr "" +"\n" +"Scrittura interrotta." + +#: src/utils_tools.c:475 +#, c-format +msgid "WARNING: Device %s already contains a '%s' partition signature.\n" +msgstr "Attenzione: il dispositivo %s contiene già una firma di partizione «%s».\n" + +#: src/utils_tools.c:483 +#, c-format +msgid "WARNING: Device %s already contains a '%s' superblock signature.\n" +msgstr "Attenzione: il dispositivo %s contiene già una firma di super-blocco «%s».\n" + +#: src/utils_tools.c:504 src/utils_tools.c:568 +msgid "Failed to initialize device signature probes." +msgstr "Inizializzazione sonde per la firma del dispositivo non riuscita." + +#: src/utils_tools.c:548 +#, c-format +msgid "Failed to stat device %s." +msgstr "Stat del dispositivo %s non riuscita." + +#: src/utils_tools.c:561 +#, c-format +msgid "Device %s is in use. Can not proceed with format operation." +msgstr "Il dispositivo %s è in uso. Impossibile procedere con l'operazione di formattazione." + +#: src/utils_tools.c:563 +#, c-format +msgid "Failed to open file %s in read/write mode." +msgstr "Apertura del file %s in lettura/scrittura non riuscita." + +#: src/utils_tools.c:577 +#, c-format +msgid "Existing '%s' partition signature (offset: % bytes) on device %s will be wiped." +msgstr "" + +#: src/utils_tools.c:580 +#, c-format +msgid "Existing '%s' superblock signature (offset: % bytes) on device %s will be wiped." +msgstr "" + +#: src/utils_tools.c:583 +msgid "Failed to wipe device signature." +msgstr "Pulizia della firma del dispositivo non riuscita." + +#: src/utils_tools.c:590 +#, c-format +msgid "Failed to probe device %s for a signature." +msgstr "Esame del dispositivo %s per una firma non riuscito." + +#: src/utils_tools.c:629 +#, fuzzy +msgid "" +"\n" +"Reencryption interrupted." +msgstr "" +"\n" +"Lettura interrotta." + +#: src/utils_password.c:43 src/utils_password.c:75 +#, c-format +msgid "Cannot check password quality: %s" +msgstr "Impossibile controllare la qualità della password: %s" + +#: src/utils_password.c:51 +#, c-format +msgid "" +"Password quality check failed:\n" +" %s" +msgstr "" +"Controllo qualità della password non riuscito:\n" +" %s" + +#: src/utils_password.c:83 +#, c-format +msgid "Password quality check failed: Bad passphrase (%s)" +msgstr "Controllo qualità della password non riuscito: passphrase non valida (%s)" + +#: src/utils_password.c:193 src/utils_password.c:208 +msgid "Error reading passphrase from terminal." +msgstr "Errore nel leggere la passphrase dal terminale." + +#: src/utils_password.c:206 +msgid "Verify passphrase: " +msgstr "Verifica passphrase: " + +#: src/utils_password.c:213 +msgid "Passphrases do not match." +msgstr "Le passphrase non corrispondono." + +#: src/utils_password.c:250 +msgid "Cannot use offset with terminal input." +msgstr "Impossibile usare l'offset con l'input da terminale." + +#: src/utils_password.c:253 +#, c-format +msgid "Enter passphrase: " +msgstr "Inserire la passphrase: " + +#: src/utils_password.c:256 +#, c-format +msgid "Enter passphrase for %s: " +msgstr "Inserire la passphrase per %s: " + +#: src/utils_password.c:287 +msgid "No key available with this passphrase." +msgstr "Nessuna chiave disponibile con questa passphrase." + +#: src/utils_password.c:289 +msgid "No usable keyslot is available." +msgstr "" + +#: src/utils_password.c:328 +#, c-format +msgid "Cannot open keyfile %s for write." +msgstr "Impossibile aprire il file chiave %s per la scrittura." + +#: src/utils_password.c:335 +#, c-format +msgid "Cannot write to keyfile %s." +msgstr "Impossibile scrivere sul file chiave %s." + +#: src/utils_luks2.c:47 +#, c-format +msgid "Failed to open file %s in read-only mode." +msgstr "Apertura del file %s in sola lettura non riuscita." + +#: src/utils_luks2.c:60 +msgid "Provide valid LUKS2 token JSON:\n" +msgstr "Fornire token JSON LUKS2 valido:\n" + +#: src/utils_luks2.c:67 +msgid "Failed to read JSON file." +msgstr "Lettura file JSON non riuscita." + +#: src/utils_luks2.c:72 +msgid "" +"\n" +"Read interrupted." +msgstr "" +"\n" +"Lettura interrotta." + +#: src/utils_luks2.c:113 +#, c-format +msgid "Failed to open file %s in write mode." +msgstr "Apertura del file %s in lettura non riuscita." + +#: src/utils_luks2.c:122 +msgid "" +"\n" +"Write interrupted." +msgstr "" +"\n" +"Scrittura interrotta." + +#: src/utils_luks2.c:126 +msgid "Failed to write JSON file." +msgstr "Scrittura file JSON non riuscita." + +#~ msgid "Requested dmcrypt performance options are not supported." +#~ msgstr "Le opzioni di prestazioni richieste per dmcrypt non sono supportate." + +#~ msgid "Cannot format device %s which is still in use." +#~ msgstr "Impossibile formattare il dispositivo %s che risulta ancora in uso." + +#~ msgid "Key slot %d is not used." +#~ msgstr "Lo slot di chiave %d non è utilizzato." + +#~ msgid "Function not available in FIPS mode." +#~ msgstr "Funzione non disponibile in modalità FIPS." + +#~ msgid "Key slot %d selected for deletion." +#~ msgstr "Slot di chiave %d selezionato per l'eliminazione." + +#~ msgid "open device as mapping " +#~ msgstr "Apre il dispositivo come mappatura in " + +#~ msgid "close device (deactivate and remove mapping)" +#~ msgstr "Chiude il dispositivo (disattiva e rimuove la mappatura)" + +#~ msgid "Failed to set PBKDF parameters." +#~ msgstr "Impostazione parametri PBKDF non riuscita." + +#~ msgid "Cannot seek to device offset.\n" +#~ msgstr "Impossibile posizionarsi all'offset del dispositivo.\n" + +#~ msgid "Interrupted by a signal." +#~ msgstr "Interrotto da un segnale." + +#~ msgid "Device %s is too small. (LUKS2 requires at least % bytes.)" +#~ msgstr "Il dispositivo %s è troppo piccolo (LUKS2 richiede almeno % byte)." + +#~ msgid "Replaced with key slot %d.\n" +#~ msgstr "Sostituito con lo slot di chiave %d.\n" + +#~ msgid "Too many tree levels for verity volume.\n" +#~ msgstr "Troppi livelli d'albero per il volume verity.\n" + +#~ msgid "memory allocation error in action_luksFormat" +#~ msgstr "errore di allocazione di memoria in action_luksFormat" + +#~ msgid "Key %d not active. Can't wipe.\n" +#~ msgstr "Chiave %d non attiva. Impossibile ripulirla.\n" + +#~ msgid " " +#~ msgstr " " + +#~ msgid "create active device" +#~ msgstr "Crea dispositivo attivo" + +#~ msgid "remove (deactivate) device" +#~ msgstr "Rimuove (disattiva) dispositivo" + +#~ msgid "Activated keyslot %i.\n" +#~ msgstr "Slot di chiave %i attivato.\n" + +#~ msgid "Progress: %5.1f%%, ETA %02llu:%02llu, %4llu MiB written, speed %5.1f MiB/s%s" +#~ msgstr "Avanzamento: %5.1f%%, ETA %02llu:%02llu, %4llu MiB scritti, velocità %5.1f MiB/s%s" + +#~ msgid "Cannot find a free loopback device.\n" +#~ msgstr "Impossibile trovare un dispositivo di loopback libero.\n" + +#~ msgid "Cannot open device %s\n" +#~ msgstr "Impossibile aprire il dispositivo %s\n" + +#~ msgid "Cannot use passed UUID unless decryption in progress.\n" +#~ msgstr "Impossibile utilizzare lo UUID fornito se non è in corso una decifratura.\n" + +#~ msgid "Marking LUKS device %s usable.\n" +#~ msgstr "Impostazione device LUKS %s come utilizzabile.\n" diff --git a/po/ja.gmo b/po/ja.gmo new file mode 100644 index 0000000000000000000000000000000000000000..e6c3c290f49bd0759705ae6042996a3b967fb594 GIT binary patch literal 111927 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, , 2019 +# +msgid "" +msgstr "" +"Project-Id-Version: cryptsetup 2.2.2-rc0\n" +"Report-Msgid-Bugs-To: dm-crypt@saout.de\n" +"POT-Creation-Date: 2019-11-01 09:04+0100\n" +"PO-Revision-Date: 2019-10-18 20:10+0900\n" +"Last-Translator: Hiroshi Takekawa \n" +"Language-Team: Japanese \n" +"Language: ja\n" +"MIME-Version: 1.0\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" + +#: lib/libdevmapper.c:384 +msgid "Cannot initialize device-mapper, running as non-root user." +msgstr "device-mapper を初期化できません、non-root で実行します。" + +#: lib/libdevmapper.c:387 +msgid "Cannot initialize device-mapper. Is dm_mod kernel module loaded?" +msgstr "device-mapper を初期化できません。dm_mod モジュールはロードされてますか?" + +#: lib/libdevmapper.c:1082 +msgid "Requested deferred flag is not supported." +msgstr "指定された延期フラグはサポートされていません。" + +#: lib/libdevmapper.c:1149 +#, c-format +msgid "DM-UUID for device %s was truncated." +msgstr "デバイス %s の DM-UUID は短縮されています。" + +#: lib/libdevmapper.c:1463 +msgid "Unknown dm target type." +msgstr "不明な dm target タイプです。" + +#: lib/libdevmapper.c:1565 lib/libdevmapper.c:1617 +msgid "Requested dm-crypt performance options are not supported." +msgstr "指定された dm-crypt パフォーマンスオプションはサポートされていません。" + +#: lib/libdevmapper.c:1572 +msgid "Requested dm-verity data corruption handling options are not supported." +msgstr "指定された dm-verity のデータ破壊時の対応についてのオプションはサポートされていません。" + +#: lib/libdevmapper.c:1576 +msgid "Requested dm-verity FEC options are not supported." +msgstr "指定された dm-verity の誤り訂正(FEC)オプションはサポートされていません。" + +#: lib/libdevmapper.c:1580 +msgid "Requested data integrity options are not supported." +msgstr "指定されたデータの無改ざん確認のオプションはサポートされていません。" + +#: lib/libdevmapper.c:1582 +msgid "Requested sector_size option is not supported." +msgstr "指定された sector_size オプションはサポートされていません。" + +#: lib/libdevmapper.c:1587 +msgid "Requested automatic recalculation of integrity tags is not supported." +msgstr "指定された改ざん確認タグの自動再計算はサポートされていません。" + +#: lib/libdevmapper.c:1591 +msgid "Requested dm-integrity bitmap mode is not supported." +msgstr "要求された dm-integrity のビットマップモードはサポートされていません。" + +#: lib/libdevmapper.c:1620 +msgid "Discard/TRIM is not supported." +msgstr "Discard/TRIM はサポートしていません。" + +#: lib/libdevmapper.c:2511 +#, c-format +msgid "Failed to query dm-%s segment." +msgstr "dm-%s のクエリーに失敗しました。" + +#: lib/random.c:80 +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" +msgstr "" +"ボリュームキーを生成するためのエントロピー(この文脈では乱数の乱れ度合)が足りません。\n" +"マウスを動かしたり、他のウィンドウで文字を入力したりしてみてください。\n" + +#: lib/random.c:84 +#, c-format +msgid "Generating key (%d%% done).\n" +msgstr "キー生成中 (%d%% 完了)。\n" + +#: lib/random.c:170 +msgid "Running in FIPS mode." +msgstr "FIPS モードで実行中。" + +#: lib/random.c:176 +msgid "Fatal error during RNG initialisation." +msgstr "RNG(乱数生成器)初期化中に重大なエラーが発生しました。" + +#: lib/random.c:213 +msgid "Unknown RNG quality requested." +msgstr "不明な RNG(乱数生成器) の質(quality)が要求されました。" + +#: lib/random.c:218 +msgid "Error reading from RNG." +msgstr "RNG(乱数生成器)から読み込み中にエラー。" + +#: lib/setup.c:223 +msgid "Cannot initialize crypto RNG backend." +msgstr "暗号向けRNG(乱数生成器)バックエンドの初期化ができません。" + +#: lib/setup.c:229 +msgid "Cannot initialize crypto backend." +msgstr "暗号バックエンドの初期化ができません。" + +#: lib/setup.c:260 lib/setup.c:1990 lib/verity/verity.c:120 +#, c-format +msgid "Hash algorithm %s not supported." +msgstr "ハッシュアルゴリズム %s がサポートされていません。" + +#: lib/setup.c:263 lib/loopaes/loopaes.c:90 +#, c-format +msgid "Key processing error (using hash %s)." +msgstr "鍵の処理でエラー (ハッシュ %s を使用)。" + +#: lib/setup.c:324 lib/setup.c:351 +msgid "Cannot determine device type. Incompatible activation of device?" +msgstr "デバイスタイプがわかりません。互換性のないデバイスのアクティベーションをしようとしていませんか?" + +#: lib/setup.c:330 lib/setup.c:2985 +msgid "This operation is supported only for LUKS device." +msgstr "この操作は LUKS デバイスでしかサポートされていません。" + +#: lib/setup.c:357 +msgid "This operation is supported only for LUKS2 device." +msgstr "この操作は LUKS2 デバイスでしかサポートされていません。" + +#: lib/setup.c:412 lib/luks2/luks2_reencrypt.c:2345 +msgid "All key slots full." +msgstr "キースロットがいっぱいです。" + +#: lib/setup.c:423 +#, c-format +msgid "Key slot %d is invalid, please select between 0 and %d." +msgstr "キースロット %d は不正です。0 から %d の間を選んでください。" + +#: lib/setup.c:429 +#, c-format +msgid "Key slot %d is full, please select another one." +msgstr "キースロット %d は使われています。別の番号を選んでください。" + +#: lib/setup.c:514 lib/setup.c:2759 +msgid "Device size is not aligned to device logical block size." +msgstr "デバイスサイズが論理ブロックサイズのアライメントに合いません。" + +#: lib/setup.c:610 +#, c-format +msgid "Header detected but device %s is too small." +msgstr "ヘッダが検出されましたがデバイス %s が小さすぎます。" + +#: lib/setup.c:647 +msgid "This operation is not supported for this device type." +msgstr "この操作はこのデバイスタイプではサポートされていません。" + +#: lib/setup.c:652 +msgid "Illegal operation with reencryption in-progress." +msgstr "オフラインでの再暗号化中です。中止します。" + +#: lib/setup.c:821 lib/luks1/keymanage.c:476 +#, c-format +msgid "Unsupported LUKS version %d." +msgstr "LUKS バージョン %d はサポートされていません。" + +#: lib/setup.c:838 lib/setup.c:1483 lib/setup.c:1903 +msgid "Detached metadata device is not supported for this crypt type." +msgstr "分離したメタデータデバイスはこの暗号タイプではサポートされていません。" + +#: lib/setup.c:1373 lib/setup.c:2479 lib/setup.c:2551 lib/setup.c:2563 +#: lib/setup.c:2712 lib/setup.c:4310 +#, c-format +msgid "Device %s is not active." +msgstr "デバイス %s はアクティブではありません。" + +#: lib/setup.c:1390 +#, c-format +msgid "Underlying device for crypt device %s disappeared." +msgstr "暗号化されたデバイス %s の元になるデバイスが消滅しました。" + +#: lib/setup.c:1468 +msgid "Invalid plain crypt parameters." +msgstr "不正な plain crypt のパラメータ。" + +#: lib/setup.c:1473 lib/setup.c:1893 src/integritysetup.c:73 +msgid "Invalid key size." +msgstr "不正なキーサイズ。" + +#: lib/setup.c:1478 lib/setup.c:1898 lib/setup.c:2100 +msgid "UUID is not supported for this crypt type." +msgstr "UUID はこの暗号タイプではサポートされていません。" + +#: lib/setup.c:1493 lib/setup.c:1683 lib/luks2/luks2_reencrypt.c:2308 +#: src/cryptsetup.c:1169 +msgid "Unsupported encryption sector size." +msgstr "サポートされていない暗号化セクタサイズです。" + +#: lib/setup.c:1501 lib/setup.c:1808 lib/setup.c:2753 +msgid "Device size is not aligned to requested sector size." +msgstr "デバイスサイズが要求されたセクタサイズのアライメントに合いません。" + +#: lib/setup.c:1552 lib/setup.c:1671 +msgid "Can't format LUKS without device." +msgstr "デバイスなしには LUKS 形式にフォーマットできません。" + +#: lib/setup.c:1558 lib/setup.c:1677 +msgid "Requested data alignment is not compatible with data offset." +msgstr "要求されたデータアライメントとデータオフセットが合いません。" + +#: lib/setup.c:1626 lib/setup.c:1795 +msgid "WARNING: Data offset is outside of currently available data device.\n" +msgstr "警告: データオフセットが現在利用可能なデータの外にあります。\n" + +#: lib/setup.c:1636 lib/setup.c:1823 lib/setup.c:1844 lib/setup.c:2112 +#, c-format +msgid "Cannot wipe header on device %s." +msgstr "デバイス %s のヘッダを消し去れません。" + +#: lib/setup.c:1688 +msgid "WARNING: The device activation will fail, dm-crypt is missing support for requested encryption sector size.\n" +msgstr "警告: デバイスアクティベーションが失敗しました。dm-crypt が要求された暗号セクタサイズをサポートしていません。\n" + +#: lib/setup.c:1710 +msgid "Volume key is too small for encryption with integrity extensions." +msgstr "ボリュームキーは改ざん耐性拡張のため暗号には鍵長が小さすぎます。" + +#: lib/setup.c:1765 +#, c-format +msgid "Cipher %s-%s (key size %zd bits) is not available." +msgstr "暗号 %s-%s (キーサイズ %zd ビット) は利用できません。" + +#: lib/setup.c:1798 +#, c-format +msgid "WARNING: LUKS2 metadata size changed to % bytes.\n" +msgstr "警告: LUKS2 メタデータサイズが % バイトに変更されました。\n" + +#: lib/setup.c:1802 +#, c-format +msgid "WARNING: LUKS2 keyslots area size changed to % bytes.\n" +msgstr "警告: LUKS2 キースロット領域サイズが % バイトに変更されました。\n" + +#: lib/setup.c:1826 lib/utils_device.c:829 lib/luks1/keyencryption.c:256 +#: lib/luks2/luks2_reencrypt.c:2356 lib/luks2/luks2_reencrypt.c:3348 +#, c-format +msgid "Device %s is too small." +msgstr "デバイス %s のサイズが小さすぎます。" + +#: lib/setup.c:1837 lib/setup.c:1863 +#, c-format +msgid "Cannot format device %s in use." +msgstr "デバイス %s は使用中のためフォーマットできません。" + +#: lib/setup.c:1840 lib/setup.c:1866 +#, c-format +msgid "Cannot format device %s, permission denied." +msgstr "デバイス %s は権限がないためフォーマットできません。" + +#: lib/setup.c:1852 lib/setup.c:2164 +#, c-format +msgid "Cannot format integrity for device %s." +msgstr "デバイス %s を改ざん耐性がつくようフォーマットできません。" + +#: lib/setup.c:1870 +#, c-format +msgid "Cannot format device %s." +msgstr "デバイス %s をフォーマットできません。" + +#: lib/setup.c:1888 +msgid "Can't format LOOPAES without device." +msgstr "LOOPAES としてフォーマットするにはデバイスが必要です。" + +#: lib/setup.c:1933 +msgid "Can't format VERITY without device." +msgstr "VERITY としてフォーマットするにはデバイスが必要です。" + +#: lib/setup.c:1944 lib/verity/verity.c:103 +#, c-format +msgid "Unsupported VERITY hash type %d." +msgstr "VERITY ハッシュタイプ %d はサポートしていません。" + +#: lib/setup.c:1950 lib/verity/verity.c:111 +msgid "Unsupported VERITY block size." +msgstr "サポートしていない VERITY ブロックサイズです。" + +#: lib/setup.c:1955 lib/verity/verity.c:75 +msgid "Unsupported VERITY hash offset." +msgstr "サポートしていない VERITY ハッシュオフセットです。" + +#: lib/setup.c:1960 +msgid "Unsupported VERITY FEC offset." +msgstr "サポートしていない VERITY FEC オフセットです。" + +#: lib/setup.c:1984 +msgid "Data area overlaps with hash area." +msgstr "データ領域がハッシュ領域と重なっています。" + +#: lib/setup.c:2009 +msgid "Hash area overlaps with FEC area." +msgstr "ハッシュ領域が FEC 領域と重なっています。" + +#: lib/setup.c:2016 +msgid "Data area overlaps with FEC area." +msgstr "データ領域が FEC 領域と重なっています。" + +#: lib/setup.c:2221 +#, c-format +msgid "Unknown crypt device type %s requested." +msgstr "不明な暗号デバイスタイプ %s が指定されました。" + +#: lib/setup.c:2485 lib/setup.c:2557 lib/setup.c:2570 +#, c-format +msgid "Unsupported parameters on device %s." +msgstr "デバイス %s のパラメータはサポートしていません。" + +#: lib/setup.c:2491 lib/setup.c:2576 lib/luks2/luks2_reencrypt.c:2408 +#: lib/luks2/luks2_reencrypt.c:2718 +#, c-format +msgid "Mismatching parameters on device %s." +msgstr "デバイス %s のパラメータがミスマッチしています。" + +#: lib/setup.c:2596 +msgid "Crypt devices mismatch." +msgstr "Crypt デバイスが一致しません。" + +#: lib/setup.c:2633 lib/setup.c:2638 lib/luks2/luks2_reencrypt.c:2054 +#: lib/luks2/luks2_reencrypt.c:3126 +#, c-format +msgid "Failed to reload device %s." +msgstr "デバイス %s のリロードに失敗しました。" + +#: lib/setup.c:2643 lib/setup.c:2648 lib/luks2/luks2_reencrypt.c:2025 +#: lib/luks2/luks2_reencrypt.c:2032 +#, c-format +msgid "Failed to suspend device %s." +msgstr "デバイス %s のサスペンドに失敗しました。" + +#: lib/setup.c:2653 lib/luks2/luks2_reencrypt.c:2039 +#: lib/luks2/luks2_reencrypt.c:3061 lib/luks2/luks2_reencrypt.c:3130 +#, c-format +msgid "Failed to resume device %s." +msgstr "デバイス %s のリジュームに失敗しました。" + +#: lib/setup.c:2667 +#, c-format +msgid "Fatal error while reloading device %s (on top of device %s)." +msgstr "デバイス %s のリロード中に致命的なエラー(デバイス %s の上で)。" + +#: lib/setup.c:2670 lib/setup.c:2672 +#, c-format +msgid "Failed to switch device %s to dm-error." +msgstr "デバイス %s を dm-error にスイッチできません。" + +#: lib/setup.c:2744 +msgid "Cannot resize loop device." +msgstr "ループデバイスはリサイズできません。" + +#: lib/setup.c:2817 +msgid "Do you really want to change UUID of device?" +msgstr "デバイスの UUID を本当に変更してもいいですか?" + +#: lib/setup.c:2893 +msgid "Header backup file does not contain compatible LUKS header." +msgstr "ヘッダのバックアップファイルの中味が LUKS ヘッダと互換性がありません。" + +#: lib/setup.c:2993 +#, c-format +msgid "Volume %s is not active." +msgstr "ボリューム %s はアクティブではありません。" + +#: lib/setup.c:3004 +#, c-format +msgid "Volume %s is already suspended." +msgstr "ボリューム %s は既に停止されています。" + +#: lib/setup.c:3017 +#, c-format +msgid "Suspend is not supported for device %s." +msgstr "デバイス %s の停止はサポートされていません。" + +#: lib/setup.c:3019 +#, c-format +msgid "Error during suspending device %s." +msgstr "デバイス %s 停止中にエラー。" + +#: lib/setup.c:3052 lib/setup.c:3119 +#, c-format +msgid "Volume %s is not suspended." +msgstr "ボリューム %s は停止されていません。" + +#: lib/setup.c:3081 +#, c-format +msgid "Resume is not supported for device %s." +msgstr "デバイス %s は再開をサポートしていません。" + +#: lib/setup.c:3083 lib/setup.c:3151 +#, c-format +msgid "Error during resuming device %s." +msgstr "デバイス %s の再開中にエラー。" + +#: lib/setup.c:3219 lib/setup.c:3407 +msgid "Cannot add key slot, all slots disabled and no volume key provided." +msgstr "キースロットを追加できません。全てのスロットが無効でボリュームキーが渡されませんでした。" + +#: lib/setup.c:3359 +msgid "Failed to swap new key slot." +msgstr "新しいキースロットを交換できませんでした。" + +#: lib/setup.c:3524 lib/setup.c:4161 lib/setup.c:4174 lib/setup.c:4182 +#: lib/setup.c:4195 lib/setup.c:4480 lib/setup.c:5593 +msgid "Volume key does not match the volume." +msgstr "ボリュームキーがボリュームに合いません。" + +#: lib/setup.c:3545 +#, c-format +msgid "Key slot %d is invalid." +msgstr "キースロット %d は不正です。" + +#: lib/setup.c:3551 src/cryptsetup.c:1511 src/cryptsetup.c:1856 +#, c-format +msgid "Keyslot %d is not active." +msgstr "キースロット %d は非アクティブです。" + +#: lib/setup.c:3570 +msgid "Device header overlaps with data area." +msgstr "デバイスヘッダがデータ領域に重なっています。" + +#: lib/setup.c:3836 +msgid "Reencryption in-progress. Cannot activate device." +msgstr "既に再暗号化中です。デバイスをアクティベートできません。" + +#: lib/setup.c:3838 lib/luks2/luks2_json_metadata.c:2244 +#: lib/luks2/luks2_reencrypt.c:2817 +msgid "Failed to get reencryption lock." +msgstr "再暗号化ロックを取得できません。" + +#: lib/setup.c:3851 lib/luks2/luks2_reencrypt.c:2836 +msgid "LUKS2 reencryption recovery failed." +msgstr "LUKS2 の再暗号化は既に初期化されました。" + +#: lib/setup.c:3978 lib/setup.c:4248 +msgid "Device type is not properly initialised." +msgstr "デバイスタイプが正しく初期化されていません。" + +#: lib/setup.c:4022 +#, c-format +msgid "Cannot use device %s, name is invalid or still in use." +msgstr "デバイス %s を使えません。名前が不正か使用中です。" + +#: lib/setup.c:4025 +#, c-format +msgid "Device %s already exists." +msgstr "デバイス %s は既に存在します。" + +#: lib/setup.c:4148 +msgid "Incorrect volume key specified for plain device." +msgstr "正しくないボリュームキーがプレーンデバイスに指定されました。" + +#: lib/setup.c:4214 +msgid "Incorrect root hash specified for verity device." +msgstr "正しくないルートハッシュが verity デバイスに指定されました。" + +#: lib/setup.c:4289 lib/setup.c:4305 lib/luks2/luks2_json_metadata.c:2297 +#: src/cryptsetup.c:2527 +#, c-format +msgid "Device %s is still in use." +msgstr "デバイス %s は使用中です。" + +#: lib/setup.c:4314 +#, c-format +msgid "Invalid device %s." +msgstr "デバイス %s は不正です。" + +#: lib/setup.c:4430 +msgid "Volume key buffer too small." +msgstr "ボリュームキーのバッファが小さすぎます。" + +#: lib/setup.c:4438 +msgid "Cannot retrieve volume key for plain device." +msgstr "プレーンデバイス向けのボリュームキーが取得できません。" + +#: lib/setup.c:4449 +#, c-format +msgid "This operation is not supported for %s crypt device." +msgstr "この操作は %s 暗号化デバイスではサポートされていません。" + +#: lib/setup.c:4636 +msgid "Dump operation is not supported for this device type." +msgstr "このデバイスタイプはダンプ操作をサポートしていません。" + +#: lib/setup.c:4947 +#, c-format +msgid "Data offset is not multiple of %u bytes." +msgstr "データオフセットが %u バイトの倍数である必要があります。" + +#: lib/setup.c:5229 +#, c-format +msgid "Cannot convert device %s which is still in use." +msgstr "使用中のデバイス %s を変換できません。" + +#: lib/setup.c:5526 +#, c-format +msgid "Failed to assign keyslot %u as the new volume key." +msgstr "新しいボリュームキー向けのキースロット %u を確保できません。" + +#: lib/setup.c:5599 +msgid "Failed to initialise default LUKS2 keyslot parameters." +msgstr "デフォルト LUKS2 キースロットパラメータを初期化できません。" + +#: lib/setup.c:5605 +#, c-format +msgid "Failed to assign keyslot %d to digest." +msgstr "ダイジェストするためのキースロット %d が確保できません。" + +#: lib/setup.c:5690 +msgid "Failed to load key in kernel keyring." +msgstr "キーをカーネルキーリングにロードできません。" + +#: lib/setup.c:5757 +msgid "Kernel keyring is not supported by the kernel." +msgstr "カーネルがカーネルキーリングをサポートしていません。" + +#: lib/setup.c:5767 lib/luks2/luks2_reencrypt.c:2933 +#, c-format +msgid "Failed to read passphrase from keyring (error %d)." +msgstr "キーリングからパスフレーズが読み出せません (エラー %d)。" + +#: lib/setup.c:5791 +msgid "Failed to acquire global memory-hard access serialization lock." +msgstr "グローバル memory-hard アクセス直列化ロックが取れません。" + +#: lib/utils.c:81 +msgid "Cannot get process priority." +msgstr "プロセス優先度を取得できません。" + +#: lib/utils.c:95 +msgid "Cannot unlock memory." +msgstr "メモリをアンロックできません。" + +#: lib/utils.c:169 lib/tcrypt/tcrypt.c:498 +msgid "Failed to open key file." +msgstr "キーファイルがオープンできません。" + +#: lib/utils.c:174 +msgid "Cannot read keyfile from a terminal." +msgstr "ターミナルからキーファイルを読みこめません。" + +#: lib/utils.c:191 +msgid "Failed to stat key file." +msgstr "キーファイルを stat() できません。" + +#: lib/utils.c:199 lib/utils.c:220 +msgid "Cannot seek to requested keyfile offset." +msgstr "指定されたキーファイルオフセットにシークできません。" + +#: lib/utils.c:214 lib/utils.c:229 src/utils_password.c:188 +#: src/utils_password.c:201 +msgid "Out of memory while reading passphrase." +msgstr "パスフレーズ読み込み中にメモリが不足しました。" + +#: lib/utils.c:249 +msgid "Error reading passphrase." +msgstr "パスフレーズの読み込みでエラー。" + +#: lib/utils.c:266 +msgid "Nothing to read on input." +msgstr "読もうとしたら入力が空です。" + +#: lib/utils.c:273 +msgid "Maximum keyfile size exceeded." +msgstr "キーファイルが最大サイズを超えています。" + +#: lib/utils.c:278 +msgid "Cannot read requested amount of data." +msgstr "指定されたサイズのデータを読み込めません。" + +#: lib/utils_device.c:188 lib/utils_storage_wrappers.c:111 +#: lib/luks1/keyencryption.c:92 +#, c-format +msgid "Device %s doesn't exist or access denied." +msgstr "デバイス %s は存在しないかアクセスが拒否されました。" + +#: lib/utils_device.c:198 +#, c-format +msgid "Device %s is not compatible." +msgstr "デバイス %s は互換性がありません。" + +#: lib/utils_device.c:643 +#, c-format +msgid "Device %s is too small. Need at least % bytes." +msgstr "デバイス %s が小さすぎます。少なくとも % バイト必要です。" + +#: lib/utils_device.c:724 +#, c-format +msgid "Cannot use device %s which is in use (already mapped or mounted)." +msgstr "デバイス %s は使用中で使えません (既にマップされているかマウントされています)。" + +#: lib/utils_device.c:728 +#, c-format +msgid "Cannot use device %s, permission denied." +msgstr "デバイス %s が使えません、拒否されました。" + +#: lib/utils_device.c:731 +#, c-format +msgid "Cannot get info about device %s." +msgstr "デバイス %s についての情報が取得できません。" + +#: lib/utils_device.c:754 +msgid "Cannot use a loopback device, running as non-root user." +msgstr "ループバックデバイスが使えません、非 root ユーザで実行していませんか。" + +#: lib/utils_device.c:764 +msgid "Attaching loopback device failed (loop device with autoclear flag is required)." +msgstr "ループデバイスのアタッチできません (autoclear 付きのループデバイスが必要です)。" + +#: lib/utils_device.c:810 +#, c-format +msgid "Requested offset is beyond real size of device %s." +msgstr "指定されたオフセットはデバイス %s の実際のサイズを超えています。" + +#: lib/utils_device.c:818 +#, c-format +msgid "Device %s has zero size." +msgstr "デバイス %s のサイズが 0 です。" + +#: lib/utils_pbkdf.c:100 +msgid "Requested PBKDF target time cannot be zero." +msgstr "要求された PBKDF の目標時間は 0 ではいけません。" + +#: lib/utils_pbkdf.c:106 +#, c-format +msgid "Unknown PBKDF type %s." +msgstr "%s は不明な PBKDF タイプです。" + +#: lib/utils_pbkdf.c:111 +#, c-format +msgid "Requested hash %s is not supported." +msgstr "要求されたハッシュ %s はサポートしていません。" + +#: lib/utils_pbkdf.c:122 +msgid "Requested PBKDF type is not supported for LUKS1." +msgstr "要求された PBKDF タイプは LUKS1 ではサポートされていません。" + +#: lib/utils_pbkdf.c:128 +msgid "PBKDF max memory or parallel threads must not be set with pbkdf2." +msgstr "PBKDF の max memory や parallel threads は pbkdf2 の時は設定できません。" + +#: lib/utils_pbkdf.c:133 lib/utils_pbkdf.c:143 +#, c-format +msgid "Forced iteration count is too low for %s (minimum is %u)." +msgstr "%s について強制される最小繰り返し回数が小さすぎます (最小 %u)。" + +#: lib/utils_pbkdf.c:148 +#, c-format +msgid "Forced memory cost is too low for %s (minimum is %u kilobytes)." +msgstr "%s について強制されるメモリコストが小さすぎます (最小 %u KB)。" + +#: lib/utils_pbkdf.c:155 +#, c-format +msgid "Requested maximum PBKDF memory cost is too high (maximum is %d kilobytes)." +msgstr "指定された PBKDF メモリコストが大きすぎます (最大 %d KB)。" + +#: lib/utils_pbkdf.c:160 +msgid "Requested maximum PBKDF memory cannot be zero." +msgstr "PBKDF メモリは 0 ではいけません。" + +#: lib/utils_pbkdf.c:164 +msgid "Requested PBKDF parallel threads cannot be zero." +msgstr "要求された PBKDF 並列スレッド数は 0 ではいけません。" + +#: lib/utils_pbkdf.c:184 +msgid "Only PBKDF2 is supported in FIPS mode." +msgstr "FIPS モードでは PBKDF2 しかサポートしていません。" + +#: lib/utils_benchmark.c:166 +msgid "PBKDF benchmark disabled but iterations not set." +msgstr "PBKDF ベンチマークが無効ですが繰り返し回数が設定されていません。" + +#: lib/utils_benchmark.c:185 +#, c-format +msgid "Not compatible PBKDF2 options (using hash algorithm %s)." +msgstr "PBKDF2 と互換性のないオプションです (ハッシュアルゴリズム %s)。" + +#: lib/utils_benchmark.c:205 +msgid "Not compatible PBKDF options." +msgstr "互換性のない PBKDF オプションです。" + +#: lib/utils_device_locking.c:103 +#, c-format +msgid "Locking aborted. The locking path %s/%s is unusable (not a directory or missing)." +msgstr "ロックを中止します。ロックに使うパス %s/%s が使用できません (ディレクトリでないか存在していません)。" + +#: lib/utils_device_locking.c:110 +#, c-format +msgid "WARNING: Locking directory %s/%s is missing!\n" +msgstr "警告: ロックに使うディレクトリ %s/%s がありません!\n" + +#: lib/utils_device_locking.c:120 +#, c-format +msgid "Locking aborted. The locking path %s/%s is unusable (%s is not a directory)." +msgstr "ロックを中止します。ロックに使うパス %s/%s が使用できません (%s はディレクトリではありません)。" + +#: lib/utils_wipe.c:185 src/cryptsetup_reencrypt.c:933 +#: src/cryptsetup_reencrypt.c:1017 +msgid "Cannot seek to device offset." +msgstr "デバイスオフセットまで seek できません。" + +#: lib/utils_wipe.c:209 +#, c-format +msgid "Device wipe error, offset %." +msgstr "デバイスのワイプでエラー, オフセット %." + +#: lib/luks1/keyencryption.c:40 +#, c-format +msgid "" +"Failed to setup dm-crypt key mapping for device %s.\n" +"Check that kernel supports %s cipher (check syslog for more info)." +msgstr "" +"デバイス %s の dm-crypt のキーマッピングの設定に失敗しました。\n" +"カーネルが暗号 %s をサポートしているか確認してください (syslog にさらに情報があります)。" + +#: lib/luks1/keyencryption.c:45 +msgid "Key size in XTS mode must be 256 or 512 bits." +msgstr "XTS モードのキーサイズは 256 か 512 ビットでなければなりません。" + +#: lib/luks1/keyencryption.c:47 +msgid "Cipher specification should be in [cipher]-[mode]-[iv] format." +msgstr "暗号の指定は [暗号]-[モード]-[初期ベクタ] という形式であるべきです。" + +#: lib/luks1/keyencryption.c:98 lib/luks1/keymanage.c:345 +#: lib/luks1/keymanage.c:636 lib/luks1/keymanage.c:1074 +#: lib/luks2/luks2_json_metadata.c:1253 lib/luks2/luks2_keyslot.c:739 +#, c-format +msgid "Cannot write to device %s, permission denied." +msgstr "デバイス %s に書き込めません。パーミッションがありません。" + +#: lib/luks1/keyencryption.c:121 +msgid "Failed to open temporary keystore device." +msgstr "一時的なキーストアデバイスを開けません。" + +#: lib/luks1/keyencryption.c:128 +msgid "Failed to access temporary keystore device." +msgstr "一時的なキーストアデバイスにアクセスできません。" + +#: lib/luks1/keyencryption.c:201 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 "キースロットを暗号化中にI/Oエラーが発生しました。" + +#: lib/luks1/keyencryption.c:247 lib/luks1/keymanage.c:348 +#: lib/luks1/keymanage.c:589 lib/luks1/keymanage.c:639 lib/tcrypt/tcrypt.c:661 +#: lib/verity/verity.c:81 lib/verity/verity.c:179 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:1256 +#: src/cryptsetup_reencrypt.c:205 +#, c-format +msgid "Cannot open device %s." +msgstr "デバイス %s を開けません。" + +#: lib/luks1/keyencryption.c:258 lib/luks2/luks2_keyslot_luks2.c:137 +msgid "IO error while decrypting keyslot." +msgstr "キースロットを復号化中にI/Oエラーが発生しました。" + +#: lib/luks1/keymanage.c:111 +#, c-format +msgid "Device %s is too small. (LUKS1 requires at least % bytes.)" +msgstr "デバイス %s が小さすぎます。(LUKS1 は最低でも % バイト必要です。)" + +#: 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 +#, c-format +msgid "LUKS keyslot %u is invalid." +msgstr "LUKS キースロット %u は不正です。" + +#: lib/luks1/keymanage.c:229 lib/luks1/keymanage.c:473 +#: lib/luks2/luks2_json_metadata.c:1084 src/cryptsetup.c:1372 +#: src/cryptsetup.c:1498 src/cryptsetup.c:1555 src/cryptsetup.c:1611 +#: src/cryptsetup.c:1678 src/cryptsetup.c:1781 src/cryptsetup.c:1845 +#: src/cryptsetup.c:2005 src/cryptsetup.c:2194 src/cryptsetup.c:2254 +#: src/cryptsetup.c:2320 src/cryptsetup.c:2484 src/cryptsetup.c:3137 +#: src/cryptsetup.c:3146 src/cryptsetup_reencrypt.c:1372 +#, c-format +msgid "Device %s is not a valid LUKS device." +msgstr "デバイス %s は有効な LUKS デバイスではありません。" + +#: lib/luks1/keymanage.c:247 lib/luks2/luks2_json_metadata.c:1101 +#, c-format +msgid "Requested header backup file %s already exists." +msgstr "要求されたヘッダバックアップファイル %s は既に存在しています。" + +#: lib/luks1/keymanage.c:249 lib/luks2/luks2_json_metadata.c:1103 +#, c-format +msgid "Cannot create header backup file %s." +msgstr "ヘッダバックアップファイル %s が作成できません。" + +#: lib/luks1/keymanage.c:256 lib/luks2/luks2_json_metadata.c:1110 +#, c-format +msgid "Cannot write header backup file %s." +msgstr "ヘッダバックアップファイル %s に書き込めません。" + +#: lib/luks1/keymanage.c:287 lib/luks2/luks2_json_metadata.c:1162 +msgid "Backup file doesn't contain valid LUKS header." +msgstr "バックアップファイルが有効な LUKS ヘッダを含んでいません。" + +#: lib/luks1/keymanage.c:300 lib/luks1/keymanage.c:550 +#: lib/luks2/luks2_json_metadata.c:1183 +#, c-format +msgid "Cannot open header backup file %s." +msgstr "ヘッダバックアップファイル %s をオープンできません。" + +#: lib/luks1/keymanage.c:308 lib/luks2/luks2_json_metadata.c:1191 +#, c-format +msgid "Cannot read header backup file %s." +msgstr "ヘッダバックアップファイル %s を読めません。" + +#: lib/luks1/keymanage.c:318 +msgid "Data offset or key size differs on device and backup, restore failed." +msgstr "データオフセットかキーサイズがデバイスとバックアップで異なるのでリストアできません。" + +#: lib/luks1/keymanage.c:326 +#, c-format +msgid "Device %s %s%s" +msgstr "デバイス %s %s%s" + +#: lib/luks1/keymanage.c:327 +msgid "does not contain LUKS header. Replacing header can destroy data on that device." +msgstr "LUKS ヘッダが含まれていません。ヘッダを置き換えるとデバイスのデータを破壊する恐れがあります。" + +#: lib/luks1/keymanage.c:328 +msgid "already contains LUKS header. Replacing header will destroy existing keyslots." +msgstr "LUKS ヘッダを既に含んでいます。ヘッダを置き換えると既にあるキースロットを破壊します。" + +#: lib/luks1/keymanage.c:329 lib/luks2/luks2_json_metadata.c:1225 +msgid "" +"\n" +"WARNING: real device header has different UUID than backup!" +msgstr "" +"\n" +"警告: 実デバイスのヘッダはバックアップとUUIDが異なります!" + +#: lib/luks1/keymanage.c:376 +msgid "Non standard key size, manual repair required." +msgstr "標準的でないキーサイズなので、手動の修復が必要です。" + +#: lib/luks1/keymanage.c:381 +msgid "Non standard keyslots alignment, manual repair required." +msgstr "標準的でないキースロットアライメントなので、手動の修復が必要です。" + +#: lib/luks1/keymanage.c:391 +msgid "Repairing keyslots." +msgstr "キースロットを修復中です。" + +#: lib/luks1/keymanage.c:410 +#, c-format +msgid "Keyslot %i: offset repaired (%u -> %u)." +msgstr "キースロット %i: オフセットを修復 (%u -> %u)." + +#: lib/luks1/keymanage.c:418 +#, c-format +msgid "Keyslot %i: stripes repaired (%u -> %u)." +msgstr "キースロット %i: のストライプを修復 (%u -> %u)." + +#: lib/luks1/keymanage.c:427 +#, c-format +msgid "Keyslot %i: bogus partition signature." +msgstr "キースロット %i: パーティションの印(signature)がおかしいです。" + +#: lib/luks1/keymanage.c:432 +#, c-format +msgid "Keyslot %i: salt wiped." +msgstr "キースロット %i: ソルトを消しました。" + +#: lib/luks1/keymanage.c:449 +msgid "Writing LUKS header to disk." +msgstr "LUKS ヘッダを書きこんでいます。" + +#: lib/luks1/keymanage.c:454 +msgid "Repair failed." +msgstr "修復に失敗しました。" + +#: lib/luks1/keymanage.c:482 lib/luks1/keymanage.c:751 +#, c-format +msgid "Requested LUKS hash %s is not supported." +msgstr "要求された LUKS ハッシュ %s はサポートしていません。" + +#: lib/luks1/keymanage.c:510 src/cryptsetup.c:1081 +msgid "No known problems detected for LUKS header." +msgstr "LUKS ヘッダに既知の不具合は検出されませんでした。" + +#: lib/luks1/keymanage.c:661 +#, c-format +msgid "Error during update of LUKS header on device %s." +msgstr "デバイス %s の LUKS ヘッダを更新中にエラーが発生しました。" + +#: lib/luks1/keymanage.c:669 +#, c-format +msgid "Error re-reading LUKS header after update on device %s." +msgstr "デバイス %s の LUKS ヘッダを更新後の再読み込み中にエラーが発生しました。" + +#: lib/luks1/keymanage.c:745 +msgid "Data offset for LUKS header must be either 0 or higher than header size." +msgstr "LUKS ヘッダのデータへのオフセットは 0 かヘッダサイズより大きくなければいけません。" + +#: lib/luks1/keymanage.c:756 lib/luks1/keymanage.c:821 +#: lib/luks2/luks2_json_format.c:283 lib/luks2/luks2_json_metadata.c:1002 +#: src/cryptsetup.c:2647 +msgid "Wrong LUKS UUID format provided." +msgstr "LUKS UUID の形式が間違っています。" + +#: lib/luks1/keymanage.c:779 +msgid "Cannot create LUKS header: reading random salt failed." +msgstr "LUKS ヘッダを作成できません: ランダムなソルトを読み込めません。" + +#: lib/luks1/keymanage.c:800 +#, c-format +msgid "Cannot create LUKS header: header digest failed (using hash %s)." +msgstr "LUKS ヘッダを作成できません: ヘッダのハッシュが求められません (ハッシュには %s を使用)。" + +#: lib/luks1/keymanage.c:844 +#, c-format +msgid "Key slot %d active, purge first." +msgstr "キースロット %d が使用中なので、パージしてください。" + +#: lib/luks1/keymanage.c:850 +#, c-format +msgid "Key slot %d material includes too few stripes. Header manipulation?" +msgstr "キースロット %d のストライプが少なすぎます。ヘッダを細工でもしましたか?" + +#: lib/luks1/keymanage.c:1060 +#, c-format +msgid "Key slot %d is invalid, please select keyslot between 0 and %d." +msgstr "キースロット %d は不正です。0 から %d の間を選んでください。" + +#: lib/luks1/keymanage.c:1078 lib/luks2/luks2_keyslot.c:743 +#, c-format +msgid "Cannot wipe device %s." +msgstr "デバイス %s をワイプできません。" + +#: lib/loopaes/loopaes.c:146 +msgid "Detected not yet supported GPG encrypted keyfile." +msgstr "GPG の暗号化されたキーファイルがまだサポートされていません。" + +#: lib/loopaes/loopaes.c:147 +msgid "Please use gpg --decrypt | cryptsetup --keyfile=- ...\n" +msgstr "以下のようにしてください。 gpg --decrypt | cryptsetup --keyfile=- ...\n" + +#: lib/loopaes/loopaes.c:168 lib/loopaes/loopaes.c:188 +msgid "Incompatible loop-AES keyfile detected." +msgstr "互換性のない loop-AES キーファイルが検出されました。" + +#: lib/loopaes/loopaes.c:245 +msgid "Kernel doesn't support loop-AES compatible mapping." +msgstr "カーネルが loop-AES 互換マッピングをサポートしていません。" + +#: lib/tcrypt/tcrypt.c:505 +#, c-format +msgid "Error reading keyfile %s." +msgstr "キーファイル %s を読み込み中にエラー。" + +#: lib/tcrypt/tcrypt.c:545 +#, c-format +msgid "Maximum TCRYPT passphrase length (%d) exceeded." +msgstr "TCRYPT パスフレーズの最大長 (%d) を超えました。" + +#: lib/tcrypt/tcrypt.c:586 +#, c-format +msgid "PBKDF2 hash algorithm %s not available, skipping." +msgstr "PBKDF2 ハッシュアルゴリズム %s が利用できないのでスキップします。" + +#: lib/tcrypt/tcrypt.c:602 src/cryptsetup.c:959 +msgid "Required kernel crypto interface not available." +msgstr "必要なカーネル crypto インターフェースが使用できません。" + +#: lib/tcrypt/tcrypt.c:604 src/cryptsetup.c:961 +msgid "Ensure you have algif_skcipher kernel module loaded." +msgstr "algif_skcipher カーネルモジュールをロードしてください。" + +#: lib/tcrypt/tcrypt.c:744 +#, c-format +msgid "Activation is not supported for %d sector size." +msgstr "アクティベーションは %d セクタサイズではサポートしていません。" + +#: lib/tcrypt/tcrypt.c:750 +msgid "Kernel doesn't support activation for this TCRYPT legacy mode." +msgstr "カーネルが TCRYPT レガシーモードのアクティベーションをサポートしていません。" + +#: lib/tcrypt/tcrypt.c:784 +#, c-format +msgid "Activating TCRYPT system encryption for partition %s." +msgstr "TCRYPT システム暗号をパーティション %s に対してアクティベーションしました。" + +#: lib/tcrypt/tcrypt.c:862 +msgid "Kernel doesn't support TCRYPT compatible mapping." +msgstr "カーネルが TCRYPT 互換のマッピングをサポートしていません。" + +#: lib/tcrypt/tcrypt.c:1084 +msgid "This function is not supported without TCRYPT header load." +msgstr "この機能は TCRYPT ヘッダの読み込みなしではサポートしません。" + +#: lib/verity/verity.c:69 lib/verity/verity.c:172 +#, c-format +msgid "Verity device %s doesn't use on-disk header." +msgstr "Verity デバイス %s はディスク上のヘッダを使いません。" + +#: lib/verity/verity.c:91 +#, c-format +msgid "Device %s is not a valid VERITY device." +msgstr "デバイス %s が有効な VERITY デバイスではありません。" + +#: lib/verity/verity.c:98 +#, c-format +msgid "Unsupported VERITY version %d." +msgstr "VERITY バージョン %d はサポートされていません。" + +#: lib/verity/verity.c:129 +msgid "VERITY header corrupted." +msgstr "VERITY ヘッダが壊れています。" + +#: lib/verity/verity.c:166 +#, c-format +msgid "Wrong VERITY UUID format provided on device %s." +msgstr "デバイス %s の VERITY UUID フォーマットが間違っています。" + +#: lib/verity/verity.c:199 +#, c-format +msgid "Error during update of verity header on device %s." +msgstr "デバイス %s の verity ヘッダを更新中にエラー。" + +#: lib/verity/verity.c:262 +msgid "Errors cannot be repaired with FEC device." +msgstr "FEC デバイスのエラーが修復できません。" + +#: lib/verity/verity.c:264 +#, c-format +msgid "Found %u repairable errors with FEC device." +msgstr "FEC デバイスに %u 個の修復可能なエラーが見つかりました。" + +#: lib/verity/verity.c:302 +msgid "Kernel doesn't support dm-verity mapping." +msgstr "カーネルが dm-verity マッピングをサポートしていません。" + +#: lib/verity/verity.c:313 +msgid "Verity device detected corruption after activation." +msgstr "アクティベーションされた Verity デバイスが破損が見つかりました。" + +#: lib/verity/verity_hash.c:59 +#, c-format +msgid "Spare area is not zeroed at position %." +msgstr "ポジション % にあるスペア領域が 0 埋めされていません。" + +#: lib/verity/verity_hash.c:160 lib/verity/verity_hash.c:287 +#: lib/verity/verity_hash.c:300 +msgid "Device offset overflow." +msgstr "デバイスオフセットオーバーフロー。" + +#: lib/verity/verity_hash.c:200 +#, c-format +msgid "Verification failed at position %." +msgstr "検証がポジション % で失敗しました。" + +#: lib/verity/verity_hash.c:273 +msgid "Invalid size parameters for verity device." +msgstr "verity デバイスのパラメータサイズが不正です。" + +#: lib/verity/verity_hash.c:293 +msgid "Hash area overflow." +msgstr "ハッシュ領域がオーバーフロー。" + +#: lib/verity/verity_hash.c:370 +msgid "Verification of data area failed." +msgstr "データ領域の検証に失敗しました。" + +#: lib/verity/verity_hash.c:375 +msgid "Verification of root hash failed." +msgstr "ルートハッシュの検証に失敗しました。" + +#: lib/verity/verity_hash.c:381 +msgid "Input/output error while creating hash area." +msgstr "ハッシュ領域を生成中に I/O エラー。" + +#: lib/verity/verity_hash.c:383 +msgid "Creation of hash area failed." +msgstr "ハッシュ領域の作成に失敗しました。" + +#: lib/verity/verity_hash.c:430 +#, c-format +msgid "WARNING: Kernel cannot activate device if data block size exceeds page size (%u)." +msgstr "警告: カーネルはデータブロックサイズがページサイズ (%u) を超えているとアクティベートできません。" + +#: lib/verity/verity_fec.c:132 +msgid "Failed to allocate RS context." +msgstr "Reed-Solomon 処理のためのコンテキストが確保できません。" + +#: lib/verity/verity_fec.c:147 +msgid "Failed to allocate buffer." +msgstr "バッファを確保できませんでした。" + +#: lib/verity/verity_fec.c:157 +#, c-format +msgid "Failed to read RS block % byte %d." +msgstr "Reed-Solomon ブロック % バイト %d を読み込めませんでした。" + +#: lib/verity/verity_fec.c:170 +#, c-format +msgid "Failed to read parity for RS block %." +msgstr "Reed-Solomon ブロック % のパリティを読み込めませんでした。" + +#: lib/verity/verity_fec.c:178 +#, c-format +msgid "Failed to repair parity for block %." +msgstr "ブロック % のパリティが修復できませんでした。" + +#: lib/verity/verity_fec.c:189 +#, c-format +msgid "Failed to write parity for RS block %." +msgstr "Reed-Solomon ブロック % のパリティの書き込みに失敗しました。" + +#: lib/verity/verity_fec.c:224 +msgid "Block sizes must match for FEC." +msgstr "ブロックサイズが FEC と合っていません。" + +#: lib/verity/verity_fec.c:230 +msgid "Invalid number of parity bytes." +msgstr "パリティのバイト数が不正です。" + +#: lib/verity/verity_fec.c:266 +#, c-format +msgid "Failed to determine size for device %s." +msgstr "デバイス %s のサイズが不明です。" + +#: lib/integrity/integrity.c:241 lib/integrity/integrity.c:306 +msgid "Kernel doesn't support dm-integrity mapping." +msgstr "カーネルが dm-integrity マッピングをサポートしていません。" + +#: lib/luks2/luks2_disk_metadata.c:383 lib/luks2/luks2_json_metadata.c:959 +#: lib/luks2/luks2_json_metadata.c:1245 +#, c-format +msgid "Failed to acquire write lock on device %s." +msgstr "デバイス %s の書き込みのためのロックを取得できませんでした。" + +#: lib/luks2/luks2_disk_metadata.c:392 +msgid "Detected attempt for concurrent LUKS2 metadata update. Aborting operation." +msgstr "LUKS2 メタデータの更新の並列実行をしそうになりました。実行を中止します。" + +#: 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 "" +"デバイスのシグネチャが曖昧なので、LUKS2 の自動修復ができません。.\n" +"修復するには \"cryptsetup repair\" を実行してください。" + +#: lib/luks2/luks2_json_format.c:227 +msgid "Requested data offset is too small." +msgstr "要求されたデータオフセットが小さすぎます。" + +#: 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 "警告: キースロット領域 (% バイト) がとても小さいため、利用可能な LUKS2 キースロット数が制限されます。\n" + +#: lib/luks2/luks2_json_metadata.c:946 lib/luks2/luks2_json_metadata.c:1075 +#: lib/luks2/luks2_json_metadata.c:1151 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:1168 +#, c-format +msgid "Forbidden LUKS2 requirements detected in backup %s." +msgstr "禁止された LUKS2 要求がバックアップ %s に検出されました。" + +#: lib/luks2/luks2_json_metadata.c:1209 +msgid "Data offset differ on device and backup, restore failed." +msgstr "データオフセットがデバイスとバックアップと異なるため修復できません。" + +#: lib/luks2/luks2_json_metadata.c:1215 +msgid "Binary header with keyslot areas size differ on device and backup, restore failed." +msgstr "キースロット領域のあるバイナリヘッダのサイズがデバイスとバックアップで異なるため修復できません。" + +#: lib/luks2/luks2_json_metadata.c:1222 +#, c-format +msgid "Device %s %s%s%s%s" +msgstr "デバイス %s %s%s%s%s" + +#: lib/luks2/luks2_json_metadata.c:1223 +msgid "does not contain LUKS2 header. Replacing header can destroy data on that device." +msgstr "LUKS2 ヘッダが含まれていません。ヘッダを置き換えるとデータを破壊しかねません。" + +#: lib/luks2/luks2_json_metadata.c:1224 +msgid "already contains LUKS2 header. Replacing header will destroy existing keyslots." +msgstr "既に LUKS2 ヘッダがあります。ヘッダを置き換えると既にあるキースロットを破壊します。" + +#: lib/luks2/luks2_json_metadata.c:1226 +msgid "" +"\n" +"WARNING: unknown LUKS2 requirements detected in real device header!\n" +"Replacing header with backup may corrupt the data on that device!" +msgstr "" +"\n" +"警告: 不明な LUKS2 への要求がリアルデバイスヘッダにあります!\n" +"ヘッダをバックアップで置き換えるとデータを破壊する恐れがあります!" + +#: lib/luks2/luks2_json_metadata.c:1228 +msgid "" +"\n" +"WARNING: Unfinished offline reencryption detected on the device!\n" +"Replacing header with backup may corrupt data." +msgstr "" +"\n" +"警告: オフラインの再暗号化が終了していません!\n" +"ヘッダを置き換えるとデータを破壊しかねません。" + +#: lib/luks2/luks2_json_metadata.c:1324 +#, c-format +msgid "Ignored unknown flag %s." +msgstr "不明なフラグ %s を無視しました。" + +#: lib/luks2/luks2_json_metadata.c:2011 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:2023 lib/luks2/luks2_reencrypt.c:1764 +msgid "Failed to set dm-crypt segment." +msgstr "dm-crypt セグメントの設定に失敗しました。" + +#: lib/luks2/luks2_json_metadata.c:2029 lib/luks2/luks2_reencrypt.c:1770 +msgid "Failed to set dm-linear segment." +msgstr "dm-linear セグメントの設定に失敗しました。" + +#: lib/luks2/luks2_json_metadata.c:2156 +msgid "Unsupported device integrity configuration." +msgstr "サポートしていないデバイス整合性設定です。" + +#: lib/luks2/luks2_json_metadata.c:2242 +msgid "Reencryption in-progress. Cannot deactivate device." +msgstr "再暗号化が実行中なのでデバイスのデアクティベートできません。. Cannot deactivate device." + +#: lib/luks2/luks2_json_metadata.c:2253 lib/luks2/luks2_reencrypt.c:3171 +#, c-format +msgid "Failed to replace suspended device %s with dm-error target." +msgstr "サスペンドされたデバイス %s を dm-error ターゲットで置き換えられません。" + +#: lib/luks2/luks2_json_metadata.c:2333 +msgid "Failed to read LUKS2 requirements." +msgstr "LUKS2 の必要条件を読み込めませんでした。" + +#: lib/luks2/luks2_json_metadata.c:2340 +msgid "Unmet LUKS2 requirements detected." +msgstr "満たせない LUKS2 の必要条件があります。" + +#: lib/luks2/luks2_json_metadata.c:2348 +msgid "Offline reencryption in progress. Aborting." +msgstr "オフラインでの再暗号化中です。中止します。" + +#: lib/luks2/luks2_json_metadata.c:2350 +msgid "Online reencryption in progress. Aborting." +msgstr "オフラインでの再暗号化中です。中止します。" + +#: lib/luks2/luks2_keyslot.c:552 lib/luks2/luks2_keyslot.c:589 +msgid "Not enough available memory to open a keyslot." +msgstr "キースロットをオープンするのにメモリが足りません。" + +#: lib/luks2/luks2_keyslot.c:554 lib/luks2/luks2_keyslot.c:591 +msgid "Keyslot open failed." +msgstr "キースロットのオープンに失敗しました。" + +#: 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 "キースロットの暗号化に %s- %s 暗号は使えません。" + +#: lib/luks2/luks2_keyslot_luks2.c:480 +msgid "No space for new keyslot." +msgstr "新しいキースロット用の領域がありません。" + +#: lib/luks2/luks2_luks1_convert.c:481 +#, c-format +msgid "Cannot check status of device with uuid: %s." +msgstr "UUID が %s のデバイスの状態が確認できません。" + +#: lib/luks2/luks2_luks1_convert.c:507 +msgid "Unable to convert header with LUKSMETA additional metadata." +msgstr "LUKSMETA メタデータ付きのヘッダは変換できません。" + +#: lib/luks2/luks2_luks1_convert.c:547 +msgid "Unable to move keyslot area. Not enough space." +msgstr "領域が足りないのでキースロット領域を動かせません。" + +#: lib/luks2/luks2_luks1_convert.c:590 lib/luks2/luks2_luks1_convert.c:872 +msgid "Unable to move keyslot area." +msgstr "キースロット領域を動かせません。" + +#: lib/luks2/luks2_luks1_convert.c:682 +msgid "Cannot convert to LUKS1 format - default segment encryption sector size is not 512 bytes." +msgstr "LUKS1 形式に変換できません - デフォルトの暗号セクタサイズが 512 バイトではありません。" + +#: lib/luks2/luks2_luks1_convert.c:690 +msgid "Cannot convert to LUKS1 format - key slot digests are not LUKS1 compatible." +msgstr "LUKS1 形式に変換できません - キースロットのハッシュ関数が LUKS1 互換ではありません。" + +#: lib/luks2/luks2_luks1_convert.c:702 +#, c-format +msgid "Cannot convert to LUKS1 format - device uses wrapped key cipher %s." +msgstr "LUKS1 形式に変換できません - ラップされたキーの暗号に %s が使われています。" + +#: lib/luks2/luks2_luks1_convert.c:710 +#, c-format +msgid "Cannot convert to LUKS1 format - LUKS2 header contains %u token(s)." +msgstr "LUKS1 形式に変換できません - LUKS2 ヘッダ %u 個のトークンを含んでいます。" + +#: lib/luks2/luks2_luks1_convert.c:724 +#, c-format +msgid "Cannot convert to LUKS1 format - keyslot %u is in invalid state." +msgstr "LUKS1 形式に変換できません - キースロット %u が不正な状態です。" + +#: lib/luks2/luks2_luks1_convert.c:729 +#, c-format +msgid "Cannot convert to LUKS1 format - slot %u (over maximum slots) is still active." +msgstr "LUKS1 形式に変換できません - スロット %u が(最大個数を超過して)有効です。" + +#: lib/luks2/luks2_luks1_convert.c:734 +#, c-format +msgid "Cannot convert to LUKS1 format - keyslot %u is not LUKS1 compatible." +msgstr "LUKS1 形式に変換できません - キースロット %u が LUKS1 と互換ではありません。" + +#: lib/luks2/luks2_reencrypt.c:892 +#, c-format +msgid "Hotzone size must be multiple of calculated zone alignment (%zu bytes)." +msgstr "ホットゾーンサイズは計算されたゾーンアライメントの倍数である必要がありす (%zu バイト)." + +#: lib/luks2/luks2_reencrypt.c:897 +#, c-format +msgid "Device size must be multiple of calculated zone alignment (%zu bytes)." +msgstr "デバイスサイズが計算ゾーンアライメント (%zu バイト) に合っていません。" + +#: lib/luks2/luks2_reencrypt.c:941 +#, c-format +msgid "Unsupported resilience mode %s" +msgstr "弾性(resilience)モード %s はサポートしていません" + +#: lib/luks2/luks2_reencrypt.c:1158 lib/luks2/luks2_reencrypt.c:1313 +#: lib/luks2/luks2_reencrypt.c:1396 lib/luks2/luks2_reencrypt.c:1430 +#: lib/luks2/luks2_reencrypt.c:3011 +msgid "Failed to initialize old segment storage wrapper." +msgstr "古いセグメントのストレージラッパの初期化に失敗しました。" + +#: lib/luks2/luks2_reencrypt.c:1172 lib/luks2/luks2_reencrypt.c:1291 +msgid "Failed to initialize new segment storage wrapper." +msgstr "新しいセグメントのストレージラッパの初期化に失敗しました。" + +#: lib/luks2/luks2_reencrypt.c:1340 +msgid "Failed to read checksums for current hotzone." +msgstr "現在のホットゾーンのチェックサムを読み込めません。" + +#: lib/luks2/luks2_reencrypt.c:1347 lib/luks2/luks2_reencrypt.c:3019 +#, c-format +msgid "Failed to read hotzone area starting at %." +msgstr "% から始めるホットゾーンエリアを読み込めません。" + +#: lib/luks2/luks2_reencrypt.c:1366 +#, c-format +msgid "Failed to decrypt sector %zu." +msgstr "セクタ %zu を復号できません。" + +#: lib/luks2/luks2_reencrypt.c:1372 +#, c-format +msgid "Failed to recover sector %zu." +msgstr "セクタ %zu を復元できません。" + +#: lib/luks2/luks2_reencrypt.c:1867 +#, c-format +msgid "Source and target device sizes don't match. Source %, target: %." +msgstr "ソースとターゲットデバイスのサイズが一致しません。ソース %, ターゲット: %." + +#: lib/luks2/luks2_reencrypt.c:1965 +#, c-format +msgid "Failed to activate hotzone device %s." +msgstr "ホットゾーンデバイス %s がアクティベートできません。" + +#: lib/luks2/luks2_reencrypt.c:1982 +#, c-format +msgid "Failed to activate overlay device %s with actual origin table." +msgstr "実際の origin table があるオーバーレイデバイス %s をアクティベートできません。" + +#: lib/luks2/luks2_reencrypt.c:1989 +#, c-format +msgid "Failed to load new mapping for device %s." +msgstr "デバイス %s の新しいマッピングをロードできません。" + +#: lib/luks2/luks2_reencrypt.c:2060 +msgid "Failed to refresh reencryption devices stack." +msgstr "再暗号化デバイススタックのリフレッシュに失敗しました。" + +#: lib/luks2/luks2_reencrypt.c:2216 +msgid "Failed to set new keyslots area size." +msgstr "新しいキースロットエリアサイズを設定できません。" + +#: lib/luks2/luks2_reencrypt.c:2318 +#, c-format +msgid "Data shift is not aligned to requested encryption sector size (% bytes)." +msgstr "データシフトが要求された暗号化セクタサイズにアラインされていません(% bytes)。" + +#: lib/luks2/luks2_reencrypt.c:2339 +#, c-format +msgid "Data device is not aligned to requested encryption sector size (% bytes)." +msgstr "データデバイスが要求された暗号化セクタサイズにアラインされていません(% bytes)." + +#: lib/luks2/luks2_reencrypt.c:2360 +#, c-format +msgid "Data shift (% sectors) is less than future data offset (% sectors)." +msgstr "データシフト (% セクタ) が今後のデータオフセットより少ないです (% セクタ)。" + +#: lib/luks2/luks2_reencrypt.c:2366 lib/luks2/luks2_reencrypt.c:2760 +#: lib/luks2/luks2_reencrypt.c:2781 +#, c-format +msgid "Failed to open %s in exclusive mode (already mapped or mounted)." +msgstr "デバイス %s を排他モードでオープンでません (既にマップされているかマウントされています)。" + +#: lib/luks2/luks2_reencrypt.c:2534 +msgid "No LUKS2 reencryption in progress." +msgstr "LUKS2 再暗号化が実行中ではありません。" + +#: lib/luks2/luks2_reencrypt.c:2540 lib/luks2/luks2_reencrypt.c:3276 +msgid "Failed to load LUKS2 reencryption context." +msgstr "LUKS2 再暗号化コンテキストをロードできません。" + +#: lib/luks2/luks2_reencrypt.c:2600 +msgid "Failed to get reencryption state." +msgstr "再暗号化状態を取得できません。" + +#: lib/luks2/luks2_reencrypt.c:2604 +msgid "Device is not in reencryption." +msgstr "デバイス %s は再暗号化中ではありません。" + +#: lib/luks2/luks2_reencrypt.c:2611 +msgid "Reencryption process is already running." +msgstr "既に再暗号化中です。" + +#: lib/luks2/luks2_reencrypt.c:2613 +msgid "Failed to acquire reencryption lock." +msgstr "再暗号化ロックを取得できません。" + +#: lib/luks2/luks2_reencrypt.c:2631 +msgid "Cannot proceed with reencryption. Run reencryption recovery first." +msgstr "再暗号化を開始できません。再暗号化のリカバリを先にしてください。" + +#: lib/luks2/luks2_reencrypt.c:2731 +msgid "Active device size and requested reencryption size don't match." +msgstr "実際のデバイスサイズと要求された再暗号化サイズが一致しません。" + +#: lib/luks2/luks2_reencrypt.c:2745 +msgid "Illegal device size requested in reencryption parameters." +msgstr "再暗号化のパラメータとして不正なデバイスサイズが要求されました。" + +#: lib/luks2/luks2_reencrypt.c:2815 +msgid "Reencryption in-progress. Cannot perform recovery." +msgstr "既に再暗号化中です。復元を実行できません。" + +#: lib/luks2/luks2_reencrypt.c:2887 +msgid "LUKS2 reencryption already initialized in metadata." +msgstr "メタデータの LUKS2 の再暗号化は既に初期化されました。" + +#: lib/luks2/luks2_reencrypt.c:2894 +msgid "Failed to initialize LUKS2 reencryption in metadata." +msgstr "メタデータの LUKS2 再暗号化に失敗しました。" + +#: lib/luks2/luks2_reencrypt.c:2985 +msgid "Failed to set device segments for next reencryption hotzone." +msgstr "デバイスセグメントの次の再暗号化ホットゾーンの設定に失敗しました。" + +#: lib/luks2/luks2_reencrypt.c:3027 +msgid "Failed to write reencryption resilience metadata." +msgstr "再暗号化した耐性用メタデータを書き込めません。" + +#: lib/luks2/luks2_reencrypt.c:3034 +msgid "Decryption failed." +msgstr "復号に失敗しました。" + +#: lib/luks2/luks2_reencrypt.c:3039 +#, c-format +msgid "Failed to write hotzone area starting at %." +msgstr "% から始まるホットゾーンエリアに書き込めません。" + +#: lib/luks2/luks2_reencrypt.c:3044 +msgid "Failed to sync data." +msgstr "データを sync できません。" + +#: lib/luks2/luks2_reencrypt.c:3052 +msgid "Failed to update metadata after current reencryption hotzone completed." +msgstr "現在のホットゾーンの再暗号化完了後にメタデータが更新できません。" + +#: lib/luks2/luks2_reencrypt.c:3119 +msgid "Failed to write LUKS2 metadata." +msgstr "LUKS2 メタデータが書き込めません。" + +#: lib/luks2/luks2_reencrypt.c:3142 +msgid "Failed to wipe backup segment data." +msgstr "バックアップセグメントデータを消せません。" + +#: lib/luks2/luks2_reencrypt.c:3155 +msgid "Failed to disable reencryption requirement flag." +msgstr "再暗号化の要求(requirement)フラグを禁止できません。" + +#: lib/luks2/luks2_reencrypt.c:3163 +#, c-format +msgid "Fatal error while reencrypting chunk starting at %, % sectors long." +msgstr "% から % セクタのチャンクの再暗号化中に致命的なエラー。" + +#: lib/luks2/luks2_reencrypt.c:3172 +msgid "Do not resume the device unless replaced with error target manually." +msgstr "手動でエラーターゲットに置き換えた場合以外はデバイスのレジュームをしないでください。" + +#: lib/luks2/luks2_reencrypt.c:3221 +msgid "Cannot proceed with reencryption. Unexpected reencryption status." +msgstr "再暗号化を開始できません。予期しない再暗号化状態です。" + +#: lib/luks2/luks2_reencrypt.c:3227 +msgid "Missing or invalid reencrypt context." +msgstr "ないか不正な再暗号化コンテキストです。" + +#: lib/luks2/luks2_reencrypt.c:3234 +msgid "Failed to initialize reencryption device stack." +msgstr "再暗号化デバイススタックの初期化に失敗しました。" + +#: lib/luks2/luks2_reencrypt.c:3253 lib/luks2/luks2_reencrypt.c:3289 +msgid "Failed to update reencryption context." +msgstr "再暗号化コンテキストが更新できません。" + +#: lib/luks2/luks2_token.c:262 +msgid "No free token slot." +msgstr "空きトークンスロットがありません。" + +#: lib/luks2/luks2_token.c:269 +#, c-format +msgid "Failed to create builtin token %s." +msgstr "ビルトイントークン %s が作成できません。" + +#: src/cryptsetup.c:162 +msgid "Can't do passphrase verification on non-tty inputs." +msgstr "tty 入力以外ではパスフレーズ認証できません。" + +#: src/cryptsetup.c:215 +msgid "Keyslot encryption parameters can be set only for LUKS2 device." +msgstr "キースロットの暗号化パラメータは LUKS2 デバイスでしか設定できません。" + +#: src/cryptsetup.c:245 src/cryptsetup.c:893 src/cryptsetup.c:1212 +#: src/cryptsetup.c:3011 src/cryptsetup_reencrypt.c:715 +#: src/cryptsetup_reencrypt.c:785 +msgid "No known cipher specification pattern detected." +msgstr "未知の暗号スペックです。" + +#: src/cryptsetup.c:253 +msgid "WARNING: The --hash parameter is being ignored in plain mode with keyfile specified.\n" +msgstr "警告: --hash パラメータは plain モードでキーファイルが指定されていると無視されます。\n" + +#: src/cryptsetup.c:261 +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:301 +#, c-format +msgid "Detected device signature(s) on %s. Proceeding further may damage existing data." +msgstr "%s にデバイス署名が検出されました。既にあるデータを破壊しかねません。" + +#: src/cryptsetup.c:307 src/cryptsetup.c:1038 src/cryptsetup.c:1090 +#: src/cryptsetup.c:1189 src/cryptsetup.c:1262 src/cryptsetup.c:1913 +#: src/cryptsetup.c:2545 src/cryptsetup.c:2668 src/integritysetup.c:232 +msgid "Operation aborted.\n" +msgstr "中止されました。\n" + +#: src/cryptsetup.c:375 +msgid "Option --key-file is required." +msgstr "オプション --key-file が必要です。" + +#: src/cryptsetup.c:428 +msgid "Enter VeraCrypt PIM: " +msgstr "VeraCrypt PIM を入力してください: " + +#: src/cryptsetup.c:437 +msgid "Invalid PIM value: parse error." +msgstr "不正な PIM: 解釈できません。" + +#: src/cryptsetup.c:440 +msgid "Invalid PIM value: 0." +msgstr "不正 PIM の値で 0 です。" + +#: src/cryptsetup.c:443 +msgid "Invalid PIM value: outside of range." +msgstr "不正な PIM の値: 範囲外です。" + +#: src/cryptsetup.c:466 +msgid "No device header detected with this passphrase." +msgstr "このパスフレーズではデバイスヘッダが検出されませんでした。" + +#: src/cryptsetup.c:528 src/cryptsetup.c:1940 +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 "" +"ボリュームキーを有効にしたヘッダダンプは\n" +"暗号化されたパーティションにパスフレーズなしでアクセス可能にます。\n" +"このダンプは暗号化された安全な所に保存してください。" + +#: src/cryptsetup.c:607 +#, c-format +msgid "Device %s is still active and scheduled for deferred removal.\n" +msgstr "デバイス %s はまたアクティブで後から削除される予定になっています。.\n" + +#: src/cryptsetup.c:635 +msgid "Resize of active device requires volume key in keyring but --disable-keyring option is set." +msgstr "アクティブなデバイスをリサイズするにはボリュームキーがキーリングに必要ですが、--disable-keyring が指定されています。" + +#: src/cryptsetup.c:771 +msgid "Benchmark interrupted." +msgstr "ベンチマークが中止されました。" + +#: src/cryptsetup.c:792 +#, c-format +msgid "PBKDF2-%-9s N/A\n" +msgstr "PBKDF2-%-9s 計測値なし\n" + +#: src/cryptsetup.c:794 +#, c-format +msgid "PBKDF2-%-9s %7u iterations per second for %zu-bit key\n" +msgstr "PBKDF2-%-9s %7u 回/秒 (%zu ビットの鍵)\n" + +#: src/cryptsetup.c:808 +#, c-format +msgid "%-10s N/A\n" +msgstr "%-10s 計測値なし\n" + +#: src/cryptsetup.c:810 +#, 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:834 +msgid "Result of benchmark is not reliable." +msgstr "ベンチマークの結果は信頼できません。" + +#: src/cryptsetup.c:885 +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:919 +#, c-format +msgid "#%*s Algorithm | Key | Encryption | Decryption\n" +msgstr "#%*s Algorithm | キー | 暗号化 | 復号化\n" + +#: src/cryptsetup.c:923 +#, c-format +msgid "Cipher %s is not available." +msgstr "暗号 %s は使えません。" + +#. TRANSLATORS: The string is header of a table and must be exactly (right side) aligned. +#: src/cryptsetup.c:943 +msgid "# Algorithm | Key | Encryption | Decryption\n" +msgstr "# Algorithm | キー | 暗号化 | 復号化\n" + +#: src/cryptsetup.c:952 +msgid "N/A" +msgstr "計測値なし" + +#: src/cryptsetup.c:1031 +msgid "" +"Seems device does not require reencryption recovery.\n" +"Do you want to proceed anyway?" +msgstr "" +"デバイスは再暗号化のリカバリを必要としていなそうです。\n" +"本当にやりますか?" + +#: src/cryptsetup.c:1037 +msgid "Really proceed with LUKS2 reencryption recovery?" +msgstr "本当に LUKS2 再暗号化リカバリを行いますか?" + +#: src/cryptsetup.c:1046 +msgid "Enter passphrase for reencryption recovery: " +msgstr "再暗号化のリカバリのためのパスフレーズを入力してください: " + +#: src/cryptsetup.c:1089 +msgid "Really try to repair LUKS device header?" +msgstr "本当に LUKS デバイスヘッダの復元を試みていいですか?" + +#: src/cryptsetup.c:1108 src/integritysetup.c:145 +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 "" +"整合性チェックサムの初期化のためにデバイスのデータを消去しています。\n" +"CTRL+c で中止できます (初期化されなかったデバイスのチェックサムは正しくなくなります)。\n" + +#: src/cryptsetup.c:1130 src/integritysetup.c:167 +#, c-format +msgid "Cannot deactivate temporary device %s." +msgstr "一時的デバイス %s を非アクティブにできません。" + +#: src/cryptsetup.c:1174 +msgid "Integrity option can be used only for LUKS2 format." +msgstr "整合性オプションは LUKS2 形式でしか使えません。" + +#: src/cryptsetup.c:1179 src/cryptsetup.c:1239 +msgid "Unsupported LUKS2 metadata size options." +msgstr "サポートされていない LUKS2 メタデータのサイズオプションです。" + +#: src/cryptsetup.c:1196 +#, c-format +msgid "Cannot create header file %s." +msgstr "ヘッダファイル %s を作成できません。" + +#: src/cryptsetup.c:1219 src/integritysetup.c:194 src/integritysetup.c:203 +#: src/integritysetup.c:212 src/integritysetup.c:279 src/integritysetup.c:288 +#: src/integritysetup.c:298 +msgid "No known integrity specification pattern detected." +msgstr "サポートしている整合性確認方式が検出されませんでした。" + +#: src/cryptsetup.c:1232 +#, c-format +msgid "Cannot use %s as on-disk header." +msgstr "%s を on-disk ヘッダとして使えません。" + +#: src/cryptsetup.c:1256 src/integritysetup.c:226 +#, c-format +msgid "This will overwrite data on %s irrevocably." +msgstr "%s のデータを上書きします。戻せません。" + +#: src/cryptsetup.c:1297 src/cryptsetup.c:1627 src/cryptsetup.c:1694 +#: src/cryptsetup.c:1796 src/cryptsetup.c:1862 src/cryptsetup_reencrypt.c:545 +msgid "Failed to set pbkdf parameters." +msgstr "pbkdf パラメータを設定できません。" + +#: src/cryptsetup.c:1378 +msgid "Reduced data offset is allowed only for detached LUKS header." +msgstr "分離された LUKS ヘッダでのみ少ないデータオフセットが使えます。" + +#: src/cryptsetup.c:1389 src/cryptsetup.c:1700 +msgid "Cannot determine volume key size for LUKS without keyslots, please use --key-size option." +msgstr "キースロットのない LUKS のボリュームキーサイズが決定できないので、--key-size を使ってください。" + +#: src/cryptsetup.c:1427 +msgid "Device activated but cannot make flags persistent." +msgstr "デバイスはアクティベートされましたが、フラグを恒常的なものにできません。" + +#: src/cryptsetup.c:1508 src/cryptsetup.c:1578 +#, c-format +msgid "Keyslot %d is selected for deletion." +msgstr "キースロット %d は削除対象として選択されました。" + +#: src/cryptsetup.c:1520 src/cryptsetup.c:1581 +msgid "This is the last keyslot. Device will become unusable after purging this key." +msgstr "これは最後のキースロットです。このキーがなくなるとデバイスは使用不能になります。" + +#: src/cryptsetup.c:1521 +msgid "Enter any remaining passphrase: " +msgstr "残っているパスフレーズを入力してください: " + +#: src/cryptsetup.c:1522 src/cryptsetup.c:1583 +msgid "Operation aborted, the keyslot was NOT wiped.\n" +msgstr "操作は中止されました。キースロットは消去されていません。\n" + +#: src/cryptsetup.c:1560 +msgid "Enter passphrase to be deleted: " +msgstr "削除するキーのパスフレーズを入力してください: " + +#: src/cryptsetup.c:1641 src/cryptsetup.c:1715 src/cryptsetup.c:1749 +msgid "Enter new passphrase for key slot: " +msgstr "キースロットの新しいパスフレーズを入力してください: " + +#: src/cryptsetup.c:1732 src/cryptsetup_reencrypt.c:1327 +#, c-format +msgid "Enter any existing passphrase: " +msgstr "有効なパスフレーズをどれか入力してください: " + +#: src/cryptsetup.c:1800 +msgid "Enter passphrase to be changed: " +msgstr "変更するキーのパスフレーズを入力してください: " + +#: src/cryptsetup.c:1816 src/cryptsetup_reencrypt.c:1313 +msgid "Enter new passphrase: " +msgstr "新しいキーのパスフレーズを入力してください: " + +#: src/cryptsetup.c:1866 +msgid "Enter passphrase for keyslot to be converted: " +msgstr "変換されるキースロットのパスフレーズを入力してください: " + +#: src/cryptsetup.c:1890 +msgid "Only one device argument for isLuks operation is supported." +msgstr "isLuks は一つのデバイス引数しかサポートしていません。" + +#: src/cryptsetup.c:2074 src/cryptsetup.c:2095 +msgid "Option --header-backup-file is required." +msgstr "オプション --header-backup-file が必要です。" + +#: src/cryptsetup.c:2125 +#, c-format +msgid "%s is not cryptsetup managed device." +msgstr "%s は cryptsetup で管理されているデバイスではありません。" + +#: src/cryptsetup.c:2136 +#, c-format +msgid "Refresh is not supported for device type %s" +msgstr "リフレッシュはデバイスタイプ %s ではサポートされていません。" + +#: src/cryptsetup.c:2174 +#, c-format +msgid "Unrecognized metadata device type %s." +msgstr "%s は認識できないメタデータデータタイプです。" + +#: src/cryptsetup.c:2177 +msgid "Command requires device and mapped name as arguments." +msgstr "コマンドはデバイスとマップされた名前を引数として必要とします。" + +#: src/cryptsetup.c:2199 +#, c-format +msgid "" +"This operation will erase all keyslots on device %s.\n" +"Device will become unusable after this operation." +msgstr "" +"この処理はデバイス %s の全てのキースロットを消去します。\n" +"デバイスのデータは使用できなくなります。" + +#: src/cryptsetup.c:2206 +msgid "Operation aborted, keyslots were NOT wiped.\n" +msgstr "処理は中止されました。キースロットは消去されません。\n" + +#: src/cryptsetup.c:2243 +msgid "Invalid LUKS type, only luks1 and luks2 are supported." +msgstr "不正な LUKS タイプです。luks1 と luks2 しかサポートしていません。" + +#: src/cryptsetup.c:2261 +#, c-format +msgid "Device is already %s type." +msgstr "デバイスは既にタイプ %s です。" + +#: src/cryptsetup.c:2266 +#, c-format +msgid "This operation will convert %s to %s format.\n" +msgstr "この処理は %s から %s フォーマットに変換します。\n" + +#: src/cryptsetup.c:2272 +msgid "Operation aborted, device was NOT converted.\n" +msgstr "処理は中止されました。デバイスは変換されませんでした。\n" + +#: src/cryptsetup.c:2312 +msgid "Option --priority, --label or --subsystem is missing." +msgstr "オプション --priority, --label か --subsystem がありません。" + +#: src/cryptsetup.c:2346 src/cryptsetup.c:2379 src/cryptsetup.c:2402 +#, c-format +msgid "Token %d is invalid." +msgstr "トークン %d は不正です。" + +#: src/cryptsetup.c:2349 src/cryptsetup.c:2405 +#, c-format +msgid "Token %d in use." +msgstr "トークン %d は使用中です。" + +#: src/cryptsetup.c:2356 +#, c-format +msgid "Failed to add luks2-keyring token %d." +msgstr "luks2-キーリングトークン %d を追加できませんでした。" + +#: src/cryptsetup.c:2365 src/cryptsetup.c:2427 +#, c-format +msgid "Failed to assign token %d to keyslot %d." +msgstr "トークン %d をキースロット %d に割りあてられませんでした。" + +#: src/cryptsetup.c:2382 +#, c-format +msgid "Token %d is not in use." +msgstr "トークン %d は使われていません。" + +#: src/cryptsetup.c:2417 +msgid "Failed to import token from file." +msgstr "ファイルからトークンをインポートできません。" + +#: src/cryptsetup.c:2442 +#, c-format +msgid "Failed to get token %d for export." +msgstr "トークン %d をエクスポートのために取得できませんでした。" + +#: src/cryptsetup.c:2457 +msgid "--key-description parameter is mandatory for token add action." +msgstr "--key-description はトークン追加には必須です。" + +#: src/cryptsetup.c:2463 src/cryptsetup.c:2471 +msgid "Action requires specific token. Use --token-id parameter." +msgstr "トークンを必要としています。--token-id を使用してください。" + +#: src/cryptsetup.c:2476 +#, c-format +msgid "Invalid token operation %s." +msgstr "%s は不正なトークン処理です。" + +#: src/cryptsetup.c:2531 +#, c-format +msgid "Auto-detected active dm device '%s' for data device %s.\n" +msgstr "データデバイス %2s のアクティブな dm デバイス '%1s'を自動検出しました。\n" + +#: src/cryptsetup.c:2535 +#, c-format +msgid "Device %s is not a block device.\n" +msgstr "デバイス %s は有効なブロックデバイスではありません。\n" + +#: src/cryptsetup.c:2537 +#, c-format +msgid "Failed to auto-detect device %s holders." +msgstr "デバイス %s のホルダ(holders)を自動検出できません。" + +#: src/cryptsetup.c:2539 +#, 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 "" +"デバイス %s がアクティベートされているかどうか判断できません。\n" +"オフラインでの再暗号化を進めていいですか?\n" +"アクティベートされていたらデータが破壊されるかもしれません。\n" +"再暗号化をオンラインで行う場合は --active-name を代わりに使ってください。\n" + +#: src/cryptsetup.c:2619 +msgid "Invalid LUKS device type." +msgstr "LUKS デバイスタイプが不正です。" + +#: src/cryptsetup.c:2624 +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:2629 +msgid "Requested data offset must be less than or equal to half of --reduce-device-size parameter." +msgstr "要求されたデータオフセットは --reduce-device-size パラメータの半分以下である必要があります。" + +#: src/cryptsetup.c:2638 +#, c-format +msgid "Adjusting --reduce-device-size value to twice the --offset % (sectors).\n" +msgstr "--reduce-device-size の値を --offset % (セクタ) の倍にします。\n" + +#: src/cryptsetup.c:2642 +msgid "Encryption is supported only for LUKS2 format." +msgstr "暗号化は LUKS2 形式でしか使えません。" + +#: src/cryptsetup.c:2664 +#, c-format +msgid "Detected LUKS device on %s. Do you want to encrypt that LUKS device again?" +msgstr "LUKS デバイスが %s に検出されました。もう一度 LUKS デバイスを暗号化したいのですか?" + +#: src/cryptsetup.c:2679 +#, c-format +msgid "Temporary header file %s already exists. Aborting." +msgstr "テンポラリヘッダファイル %s は既に存在しているので、中止します。" + +#: src/cryptsetup.c:2681 src/cryptsetup.c:2688 +#, c-format +msgid "Cannot create temporary header file %s." +msgstr "テンポラリヘッダファイル %s を作成できません。" + +#: src/cryptsetup.c:2752 +#, c-format +msgid "%s/%s is now active and ready for online encryption." +msgstr "%s/%s がアクティブでオンライン暗号化可能です。" + +#: src/cryptsetup.c:2919 src/cryptsetup.c:2925 +msgid "Not enough free keyslots for reencryption." +msgstr "再暗号化に必要な空きキースロットがありません。" + +#: src/cryptsetup.c:2945 src/cryptsetup_reencrypt.c:1284 +msgid "Key file can be used only with --key-slot or with exactly one key slot active." +msgstr "キーファイルは --key-slot と使うか、1 つのキースロットだけアクティブの時にしか使えません。" + +#: src/cryptsetup.c:2954 src/cryptsetup_reencrypt.c:1325 +#: src/cryptsetup_reencrypt.c:1336 +#, c-format +msgid "Enter passphrase for key slot %d: " +msgstr "キースロット %d のパスフレーズを入力してください: " + +#: src/cryptsetup.c:2962 +#, c-format +msgid "Enter passphrase for key slot %u: " +msgstr "キースロット %u のパスフレーズを入力してください: " + +#: src/cryptsetup.c:3129 +msgid "Command requires device as argument." +msgstr "コマンドはデバイスを引数として必要とします。" + +#: src/cryptsetup.c:3151 +msgid "Only LUKS2 format is currently supported. Please use cryptsetup-reencrypt tool for LUKS1." +msgstr "現在 LUKS2 形式しかサポートされていません。LUKS1 には cryptsetup-reencrypt を使ってください。" + +#: src/cryptsetup.c:3163 +msgid "Legacy offline reencryption already in-progress. Use cryptsetup-reencrypt utility." +msgstr "古いオフライン再暗号化が実行中です。cryptsetup-reencrypt を使ってください。" + +#: src/cryptsetup.c:3173 src/cryptsetup_reencrypt.c:178 +msgid "Reencryption of device with integrity profile is not supported." +msgstr "整合性プロファイルつきのデバイスの再暗号化はサポートされていません。" + +#: src/cryptsetup.c:3181 +msgid "LUKS2 reencryption already initialized. Aborting operation." +msgstr "LUKS2 再暗号化が既に初期化済なので操作を中止します。" + +#: src/cryptsetup.c:3185 +msgid "LUKS2 device is not in reencryption." +msgstr "LUKS2 デバイスは再暗号化中ではありません。" + +#: src/cryptsetup.c:3212 +msgid " [--type ] []" +msgstr "<デバイス> [--type <タイプ>] [<名前>]" + +#: src/cryptsetup.c:3212 src/veritysetup.c:358 src/integritysetup.c:470 +msgid "open device as " +msgstr "デバイスを <名前> としてオープン" + +#: src/cryptsetup.c:3213 src/cryptsetup.c:3214 src/cryptsetup.c:3215 +#: src/veritysetup.c:359 src/veritysetup.c:360 src/integritysetup.c:471 +#: src/integritysetup.c:472 +msgid "" +msgstr "<名前>" + +#: src/cryptsetup.c:3213 src/veritysetup.c:359 src/integritysetup.c:471 +msgid "close device (remove mapping)" +msgstr "デバイスをクローズします (マッピングを削除します)" + +#: src/cryptsetup.c:3214 +msgid "resize active device" +msgstr "アクティブデバイスをリサイズ" + +#: src/cryptsetup.c:3215 +msgid "show device status" +msgstr "デバイスステータスを表示" + +#: src/cryptsetup.c:3216 +msgid "[--cipher ]" +msgstr "[--cipher <暗号>]" + +#: src/cryptsetup.c:3216 +msgid "benchmark cipher" +msgstr "暗号ベンチマーク" + +#: src/cryptsetup.c:3217 src/cryptsetup.c:3218 src/cryptsetup.c:3219 +#: src/cryptsetup.c:3220 src/cryptsetup.c:3221 src/cryptsetup.c:3228 +#: src/cryptsetup.c:3229 src/cryptsetup.c:3230 src/cryptsetup.c:3231 +#: src/cryptsetup.c:3232 src/cryptsetup.c:3233 src/cryptsetup.c:3234 +#: src/cryptsetup.c:3235 +msgid "" +msgstr "<デバイス>" + +#: src/cryptsetup.c:3217 +msgid "try to repair on-disk metadata" +msgstr "on-disk メタデータを修復しようとしています" + +#: src/cryptsetup.c:3218 +msgid "reencrypt LUKS2 device" +msgstr "LUKS2 デバイスを再暗号化" + +#: src/cryptsetup.c:3219 +msgid "erase all keyslots (remove encryption key)" +msgstr "全てのキースロットを消去します (暗号鍵も削除します)" + +#: src/cryptsetup.c:3220 +msgid "convert LUKS from/to LUKS2 format" +msgstr "LUKS2 から LUKS もしくは LUKS から LUKS2 形式に変換します" + +#: src/cryptsetup.c:3221 +msgid "set permanent configuration options for LUKS2" +msgstr "LUKS2 の permanent configuration オプションを設定します" + +#: src/cryptsetup.c:3222 src/cryptsetup.c:3223 +msgid " []" +msgstr "<デバイス> [<新しいキーファイル>]" + +#: src/cryptsetup.c:3222 +msgid "formats a LUKS device" +msgstr "LUKS デバイスをフォーマットします" + +#: src/cryptsetup.c:3223 +msgid "add key to LUKS device" +msgstr "LUKS デバイスにキーを追加します" + +#: src/cryptsetup.c:3224 src/cryptsetup.c:3225 src/cryptsetup.c:3226 +msgid " []" +msgstr "<デバイス> [<キーファイル>]" + +#: src/cryptsetup.c:3224 +msgid "removes supplied key or key file from LUKS device" +msgstr "与えられたキーかキーファイルを LUKS デバイスから削除します。" + +#: src/cryptsetup.c:3225 +msgid "changes supplied key or key file of LUKS device" +msgstr "与えられた LUKS デバイスのキーかキーファイルを変更します" + +#: src/cryptsetup.c:3226 +msgid "converts a key to new pbkdf parameters" +msgstr "キーを新しい pbkdf パラメータに変換します" + +#: src/cryptsetup.c:3227 +msgid " " +msgstr "<デバイス> <キースロット>" + +#: src/cryptsetup.c:3227 +msgid "wipes key with number from LUKS device" +msgstr "<キースロット>のキーを LUKS デバイスから削除します" + +#: src/cryptsetup.c:3228 +msgid "print UUID of LUKS device" +msgstr "LUKS デバイスの UUID を表示" + +#: src/cryptsetup.c:3229 +msgid "tests for LUKS partition header" +msgstr "<デバイス> の LUKS パーティションヘッダをテストします" + +#: src/cryptsetup.c:3230 +msgid "dump LUKS partition information" +msgstr "LUKS パーティション情報をダンプします" + +#: src/cryptsetup.c:3231 +msgid "dump TCRYPT device information" +msgstr "TCRYPT デバイス情報をダンプします" + +#: src/cryptsetup.c:3232 +msgid "Suspend LUKS device and wipe key (all IOs are frozen)" +msgstr "LUKS デバイスを停止してキーを削除します (全てのI/Oは停止します)" + +#: src/cryptsetup.c:3233 +msgid "Resume suspended LUKS device" +msgstr "停止していた LUKS デバイスを再開します" + +#: src/cryptsetup.c:3234 +msgid "Backup LUKS device header and keyslots" +msgstr "LUKS デバイスヘッダとキースロットをバックアップします" + +#: src/cryptsetup.c:3235 +msgid "Restore LUKS device header and keyslots" +msgstr "LUKS デバイスヘッダとキースロットをリストアします" + +#: src/cryptsetup.c:3236 +msgid " " +msgstr " <デバイス>" + +#: src/cryptsetup.c:3236 +msgid "Manipulate LUKS2 tokens" +msgstr "LUKS2 トークンを操作します" + +#: src/cryptsetup.c:3254 src/veritysetup.c:376 src/integritysetup.c:488 +msgid "" +"\n" +" is one of:\n" +msgstr "" +"\n" +" は以下のうちの一つです:\n" + +#: src/cryptsetup.c:3260 +msgid "" +"\n" +"You can also use old syntax aliases:\n" +"\topen: create (plainOpen), luksOpen, loopaesOpen, tcryptOpen\n" +"\tclose: remove (plainClose), luksClose, loopaesClose, tcryptClose\n" +msgstr "" +"\n" +"古い <アクション> という形式も使えます:\n" +"\topen: create (plainOpen), luksOpen, loopaesOpen, tcryptOpen\n" +"\tclose: remove (plainClose), luksClose, loopaesClose, tcryptClose\n" + +#: src/cryptsetup.c:3264 +#, c-format +msgid "" +"\n" +" is the device to create under %s\n" +" is the encrypted device\n" +" is the LUKS key slot number to modify\n" +" optional key file for the new key for luksAddKey action\n" +msgstr "" +"\n" +"<名前> は %s に作られるデバイス名\n" +"<デバイス> は暗号化デバイス\n" +"<キースロット> は変更する LUKS キースロット番号\n" +"<キーファイル> は luskAddKey でオプションで与えられる新しいキーのキーファイル\n" + +#: src/cryptsetup.c:3271 +#, c-format +msgid "" +"\n" +"Default compiled-in metadata format is %s (for luksFormat action).\n" +msgstr "" +"\n" +"デフォルトのコンパイル時に決められたメタデータ形式は %s です(luksFormat で使われます)。\n" + +#: src/cryptsetup.c:3276 +#, c-format +msgid "" +"\n" +"Default compiled-in key and passphrase parameters:\n" +"\tMaximum keyfile size: %dkB, Maximum interactive passphrase length %d (characters)\n" +"Default PBKDF for LUKS1: %s, iteration time: %d (ms)\n" +"Default PBKDF for LUKS2: %s\n" +"\tIteration time: %d, Memory required: %dkB, Parallel threads: %d\n" +msgstr "" +"\n" +"デフォルトのコンパイル時に決められたキーとパスフレーズのパラメータ:\n" +"\t最大キーファイルサイズ: %dkB, 最大パスフレーズ長 %d (文字数)\n" +"デフォルト LUKS1 向け PBKDF: %s, 繰り返す時間: %d (ms)\n" +"デフォルト LUKS2 向け PBKDF: %s\n" +"\t繰り返す時間: %d, 使うメモリ: %dkB, 並列スレッド: %d\n" + +#: src/cryptsetup.c:3287 +#, c-format +msgid "" +"\n" +"Default compiled-in device cipher parameters:\n" +"\tloop-AES: %s, Key %d bits\n" +"\tplain: %s, Key: %d bits, Password hashing: %s\n" +"\tLUKS: %s, Key: %d bits, LUKS header hashing: %s, RNG: %s\n" +msgstr "" +"\n" +"デフォルトのコンパイル時に決められたデバイス暗号化のパラメータ:\n" +"\tloop-AES: %s, キー %d ビット\n" +"\tplain: %s, キー: %d ビット, パスワードハッシュ: %s\n" +"\tLUKS: %s, キー: %d ビット, LUKS ヘッダハッシュ: %s, 乱数生成: %s\n" + +#: src/cryptsetup.c:3296 +msgid "\tLUKS: Default keysize with XTS mode (two internal keys) will be doubled.\n" +msgstr "\tLUKS: XTS モードのデフォルトキーサイズは (2つの内部キーがあるため) 倍になります。\n" + +#: src/cryptsetup.c:3312 src/veritysetup.c:532 src/integritysetup.c:630 +#, c-format +msgid "%s: requires %s as arguments" +msgstr "%s: は %s を引数で与える必要があります" + +#: src/cryptsetup.c:3350 src/veritysetup.c:421 src/integritysetup.c:527 +#: src/cryptsetup_reencrypt.c:1591 +msgid "Show this help message" +msgstr "このヘルプを表示します" + +#: src/cryptsetup.c:3351 src/veritysetup.c:422 src/integritysetup.c:528 +#: src/cryptsetup_reencrypt.c:1592 +msgid "Display brief usage" +msgstr "コンパクトな使用法表示をします" + +#: src/cryptsetup.c:3352 src/veritysetup.c:423 src/integritysetup.c:529 +#: src/cryptsetup_reencrypt.c:1593 +msgid "Print package version" +msgstr "パッケージのバージョンを表示" + +#: src/cryptsetup.c:3356 src/veritysetup.c:427 src/integritysetup.c:533 +#: src/cryptsetup_reencrypt.c:1597 +msgid "Help options:" +msgstr "ヘルプオプション:" + +#: src/cryptsetup.c:3357 src/veritysetup.c:428 src/integritysetup.c:534 +#: src/cryptsetup_reencrypt.c:1598 +msgid "Shows more detailed error messages" +msgstr "より詳細なエラーメッセージを表示" + +#: src/cryptsetup.c:3358 src/veritysetup.c:429 src/integritysetup.c:535 +#: src/cryptsetup_reencrypt.c:1599 +msgid "Show debug messages" +msgstr "デバッグメッセージを表示" + +#: src/cryptsetup.c:3359 +msgid "Show debug messages including JSON metadata" +msgstr "JSON メタデータを含むデバッグメッセージを表示" + +#: src/cryptsetup.c:3360 src/cryptsetup_reencrypt.c:1601 +msgid "The cipher used to encrypt the disk (see /proc/crypto)" +msgstr "ディスクを暗号化するのに用いられる暗号 (/proc/crypto を参照のこと)" + +#: src/cryptsetup.c:3361 src/cryptsetup_reencrypt.c:1603 +msgid "The hash used to create the encryption key from the passphrase" +msgstr "パスフレーズから暗号鍵を作るのに使われるハッシュ" + +#: src/cryptsetup.c:3362 +msgid "Verifies the passphrase by asking for it twice" +msgstr "パスフレーズは2回入力してもらって検証します" + +#: src/cryptsetup.c:3363 src/cryptsetup_reencrypt.c:1605 +msgid "Read the key from a file" +msgstr "ファイルからキーを読む" + +#: src/cryptsetup.c:3364 +msgid "Read the volume (master) key from file." +msgstr "ボリューム(マスター)キーをファイルから読む。" + +#: src/cryptsetup.c:3365 +msgid "Dump volume (master) key instead of keyslots info" +msgstr "ボリューム(マスター)キーをキースロット情報の代わりにダンプします" + +#: src/cryptsetup.c:3366 src/cryptsetup_reencrypt.c:1602 +msgid "The size of the encryption key" +msgstr "暗号鍵のサイズ" + +#: src/cryptsetup.c:3366 src/cryptsetup.c:3425 src/integritysetup.c:553 +#: src/integritysetup.c:557 src/integritysetup.c:561 +#: src/cryptsetup_reencrypt.c:1602 +msgid "BITS" +msgstr "ビット" + +#: src/cryptsetup.c:3367 src/cryptsetup_reencrypt.c:1618 +msgid "Limits the read from keyfile" +msgstr "キーファイルから読み込みの制限" + +#: src/cryptsetup.c:3367 src/cryptsetup.c:3368 src/cryptsetup.c:3369 +#: src/cryptsetup.c:3370 src/cryptsetup.c:3373 src/cryptsetup.c:3422 +#: src/cryptsetup.c:3423 src/cryptsetup.c:3431 src/cryptsetup.c:3432 +#: src/veritysetup.c:432 src/veritysetup.c:433 src/veritysetup.c:434 +#: src/veritysetup.c:437 src/veritysetup.c:438 src/integritysetup.c:542 +#: src/integritysetup.c:548 src/integritysetup.c:549 +#: src/cryptsetup_reencrypt.c:1617 src/cryptsetup_reencrypt.c:1618 +#: src/cryptsetup_reencrypt.c:1619 src/cryptsetup_reencrypt.c:1620 +msgid "bytes" +msgstr "バイト" + +#: src/cryptsetup.c:3368 src/cryptsetup_reencrypt.c:1617 +msgid "Number of bytes to skip in keyfile" +msgstr "キーファイルでスキップするバイト数" + +#: src/cryptsetup.c:3369 +msgid "Limits the read from newly added keyfile" +msgstr "新しく追加するキーファイルの読み込みの制限" + +#: src/cryptsetup.c:3370 +msgid "Number of bytes to skip in newly added keyfile" +msgstr "新しく追加するキーファイルでスキップするバイト数" + +#: src/cryptsetup.c:3371 +msgid "Slot number for new key (default is first free)" +msgstr "新しいキーのスロット番号 (デフォルトは最初の空き)" + +#: src/cryptsetup.c:3372 +msgid "The size of the device" +msgstr "デバイスのサイズ" + +#: src/cryptsetup.c:3372 src/cryptsetup.c:3374 src/cryptsetup.c:3375 +#: src/cryptsetup.c:3381 src/integritysetup.c:543 src/integritysetup.c:550 +msgid "SECTORS" +msgstr "セクタ" + +#: src/cryptsetup.c:3373 src/cryptsetup_reencrypt.c:1620 +msgid "Use only specified device size (ignore rest of device). DANGEROUS!" +msgstr "指定されたデバイスサイズ分だけ使います (デバイスの残りは無視します). 危険!" + +#: src/cryptsetup.c:3374 +msgid "The start offset in the backend device" +msgstr "バックエンドデバイスの開始オフセット" + +#: src/cryptsetup.c:3375 +msgid "How many sectors of the encrypted data to skip at the beginning" +msgstr "最初の暗号化データのセクタを何セクタスキップするか" + +#: src/cryptsetup.c:3376 +msgid "Create a readonly mapping" +msgstr "読み込み専用のマッピングを作成" + +#: src/cryptsetup.c:3377 src/integritysetup.c:536 +#: src/cryptsetup_reencrypt.c:1608 +msgid "Do not ask for confirmation" +msgstr "確認をしません" + +#: src/cryptsetup.c:3378 +msgid "Timeout for interactive passphrase prompt (in seconds)" +msgstr "パスフレーズの対話的入力のタイムアウト (秒単位)" + +#: src/cryptsetup.c:3378 src/cryptsetup.c:3379 src/integritysetup.c:537 +#: src/cryptsetup_reencrypt.c:1609 +msgid "secs" +msgstr "秒" + +#: src/cryptsetup.c:3379 src/integritysetup.c:537 +#: src/cryptsetup_reencrypt.c:1609 +msgid "Progress line update (in seconds)" +msgstr "進捗線の更新(秒単位)" + +#: src/cryptsetup.c:3380 src/cryptsetup_reencrypt.c:1610 +msgid "How often the input of the passphrase can be retried" +msgstr "パスフレーズの再試行の回数" + +#: src/cryptsetup.c:3381 +msgid "Align payload at sector boundaries - for luksFormat" +msgstr "luksFormat 向けにペイロードを セクタ境界に合わせます" + +#: src/cryptsetup.c:3382 +msgid "File with LUKS header and keyslots backup" +msgstr "LUKS ヘッダとキースロットバックアップのファイル" + +#: src/cryptsetup.c:3383 src/cryptsetup_reencrypt.c:1611 +msgid "Use /dev/random for generating volume key" +msgstr "ボリュームキーの生成に /dev/random を使います" + +#: src/cryptsetup.c:3384 src/cryptsetup_reencrypt.c:1612 +msgid "Use /dev/urandom for generating volume key" +msgstr "ボリュームキーの生成に /dev/urandom (擬似乱数)を使います" + +#: src/cryptsetup.c:3385 +msgid "Share device with another non-overlapping crypt segment" +msgstr "オーバーラップしない暗号セグメントのあるデバイスと共有します" + +#: src/cryptsetup.c:3386 src/veritysetup.c:441 +msgid "UUID for device to use" +msgstr "使用するデバイスの UUID" + +#: src/cryptsetup.c:3387 +msgid "Allow discards (aka TRIM) requests for device" +msgstr "デバイスに discards (TRIM) 処理を許可します" + +#: src/cryptsetup.c:3388 src/cryptsetup_reencrypt.c:1629 +msgid "Device or file with separated LUKS header" +msgstr "デバイスかファイルにある分離された LUKS ヘッダ" + +#: src/cryptsetup.c:3389 +msgid "Do not activate device, just check passphrase" +msgstr "デバイスをアクティベートせず、パスフレーズだけ確認する" + +#: src/cryptsetup.c:3390 +msgid "Use hidden header (hidden TCRYPT device)" +msgstr "隠されたヘッダを使う (隠された TCRYPT デバイス)" + +#: src/cryptsetup.c:3391 +msgid "Device is system TCRYPT drive (with bootloader)" +msgstr "デバイスはシステム TCRYPT ドライブ (ブートローダの対応が必要)" + +#: src/cryptsetup.c:3392 +msgid "Use backup (secondary) TCRYPT header" +msgstr "バックアップ (セカンダリ) TCRYPT ヘッダを使います" + +#: src/cryptsetup.c:3393 +msgid "Scan also for VeraCrypt compatible device" +msgstr "VeraCrypt 互換デバイスも探します" + +#: src/cryptsetup.c:3394 +msgid "Personal Iteration Multiplier for VeraCrypt compatible device" +msgstr "VeraCrypt 互換デバイス向けの Personal Iteration Multiplier" + +#: src/cryptsetup.c:3395 +msgid "Query Personal Iteration Multiplier for VeraCrypt compatible device" +msgstr "VeraCrypt互換デバイス向けの Query Personal Iteration Multiplier" + +#: src/cryptsetup.c:3396 +msgid "Type of device metadata: luks, luks1, luks2, plain, loopaes, tcrypt" +msgstr "デバイスメタデータのタイプ: luks, luks1, luks2, plain, loopaes, tcrypt" + +#: src/cryptsetup.c:3397 +msgid "Disable password quality check (if enabled)" +msgstr "パスワードの質の確認を無効にする (もし有効なら)" + +#: src/cryptsetup.c:3398 +msgid "Use dm-crypt same_cpu_crypt performance compatibility option" +msgstr "dm-crypt の same_cpu_crypt performance compatibility オプションを使う" + +#: src/cryptsetup.c:3399 +msgid "Use dm-crypt submit_from_crypt_cpus performance compatibility option" +msgstr "dm-crypt の submit_from_crypt_cpus performance compatibility オプションを使う" + +#: src/cryptsetup.c:3400 +msgid "Device removal is deferred until the last user closes it" +msgstr "デバイスの削除はデバイス上のリソースを使う人がいなくなるまで遅延されます" + +#: src/cryptsetup.c:3401 +msgid "Use global lock to serialize memory hard PBKDF (OOM workaround)" +msgstr "OOM Killer を回避するために PBKDF メモリのシリアライズにグローバルロックを使います" + +#: src/cryptsetup.c:3402 +msgid "PBKDF iteration time for LUKS (in ms)" +msgstr "LUKS 向けの PBKDF の繰り返し時間 (ms単位)" + +#: src/cryptsetup.c:3402 src/cryptsetup_reencrypt.c:1607 +msgid "msecs" +msgstr "ミリ秒" + +#: src/cryptsetup.c:3403 src/cryptsetup_reencrypt.c:1625 +msgid "PBKDF algorithm (for LUKS2): argon2i, argon2id, pbkdf2" +msgstr "LUKS2 向けの PBKDF アルゴリズム: argon2i, argon2id, pbkdf2" + +#: src/cryptsetup.c:3404 src/cryptsetup_reencrypt.c:1626 +msgid "PBKDF memory cost limit" +msgstr "PBKDF メモリコスト制限" + +#: src/cryptsetup.c:3404 src/cryptsetup_reencrypt.c:1626 +msgid "kilobytes" +msgstr "キロバイト" + +#: src/cryptsetup.c:3405 src/cryptsetup_reencrypt.c:1627 +msgid "PBKDF parallel cost" +msgstr "PBKDF 並列コスト" + +#: src/cryptsetup.c:3405 src/cryptsetup_reencrypt.c:1627 +msgid "threads" +msgstr "スレッド" + +#: src/cryptsetup.c:3406 src/cryptsetup_reencrypt.c:1628 +msgid "PBKDF iterations cost (forced, disables benchmark)" +msgstr "PBKDF 繰り返しコスト (強制する, ベンチマークしない)" + +#: src/cryptsetup.c:3407 +msgid "Keyslot priority: ignore, normal, prefer" +msgstr "キースロット優先度: ignore, normal, prefer" + +#: src/cryptsetup.c:3408 +msgid "Disable locking of on-disk metadata" +msgstr "ディスク上のメタデータのロックをしない" + +#: src/cryptsetup.c:3409 +msgid "Disable loading volume keys via kernel keyring" +msgstr "ボリュームキーの読み込みをカーネルキーリング経由で行わない" + +#: src/cryptsetup.c:3410 +msgid "Data integrity algorithm (LUKS2 only)" +msgstr "データ改ざん検出アルゴリズム (LUKS2 のみ)" + +#: src/cryptsetup.c:3411 src/integritysetup.c:564 +msgid "Disable journal for integrity device" +msgstr "データ改ざん検出が有効なデバイスのジャーナリングを禁止します" + +#: src/cryptsetup.c:3412 src/integritysetup.c:538 +msgid "Do not wipe device after format" +msgstr "フォーマット後にデバイスのデータを消去しない" + +#: src/cryptsetup.c:3413 +msgid "Do not ask for passphrase if activation by token fails" +msgstr "トークンによるアクティベーションが失敗したらパスフレーズを入力させません" + +#: src/cryptsetup.c:3414 +msgid "Token number (default: any)" +msgstr "トークンナンバー (デフォルト: 任意)" + +#: src/cryptsetup.c:3415 +msgid "Key description" +msgstr "キーデスクリプション" + +#: src/cryptsetup.c:3416 +msgid "Encryption sector size (default: 512 bytes)" +msgstr "暗号化セクタサイズ (デフォルト: 512 バイト)" + +#: src/cryptsetup.c:3417 +msgid "Set activation flags persistent for device" +msgstr "デバイスのアクティベーションフラグを持続的にします" + +#: src/cryptsetup.c:3418 +msgid "Set label for the LUKS2 device" +msgstr "LUKS2 デバイスのラベルを設定" + +#: src/cryptsetup.c:3419 +msgid "Set subsystem label for the LUKS2 device" +msgstr "LUKS2 デバイスにサブシステムレベルを設定します" + +#: src/cryptsetup.c:3420 +msgid "Create unbound (no assigned data segment) LUKS2 keyslot" +msgstr "場所の束縛のない LUKS2 キースロットを作成します" + +#: src/cryptsetup.c:3421 +msgid "Read or write the json from or to a file" +msgstr "json をファイルに読み書きする" + +#: src/cryptsetup.c:3422 +msgid "LUKS2 header metadata area size" +msgstr "LUKS2 ヘッダメタデータ領域サイズ" + +#: src/cryptsetup.c:3423 +msgid "LUKS2 header keyslots area size" +msgstr "LUKS2 ヘッダキースロット領域サイズ" + +#: src/cryptsetup.c:3424 +msgid "Refresh (reactivate) device with new parameters" +msgstr "デバイスを新しいパラメータデリフレッシュ(再アクティベート)する" + +#: src/cryptsetup.c:3425 +msgid "LUKS2 keyslot: The size of the encryption key" +msgstr "LUKS2 キースロット: 暗号鍵のサイズ" + +#: src/cryptsetup.c:3426 +msgid "LUKS2 keyslot: The cipher used for keyslot encryption" +msgstr "LUKS2 キースロット: キースロットの暗号化に使う暗号" + +#: src/cryptsetup.c:3427 +msgid "Encrypt LUKS2 device (in-place encryption)." +msgstr "LUKS2 デバイスを暗号化 (in-place で暗号化)" + +#: src/cryptsetup.c:3428 +msgid "Decrypt LUKS2 device (remove encryption)." +msgstr "LUKS2 デバイスを復号 (つまり暗号化をやめる)" + +#: src/cryptsetup.c:3429 +msgid "Initialize LUKS2 reencryption in metadata only." +msgstr "LUKS2 再暗号化をメタデータだけ初期化。" + +#: src/cryptsetup.c:3430 +msgid "Resume initialized LUKS2 reencryption only." +msgstr "初期化済 LUKS2 再暗号化だけ再開。" + +#: src/cryptsetup.c:3431 src/cryptsetup_reencrypt.c:1619 +msgid "Reduce data device size (move data offset). DANGEROUS!" +msgstr "データデバイスサイズを減らす (データオフセットを移動する). 危険!" + +#: src/cryptsetup.c:3432 +msgid "Maximal reencryption hotzone size." +msgstr "最大再暗号化ホットゾーンサイズ" + +#: src/cryptsetup.c:3433 +msgid "Reencryption hotzone resilience type (checksum,journal,none)" +msgstr "再暗号化ホットゾーン弾性(resilience)タイプe (checksum,journal,none)" + +#: src/cryptsetup.c:3434 +msgid "Reencryption hotzone checksums hash" +msgstr "再暗号化ホットゾーンチェックサムハッシュ" + +#: src/cryptsetup.c:3435 +msgid "Override device autodetection of dm device to be reencrypted" +msgstr "再暗号化する dm デバイスの自動検出を上書きする" + +#: src/cryptsetup.c:3451 src/veritysetup.c:462 src/integritysetup.c:583 +msgid "[OPTION...] " +msgstr "[オプション...] <アクション> <アクション特有>" + +#: src/cryptsetup.c:3502 src/veritysetup.c:496 src/integritysetup.c:594 +msgid "Argument missing." +msgstr "<アクション> がありません。" + +#: src/cryptsetup.c:3565 src/veritysetup.c:527 src/integritysetup.c:625 +msgid "Unknown action." +msgstr "未知のアクションです。" + +#: src/cryptsetup.c:3575 +msgid "Parameter --refresh is only allowed with open or refresh commands.\n" +msgstr "--refresh は open か refresh の時にしか使えません。\n" + +#: src/cryptsetup.c:3580 +msgid "Options --refresh and --test-passphrase are mutually exclusive.\n" +msgstr "--refresh と --test-passphrase は同時には使えません。\n" + +#: src/cryptsetup.c:3585 +msgid "Option --deferred is allowed only for close command.\n" +msgstr "--deferred は close でしか使えません。\n" + +#: src/cryptsetup.c:3590 +msgid "Option --shared is allowed only for open of plain device.\n" +msgstr "--shared は open の plain デバイスにしか使えません。\n" + +#: src/cryptsetup.c:3595 +msgid "Option --allow-discards is allowed only for open operation.\n" +msgstr "--allow-discards は open でしか使えません。\n" + +#: src/cryptsetup.c:3600 +msgid "Option --persistent is allowed only for open operation.\n" +msgstr "--persistent は open でしか使えません。\n" + +#: src/cryptsetup.c:3605 +msgid "Option --serialize-memory-hard-pbkdf is allowed only for open operation.\n" +msgstr "--serialize-memory-hard-pbkdf は open でしか使えません。\n" + +#: src/cryptsetup.c:3610 +msgid "Option --persistent is not allowed with --test-passphrase.\n" +msgstr "--persistent は --test-passphrase と一緒には使えません。\n" + +#: src/cryptsetup.c:3620 +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 "" +"--key-size は luksFormat か luksAddKey で --unbound をつけた場合か、\n" +"open, benchmark の時しか使えません。キーファイルについて制限をつけたい場合は --keyfile-size=(バイト) を使ってください。" + +#: src/cryptsetup.c:3626 +msgid "Option --integrity is allowed only for luksFormat (LUKS2).\n" +msgstr "--integrity は luksFormat (LUKS2) でしか使えません。\n" + +#: src/cryptsetup.c:3631 +msgid "Option --integrity-no-wipe can be used only for format action with integrity extension.\n" +msgstr "--integrity-no-wipe は format で integrity extension 付きの時しか使えません。\n" + +#: src/cryptsetup.c:3637 +msgid "Options --label and --subsystem are allowed only for luksFormat and config LUKS2 operations.\n" +msgstr "--label と --subsystem は luksFormat で config LUKS2 operations にしか使えません。\n" + +#: src/cryptsetup.c:3643 +msgid "Option --test-passphrase is allowed only for open of LUKS and TCRYPT devices.\n" +msgstr "--test-passphrase は LUKS か TCRYPT デバイスの open にしか使えません。.\n" + +#: src/cryptsetup.c:3648 src/cryptsetup_reencrypt.c:1692 +msgid "Key size must be a multiple of 8 bits" +msgstr "キーサイズは 8bit の倍数でなければなりません" + +#: src/cryptsetup.c:3654 src/cryptsetup_reencrypt.c:1378 +#: src/cryptsetup_reencrypt.c:1697 +msgid "Key slot is invalid." +msgstr "キースロットは不正です。" + +#: src/cryptsetup.c:3661 +msgid "Option --key-file takes precedence over specified key file argument." +msgstr "--key-file は他で指定されたキーファイルを上書きします。" + +#: src/cryptsetup.c:3668 src/veritysetup.c:539 src/integritysetup.c:649 +#: src/cryptsetup_reencrypt.c:1671 +msgid "Negative number for option not permitted." +msgstr "オプションに負の数を与えられません。" + +#: src/cryptsetup.c:3672 +msgid "Only one --key-file argument is allowed." +msgstr "--key-file は一つしか使えません。" + +#: src/cryptsetup.c:3676 src/cryptsetup_reencrypt.c:1663 +#: src/cryptsetup_reencrypt.c:1701 +msgid "Only one of --use-[u]random options is allowed." +msgstr "--use-[u]random は一つしか使えません。" + +#: src/cryptsetup.c:3680 +msgid "Option --use-[u]random is allowed only for luksFormat." +msgstr "--use-[u]random は luksFormat にしか使えません。" + +#: src/cryptsetup.c:3684 +msgid "Option --uuid is allowed only for luksFormat and luksUUID." +msgstr "--uuid は luksFormat か luksUUID でしか使えません。" + +#: src/cryptsetup.c:3688 +msgid "Option --align-payload is allowed only for luksFormat." +msgstr "--align-payload は luksFormat でしか使えません。" + +#: src/cryptsetup.c:3692 +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:3697 +msgid "Invalid LUKS2 metadata size specification." +msgstr "不正なLUKS2 メタデータサイズです。" + +#: src/cryptsetup.c:3701 +msgid "Invalid LUKS2 keyslots size specification." +msgstr "不正な LUKS2 キースロットサイズです。" + +#: src/cryptsetup.c:3705 +msgid "Options --align-payload and --offset cannot be combined." +msgstr "--align-payload と --offset は一緒に使えません。" + +#: src/cryptsetup.c:3711 +msgid "Option --skip is supported only for open of plain and loopaes devices.\n" +msgstr "--skip は plain の open か loopaes デバイスにしか使えません。\n" + +#: src/cryptsetup.c:3718 +msgid "Option --offset is supported only for open of plain and loopaes devices, luksFormat and device reencryption.\n" +msgstr "--offset は plain の open か loopaes デバイス、luksFormat と再暗号化にしか使えません。\n" + +#: src/cryptsetup.c:3724 +msgid "Option --tcrypt-hidden, --tcrypt-system or --tcrypt-backup is supported only for TCRYPT device.\n" +msgstr "--tcrypt-hidden と --tcrypt-system と --tcrypt-backup は TCRYPT デバイスしか使えません。\n" + +#: src/cryptsetup.c:3729 +msgid "Option --tcrypt-hidden cannot be combined with --allow-discards.\n" +msgstr "--tcrypt-hidden は --allow-discards と一緒に使えません。\n" + +#: src/cryptsetup.c:3734 +msgid "Option --veracrypt is supported only for TCRYPT device type.\n" +msgstr "--veracrypt は TCRYPT デバイスでしか使えません。\n" + +#: src/cryptsetup.c:3740 +msgid "Invalid argument for parameter --veracrypt-pim supplied.\n" +msgstr "--veracrypt-pim の引数が不正です。\n" + +#: src/cryptsetup.c:3744 +msgid "Option --veracrypt-pim is supported only for VeraCrypt compatible devices.\n" +msgstr "--veracrypt-pim は VeraCrypt 互換デバイスにしか使えません。\n" + +#: src/cryptsetup.c:3752 +msgid "Option --veracrypt-query-pim is supported only for VeraCrypt compatible devices.\n" +msgstr "--veracrypt-query-pim は VeraCrypt 互換デバイスにしか使えません。\n" + +#: src/cryptsetup.c:3756 +msgid "The options --veracrypt-pim and --veracrypt-query-pim are mutually exclusive.\n" +msgstr "--veracrypt-pim と --veracrypt-query-pim はどちらかしか使えません。\n" + +#: src/cryptsetup.c:3763 +msgid "Option --priority can be only ignore/normal/prefer.\n" +msgstr "--priority の引数は ignore/normal/prefer のいずれかのみです。\n" + +#: src/cryptsetup.c:3768 +msgid "Keyslot specification is required.\n" +msgstr "キースロットの指定が必要です。\n" + +#: src/cryptsetup.c:3773 src/cryptsetup_reencrypt.c:1677 +msgid "Password-based key derivation function (PBKDF) can be only pbkdf2 or argon2i/argon2id.\n" +msgstr "パスワードからキーを作る関数 (PBKDF) は pbkdf2 argon2i argon2id のいずれかのみです。\n" + +#: src/cryptsetup.c:3778 src/cryptsetup_reencrypt.c:1682 +msgid "PBKDF forced iterations cannot be combined with iteration time option.\n" +msgstr "PBKDF の繰り返し回数の強制と回数指定オプションは共存できません。\n" + +#: src/cryptsetup.c:3784 +msgid "Sector size option is not supported for this command.\n" +msgstr "このコマンドではセクタサイズオプションはサポートされていません。\n" + +#: src/cryptsetup.c:3790 +msgid "Unsupported encryption sector size.\n" +msgstr "サポートしていない暗号化セクタサイズです。\n" + +#: src/cryptsetup.c:3795 +msgid "Key size is required with --unbound option.\n" +msgstr "--unbound にはキーサイズが必要です。\n" + +#: src/cryptsetup.c:3800 +msgid "Option --unbound may be used only with luksAddKey action.\n" +msgstr "--unbound は luksAddKey でしか使えません。\n" + +#: src/cryptsetup.c:3805 +msgid "Option --refresh may be used only with open action.\n" +msgstr "--refresh は open でしか使えません。\n" + +#: src/cryptsetup.c:3816 +msgid "Cannot disable metadata locking.\n" +msgstr "メタデータロックを禁止できません。\n" + +#: src/cryptsetup.c:3826 +msgid "Invalid max reencryption hotzone size specification." +msgstr "再暗号化ホットゾーン最大サイズの指定が不正です。" + +#: src/cryptsetup.c:3834 src/cryptsetup_reencrypt.c:1706 +#: src/cryptsetup_reencrypt.c:1711 +msgid "Invalid device size specification." +msgstr "デバイスサイズの指定が不正です。" + +#: src/cryptsetup.c:3837 +msgid "Maximum device reduce size is 1 GiB." +msgstr "デバイスを減らせる最大値は 1 GiB です。" + +#: src/cryptsetup.c:3840 src/cryptsetup_reencrypt.c:1717 +msgid "Reduce size must be multiple of 512 bytes sector." +msgstr "減らすサイズは 512 バイトセクタの倍数である必要があります。" + +#: src/cryptsetup.c:3845 +msgid "Invalid data size specification." +msgstr "データサイズの指定が不正です。" + +#: src/cryptsetup.c:3850 +msgid "Reduce size overflow." +msgstr "減らすサイズのオーバーフロー。" + +#: src/cryptsetup.c:3854 +msgid "LUKS2 decryption requires option --header." +msgstr "LUKS2 復号には --header が必要です。" + +#: src/cryptsetup.c:3858 +msgid "Device size must be multiple of 512 bytes sector." +msgstr "デバイスサイズは 512 バイトセクタの倍数である必要があります。" + +#: src/cryptsetup.c:3862 +msgid "Options --reduce-device-size and --data-size cannot be combined." +msgstr "--reduce-device-size と --data-size は一緒に使えません。" + +#: src/cryptsetup.c:3866 +msgid "Options --device-size and --size cannot be combined." +msgstr "--device-size と --size は一緒に使えません。" + +#: src/veritysetup.c:65 +msgid "Invalid salt string specified." +msgstr "不正なソルト文字列が指定されました。" + +#: src/veritysetup.c:96 +#, c-format +msgid "Cannot create hash image %s for writing." +msgstr "ハッシュイメージ %s を書けるように作成できませんでした。" + +#: src/veritysetup.c:106 +#, c-format +msgid "Cannot create FEC image %s for writing." +msgstr "FEC イメージ %s を書けるように作成できませんでした。" + +#: src/veritysetup.c:176 +msgid "Invalid root hash string specified." +msgstr "不正なルートハッシュ文字列が指定されました。" + +#: src/veritysetup.c:356 +msgid " " +msgstr "<データデバイス> <ハッシュデバイス>" + +#: src/veritysetup.c:356 src/integritysetup.c:469 +msgid "format device" +msgstr "デバイスをフォーマット" + +#: src/veritysetup.c:357 +msgid " " +msgstr "<データデバイス> <ハッシュデバイス> <ルートハッシュ>" + +#: src/veritysetup.c:357 +msgid "verify device" +msgstr "デバイスを検証" + +#: src/veritysetup.c:358 +msgid " " +msgstr "<データデバイス> <名前> <ハッシュデバイス> <ルートハッシュ>" + +#: src/veritysetup.c:360 src/integritysetup.c:472 +msgid "show active device status" +msgstr "アクティブデバイスのステータスを表示" + +#: src/veritysetup.c:361 +msgid "" +msgstr "<ハッシュデバイス>" + +#: src/veritysetup.c:361 src/integritysetup.c:473 +msgid "show on-disk information" +msgstr "ディスク上の情報を表示" + +#: src/veritysetup.c:380 +#, c-format +msgid "" +"\n" +" is the device to create under %s\n" +" is the data device\n" +" is the device containing verification data\n" +" hash of the root node on \n" +msgstr "" +"\n" +"<名前> は %s に作られるデバイス\n" +"<データデバイス> はデータが入るデバイス\n" +"<ハッシュデバイス> は検証用データが入るデバイス\n" +"<ルートハッシュ> は <ハッシュデバイス> のルートノードのハッシュ\n" + +#: src/veritysetup.c:387 +#, c-format +msgid "" +"\n" +"Default compiled-in dm-verity parameters:\n" +"\tHash: %s, Data block (bytes): %u, Hash block (bytes): %u, Salt size: %u, Hash format: %u\n" +msgstr "" +"\n" +"コンパイル時に決めた dm-verity のデフォルトパラメータ:\n" +"\tハッシュ: %s, データブロック (バイト): %u, ハッシュブロック (バイト): %u, ソルトサイズ: %u, ハッシュフォーマット: %u\n" + +#: src/veritysetup.c:430 +msgid "Do not use verity superblock" +msgstr "verity スーパーブロックを使いません" + +#: src/veritysetup.c:431 +msgid "Format type (1 - normal, 0 - original Chrome OS)" +msgstr "フォーマットタイプ (1 - ノーマル, 0 - Chrome OS 形式)" + +#: src/veritysetup.c:431 +msgid "number" +msgstr "数字" + +#: src/veritysetup.c:432 +msgid "Block size on the data device" +msgstr "データデバイスのブロックサイズ" + +#: src/veritysetup.c:433 +msgid "Block size on the hash device" +msgstr "ハッシュデバイスのブロックサイズ" + +#: src/veritysetup.c:434 +msgid "FEC parity bytes" +msgstr "FEC パリティバイト" + +#: src/veritysetup.c:435 +msgid "The number of blocks in the data file" +msgstr "データファイルのブロック数" + +#: src/veritysetup.c:435 +msgid "blocks" +msgstr "ブロック" + +#: src/veritysetup.c:436 +msgid "Path to device with error correction data" +msgstr "誤り訂正用データが格納されるデバイスのパス" + +#: src/veritysetup.c:436 src/integritysetup.c:540 +msgid "path" +msgstr "パス" + +#: src/veritysetup.c:437 +msgid "Starting offset on the hash device" +msgstr "ハッシュデバイスの開始オフセット" + +#: src/veritysetup.c:438 +msgid "Starting offset on the FEC device" +msgstr "FEC デバイスの開始オフセット" + +#: src/veritysetup.c:439 +msgid "Hash algorithm" +msgstr "ハッシュアルゴリズム" + +#: src/veritysetup.c:439 +msgid "string" +msgstr "文字列" + +#: src/veritysetup.c:440 +msgid "Salt" +msgstr "ソルト" + +#: src/veritysetup.c:440 +msgid "hex string" +msgstr "16進数文字列" + +#: src/veritysetup.c:442 +msgid "Restart kernel if corruption is detected" +msgstr "破損が検出されたらカーネルを再起動する" + +#: src/veritysetup.c:443 +msgid "Ignore corruption, log it only" +msgstr "破損はログするだけで再起動まではしない" + +#: src/veritysetup.c:444 +msgid "Do not verify zeroed blocks" +msgstr "0 埋めされたブロックは検証しない" + +#: src/veritysetup.c:445 +msgid "Verify data block only the first time it is read" +msgstr "最初に読む時一度だけデータブロックを検証する" + +#: src/veritysetup.c:545 +msgid "Option --ignore-corruption, --restart-on-corruption or --ignore-zero-blocks is allowed only for open operation.\n" +msgstr "--ignore-corruption, --restart-on-corruption, --ignore-zero-blocks は open 時にか使えません。\n" + +#: src/veritysetup.c:550 +msgid "Option --ignore-corruption and --restart-on-corruption cannot be used together.\n" +msgstr "--ignore-corruption と --restart-on-corruption は同時に使えません。\n" + +#: src/integritysetup.c:83 src/utils_password.c:305 +#, c-format +msgid "Cannot read keyfile %s." +msgstr "キーファイル %s を読みこめませんでした。" + +#: src/integritysetup.c:87 src/utils_password.c:310 +#, c-format +msgid "Cannot read %d bytes from keyfile %s." +msgstr "%d バイトをキーファイル %s から読みこめませんでした。" + +#: src/integritysetup.c:250 +#, c-format +msgid "Formatted with tag size %u, internal integrity %s.\n" +msgstr "タグサイズ %u、内部整合性は %s でフォーマットされました。\n" + +#: src/integritysetup.c:469 src/integritysetup.c:473 +msgid "" +msgstr "<整合性デバイス>" + +#: src/integritysetup.c:470 +msgid " " +msgstr "<整合性デバイス> <名前>" + +#: src/integritysetup.c:492 +#, c-format +msgid "" +"\n" +" is the device to create under %s\n" +" is the device containing data with integrity tags\n" +msgstr "" +"\n" +"<名前> は %s に作られるデバイス\n" +"<整合性デバイス> は整合性タグを格納するデバイス\n" + +#: src/integritysetup.c:497 +#, c-format +msgid "" +"\n" +"Default compiled-in dm-integrity parameters:\n" +"\tTag size: %u bytes, Checksum algorithm: %s\n" +msgstr "" +"\n" +"コンパイル時に決められたデフォルトの dm-integrity のパラメータ:\n" +"\tタグサイズ: %u バイト, チェックサムアルゴリズム: %s\n" + +#: src/integritysetup.c:540 +msgid "Path to data device (if separated)" +msgstr "データデバイスのパス (分離されている場合)" + +#: src/integritysetup.c:542 +msgid "Journal size" +msgstr "ジャーナルサイズ" + +#: src/integritysetup.c:543 +msgid "Interleave sectors" +msgstr "インターリーブするセクタ数" + +#: src/integritysetup.c:544 +msgid "Journal watermark" +msgstr "ジャーナルをフラッシュする閾値" + +#: src/integritysetup.c:544 +msgid "percent" +msgstr "パーセント" + +#: src/integritysetup.c:545 +msgid "Journal commit time" +msgstr "ジャーナルがコミットされるまでの時間" + +#: src/integritysetup.c:545 src/integritysetup.c:547 +msgid "ms" +msgstr "ミリ秒" + +#: src/integritysetup.c:546 +msgid "Number of 512-byte sectors per bit (bitmap mode)." +msgstr "ビットあたりの 512 バイトセクタ (bitmap モード)。" + +#: src/integritysetup.c:547 +msgid "Bitmap mode flush time" +msgstr "Bitmap モードのフラッシュ時間" + +#: src/integritysetup.c:548 +msgid "Tag size (per-sector)" +msgstr "タグサイズ (セクタ毎)" + +#: src/integritysetup.c:549 +msgid "Sector size" +msgstr "セクタサイズ" + +#: src/integritysetup.c:550 +msgid "Buffers size" +msgstr "バッファサイズ" + +#: src/integritysetup.c:552 +msgid "Data integrity algorithm" +msgstr "データ整合性アルゴリズム" + +#: src/integritysetup.c:553 +msgid "The size of the data integrity key" +msgstr "データ整合性キーのサイズ" + +#: src/integritysetup.c:554 +msgid "Read the integrity key from a file" +msgstr "整合性キーをファイルから読み込む" + +#: src/integritysetup.c:556 +msgid "Journal integrity algorithm" +msgstr "ジャーナル整合性アルゴリズム" + +#: src/integritysetup.c:557 +msgid "The size of the journal integrity key" +msgstr "ジャーナル整合性キーのサイズ" + +#: src/integritysetup.c:558 +msgid "Read the journal integrity key from a file" +msgstr "ジャーナル整合性キーをファイルから読み込む" + +#: src/integritysetup.c:560 +msgid "Journal encryption algorithm" +msgstr "ジャーナル暗号化アルゴリズム" + +#: src/integritysetup.c:561 +msgid "The size of the journal encryption key" +msgstr "ジャーナル暗号化キーのサイズ" + +#: src/integritysetup.c:562 +msgid "Read the journal encryption key from a file" +msgstr "ジャーナル暗号化キーをファイルから読み込む" + +#: src/integritysetup.c:565 +msgid "Recovery mode (no journal, no tag checking)" +msgstr "リカバリモード (ジャーナル不使用、タグ確認なし)" + +#: src/integritysetup.c:566 +msgid "Use bitmap to track changes and disable journal for integrity device" +msgstr "変更の追跡に bitmap を使いジャーナルの整合性デバイスの無効にします" + +#: src/integritysetup.c:567 +msgid "Recalculate initial tags automatically." +msgstr "初期タグを自動で再計算する。" + +#: src/integritysetup.c:640 +msgid "Option --integrity-recalculate can be used only for open action." +msgstr "--integrity-recalculate は open でしか使えません。" + +#: src/integritysetup.c:655 +msgid "Options --journal-size, --interleave-sectors, --sector-size, --tag-size and --no-wipe can be used only for format action.\n" +msgstr "--journal-size, --interleave-sectors, --sector-size, --tag-size, --no-wipe format でしか使えません。\n" + +#: src/integritysetup.c:661 +msgid "Invalid journal size specification." +msgstr "不正なジャーナルサイズの指定です。" + +#: src/integritysetup.c:666 +msgid "Both key file and key size options must be specified." +msgstr "キーファイルとキーサイズの両方の指定が必要です。" + +#: src/integritysetup.c:669 +msgid "Integrity algorithm must be specified if integrity key is used." +msgstr "整合性キーを使う場合はアルゴリズムの指定が必要です。" + +#: src/integritysetup.c:674 +msgid "Both journal integrity key file and key size options must be specified." +msgstr "ジャーナル整合性キーファイルとキーサイズの両方の指定が必要です。" + +#: src/integritysetup.c:677 +msgid "Journal integrity algorithm must be specified if journal integrity key is used." +msgstr "ジャーナル整合性キーを使う場合はアルゴリズムの指定が必要です。" + +#: src/integritysetup.c:682 +msgid "Both journal encryption key file and key size options must be specified." +msgstr "ジャーナル暗号キーファイルとキーサイズの両方の指定が必要です。" + +#: src/integritysetup.c:685 +msgid "Journal encryption algorithm must be specified if journal encryption key is used." +msgstr "ジャーナル暗号キーを使う場合はアルゴリズムの指定が必要です。" + +#: src/integritysetup.c:689 +msgid "Recovery and bitmap mode options are mutually exclusive." +msgstr "リカバリと bitmap モードオプションは同時には使えません。" + +#: src/integritysetup.c:693 +msgid "Journal options cannot be used in bitmap mode." +msgstr "ジャーナルオプションは bitmap モードでは使えません。" + +#: src/integritysetup.c:697 +msgid "Bitmap options can be used only in bitmap mode." +msgstr "bitmap オプションは bitmap モードでしか使えません。" + +#: src/cryptsetup_reencrypt.c:172 +msgid "Reencryption already in-progress." +msgstr "既に再暗号化中です。" + +#: src/cryptsetup_reencrypt.c:201 +#, c-format +msgid "Cannot exclusively open %s, device in use." +msgstr "デバイスが使用中のため %s を排他的にオープンできません。" + +#: src/cryptsetup_reencrypt.c:215 src/cryptsetup_reencrypt.c:1127 +msgid "Allocation of aligned memory failed." +msgstr "アライメントつきメモリの確保ができませんでした。" + +#: src/cryptsetup_reencrypt.c:222 +#, c-format +msgid "Cannot read device %s." +msgstr "デバイス %s を読めません。" + +#: src/cryptsetup_reencrypt.c:233 +#, c-format +msgid "Marking LUKS1 device %s unusable." +msgstr "LUKS1 デバイス %s を使用不可としてマークします。" + +#: src/cryptsetup_reencrypt.c:237 +#, c-format +msgid "Setting LUKS2 offline reencrypt flag on device %s." +msgstr "LUKS2 offline reencrypt フラグをデバイス %s に設定します。" + +#: src/cryptsetup_reencrypt.c:254 +#, c-format +msgid "Cannot write device %s." +msgstr "デバイス %s に書き込めません。" + +#: src/cryptsetup_reencrypt.c:302 +msgid "Cannot write reencryption log file." +msgstr "再暗号化ログファイルに書きこめません。" + +#: src/cryptsetup_reencrypt.c:358 +msgid "Cannot read reencryption log file." +msgstr "再暗号化ログファイルを読み込めません。" + +#: src/cryptsetup_reencrypt.c:396 +#, c-format +msgid "Log file %s exists, resuming reencryption.\n" +msgstr "ログファイル %s が既にあるので再暗号化を再開します。\n" + +#: src/cryptsetup_reencrypt.c:445 +msgid "Activating temporary device using old LUKS header." +msgstr "古い LUKS ヘッダを使っているテンポラリデバイスを有効にします。" + +#: src/cryptsetup_reencrypt.c:455 +msgid "Activating temporary device using new LUKS header." +msgstr "新しい LUKS ヘッダを使っているテンポラリデバイスを有効にします。" + +#: src/cryptsetup_reencrypt.c:465 +msgid "Activation of temporary devices failed." +msgstr "テンポラリデバイスの有効化に失敗しました。" + +#: src/cryptsetup_reencrypt.c:551 +msgid "Failed to set data offset." +msgstr "データオフセットの設定に失敗しました。" + +#: src/cryptsetup_reencrypt.c:557 +msgid "Failed to set metadata size." +msgstr "メタデータサイズの設定に失敗しました。" + +#: src/cryptsetup_reencrypt.c:565 +#, c-format +msgid "New LUKS header for device %s created." +msgstr "デバイス %s の新しい LUKS ヘッダを作成しました。" + +#: src/cryptsetup_reencrypt.c:625 +#, c-format +msgid "This version of cryptsetup-reencrypt can't handle new internal token type %s." +msgstr "このバージョンの cryptsetup-reencrypt は新しい内部トークンタイプ %s を扱えません。" + +#: src/cryptsetup_reencrypt.c:647 +msgid "Failed to read activation flags from backup header." +msgstr "アクティベーションフラグをバックアップヘッダから読み込めません。" + +#: src/cryptsetup_reencrypt.c:651 +msgid "Failed to write activation flags to new header." +msgstr "アクティベーションフラグを新しいヘッダに書き込めません。" + +#: src/cryptsetup_reencrypt.c:655 src/cryptsetup_reencrypt.c:659 +msgid "Failed to read requirements from backup header." +msgstr "バックアップヘッダから要求(requirements)を読み込めません。" + +#: src/cryptsetup_reencrypt.c:697 +#, c-format +msgid "%s header backup of device %s created." +msgstr "%s ヘッダバックアップデバイス %s が作成されました。" + +#: src/cryptsetup_reencrypt.c:760 +msgid "Creation of LUKS backup headers failed." +msgstr "LUKS バックアップヘッダが作成できません。" + +#: src/cryptsetup_reencrypt.c:893 +#, c-format +msgid "Cannot restore %s header on device %s." +msgstr "デバイス %2s の %1s ヘッダが復元できません。" + +#: src/cryptsetup_reencrypt.c:895 +#, c-format +msgid "%s header on device %s restored." +msgstr "デバイス %2s の %1s ヘッダを復元しました。" + +#: src/cryptsetup_reencrypt.c:1099 src/cryptsetup_reencrypt.c:1105 +msgid "Cannot open temporary LUKS device." +msgstr "テンポラリ LUKS デバイスをオープンできません。" + +#: src/cryptsetup_reencrypt.c:1110 src/cryptsetup_reencrypt.c:1115 +msgid "Cannot get device size." +msgstr "デバイスサイズを取得できません。" + +#: src/cryptsetup_reencrypt.c:1150 +msgid "IO error during reencryption." +msgstr "再暗号化中に I/O エラーが発生しました。" + +#: src/cryptsetup_reencrypt.c:1181 +msgid "Provided UUID is invalid." +msgstr "与えられた UUID が不正です。" + +#: src/cryptsetup_reencrypt.c:1407 +msgid "Cannot open reencryption log file." +msgstr "再暗号化ログファイルを開けません。" + +#: src/cryptsetup_reencrypt.c:1413 +msgid "No decryption in progress, provided UUID can be used only to resume suspended decryption process." +msgstr "復号を実行中ではありません。与えられた UUID は中止された復号を再開するためだけに使えます。" + +#: src/cryptsetup_reencrypt.c:1488 +#, c-format +msgid "Changed pbkdf parameters in keyslot %i." +msgstr "キースロット %i の pbkdf パラメータを変更しました。" + +#: src/cryptsetup_reencrypt.c:1600 +msgid "Reencryption block size" +msgstr "再暗号化のブロックサイズ" + +#: src/cryptsetup_reencrypt.c:1600 +msgid "MiB" +msgstr "MiB" + +#: src/cryptsetup_reencrypt.c:1604 +msgid "Do not change key, no data area reencryption" +msgstr "キーを変えず、データ領域の再暗号化を行わない" + +#: src/cryptsetup_reencrypt.c:1606 +msgid "Read new volume (master) key from file" +msgstr "新しいボリューム(マスター)キーをファイルから読み込む" + +#: src/cryptsetup_reencrypt.c:1607 +msgid "PBKDF2 iteration time for LUKS (in ms)" +msgstr "LUKS 向け PBKDF2 の繰り返し時間 (ミリ秒単位)" + +#: src/cryptsetup_reencrypt.c:1613 +msgid "Use direct-io when accessing devices" +msgstr "デバイスアクセス時に direct-io を使う" + +#: src/cryptsetup_reencrypt.c:1614 +msgid "Use fsync after each block" +msgstr "ブロック毎に fsync() する" + +#: src/cryptsetup_reencrypt.c:1615 +msgid "Update log file after every block" +msgstr "ログファイルをブロック毎に更新する" + +#: src/cryptsetup_reencrypt.c:1616 +msgid "Use only this slot (others will be disabled)" +msgstr "このスロットだけ使う (残りは無効化されます)" + +#: src/cryptsetup_reencrypt.c:1621 +msgid "Create new header on not encrypted device" +msgstr "暗号化されていないデバイスに新しいヘッダを作成する" + +#: src/cryptsetup_reencrypt.c:1622 +msgid "Permanently decrypt device (remove encryption)" +msgstr "デバイスを恒久的に復号状態にする (つまり暗号化をやめる)" + +#: src/cryptsetup_reencrypt.c:1623 +msgid "The UUID used to resume decryption" +msgstr "復号の再開に使う UUID" + +#: src/cryptsetup_reencrypt.c:1624 +msgid "Type of LUKS metadata: luks1, luks2" +msgstr "メタデータタイプ: luks1, luks2" + +#: src/cryptsetup_reencrypt.c:1643 +msgid "[OPTION...] " +msgstr "[オプション...] <デバイス>" + +#: src/cryptsetup_reencrypt.c:1651 +#, c-format +msgid "Reencryption will change: %s%s%s%s%s%s." +msgstr "再暗号化で以下が変わります: %s%s%s%s%s%s." + +#: src/cryptsetup_reencrypt.c:1652 +msgid "volume key" +msgstr "ボリュームキー" + +#: src/cryptsetup_reencrypt.c:1654 +msgid "set hash to " +msgstr "ハッシュ" + +#: src/cryptsetup_reencrypt.c:1655 +msgid ", set cipher to " +msgstr "暗号(cipher)" + +#: src/cryptsetup_reencrypt.c:1659 +msgid "Argument required." +msgstr "引数が必要です。" + +#: src/cryptsetup_reencrypt.c:1687 +msgid "Only values between 1 MiB and 64 MiB allowed for reencryption block size." +msgstr "再暗号化のブロックサイズは 1 MiB から 64 MiB までの値しか使えません。" + +#: src/cryptsetup_reencrypt.c:1714 +msgid "Maximum device reduce size is 64 MiB." +msgstr "デバイスを減らせる最大値は 64 MiB です。" + +#: src/cryptsetup_reencrypt.c:1721 +msgid "Option --new must be used together with --reduce-device-size or --header." +msgstr "--new は --reduce-device-size か --header と一緒に使う必要があります" + +#: src/cryptsetup_reencrypt.c:1725 +msgid "Option --keep-key can be used only with --hash, --iter-time or --pbkdf-force-iterations." +msgstr "--keep-key は --hash か --iter-time か --pbkdf-force-iterations と使う必要があります。" + +#: src/cryptsetup_reencrypt.c:1729 +msgid "Option --new cannot be used together with --decrypt." +msgstr "--new は --decrypt と一緒に使えません。" + +#: src/cryptsetup_reencrypt.c:1733 +msgid "Option --decrypt is incompatible with specified parameters." +msgstr "--decrypt は指定されたパラメータと互換性がありません。" + +#: src/cryptsetup_reencrypt.c:1737 +msgid "Option --uuid is allowed only together with --decrypt." +msgstr "--uuid は --decrypt と一緒にしか使えません。" + +#: src/cryptsetup_reencrypt.c:1741 +msgid "Invalid luks type. Use one of these: 'luks', 'luks1' or 'luks2'." +msgstr "不正な luks タイプです。'luks', 'luks1', 'luks2' のいずれかを使ってください。" + +#: src/utils_tools.c:151 +msgid "Error reading response from terminal." +msgstr "端末から応答を読み込み中にエラー。" + +#: src/utils_tools.c:186 +msgid "Command successful.\n" +msgstr "コマンド成功。\n" + +#: src/utils_tools.c:194 +msgid "wrong or missing parameters" +msgstr "パラメータが間違っているか指定されていません" + +#: src/utils_tools.c:196 +msgid "no permission or bad passphrase" +msgstr "権限がないかパスフレーズが間違っています" + +#: src/utils_tools.c:198 +msgid "out of memory" +msgstr "メモリ不足" + +#: src/utils_tools.c:200 +msgid "wrong device or file specified" +msgstr "間違ったデバイスかファイルが指定されました" + +#: src/utils_tools.c:202 +msgid "device already exists or device is busy" +msgstr "デバイスが既にあるかビジーです" + +#: src/utils_tools.c:204 +msgid "unknown error" +msgstr "不明なエラー" + +#: src/utils_tools.c:206 +#, c-format +msgid "Command failed with code %i (%s).\n" +msgstr "コマンド失敗:コード %i (%s)\n" + +#: src/utils_tools.c:283 +#, c-format +msgid "Key slot %i created." +msgstr "キースロット %i が作成されました。" + +#: src/utils_tools.c:285 +#, c-format +msgid "Key slot %i unlocked." +msgstr "キースロット %i がアンロックされました。" + +#: src/utils_tools.c:287 +#, c-format +msgid "Key slot %i removed." +msgstr "キースロット %i が削除されました。" + +#: src/utils_tools.c:296 +#, c-format +msgid "Token %i created." +msgstr "トークン %i が作成されました。" + +#: src/utils_tools.c:298 +#, c-format +msgid "Token %i removed." +msgstr "トークン %i が削除されました。" + +#: src/utils_tools.c:464 +msgid "" +"\n" +"Wipe interrupted." +msgstr "" +"\n" +"ワイプが中断されました。" + +#: src/utils_tools.c:475 +#, c-format +msgid "WARNING: Device %s already contains a '%s' partition signature.\n" +msgstr "警告: デバイス %s が既に '%s' パーティションシグネチャを含んでいます。\n" + +#: src/utils_tools.c:483 +#, c-format +msgid "WARNING: Device %s already contains a '%s' superblock signature.\n" +msgstr "警告: デバイス %s が既に '%s' のスーパーブロックシグネチャを含んでいます。\n" + +#: src/utils_tools.c:504 src/utils_tools.c:568 +msgid "Failed to initialize device signature probes." +msgstr "デバイスシグネチャ検出の初期化に失敗しました。" + +#: src/utils_tools.c:548 +#, c-format +msgid "Failed to stat device %s." +msgstr "デバイス %s の stat() に失敗しました。" + +#: src/utils_tools.c:561 +#, c-format +msgid "Device %s is in use. Can not proceed with format operation." +msgstr "デバイス %s は使用中です。フォーマットを始められません。" + +#: src/utils_tools.c:563 +#, c-format +msgid "Failed to open file %s in read/write mode." +msgstr "ファイル %s を読み書き可能なモードでオープンできません。" + +#: src/utils_tools.c:577 +#, c-format +msgid "Existing '%s' partition signature (offset: % bytes) on device %s will be wiped." +msgstr "今ある '%s' パーティションのシグネチャ(オフセット: % バイト、デバイス %s)は消去されます。" + +#: src/utils_tools.c:580 +#, c-format +msgid "Existing '%s' superblock signature (offset: % bytes) on device %s will be wiped." +msgstr "今ある '%s' スーパーブロックのシグネチャ(オフセット: % バイト、デバイス %s)は消去されます。" + +#: src/utils_tools.c:583 +msgid "Failed to wipe device signature." +msgstr "デバイスシグネチャを消せません。" + +#: src/utils_tools.c:590 +#, c-format +msgid "Failed to probe device %s for a signature." +msgstr "デバイス %s のシグネチャが検出できません。" + +#: src/utils_tools.c:629 +msgid "" +"\n" +"Reencryption interrupted." +msgstr "" +"\n" +"再暗号化が中断されました。" + +#: src/utils_password.c:43 src/utils_password.c:75 +#, c-format +msgid "Cannot check password quality: %s" +msgstr "パスワードの質を確認できません: %s" + +#: src/utils_password.c:51 +#, c-format +msgid "" +"Password quality check failed:\n" +" %s" +msgstr "" +"パスワードの質の確認に失敗:\n" +" %s" + +#: src/utils_password.c:83 +#, c-format +msgid "Password quality check failed: Bad passphrase (%s)" +msgstr "パスワードの質が確認できません: 質の悪いパスフレーズ (%s)" + +#: src/utils_password.c:193 src/utils_password.c:208 +msgid "Error reading passphrase from terminal." +msgstr "端末からパスフレーズを読み込めません。" + +#: src/utils_password.c:206 +msgid "Verify passphrase: " +msgstr "同じパスフレーズを入力してください: " + +#: src/utils_password.c:213 +msgid "Passphrases do not match." +msgstr "パスフレーズが一致しません。" + +#: src/utils_password.c:250 +msgid "Cannot use offset with terminal input." +msgstr "端末からの入力でオフセットは使用できません。" + +#: src/utils_password.c:253 +#, c-format +msgid "Enter passphrase: " +msgstr "パスフレーズを入力してください: " + +#: src/utils_password.c:256 +#, c-format +msgid "Enter passphrase for %s: " +msgstr "%s のパスフレーズを入力してください: " + +#: src/utils_password.c:287 +msgid "No key available with this passphrase." +msgstr "このパスフレーズで使用可能なキーはありません。" + +#: src/utils_password.c:289 +msgid "No usable keyslot is available." +msgstr "使用可能なキースロットがありません。" + +#: src/utils_password.c:328 +#, c-format +msgid "Cannot open keyfile %s for write." +msgstr "キーファイル %s を書き込み用にオープンできません。" + +#: src/utils_password.c:335 +#, c-format +msgid "Cannot write to keyfile %s." +msgstr "キーファイル %s に書き込めません。" + +#: src/utils_luks2.c:47 +#, c-format +msgid "Failed to open file %s in read-only mode." +msgstr "ファイル %s を読み込み専用モードでオープンできません。" + +#: src/utils_luks2.c:60 +msgid "Provide valid LUKS2 token JSON:\n" +msgstr "妥当な LUKS2 トークンを JSON で与えてください:\n" + +#: src/utils_luks2.c:67 +msgid "Failed to read JSON file." +msgstr "JSON ファイルを読み込めません。" + +#: src/utils_luks2.c:72 +msgid "" +"\n" +"Read interrupted." +msgstr "" +"\n" +"読み込みが中断されました。" + +#: src/utils_luks2.c:113 +#, c-format +msgid "Failed to open file %s in write mode." +msgstr "ファイル %s を書き込みモードでオープンできません。" + +#: src/utils_luks2.c:122 +msgid "" +"\n" +"Write interrupted." +msgstr "" +"\n" +"書き込みが中断されました。" + +#: src/utils_luks2.c:126 +msgid "Failed to write JSON file." +msgstr "JSON ファイルに書き込めません。" diff --git a/po/nl.gmo b/po/nl.gmo new file mode 100644 index 0000000000000000000000000000000000000000..772bd5737f1824e9d4350c6ab56688a695506b6f GIT binary patch literal 17355 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, 2017. +# +msgid "" +msgstr "" +"Project-Id-Version: cryptsetup-1.7.4\n" +"Report-Msgid-Bugs-To: dm-crypt@saout.de\n" +"POT-Creation-Date: 2019-11-01 09:04+0100\n" +"PO-Revision-Date: 2017-03-03 23:04+0100\n" +"Last-Translator: Koen \n" +"Language-Team: Dutch \n" +"Language: nl\n" +"MIME-Version: 1.0\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" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Poedit 1.6.10\n" + +#: lib/libdevmapper.c:384 +#, fuzzy +msgid "Cannot initialize device-mapper, running as non-root user." +msgstr "Kan apparaatstoewijzer niet initialiseren, uitvoering als non-root gebruiker.\n" + +#: lib/libdevmapper.c:387 +#, fuzzy +msgid "Cannot initialize device-mapper. Is dm_mod kernel module loaded?" +msgstr "Kan apparaatstoewijzer niet initialiseren. Is kernelmodule dm_mod geladen?\n" + +#: lib/libdevmapper.c:1082 +#, fuzzy +msgid "Requested deferred flag is not supported." +msgstr "Aangevraagde LUKS-hash %s wordt niet ondersteund.\n" + +#: lib/libdevmapper.c:1149 +#, fuzzy, c-format +msgid "DM-UUID for device %s was truncated." +msgstr "DM-UUID voor apparaat %s werd afgekapt.\n" + +#: lib/libdevmapper.c:1463 +msgid "Unknown dm target type." +msgstr "" + +#: lib/libdevmapper.c:1565 lib/libdevmapper.c:1617 +#, fuzzy +msgid "Requested dm-crypt performance options are not supported." +msgstr "Aangevraagde prestatie-opties voor dm-crypt worden niet ondersteund.\n" + +#: lib/libdevmapper.c:1572 +#, fuzzy +msgid "Requested dm-verity data corruption handling options are not supported." +msgstr "Aangevraagde opties voor behandeling van datacorruptie van dm-verity worden niet ondersteund.\n" + +#: lib/libdevmapper.c:1576 +#, fuzzy +msgid "Requested dm-verity FEC options are not supported." +msgstr "Aangevraagde prestatie-opties voor dm-crypt worden niet ondersteund.\n" + +#: lib/libdevmapper.c:1580 +#, fuzzy +msgid "Requested data integrity options are not supported." +msgstr "Aangevraagde prestatie-opties voor dm-crypt worden niet ondersteund.\n" + +#: lib/libdevmapper.c:1582 +#, fuzzy +msgid "Requested sector_size option is not supported." +msgstr "Aangevraagde prestatie-opties voor dm-crypt worden niet ondersteund.\n" + +#: lib/libdevmapper.c:1587 +#, fuzzy +msgid "Requested automatic recalculation of integrity tags is not supported." +msgstr "Aangevraagde opties voor behandeling van datacorruptie van dm-verity worden niet ondersteund.\n" + +#: lib/libdevmapper.c:1591 +#, fuzzy +msgid "Requested dm-integrity bitmap mode is not supported." +msgstr "Aangevraagde opties voor behandeling van datacorruptie van dm-verity worden niet ondersteund.\n" + +#: lib/libdevmapper.c:1620 +#, fuzzy +msgid "Discard/TRIM is not supported." +msgstr "Aangevraagd hash-algoritme %s wordt niet ondersteund.\n" + +#: lib/libdevmapper.c:2511 +#, c-format +msgid "Failed to query dm-%s segment." +msgstr "" + +#: lib/random.c:80 +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" +msgstr "" +"Systeem heeft niet genoeg willekeurige gegevens om de sleutel tot het opslagmedium verder te genereren.\n" +"Beweeg de muis of typ wat tekst in een nieuw venster om enkele willekeurige evenementen te verzamelen.\n" + +#: lib/random.c:84 +#, c-format +msgid "Generating key (%d%% done).\n" +msgstr "Sleutel wordt gegenereerd (%d%% afgewerkt).\n" + +#: lib/random.c:170 +#, fuzzy +msgid "Running in FIPS mode." +msgstr "Uitvoering in FIPS-modus.\n" + +#: lib/random.c:176 +#, fuzzy +msgid "Fatal error during RNG initialisation." +msgstr "Fatale fout bij initialisatie van RNG.\n" + +#: lib/random.c:213 +#, fuzzy +msgid "Unknown RNG quality requested." +msgstr "Onbekende RNG-kwaliteit aangevraagd.\n" + +#: lib/random.c:218 +#, fuzzy +msgid "Error reading from RNG." +msgstr "Fout %d bij lezen uit RNG: %s\n" + +#: lib/setup.c:223 +#, fuzzy +msgid "Cannot initialize crypto RNG backend." +msgstr "Kan RNG versleutelings-backend niet initialiseren.\n" + +#: lib/setup.c:229 +#, fuzzy +msgid "Cannot initialize crypto backend." +msgstr "Kan versleutelings-backend niet initialiseren.\n" + +#: lib/setup.c:260 lib/setup.c:1990 lib/verity/verity.c:120 +#, fuzzy, c-format +msgid "Hash algorithm %s not supported." +msgstr "Aangevraagd hash-algoritme %s wordt niet ondersteund.\n" + +#: lib/setup.c:263 lib/loopaes/loopaes.c:90 +#, fuzzy, c-format +msgid "Key processing error (using hash %s)." +msgstr "Sleutelbehandelingsfout (met hash %s in gebruik).\n" + +#: lib/setup.c:324 lib/setup.c:351 +#, fuzzy +msgid "Cannot determine device type. Incompatible activation of device?" +msgstr "Apparaatstype kan niet bepaald worden. Incompatibele apparaatsactivering?\n" + +#: lib/setup.c:330 lib/setup.c:2985 +#, fuzzy +msgid "This operation is supported only for LUKS device." +msgstr "Deze operatie wordt enkel ondersteund voor LUKS-apparaten.\n" + +#: lib/setup.c:357 +#, fuzzy +msgid "This operation is supported only for LUKS2 device." +msgstr "Deze operatie wordt enkel ondersteund voor LUKS-apparaten.\n" + +#: lib/setup.c:412 lib/luks2/luks2_reencrypt.c:2345 +#, fuzzy +msgid "All key slots full." +msgstr "Alle sleutelplaatsen zijn vol.\n" + +#: lib/setup.c:423 +#, fuzzy, c-format +msgid "Key slot %d is invalid, please select between 0 and %d." +msgstr "Sleutelplaats %d is ongeldig, selecteer een plaats tussen 0 en %d.\n" + +#: lib/setup.c:429 +#, fuzzy, c-format +msgid "Key slot %d is full, please select another one." +msgstr "Sleutelplaats %d is vol, selecteer een andere.\n" + +#: lib/setup.c:514 lib/setup.c:2759 +#, fuzzy +msgid "Device size is not aligned to device logical block size." +msgstr "Apparaat %s is geen geldig LUKS-apparaat.\n" + +#: lib/setup.c:610 +#, fuzzy, c-format +msgid "Header detected but device %s is too small." +msgstr "Koptekst gevonden maar apparaat %s is te klein.\n" + +#: lib/setup.c:647 +#, fuzzy +msgid "This operation is not supported for this device type." +msgstr "Deze operatie wordt niet ondersteund voor dit apparaatstype.\n" + +#: lib/setup.c:652 +msgid "Illegal operation with reencryption in-progress." +msgstr "" + +#: lib/setup.c:821 lib/luks1/keymanage.c:476 +#, fuzzy, c-format +msgid "Unsupported LUKS version %d." +msgstr "Niet-ondersteunde LUKS-versie %d.\n" + +#: lib/setup.c:838 lib/setup.c:1483 lib/setup.c:1903 +#, fuzzy +msgid "Detached metadata device is not supported for this crypt type." +msgstr "UUID wordt niet ondersteund voor dit encryptietype.\n" + +#: lib/setup.c:1373 lib/setup.c:2479 lib/setup.c:2551 lib/setup.c:2563 +#: lib/setup.c:2712 lib/setup.c:4310 +#, fuzzy, c-format +msgid "Device %s is not active." +msgstr "Apparaat %s is niet actief.\n" + +#: lib/setup.c:1390 +#, fuzzy, c-format +msgid "Underlying device for crypt device %s disappeared." +msgstr "Onderliggend apparaat van versleutelingsapparaat %s is verdwenen.\n" + +#: lib/setup.c:1468 +#, fuzzy +msgid "Invalid plain crypt parameters." +msgstr "Ongeldige normale versleutelingsparameters.\n" + +#: lib/setup.c:1473 lib/setup.c:1893 src/integritysetup.c:73 +#, fuzzy +msgid "Invalid key size." +msgstr "Ongeldige sleutelgrootte.\n" + +#: lib/setup.c:1478 lib/setup.c:1898 lib/setup.c:2100 +#, fuzzy +msgid "UUID is not supported for this crypt type." +msgstr "UUID wordt niet ondersteund voor dit encryptietype.\n" + +#: lib/setup.c:1493 lib/setup.c:1683 lib/luks2/luks2_reencrypt.c:2308 +#: src/cryptsetup.c:1169 +#, fuzzy +msgid "Unsupported encryption sector size." +msgstr "Kan herencryptie-logbestand niet lezen.\n" + +#: lib/setup.c:1501 lib/setup.c:1808 lib/setup.c:2753 +#, fuzzy +msgid "Device size is not aligned to requested sector size." +msgstr "Apparaat %s is geen geldig LUKS-apparaat.\n" + +#: lib/setup.c:1552 lib/setup.c:1671 +#, fuzzy +msgid "Can't format LUKS without device." +msgstr "Kan LUKS niet formatteren zonder apparaat.\n" + +#: lib/setup.c:1558 lib/setup.c:1677 +msgid "Requested data alignment is not compatible with data offset." +msgstr "" + +#: lib/setup.c:1626 lib/setup.c:1795 +msgid "WARNING: Data offset is outside of currently available data device.\n" +msgstr "" + +#: lib/setup.c:1636 lib/setup.c:1823 lib/setup.c:1844 lib/setup.c:2112 +#, fuzzy, c-format +msgid "Cannot wipe header on device %s." +msgstr "Kan koptekst op apparaat %s niet wissen.\n" + +#: lib/setup.c:1688 +msgid "WARNING: The device activation will fail, dm-crypt is missing support for requested encryption sector size.\n" +msgstr "" + +#: lib/setup.c:1710 +msgid "Volume key is too small for encryption with integrity extensions." +msgstr "" + +#: lib/setup.c:1765 +#, fuzzy, c-format +msgid "Cipher %s-%s (key size %zd bits) is not available." +msgstr "Versleutelalgoritme %s is niet beschikbaar.\n" + +#: lib/setup.c:1798 +#, c-format +msgid "WARNING: LUKS2 metadata size changed to % bytes.\n" +msgstr "" + +#: lib/setup.c:1802 +#, c-format +msgid "WARNING: LUKS2 keyslots area size changed to % bytes.\n" +msgstr "" + +#: lib/setup.c:1826 lib/utils_device.c:829 lib/luks1/keyencryption.c:256 +#: lib/luks2/luks2_reencrypt.c:2356 lib/luks2/luks2_reencrypt.c:3348 +#, fuzzy, c-format +msgid "Device %s is too small." +msgstr "Apparaat %s is te klein.\n" + +#: lib/setup.c:1837 lib/setup.c:1863 +#, fuzzy, c-format +msgid "Cannot format device %s in use." +msgstr "Kan apparaat %s niet formatteren; het is nog steeds actief.\n" + +#: lib/setup.c:1840 lib/setup.c:1866 +#, fuzzy, c-format +msgid "Cannot format device %s, permission denied." +msgstr "Kan apparaat %s niet formatteren: toestemming geweigerd.\n" + +#: lib/setup.c:1852 lib/setup.c:2164 +#, fuzzy, c-format +msgid "Cannot format integrity for device %s." +msgstr "Kan apparaat %s niet beschrijven.\n" + +#: lib/setup.c:1870 +#, fuzzy, c-format +msgid "Cannot format device %s." +msgstr "Kan apparaat niet lezen: %s.\n" + +#: lib/setup.c:1888 +#, fuzzy +msgid "Can't format LOOPAES without device." +msgstr "Kan LOOPAES niet formatteren zonder apparaat.\n" + +#: lib/setup.c:1933 +#, fuzzy +msgid "Can't format VERITY without device." +msgstr "Kan VERITY niet formatteren zonder apparaat.\n" + +#: lib/setup.c:1944 lib/verity/verity.c:103 +#, fuzzy, c-format +msgid "Unsupported VERITY hash type %d." +msgstr "Niet-ondersteund VERITY-hashtype %d.\n" + +#: lib/setup.c:1950 lib/verity/verity.c:111 +#, fuzzy +msgid "Unsupported VERITY block size." +msgstr "Niet-ondersteunde VERITY-blokgrootte.\n" + +#: lib/setup.c:1955 lib/verity/verity.c:75 +#, fuzzy +msgid "Unsupported VERITY hash offset." +msgstr "Niet-ondersteunde VERITY-hashgegevenspositie.\n" + +#: lib/setup.c:1960 +#, fuzzy +msgid "Unsupported VERITY FEC offset." +msgstr "Niet-ondersteunde VERITY-hashgegevenspositie.\n" + +#: lib/setup.c:1984 +#, fuzzy +msgid "Data area overlaps with hash area." +msgstr "Overlapping tussen datagedeelte en hashgedeelte.\n" + +#: lib/setup.c:2009 +#, fuzzy +msgid "Hash area overlaps with FEC area." +msgstr "Overlapping tussen datagedeelte en hashgedeelte.\n" + +#: lib/setup.c:2016 +#, fuzzy +msgid "Data area overlaps with FEC area." +msgstr "Overlapping tussen datagedeelte en hashgedeelte.\n" + +#: lib/setup.c:2221 +#, fuzzy, c-format +msgid "Unknown crypt device type %s requested." +msgstr "Onbekend versleutelingsapparaattype %s aangevraagd.\n" + +#: lib/setup.c:2485 lib/setup.c:2557 lib/setup.c:2570 +#, fuzzy, c-format +msgid "Unsupported parameters on device %s." +msgstr "Kan koptekst op apparaat %s niet wissen.\n" + +#: lib/setup.c:2491 lib/setup.c:2576 lib/luks2/luks2_reencrypt.c:2408 +#: lib/luks2/luks2_reencrypt.c:2718 +#, fuzzy, c-format +msgid "Mismatching parameters on device %s." +msgstr "Kan koptekst op apparaat %s niet wissen.\n" + +#: lib/setup.c:2596 +msgid "Crypt devices mismatch." +msgstr "" + +#: lib/setup.c:2633 lib/setup.c:2638 lib/luks2/luks2_reencrypt.c:2054 +#: lib/luks2/luks2_reencrypt.c:3126 +#, fuzzy, c-format +msgid "Failed to reload device %s." +msgstr "Kan apparaat niet lezen: %s.\n" + +#: lib/setup.c:2643 lib/setup.c:2648 lib/luks2/luks2_reencrypt.c:2025 +#: lib/luks2/luks2_reencrypt.c:2032 +#, fuzzy, c-format +msgid "Failed to suspend device %s." +msgstr "Openen van sleutelbestand is mislukt.\n" + +#: lib/setup.c:2653 lib/luks2/luks2_reencrypt.c:2039 +#: lib/luks2/luks2_reencrypt.c:3061 lib/luks2/luks2_reencrypt.c:3130 +#, fuzzy, c-format +msgid "Failed to resume device %s." +msgstr "Kan apparaat niet lezen: %s.\n" + +#: lib/setup.c:2667 +#, c-format +msgid "Fatal error while reloading device %s (on top of device %s)." +msgstr "" + +#: lib/setup.c:2670 lib/setup.c:2672 +#, fuzzy, c-format +msgid "Failed to switch device %s to dm-error." +msgstr "Kan geen map voor de apparaatstoewijzer verkrijgen." + +#: lib/setup.c:2744 +#, fuzzy +msgid "Cannot resize loop device." +msgstr "Kan grootte van loopback-apparaat niet aanpassen.\n" + +#: lib/setup.c:2817 +msgid "Do you really want to change UUID of device?" +msgstr "Bent u zeker dat u het UUID van het apparaat wilt wijzigen?" + +#: lib/setup.c:2893 +#, fuzzy +msgid "Header backup file does not contain compatible LUKS header." +msgstr "Reservekopiebestand bevat geen geldige LUKS-koptekst.\n" + +#: lib/setup.c:2993 +#, fuzzy, c-format +msgid "Volume %s is not active." +msgstr "Opslagmedium %s is niet actief.\n" + +#: lib/setup.c:3004 +#, fuzzy, c-format +msgid "Volume %s is already suspended." +msgstr "Opslagmedium %s is reeds geschorst.\n" + +#: lib/setup.c:3017 +#, fuzzy, c-format +msgid "Suspend is not supported for device %s." +msgstr "Opschorten wordt niet ondersteund voor apparaat %s.\n" + +#: lib/setup.c:3019 +#, fuzzy, c-format +msgid "Error during suspending device %s." +msgstr "Fout bij het opschorten van apparaat %s.\n" + +#: lib/setup.c:3052 lib/setup.c:3119 +#, fuzzy, c-format +msgid "Volume %s is not suspended." +msgstr "Opslagmedium %s is niet geschorst.\n" + +#: lib/setup.c:3081 +#, fuzzy, c-format +msgid "Resume is not supported for device %s." +msgstr "Hervatting wordt niet ondersteund voor apparaat %s.\n" + +#: lib/setup.c:3083 lib/setup.c:3151 +#, fuzzy, c-format +msgid "Error during resuming device %s." +msgstr "Fout bij het hervatten van apparaat %s.\n" + +#: lib/setup.c:3219 lib/setup.c:3407 +#, fuzzy +msgid "Cannot add key slot, all slots disabled and no volume key provided." +msgstr "Kan geen sleutelplaats toevoegen, alle plaatsen zijn uitgeschakeld en er is geen sleutel tot het opslagmedium voorzien.\n" + +#: lib/setup.c:3359 +#, fuzzy +msgid "Failed to swap new key slot." +msgstr "Kan nieuwe sleutelplaats niet verwisselen.\n" + +#: lib/setup.c:3524 lib/setup.c:4161 lib/setup.c:4174 lib/setup.c:4182 +#: lib/setup.c:4195 lib/setup.c:4480 lib/setup.c:5593 +#, fuzzy +msgid "Volume key does not match the volume." +msgstr "Sleutel tot opslagmedium komt niet overeen met het opslagmedium.\n" + +#: lib/setup.c:3545 +#, fuzzy, c-format +msgid "Key slot %d is invalid." +msgstr "Sleutelplaats %d is ongeldig.\n" + +#: lib/setup.c:3551 src/cryptsetup.c:1511 src/cryptsetup.c:1856 +#, fuzzy, c-format +msgid "Keyslot %d is not active." +msgstr "Sleutelplaats %d is niet in gebruik.\n" + +#: lib/setup.c:3570 +#, fuzzy +msgid "Device header overlaps with data area." +msgstr "Overlapping tussen datagedeelte en hashgedeelte.\n" + +#: lib/setup.c:3836 +msgid "Reencryption in-progress. Cannot activate device." +msgstr "" + +#: lib/setup.c:3838 lib/luks2/luks2_json_metadata.c:2244 +#: lib/luks2/luks2_reencrypt.c:2817 +#, fuzzy +msgid "Failed to get reencryption lock." +msgstr "Kan herencryptie-logbestand niet lezen.\n" + +#: lib/setup.c:3851 lib/luks2/luks2_reencrypt.c:2836 +#, fuzzy +msgid "LUKS2 reencryption recovery failed." +msgstr "Kan herencryptie-logbestand niet openen.\n" + +#: lib/setup.c:3978 lib/setup.c:4248 +#, fuzzy +msgid "Device type is not properly initialised." +msgstr "Apparaatstype is niet behoorlijk geïnitialiseerd.\n" + +#: lib/setup.c:4022 +#, fuzzy, c-format +msgid "Cannot use device %s, name is invalid or still in use." +msgstr "Kan apparaat %s niet formatteren; het is nog steeds actief.\n" + +#: lib/setup.c:4025 +#, fuzzy, c-format +msgid "Device %s already exists." +msgstr "Apparaat %s bestaat reeds.\n" + +#: lib/setup.c:4148 +#, fuzzy +msgid "Incorrect volume key specified for plain device." +msgstr "Incorrecte sleutel tot het opslagmedium voor normaal apparaat verschaft.\n" + +#: lib/setup.c:4214 +#, fuzzy +msgid "Incorrect root hash specified for verity device." +msgstr "Incorrecte root-hash voor het VERITY-apparaat opgegeven.\n" + +#: lib/setup.c:4289 lib/setup.c:4305 lib/luks2/luks2_json_metadata.c:2297 +#: src/cryptsetup.c:2527 +#, fuzzy, c-format +msgid "Device %s is still in use." +msgstr "Apparaat %s is nog in gebruik.\n" + +#: lib/setup.c:4314 +#, fuzzy, c-format +msgid "Invalid device %s." +msgstr "Ongeldig apparaat %s.\n" + +#: lib/setup.c:4430 +#, fuzzy +msgid "Volume key buffer too small." +msgstr "Sleutelbuffer van het opslagmedium is te klein.\n" + +#: lib/setup.c:4438 +#, fuzzy +msgid "Cannot retrieve volume key for plain device." +msgstr "Kan sleutel tot het opslagmedium voor normaal apparaat niet ophalen.\n" + +#: lib/setup.c:4449 +#, fuzzy, c-format +msgid "This operation is not supported for %s crypt device." +msgstr "Deze operatie wordt niet ondersteund voor versleutelapparaat %s.\n" + +#: lib/setup.c:4636 +#, fuzzy +msgid "Dump operation is not supported for this device type." +msgstr "Dump-operatie wordt niet ondersteund voor dit apparaatstype.\n" + +#: lib/setup.c:4947 +#, c-format +msgid "Data offset is not multiple of %u bytes." +msgstr "" + +#: lib/setup.c:5229 +#, fuzzy, c-format +msgid "Cannot convert device %s which is still in use." +msgstr "Kan apparaat %s niet formatteren; het is nog steeds actief.\n" + +#: lib/setup.c:5526 +#, c-format +msgid "Failed to assign keyslot %u as the new volume key." +msgstr "" + +#: lib/setup.c:5599 +msgid "Failed to initialise default LUKS2 keyslot parameters." +msgstr "" + +#: lib/setup.c:5605 +#, fuzzy, c-format +msgid "Failed to assign keyslot %d to digest." +msgstr "Kan nieuwe sleutelplaats niet verwisselen.\n" + +#: lib/setup.c:5690 +#, fuzzy +msgid "Failed to load key in kernel keyring." +msgstr "Openen van sleutelbestand is mislukt.\n" + +#: lib/setup.c:5757 +#, fuzzy +msgid "Kernel keyring is not supported by the kernel." +msgstr "Deze operatie wordt niet ondersteund voor dit apparaatstype.\n" + +#: lib/setup.c:5767 lib/luks2/luks2_reencrypt.c:2933 +#, fuzzy, c-format +msgid "Failed to read passphrase from keyring (error %d)." +msgstr "Lezen uit sleutelopslag is mislukt.\n" + +#: lib/setup.c:5791 +msgid "Failed to acquire global memory-hard access serialization lock." +msgstr "" + +#: lib/utils.c:81 +#, fuzzy +msgid "Cannot get process priority." +msgstr "Kan geen procesprioriteit verkrijgen.\n" + +#: lib/utils.c:95 +#, fuzzy +msgid "Cannot unlock memory." +msgstr "Kan geheugen niet ontgrendelen.\n" + +#: lib/utils.c:169 lib/tcrypt/tcrypt.c:498 +#, fuzzy +msgid "Failed to open key file." +msgstr "Openen van sleutelbestand is mislukt.\n" + +#: lib/utils.c:174 +#, fuzzy +msgid "Cannot read keyfile from a terminal." +msgstr "Kan sleutelbestand %s niet lezen.\n" + +#: lib/utils.c:191 +#, fuzzy +msgid "Failed to stat key file." +msgstr "Kan status van sleutelbestand niet opvragen.\n" + +#: lib/utils.c:199 lib/utils.c:220 +#, fuzzy +msgid "Cannot seek to requested keyfile offset." +msgstr "Kan niet zoeken tot aan het aangevraagde sleutelbestand.\n" + +#: lib/utils.c:214 lib/utils.c:229 src/utils_password.c:188 +#: src/utils_password.c:201 +#, fuzzy +msgid "Out of memory while reading passphrase." +msgstr "Geen geheugen meer beschikbaar bij lezen van wachtwoord.\n" + +#: lib/utils.c:249 +#, fuzzy +msgid "Error reading passphrase." +msgstr "Fout bij lezen van wachtwoord.\n" + +#: lib/utils.c:266 +msgid "Nothing to read on input." +msgstr "" + +#: lib/utils.c:273 +#, fuzzy +msgid "Maximum keyfile size exceeded." +msgstr "Maximum sleutelbestandsgrootte overschreden.\n" + +#: lib/utils.c:278 +#, fuzzy +msgid "Cannot read requested amount of data." +msgstr "Kan aangevraagde hoeveelheid data niet lezen.\n" + +#: lib/utils_device.c:188 lib/utils_storage_wrappers.c:111 +#: lib/luks1/keyencryption.c:92 +#, fuzzy, c-format +msgid "Device %s doesn't exist or access denied." +msgstr "Apparaat %s bestaat niet of toegang is geweigerd.\n" + +#: lib/utils_device.c:198 +#, fuzzy, c-format +msgid "Device %s is not compatible." +msgstr "Apparaat %s is niet actief.\n" + +#: lib/utils_device.c:643 +#, fuzzy, c-format +msgid "Device %s is too small. Need at least % bytes." +msgstr "Apparaat %s is te klein. (LUKS vereist minstens % bytes.)\n" + +#: lib/utils_device.c:724 +#, fuzzy, c-format +msgid "Cannot use device %s which is in use (already mapped or mounted)." +msgstr "Kan apparaat %s niet gebruiken; het is nog actief (reeds toegewezen of aangekoppeld).\n" + +#: lib/utils_device.c:728 +#, fuzzy, c-format +msgid "Cannot use device %s, permission denied." +msgstr "Kan apparaat %s niet beschrijven: toestemming geweigerd.\n" + +#: lib/utils_device.c:731 +#, fuzzy, c-format +msgid "Cannot get info about device %s." +msgstr "Kan geen informatie verkrijgen over apparaat %s.\n" + +#: lib/utils_device.c:754 +#, fuzzy +msgid "Cannot use a loopback device, running as non-root user." +msgstr "Kan geen loopback-apparaat gebruiken, uitvoering als non-root gebruiker.\n" + +#: lib/utils_device.c:764 +#, fuzzy +msgid "Attaching loopback device failed (loop device with autoclear flag is required)." +msgstr "Vastmaken loopback-apparaat gefaald (loop-apparaat met autoclear-vlag is vereist).\n" + +#: lib/utils_device.c:810 +#, fuzzy, c-format +msgid "Requested offset is beyond real size of device %s." +msgstr "De aangevraagde gegevenspositie valt buiten de werkelijke grootte van apparaat %s.\n" + +#: lib/utils_device.c:818 +#, fuzzy, c-format +msgid "Device %s has zero size." +msgstr "Apparaat %s heeft grootte nul.\n" + +#: lib/utils_pbkdf.c:100 +msgid "Requested PBKDF target time cannot be zero." +msgstr "" + +#: lib/utils_pbkdf.c:106 +#, c-format +msgid "Unknown PBKDF type %s." +msgstr "" + +#: lib/utils_pbkdf.c:111 +#, fuzzy, c-format +msgid "Requested hash %s is not supported." +msgstr "Aangevraagde LUKS-hash %s wordt niet ondersteund.\n" + +#: lib/utils_pbkdf.c:122 +#, fuzzy +msgid "Requested PBKDF type is not supported for LUKS1." +msgstr "Aangevraagde LUKS-hash %s wordt niet ondersteund.\n" + +#: lib/utils_pbkdf.c:128 +msgid "PBKDF max memory or parallel threads must not be set with pbkdf2." +msgstr "" + +#: lib/utils_pbkdf.c:133 lib/utils_pbkdf.c:143 +#, c-format +msgid "Forced iteration count is too low for %s (minimum is %u)." +msgstr "" + +#: lib/utils_pbkdf.c:148 +#, c-format +msgid "Forced memory cost is too low for %s (minimum is %u kilobytes)." +msgstr "" + +#: lib/utils_pbkdf.c:155 +#, c-format +msgid "Requested maximum PBKDF memory cost is too high (maximum is %d kilobytes)." +msgstr "" + +#: lib/utils_pbkdf.c:160 +msgid "Requested maximum PBKDF memory cannot be zero." +msgstr "" + +#: lib/utils_pbkdf.c:164 +msgid "Requested PBKDF parallel threads cannot be zero." +msgstr "" + +#: lib/utils_pbkdf.c:184 +msgid "Only PBKDF2 is supported in FIPS mode." +msgstr "" + +#: lib/utils_benchmark.c:166 +msgid "PBKDF benchmark disabled but iterations not set." +msgstr "" + +#: lib/utils_benchmark.c:185 +#, fuzzy, c-format +msgid "Not compatible PBKDF2 options (using hash algorithm %s)." +msgstr "Niet-compatibele PBKDF2-opties (met hash-algoritme %s in gebruik).\n" + +#: lib/utils_benchmark.c:205 +#, fuzzy +msgid "Not compatible PBKDF options." +msgstr "Niet-compatibele PBKDF2-opties (met hash-algoritme %s in gebruik).\n" + +#: lib/utils_device_locking.c:103 +#, c-format +msgid "Locking aborted. The locking path %s/%s is unusable (not a directory or missing)." +msgstr "" + +#: lib/utils_device_locking.c:110 +#, c-format +msgid "WARNING: Locking directory %s/%s is missing!\n" +msgstr "" + +#: lib/utils_device_locking.c:120 +#, c-format +msgid "Locking aborted. The locking path %s/%s is unusable (%s is not a directory)." +msgstr "" + +#: lib/utils_wipe.c:185 src/cryptsetup_reencrypt.c:933 +#: src/cryptsetup_reencrypt.c:1017 +#, fuzzy +msgid "Cannot seek to device offset." +msgstr "Onmogelijk te zoeken tot startplaats van apparaat.\n" + +#: lib/utils_wipe.c:209 +#, c-format +msgid "Device wipe error, offset %." +msgstr "" + +#: lib/luks1/keyencryption.c:40 +#, fuzzy, c-format +msgid "" +"Failed to setup dm-crypt key mapping for device %s.\n" +"Check that kernel supports %s cipher (check syslog for more info)." +msgstr "" +"Kan dm-crypt sleuteltoewijzing niet instellen voor apparaat %s.\n" +"Kijk na of de kernel versleutelalgoritme %s ondersteunt (bekijk syslog voor meer informatie).\n" + +#: lib/luks1/keyencryption.c:45 +#, fuzzy +msgid "Key size in XTS mode must be 256 or 512 bits." +msgstr "In XTS-modus moet de sleutelgrootte 256 of 512 bits zijn.\n" + +#: lib/luks1/keyencryption.c:47 +msgid "Cipher specification should be in [cipher]-[mode]-[iv] format." +msgstr "" + +#: lib/luks1/keyencryption.c:98 lib/luks1/keymanage.c:345 +#: lib/luks1/keymanage.c:636 lib/luks1/keymanage.c:1074 +#: lib/luks2/luks2_json_metadata.c:1253 lib/luks2/luks2_keyslot.c:739 +#, fuzzy, c-format +msgid "Cannot write to device %s, permission denied." +msgstr "Kan apparaat %s niet beschrijven: toestemming geweigerd.\n" + +#: lib/luks1/keyencryption.c:121 +#, fuzzy +msgid "Failed to open temporary keystore device." +msgstr "Openen van het tijdelijke sleutelopslagapparaat is mislukt.\n" + +#: lib/luks1/keyencryption.c:128 +#, fuzzy +msgid "Failed to access temporary keystore device." +msgstr "Kan geen toegang verkrijgen tot tijdelijk sleutelopslagapparaat.\n" + +#: lib/luks1/keyencryption.c:201 lib/luks2/luks2_keyslot_luks2.c:60 +#: lib/luks2/luks2_keyslot_luks2.c:78 lib/luks2/luks2_keyslot_reenc.c:134 +#, fuzzy +msgid "IO error while encrypting keyslot." +msgstr "Invoer/uitvoerfout tijdens het versleutelen van de sleutelplaats.\n" + +#: lib/luks1/keyencryption.c:247 lib/luks1/keymanage.c:348 +#: lib/luks1/keymanage.c:589 lib/luks1/keymanage.c:639 lib/tcrypt/tcrypt.c:661 +#: lib/verity/verity.c:81 lib/verity/verity.c:179 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:1256 +#: src/cryptsetup_reencrypt.c:205 +#, fuzzy, c-format +msgid "Cannot open device %s." +msgstr "Kan apparaat %s niet openen.\n" + +#: lib/luks1/keyencryption.c:258 lib/luks2/luks2_keyslot_luks2.c:137 +#, fuzzy +msgid "IO error while decrypting keyslot." +msgstr "Invoer/uitvoerfout tijdens het ontsleutelen van de sleutelplaats.\n" + +#: lib/luks1/keymanage.c:111 +#, fuzzy, c-format +msgid "Device %s is too small. (LUKS1 requires at least % bytes.)" +msgstr "Apparaat %s is te klein. (LUKS vereist minstens % bytes.)\n" + +#: 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 +#, fuzzy, c-format +msgid "LUKS keyslot %u is invalid." +msgstr "LUKS-sleutelplaats %u is ongeldig.\n" + +#: lib/luks1/keymanage.c:229 lib/luks1/keymanage.c:473 +#: lib/luks2/luks2_json_metadata.c:1084 src/cryptsetup.c:1372 +#: src/cryptsetup.c:1498 src/cryptsetup.c:1555 src/cryptsetup.c:1611 +#: src/cryptsetup.c:1678 src/cryptsetup.c:1781 src/cryptsetup.c:1845 +#: src/cryptsetup.c:2005 src/cryptsetup.c:2194 src/cryptsetup.c:2254 +#: src/cryptsetup.c:2320 src/cryptsetup.c:2484 src/cryptsetup.c:3137 +#: src/cryptsetup.c:3146 src/cryptsetup_reencrypt.c:1372 +#, fuzzy, c-format +msgid "Device %s is not a valid LUKS device." +msgstr "Apparaat %s is geen geldig LUKS-apparaat.\n" + +#: lib/luks1/keymanage.c:247 lib/luks2/luks2_json_metadata.c:1101 +#, fuzzy, c-format +msgid "Requested header backup file %s already exists." +msgstr "Aangevraagd reservekopiebestand %s van koptekst bestaat reeds.\n" + +#: lib/luks1/keymanage.c:249 lib/luks2/luks2_json_metadata.c:1103 +#, fuzzy, c-format +msgid "Cannot create header backup file %s." +msgstr "Kan reservekopiebestand %s van koptekst niet aanmaken.\n" + +#: lib/luks1/keymanage.c:256 lib/luks2/luks2_json_metadata.c:1110 +#, fuzzy, c-format +msgid "Cannot write header backup file %s." +msgstr "Kan reservekopiebestand %s van koptekst niet schrijven.\n" + +#: lib/luks1/keymanage.c:287 lib/luks2/luks2_json_metadata.c:1162 +#, fuzzy +msgid "Backup file doesn't contain valid LUKS header." +msgstr "Reservekopiebestand bevat geen geldige LUKS-koptekst.\n" + +#: lib/luks1/keymanage.c:300 lib/luks1/keymanage.c:550 +#: lib/luks2/luks2_json_metadata.c:1183 +#, fuzzy, c-format +msgid "Cannot open header backup file %s." +msgstr "Kan reservekopiebestand %s van koptekst niet openen.\n" + +#: lib/luks1/keymanage.c:308 lib/luks2/luks2_json_metadata.c:1191 +#, fuzzy, c-format +msgid "Cannot read header backup file %s." +msgstr "Kan reservekopiebestand %s van koptekst niet lezen.\n" + +#: lib/luks1/keymanage.c:318 +#, fuzzy +msgid "Data offset or key size differs on device and backup, restore failed." +msgstr "Verschillende gegevenspositie of sleutelgrootte in apparaat en reservekopie; herstelling is mislukt.\n" + +#: lib/luks1/keymanage.c:326 +#, c-format +msgid "Device %s %s%s" +msgstr "Apparaat %s %s%s" + +#: lib/luks1/keymanage.c:327 +msgid "does not contain LUKS header. Replacing header can destroy data on that device." +msgstr "bevat geen LUKS-koptekst. Het vervangen van de koptekst kan gegevens op het apparaat vernietigen." + +#: lib/luks1/keymanage.c:328 +msgid "already contains LUKS header. Replacing header will destroy existing keyslots." +msgstr "bevat reeds een LUKS-koptekst. Het vervangen van de koptekst zal bestaande sleutelplaatsen vernietigen." + +#: lib/luks1/keymanage.c:329 lib/luks2/luks2_json_metadata.c:1225 +msgid "" +"\n" +"WARNING: real device header has different UUID than backup!" +msgstr "" +"\n" +"WAARSCHUWING: originele apparaatkoptekst heeft een ander UUID dan de reservekopie!" + +#: lib/luks1/keymanage.c:376 +#, fuzzy +msgid "Non standard key size, manual repair required." +msgstr "Niet-standaard sleutelgrootte, handmatige herstelling is vereist.\n" + +#: lib/luks1/keymanage.c:381 +#, fuzzy +msgid "Non standard keyslots alignment, manual repair required." +msgstr "Niet-standaard sleutelplaatsuitlijning, handmatige herstelling is vereist.\n" + +#: lib/luks1/keymanage.c:391 +#, fuzzy +msgid "Repairing keyslots." +msgstr "Sleutelplaatsen worden hersteld.\n" + +#: lib/luks1/keymanage.c:410 +#, fuzzy, c-format +msgid "Keyslot %i: offset repaired (%u -> %u)." +msgstr "Sleutelplaats %i: gegevenspositie hersteld (%u -> %u).\n" + +#: lib/luks1/keymanage.c:418 +#, fuzzy, c-format +msgid "Keyslot %i: stripes repaired (%u -> %u)." +msgstr "Sleutelplaats %i: fragmenten hersteld (%u -> %u).\n" + +#: lib/luks1/keymanage.c:427 +#, fuzzy, c-format +msgid "Keyslot %i: bogus partition signature." +msgstr "Sleutelplaats %i: valse partitiehandtekening.\n" + +#: lib/luks1/keymanage.c:432 +#, fuzzy, c-format +msgid "Keyslot %i: salt wiped." +msgstr "Sleutelplaats %i: salt uitgewist.\n" + +#: lib/luks1/keymanage.c:449 +#, fuzzy +msgid "Writing LUKS header to disk." +msgstr "LUKS-koptekst wordt naar schijf geschreven.\n" + +#: lib/luks1/keymanage.c:454 +msgid "Repair failed." +msgstr "Herstelling is mislukt." + +#: lib/luks1/keymanage.c:482 lib/luks1/keymanage.c:751 +#, fuzzy, c-format +msgid "Requested LUKS hash %s is not supported." +msgstr "Aangevraagde LUKS-hash %s wordt niet ondersteund.\n" + +#: lib/luks1/keymanage.c:510 src/cryptsetup.c:1081 +#, fuzzy +msgid "No known problems detected for LUKS header." +msgstr "Geen gekende problemen gevonden bij LUKS-koptekst.\n" + +#: lib/luks1/keymanage.c:661 +#, fuzzy, c-format +msgid "Error during update of LUKS header on device %s." +msgstr "Fout bij het bijwerken van LUKS-koptekst op apparaat %s.\n" + +#: lib/luks1/keymanage.c:669 +#, fuzzy, c-format +msgid "Error re-reading LUKS header after update on device %s." +msgstr "Fout bij het herlezen van LUKS-koptekst na bijwerken van apparaat %s.\n" + +#: lib/luks1/keymanage.c:745 +#, fuzzy +msgid "Data offset for LUKS header must be either 0 or higher than header size." +msgstr "De datagegevenspositie voor een aparte LUKS-koptekst moet of 0 zijn, of hoger liggen dan de koptekstgrootte (%d sectoren).\n" + +#: lib/luks1/keymanage.c:756 lib/luks1/keymanage.c:821 +#: lib/luks2/luks2_json_format.c:283 lib/luks2/luks2_json_metadata.c:1002 +#: src/cryptsetup.c:2647 +#, fuzzy +msgid "Wrong LUKS UUID format provided." +msgstr "Verkeerd LUKS UUID-formaat verschaft.\n" + +#: lib/luks1/keymanage.c:779 +#, fuzzy +msgid "Cannot create LUKS header: reading random salt failed." +msgstr "Kan LUKS-koptekst niet aanmaken: lezen van random salt is mislukt.\n" + +#: lib/luks1/keymanage.c:800 +#, fuzzy, c-format +msgid "Cannot create LUKS header: header digest failed (using hash %s)." +msgstr "Kan LUKS-koptekst niet aanmaken: koptekst-extract is mislukt (met %s-hash).\n" + +#: lib/luks1/keymanage.c:844 +#, fuzzy, c-format +msgid "Key slot %d active, purge first." +msgstr "Sleutelplaats %d is actief; ruim eerst op.\n" + +#: lib/luks1/keymanage.c:850 +#, fuzzy, c-format +msgid "Key slot %d material includes too few stripes. Header manipulation?" +msgstr "Inhoud van sleutelplaats %d bevat te weinig fragmenten. Koptekstmanipulatie?\n" + +#: lib/luks1/keymanage.c:1060 +#, fuzzy, c-format +msgid "Key slot %d is invalid, please select keyslot between 0 and %d." +msgstr "Sleutelplaats %d is ongeldig, selecteer een sleutelplaats tussen 0 en %d.\n" + +#: lib/luks1/keymanage.c:1078 lib/luks2/luks2_keyslot.c:743 +#, fuzzy, c-format +msgid "Cannot wipe device %s." +msgstr "Kan apparaat %s niet wissen.\n" + +#: lib/loopaes/loopaes.c:146 +#, fuzzy +msgid "Detected not yet supported GPG encrypted keyfile." +msgstr "Nog niet ondersteund GPG-versleuteld sleutelbestand gevonden.\n" + +#: lib/loopaes/loopaes.c:147 +msgid "Please use gpg --decrypt | cryptsetup --keyfile=- ...\n" +msgstr "Gebruik gpg --decrypt | cryptsetup --keyfile=- ...\n" + +#: lib/loopaes/loopaes.c:168 lib/loopaes/loopaes.c:188 +#, fuzzy +msgid "Incompatible loop-AES keyfile detected." +msgstr "Onverenigbaar loop-AES-sleutelbestand gevonden.\n" + +#: lib/loopaes/loopaes.c:245 +#, fuzzy +msgid "Kernel doesn't support loop-AES compatible mapping." +msgstr "Toewijzingen compatibel met loop-AES worden niet ondersteund door de kernel.\n" + +#: lib/tcrypt/tcrypt.c:505 +#, fuzzy, c-format +msgid "Error reading keyfile %s." +msgstr "Fout bij het lezen van sleutelbestand %s.\n" + +#: lib/tcrypt/tcrypt.c:545 +#, fuzzy, c-format +msgid "Maximum TCRYPT passphrase length (%d) exceeded." +msgstr "Maximum TCRYPT-wachtwoorlengte (%d) overschreden.\n" + +#: lib/tcrypt/tcrypt.c:586 +#, fuzzy, c-format +msgid "PBKDF2 hash algorithm %s not available, skipping." +msgstr "PBKDF2 hash-algoritme %s is niet beschikbaar, wordt overgeslaan.\n" + +#: lib/tcrypt/tcrypt.c:602 src/cryptsetup.c:959 +#, fuzzy +msgid "Required kernel crypto interface not available." +msgstr "Benodigde kernel cryptografie-interface is niet beschikbaar.\n" + +#: lib/tcrypt/tcrypt.c:604 src/cryptsetup.c:961 +#, fuzzy +msgid "Ensure you have algif_skcipher kernel module loaded." +msgstr "Kijk na of kernelmodule algif_skcipher geladen is.\n" + +#: lib/tcrypt/tcrypt.c:744 +#, fuzzy, c-format +msgid "Activation is not supported for %d sector size." +msgstr "Activatie wordt niet ondersteund voor %d sectorgrootte.\n" + +#: lib/tcrypt/tcrypt.c:750 +#, fuzzy +msgid "Kernel doesn't support activation for this TCRYPT legacy mode." +msgstr "Activatie voor deze TCRYPT-legacymodus wordt niet ondersteund door de kernel.\n" + +#: lib/tcrypt/tcrypt.c:784 +#, fuzzy, c-format +msgid "Activating TCRYPT system encryption for partition %s." +msgstr "TCRYPT-systeemversleuteling voor partitie %s wordt geactiveerd.\n" + +#: lib/tcrypt/tcrypt.c:862 +#, fuzzy +msgid "Kernel doesn't support TCRYPT compatible mapping." +msgstr "Toewijzingen compatibel met TCRYPT worden niet ondersteund door de kernel.\n" + +#: lib/tcrypt/tcrypt.c:1084 +msgid "This function is not supported without TCRYPT header load." +msgstr "Deze functie wordt niet ondersteund zonder TCRYPT-koptekst." + +#: lib/verity/verity.c:69 lib/verity/verity.c:172 +#, fuzzy, c-format +msgid "Verity device %s doesn't use on-disk header." +msgstr "VERITY-apparaat %s gebruikt geen on-disk koptekst.\n" + +#: lib/verity/verity.c:91 +#, fuzzy, c-format +msgid "Device %s is not a valid VERITY device." +msgstr "Apparaat %s is geen geldig VERITY-apparaat.\n" + +#: lib/verity/verity.c:98 +#, fuzzy, c-format +msgid "Unsupported VERITY version %d." +msgstr "Niet-ondersteunde VERITY-versie %d.\n" + +#: lib/verity/verity.c:129 +#, fuzzy +msgid "VERITY header corrupted." +msgstr "VERITY-koptekst beschadigd.\n" + +#: lib/verity/verity.c:166 +#, fuzzy, c-format +msgid "Wrong VERITY UUID format provided on device %s." +msgstr "Verkeerd VERITY UUID-formaat verschaft op apparaat %s.\n" + +#: lib/verity/verity.c:199 +#, fuzzy, c-format +msgid "Error during update of verity header on device %s." +msgstr "Fout bij het bijwerken van VERITY-koptekst op apparaat %s.\n" + +#: lib/verity/verity.c:262 +msgid "Errors cannot be repaired with FEC device." +msgstr "" + +#: lib/verity/verity.c:264 +#, c-format +msgid "Found %u repairable errors with FEC device." +msgstr "" + +#: lib/verity/verity.c:302 +#, fuzzy +msgid "Kernel doesn't support dm-verity mapping." +msgstr "dm-verity toewijzingen niet ondersteund door kernel.\n" + +#: lib/verity/verity.c:313 +#, fuzzy +msgid "Verity device detected corruption after activation." +msgstr "VERITY-apparaat ontdekte beschadiging na activatie.\n" + +#: lib/verity/verity_hash.c:59 +#, fuzzy, c-format +msgid "Spare area is not zeroed at position %." +msgstr "Reservegebied is niet ingesteld op positie %.\n" + +#: lib/verity/verity_hash.c:160 lib/verity/verity_hash.c:287 +#: lib/verity/verity_hash.c:300 +#, fuzzy +msgid "Device offset overflow." +msgstr "Overloop van apparaatsgegevenspositie.\n" + +#: lib/verity/verity_hash.c:200 +#, fuzzy, c-format +msgid "Verification failed at position %." +msgstr "Controle gefaald op positie %.\n" + +#: lib/verity/verity_hash.c:273 +#, fuzzy +msgid "Invalid size parameters for verity device." +msgstr "Ongeldige grootteparameters voor VERITY-apparaat.\n" + +#: lib/verity/verity_hash.c:293 +msgid "Hash area overflow." +msgstr "" + +#: lib/verity/verity_hash.c:370 +#, fuzzy +msgid "Verification of data area failed." +msgstr "Controle van gegevensgebied gefaald.\n" + +#: lib/verity/verity_hash.c:375 +#, fuzzy +msgid "Verification of root hash failed." +msgstr "Controle van root-hash gefaald.\n" + +#: lib/verity/verity_hash.c:381 +#, fuzzy +msgid "Input/output error while creating hash area." +msgstr "Invoer/uitvoerfout bij het aanmaken van hash-gebied.\n" + +#: lib/verity/verity_hash.c:383 +#, fuzzy +msgid "Creation of hash area failed." +msgstr "Creatie hash-gebied gefaald.\n" + +#: lib/verity/verity_hash.c:430 +#, fuzzy, c-format +msgid "WARNING: Kernel cannot activate device if data block size exceeds page size (%u)." +msgstr "WAARSCHUWING: Kernel kan apparaat niet activeren als de gegevensblokgrootte groter is dan de paginagrootte (%u).\n" + +#: lib/verity/verity_fec.c:132 +msgid "Failed to allocate RS context." +msgstr "" + +#: lib/verity/verity_fec.c:147 +#, fuzzy +msgid "Failed to allocate buffer." +msgstr "Kan status van sleutelbestand niet opvragen.\n" + +#: lib/verity/verity_fec.c:157 +#, c-format +msgid "Failed to read RS block % byte %d." +msgstr "" + +#: lib/verity/verity_fec.c:170 +#, c-format +msgid "Failed to read parity for RS block %." +msgstr "" + +#: lib/verity/verity_fec.c:178 +#, c-format +msgid "Failed to repair parity for block %." +msgstr "" + +#: lib/verity/verity_fec.c:189 +#, c-format +msgid "Failed to write parity for RS block %." +msgstr "" + +#: lib/verity/verity_fec.c:224 +msgid "Block sizes must match for FEC." +msgstr "" + +#: lib/verity/verity_fec.c:230 +msgid "Invalid number of parity bytes." +msgstr "" + +#: lib/verity/verity_fec.c:266 +#, fuzzy, c-format +msgid "Failed to determine size for device %s." +msgstr "Openen van het tijdelijke sleutelopslagapparaat is mislukt.\n" + +#: lib/integrity/integrity.c:241 lib/integrity/integrity.c:306 +#, fuzzy +msgid "Kernel doesn't support dm-integrity mapping." +msgstr "dm-verity toewijzingen niet ondersteund door kernel.\n" + +#: lib/luks2/luks2_disk_metadata.c:383 lib/luks2/luks2_json_metadata.c:959 +#: lib/luks2/luks2_json_metadata.c:1245 +#, fuzzy, c-format +msgid "Failed to acquire write lock on device %s." +msgstr "Kan geen toegang verkrijgen tot tijdelijk sleutelopslagapparaat.\n" + +#: lib/luks2/luks2_disk_metadata.c:392 +msgid "Detected attempt for concurrent LUKS2 metadata update. Aborting operation." +msgstr "" + +#: 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 "" + +#: lib/luks2/luks2_json_format.c:227 +#, fuzzy +msgid "Requested data offset is too small." +msgstr "Apparaat %s is te klein.\n" + +#: 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 "" + +#: lib/luks2/luks2_json_metadata.c:946 lib/luks2/luks2_json_metadata.c:1075 +#: lib/luks2/luks2_json_metadata.c:1151 lib/luks2/luks2_keyslot_luks2.c:92 +#: lib/luks2/luks2_keyslot_luks2.c:114 +#, fuzzy, c-format +msgid "Failed to acquire read lock on device %s." +msgstr "Kan geen toegang verkrijgen tot tijdelijk sleutelopslagapparaat.\n" + +#: lib/luks2/luks2_json_metadata.c:1168 +#, c-format +msgid "Forbidden LUKS2 requirements detected in backup %s." +msgstr "" + +#: lib/luks2/luks2_json_metadata.c:1209 +#, fuzzy +msgid "Data offset differ on device and backup, restore failed." +msgstr "Verschillende gegevenspositie of sleutelgrootte in apparaat en reservekopie; herstelling is mislukt.\n" + +#: lib/luks2/luks2_json_metadata.c:1215 +#, fuzzy +msgid "Binary header with keyslot areas size differ on device and backup, restore failed." +msgstr "Verschillende gegevenspositie of sleutelgrootte in apparaat en reservekopie; herstelling is mislukt.\n" + +#: lib/luks2/luks2_json_metadata.c:1222 +#, fuzzy, c-format +msgid "Device %s %s%s%s%s" +msgstr "Apparaat %s %s%s" + +#: lib/luks2/luks2_json_metadata.c:1223 +#, fuzzy +msgid "does not contain LUKS2 header. Replacing header can destroy data on that device." +msgstr "bevat geen LUKS-koptekst. Het vervangen van de koptekst kan gegevens op het apparaat vernietigen." + +#: lib/luks2/luks2_json_metadata.c:1224 +#, fuzzy +msgid "already contains LUKS2 header. Replacing header will destroy existing keyslots." +msgstr "bevat reeds een LUKS-koptekst. Het vervangen van de koptekst zal bestaande sleutelplaatsen vernietigen." + +#: lib/luks2/luks2_json_metadata.c:1226 +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:1228 +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:1324 +#, c-format +msgid "Ignored unknown flag %s." +msgstr "" + +#: lib/luks2/luks2_json_metadata.c:2011 lib/luks2/luks2_reencrypt.c:1746 +#, c-format +msgid "Missing key for dm-crypt segment %u" +msgstr "" + +#: lib/luks2/luks2_json_metadata.c:2023 lib/luks2/luks2_reencrypt.c:1764 +#, fuzzy +msgid "Failed to set dm-crypt segment." +msgstr "Kan status van sleutelbestand niet opvragen.\n" + +#: lib/luks2/luks2_json_metadata.c:2029 lib/luks2/luks2_reencrypt.c:1770 +msgid "Failed to set dm-linear segment." +msgstr "" + +#: lib/luks2/luks2_json_metadata.c:2156 +msgid "Unsupported device integrity configuration." +msgstr "" + +#: lib/luks2/luks2_json_metadata.c:2242 +msgid "Reencryption in-progress. Cannot deactivate device." +msgstr "" + +#: lib/luks2/luks2_json_metadata.c:2253 lib/luks2/luks2_reencrypt.c:3171 +#, c-format +msgid "Failed to replace suspended device %s with dm-error target." +msgstr "" + +#: lib/luks2/luks2_json_metadata.c:2333 +msgid "Failed to read LUKS2 requirements." +msgstr "" + +#: lib/luks2/luks2_json_metadata.c:2340 +msgid "Unmet LUKS2 requirements detected." +msgstr "" + +#: lib/luks2/luks2_json_metadata.c:2348 +msgid "Offline reencryption in progress. Aborting." +msgstr "" + +#: lib/luks2/luks2_json_metadata.c:2350 +msgid "Online reencryption in progress. Aborting." +msgstr "" + +#: lib/luks2/luks2_keyslot.c:552 lib/luks2/luks2_keyslot.c:589 +msgid "Not enough available memory to open a keyslot." +msgstr "" + +#: lib/luks2/luks2_keyslot.c:554 lib/luks2/luks2_keyslot.c:591 +#, fuzzy +msgid "Keyslot open failed." +msgstr "Sleutelplaats %d is geverifieerd.\n" + +#: 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 "" + +#: lib/luks2/luks2_keyslot_luks2.c:480 +#, fuzzy +msgid "No space for new keyslot." +msgstr "Kan nieuwe sleutelplaats niet verwisselen.\n" + +#: lib/luks2/luks2_luks1_convert.c:481 +#, fuzzy, c-format +msgid "Cannot check status of device with uuid: %s." +msgstr "Kan wachtwoordkwaliteit niet nakijken: %s\n" + +#: lib/luks2/luks2_luks1_convert.c:507 +msgid "Unable to convert header with LUKSMETA additional metadata." +msgstr "" + +#: lib/luks2/luks2_luks1_convert.c:547 +msgid "Unable to move keyslot area. Not enough space." +msgstr "" + +#: lib/luks2/luks2_luks1_convert.c:590 lib/luks2/luks2_luks1_convert.c:872 +#, fuzzy +msgid "Unable to move keyslot area." +msgstr "Openen van sleutelbestand is mislukt.\n" + +#: lib/luks2/luks2_luks1_convert.c:682 +msgid "Cannot convert to LUKS1 format - default segment encryption sector size is not 512 bytes." +msgstr "" + +#: lib/luks2/luks2_luks1_convert.c:690 +msgid "Cannot convert to LUKS1 format - key slot digests are not LUKS1 compatible." +msgstr "" + +#: lib/luks2/luks2_luks1_convert.c:702 +#, c-format +msgid "Cannot convert to LUKS1 format - device uses wrapped key cipher %s." +msgstr "" + +#: lib/luks2/luks2_luks1_convert.c:710 +#, c-format +msgid "Cannot convert to LUKS1 format - LUKS2 header contains %u token(s)." +msgstr "" + +#: lib/luks2/luks2_luks1_convert.c:724 +#, c-format +msgid "Cannot convert to LUKS1 format - keyslot %u is in invalid state." +msgstr "" + +#: lib/luks2/luks2_luks1_convert.c:729 +#, c-format +msgid "Cannot convert to LUKS1 format - slot %u (over maximum slots) is still active." +msgstr "" + +#: lib/luks2/luks2_luks1_convert.c:734 +#, c-format +msgid "Cannot convert to LUKS1 format - keyslot %u is not LUKS1 compatible." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:892 +#, c-format +msgid "Hotzone size must be multiple of calculated zone alignment (%zu bytes)." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:897 +#, fuzzy, c-format +msgid "Device size must be multiple of calculated zone alignment (%zu bytes)." +msgstr "Verkleiningsgrootte moet een meervoud zijn van de 512 bytes-grote sector." + +#: lib/luks2/luks2_reencrypt.c:941 +#, fuzzy, c-format +msgid "Unsupported resilience mode %s" +msgstr "Niet-ondersteunde LUKS-versie %d.\n" + +#: lib/luks2/luks2_reencrypt.c:1158 lib/luks2/luks2_reencrypt.c:1313 +#: lib/luks2/luks2_reencrypt.c:1396 lib/luks2/luks2_reencrypt.c:1430 +#: lib/luks2/luks2_reencrypt.c:3011 +#, fuzzy +msgid "Failed to initialize old segment storage wrapper." +msgstr "Schrijven naar sleutelopslag is mislukt.\n" + +#: lib/luks2/luks2_reencrypt.c:1172 lib/luks2/luks2_reencrypt.c:1291 +#, fuzzy +msgid "Failed to initialize new segment storage wrapper." +msgstr "Schrijven naar sleutelopslag is mislukt.\n" + +#: lib/luks2/luks2_reencrypt.c:1340 +#, fuzzy +msgid "Failed to read checksums for current hotzone." +msgstr "Lezen uit sleutelopslag is mislukt.\n" + +#: lib/luks2/luks2_reencrypt.c:1347 lib/luks2/luks2_reencrypt.c:3019 +#, fuzzy, c-format +msgid "Failed to read hotzone area starting at %." +msgstr "Reservegebied is niet ingesteld op positie %.\n" + +#: lib/luks2/luks2_reencrypt.c:1366 +#, fuzzy, c-format +msgid "Failed to decrypt sector %zu." +msgstr "Lezen uit sleutelopslag is mislukt.\n" + +#: lib/luks2/luks2_reencrypt.c:1372 +#, fuzzy, c-format +msgid "Failed to recover sector %zu." +msgstr "Schrijven naar sleutelopslag is mislukt.\n" + +#: lib/luks2/luks2_reencrypt.c:1867 +#, c-format +msgid "Source and target device sizes don't match. Source %, target: %." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:1965 +#, fuzzy, c-format +msgid "Failed to activate hotzone device %s." +msgstr "Kan geen toegang verkrijgen tot tijdelijk sleutelopslagapparaat.\n" + +#: lib/luks2/luks2_reencrypt.c:1982 +#, c-format +msgid "Failed to activate overlay device %s with actual origin table." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:1989 +#, fuzzy, c-format +msgid "Failed to load new mapping for device %s." +msgstr "Openen van het tijdelijke sleutelopslagapparaat is mislukt.\n" + +#: lib/luks2/luks2_reencrypt.c:2060 +msgid "Failed to refresh reencryption devices stack." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:2216 +#, fuzzy +msgid "Failed to set new keyslots area size." +msgstr "Kan nieuwe sleutelplaats niet verwisselen.\n" + +#: lib/luks2/luks2_reencrypt.c:2318 +#, c-format +msgid "Data shift is not aligned to requested encryption sector size (% bytes)." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:2339 +#, c-format +msgid "Data device is not aligned to requested encryption sector size (% bytes)." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:2360 +#, c-format +msgid "Data shift (% sectors) is less than future data offset (% sectors)." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:2366 lib/luks2/luks2_reencrypt.c:2760 +#: lib/luks2/luks2_reencrypt.c:2781 +#, fuzzy, c-format +msgid "Failed to open %s in exclusive mode (already mapped or mounted)." +msgstr "Kan apparaat %s niet gebruiken; het is nog actief (reeds toegewezen of aangekoppeld).\n" + +#: lib/luks2/luks2_reencrypt.c:2534 +#, fuzzy +msgid "No LUKS2 reencryption in progress." +msgstr "Kan doorgegeven UUID niet gebruiken tenzij ontsleuteling al bezig is.\n" + +#: lib/luks2/luks2_reencrypt.c:2540 lib/luks2/luks2_reencrypt.c:3276 +msgid "Failed to load LUKS2 reencryption context." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:2600 +#, fuzzy +msgid "Failed to get reencryption state." +msgstr "Schrijven naar sleutelopslag is mislukt.\n" + +#: lib/luks2/luks2_reencrypt.c:2604 +#, fuzzy +msgid "Device is not in reencryption." +msgstr "Apparaat %s is niet actief.\n" + +#: lib/luks2/luks2_reencrypt.c:2611 +msgid "Reencryption process is already running." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:2613 +#, fuzzy +msgid "Failed to acquire reencryption lock." +msgstr "Kan herencryptie-logbestand niet lezen.\n" + +#: lib/luks2/luks2_reencrypt.c:2631 +msgid "Cannot proceed with reencryption. Run reencryption recovery first." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:2731 +msgid "Active device size and requested reencryption size don't match." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:2745 +msgid "Illegal device size requested in reencryption parameters." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:2815 +msgid "Reencryption in-progress. Cannot perform recovery." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:2887 +msgid "LUKS2 reencryption already initialized in metadata." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:2894 +msgid "Failed to initialize LUKS2 reencryption in metadata." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:2985 +msgid "Failed to set device segments for next reencryption hotzone." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:3027 +#, fuzzy +msgid "Failed to write reencryption resilience metadata." +msgstr "Kan herencryptie-logbestand niet schrijven.\n" + +#: lib/luks2/luks2_reencrypt.c:3034 +#, fuzzy +msgid "Decryption failed." +msgstr "Herstelling is mislukt." + +#: lib/luks2/luks2_reencrypt.c:3039 +#, fuzzy, c-format +msgid "Failed to write hotzone area starting at %." +msgstr "Schrijven naar sleutelopslag is mislukt.\n" + +#: lib/luks2/luks2_reencrypt.c:3044 +#, fuzzy +msgid "Failed to sync data." +msgstr "Kan status van sleutelbestand niet opvragen.\n" + +#: lib/luks2/luks2_reencrypt.c:3052 +msgid "Failed to update metadata after current reencryption hotzone completed." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:3119 +#, fuzzy +msgid "Failed to write LUKS2 metadata." +msgstr "Schrijven naar sleutelopslag is mislukt.\n" + +#: lib/luks2/luks2_reencrypt.c:3142 +msgid "Failed to wipe backup segment data." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:3155 +msgid "Failed to disable reencryption requirement flag." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:3163 +#, c-format +msgid "Fatal error while reencrypting chunk starting at %, % sectors long." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:3172 +msgid "Do not resume the device unless replaced with error target manually." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:3221 +msgid "Cannot proceed with reencryption. Unexpected reencryption status." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:3227 +msgid "Missing or invalid reencrypt context." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:3234 +#, fuzzy +msgid "Failed to initialize reencryption device stack." +msgstr "Kan versleutelings-backend niet initialiseren.\n" + +#: lib/luks2/luks2_reencrypt.c:3253 lib/luks2/luks2_reencrypt.c:3289 +#, fuzzy +msgid "Failed to update reencryption context." +msgstr "Kan herencryptie-logbestand niet openen.\n" + +#: lib/luks2/luks2_token.c:262 +msgid "No free token slot." +msgstr "" + +#: lib/luks2/luks2_token.c:269 +#, fuzzy, c-format +msgid "Failed to create builtin token %s." +msgstr "Schrijven naar sleutelopslag is mislukt.\n" + +#: src/cryptsetup.c:162 +#, fuzzy +msgid "Can't do passphrase verification on non-tty inputs." +msgstr "Kan geen wachtwoordverificatie uitvoeren op invoer van buiten de terminal.\n" + +#: src/cryptsetup.c:215 +#, fuzzy +msgid "Keyslot encryption parameters can be set only for LUKS2 device." +msgstr "Deze operatie wordt enkel ondersteund voor LUKS-apparaten.\n" + +#: src/cryptsetup.c:245 src/cryptsetup.c:893 src/cryptsetup.c:1212 +#: src/cryptsetup.c:3011 src/cryptsetup_reencrypt.c:715 +#: src/cryptsetup_reencrypt.c:785 +#, fuzzy +msgid "No known cipher specification pattern detected." +msgstr "Geen bekend specificatiepatroon voor het sleutelalgoritme gevonden.\n" + +#: src/cryptsetup.c:253 +msgid "WARNING: The --hash parameter is being ignored in plain mode with keyfile specified.\n" +msgstr "WAARSCHUWING: In normale modus met opgegeven sleutelbestand wordt de --hash-parameter genegeerd.\n" + +#: src/cryptsetup.c:261 +msgid "WARNING: The --keyfile-size option is being ignored, the read size is the same as the encryption key size.\n" +msgstr "WAARSCHUWING: De optie --keyfile-size wordt genegeerd, de leesgrootte is gelijk aan de encryptiesleutelgrootte.\n" + +#: src/cryptsetup.c:301 +#, c-format +msgid "Detected device signature(s) on %s. Proceeding further may damage existing data." +msgstr "" + +#: src/cryptsetup.c:307 src/cryptsetup.c:1038 src/cryptsetup.c:1090 +#: src/cryptsetup.c:1189 src/cryptsetup.c:1262 src/cryptsetup.c:1913 +#: src/cryptsetup.c:2545 src/cryptsetup.c:2668 src/integritysetup.c:232 +msgid "Operation aborted.\n" +msgstr "" + +#: src/cryptsetup.c:375 +#, fuzzy +msgid "Option --key-file is required." +msgstr "Optie --key-file is vereist.\n" + +#: src/cryptsetup.c:428 +msgid "Enter VeraCrypt PIM: " +msgstr "" + +#: src/cryptsetup.c:437 +msgid "Invalid PIM value: parse error." +msgstr "" + +#: src/cryptsetup.c:440 +#, fuzzy +msgid "Invalid PIM value: 0." +msgstr "Ongeldig apparaat %s.\n" + +#: src/cryptsetup.c:443 +msgid "Invalid PIM value: outside of range." +msgstr "" + +#: src/cryptsetup.c:466 +#, fuzzy +msgid "No device header detected with this passphrase." +msgstr "Geen apparaatkoptekst beschikbaar met dit wachtwoord.\n" + +#: src/cryptsetup.c:528 src/cryptsetup.c:1940 +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 "" +"Dump van koptekst met sleutel tot het opslagmedium bevat gevoelige informatie\n" +"die zonder wachtwoord toegang verschaft tot versleutelde partities.\n" +"De dump zou steeds versleuteld en op een veilige plaats bewaard moeten worden." + +#: src/cryptsetup.c:607 +#, c-format +msgid "Device %s is still active and scheduled for deferred removal.\n" +msgstr "" + +#: src/cryptsetup.c:635 +msgid "Resize of active device requires volume key in keyring but --disable-keyring option is set." +msgstr "" + +#: src/cryptsetup.c:771 +#, fuzzy +msgid "Benchmark interrupted." +msgstr "versleutelalgoritme benchmarken" + +#: src/cryptsetup.c:792 +#, c-format +msgid "PBKDF2-%-9s N/A\n" +msgstr "" + +#: src/cryptsetup.c:794 +#, c-format +msgid "PBKDF2-%-9s %7u iterations per second for %zu-bit key\n" +msgstr "" + +#: src/cryptsetup.c:808 +#, c-format +msgid "%-10s N/A\n" +msgstr "" + +#: src/cryptsetup.c:810 +#, 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:834 +#, fuzzy +msgid "Result of benchmark is not reliable." +msgstr "Benchmarkresultaat is niet betrouwbaar.\n" + +#: src/cryptsetup.c:885 +msgid "# Tests are approximate using memory only (no storage IO).\n" +msgstr "# Tests zijn bij benadering met enkel geheugen in gebruik (geen opslag-IO).\n" + +#. TRANSLATORS: The string is header of a table and must be exactly (right side) aligned. +#: src/cryptsetup.c:919 +#, fuzzy, c-format +msgid "#%*s Algorithm | Key | Encryption | Decryption\n" +msgstr "# Algoritme | Sleutel | Versleuteling | Ontsleuteling\n" + +#: src/cryptsetup.c:923 +#, fuzzy, c-format +msgid "Cipher %s is not available." +msgstr "Versleutelalgoritme %s is niet beschikbaar.\n" + +#. TRANSLATORS: The string is header of a table and must be exactly (right side) aligned. +#: src/cryptsetup.c:943 +#, fuzzy +msgid "# Algorithm | Key | Encryption | Decryption\n" +msgstr "# Algoritme | Sleutel | Versleuteling | Ontsleuteling\n" + +#: src/cryptsetup.c:952 +msgid "N/A" +msgstr "N/A" + +#: src/cryptsetup.c:1031 +msgid "" +"Seems device does not require reencryption recovery.\n" +"Do you want to proceed anyway?" +msgstr "" + +#: src/cryptsetup.c:1037 +msgid "Really proceed with LUKS2 reencryption recovery?" +msgstr "" + +#: src/cryptsetup.c:1046 +#, fuzzy +msgid "Enter passphrase for reencryption recovery: " +msgstr "Voer wachtwoord voor sleutelplaats %u in: " + +#: src/cryptsetup.c:1089 +msgid "Really try to repair LUKS device header?" +msgstr "Bent u zeker de LUKS-apparaatkoptekst te willen herstellen?" + +#: src/cryptsetup.c:1108 src/integritysetup.c:145 +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:1130 src/integritysetup.c:167 +#, fuzzy, c-format +msgid "Cannot deactivate temporary device %s." +msgstr "Kan tijdelijk LUKS-apparaat niet openen.\n" + +#: src/cryptsetup.c:1174 +msgid "Integrity option can be used only for LUKS2 format." +msgstr "" + +#: src/cryptsetup.c:1179 src/cryptsetup.c:1239 +#, fuzzy +msgid "Unsupported LUKS2 metadata size options." +msgstr "Niet-ondersteunde LUKS-versie %d.\n" + +#: src/cryptsetup.c:1196 +#, fuzzy, c-format +msgid "Cannot create header file %s." +msgstr "Kan reservekopiebestand %s van koptekst niet aanmaken.\n" + +#: src/cryptsetup.c:1219 src/integritysetup.c:194 src/integritysetup.c:203 +#: src/integritysetup.c:212 src/integritysetup.c:279 src/integritysetup.c:288 +#: src/integritysetup.c:298 +#, fuzzy +msgid "No known integrity specification pattern detected." +msgstr "Geen bekend specificatiepatroon voor het sleutelalgoritme gevonden.\n" + +#: src/cryptsetup.c:1232 +#, fuzzy, c-format +msgid "Cannot use %s as on-disk header." +msgstr "Kan %s niet als on-diskkoptekst gebruiken.\n" + +#: src/cryptsetup.c:1256 src/integritysetup.c:226 +#, c-format +msgid "This will overwrite data on %s irrevocably." +msgstr "Dit zal data op %s onherroepelijk overschrijven." + +#: src/cryptsetup.c:1297 src/cryptsetup.c:1627 src/cryptsetup.c:1694 +#: src/cryptsetup.c:1796 src/cryptsetup.c:1862 src/cryptsetup_reencrypt.c:545 +#, fuzzy +msgid "Failed to set pbkdf parameters." +msgstr "Kan status van sleutelbestand niet opvragen.\n" + +#: src/cryptsetup.c:1378 +#, fuzzy +msgid "Reduced data offset is allowed only for detached LUKS header." +msgstr "Een verlaagde datagegevenspositie wordt enkel toegestaan voor een vrijstaande LUKS-koptekst.\n" + +#: src/cryptsetup.c:1389 src/cryptsetup.c:1700 +msgid "Cannot determine volume key size for LUKS without keyslots, please use --key-size option." +msgstr "" + +#: src/cryptsetup.c:1427 +msgid "Device activated but cannot make flags persistent." +msgstr "" + +#: src/cryptsetup.c:1508 src/cryptsetup.c:1578 +#, fuzzy, c-format +msgid "Keyslot %d is selected for deletion." +msgstr "Sleutelplaats %d geselecteerd voor verwijdering.\n" + +#: src/cryptsetup.c:1520 src/cryptsetup.c:1581 +msgid "This is the last keyslot. Device will become unusable after purging this key." +msgstr "Dit is de laatste sleutelplaats. Apparaat zal onbruikbaar worden na het verwijderen van deze sleutel." + +#: src/cryptsetup.c:1521 +msgid "Enter any remaining passphrase: " +msgstr "Voer enig overblijvend wachtwoord in: " + +#: src/cryptsetup.c:1522 src/cryptsetup.c:1583 +msgid "Operation aborted, the keyslot was NOT wiped.\n" +msgstr "" + +#: src/cryptsetup.c:1560 +msgid "Enter passphrase to be deleted: " +msgstr "Voer het te verwijderen wachtwoord in: " + +#: src/cryptsetup.c:1641 src/cryptsetup.c:1715 src/cryptsetup.c:1749 +msgid "Enter new passphrase for key slot: " +msgstr "Voer een nieuw wachtwoord in voor de sleutelplaats: " + +#: src/cryptsetup.c:1732 src/cryptsetup_reencrypt.c:1327 +#, c-format +msgid "Enter any existing passphrase: " +msgstr "Voer een bestaand wachtwoord in: " + +#: src/cryptsetup.c:1800 +msgid "Enter passphrase to be changed: " +msgstr "Voer het te wijzigen wachtwoord in: " + +#: src/cryptsetup.c:1816 src/cryptsetup_reencrypt.c:1313 +msgid "Enter new passphrase: " +msgstr "Voer nieuw wachtwoord in: " + +#: src/cryptsetup.c:1866 +#, fuzzy +msgid "Enter passphrase for keyslot to be converted: " +msgstr "Voer wachtwoord voor sleutelplaats %u in: " + +#: src/cryptsetup.c:1890 +#, fuzzy +msgid "Only one device argument for isLuks operation is supported." +msgstr "Voor de isLuks-operatie wordt slechts één apparaatsargument ondersteund.\n" + +#: src/cryptsetup.c:2074 src/cryptsetup.c:2095 +#, fuzzy +msgid "Option --header-backup-file is required." +msgstr "Optie --header-backup-file is vereist.\n" + +#: src/cryptsetup.c:2125 +#, fuzzy, c-format +msgid "%s is not cryptsetup managed device." +msgstr "%s is geen LUKS-apparaat." + +#: src/cryptsetup.c:2136 +#, fuzzy, c-format +msgid "Refresh is not supported for device type %s" +msgstr "Hervatting wordt niet ondersteund voor apparaat %s.\n" + +#: src/cryptsetup.c:2174 +#, fuzzy, c-format +msgid "Unrecognized metadata device type %s." +msgstr "Niet-herkende metadata bij apparaatstype %s.\n" + +#: src/cryptsetup.c:2177 +#, fuzzy +msgid "Command requires device and mapped name as arguments." +msgstr "Opdracht vereist apparaat en toewijzingsnaam als argumenten.\n" + +#: src/cryptsetup.c:2199 +#, c-format +msgid "" +"This operation will erase all keyslots on device %s.\n" +"Device will become unusable after this operation." +msgstr "" +"Deze operatie zal alle sleutelplaatsen op apparaat %s wissen.\n" +"Na deze operatie wordt het apparaat onbruikbaar." + +#: src/cryptsetup.c:2206 +msgid "Operation aborted, keyslots were NOT wiped.\n" +msgstr "" + +#: src/cryptsetup.c:2243 +msgid "Invalid LUKS type, only luks1 and luks2 are supported." +msgstr "" + +#: src/cryptsetup.c:2261 +#, fuzzy, c-format +msgid "Device is already %s type." +msgstr "Apparaat %s bestaat reeds.\n" + +#: src/cryptsetup.c:2266 +#, fuzzy, c-format +msgid "This operation will convert %s to %s format.\n" +msgstr "Deze operatie wordt niet ondersteund voor versleutelapparaat %s.\n" + +#: src/cryptsetup.c:2272 +msgid "Operation aborted, device was NOT converted.\n" +msgstr "" + +#: src/cryptsetup.c:2312 +msgid "Option --priority, --label or --subsystem is missing." +msgstr "" + +#: src/cryptsetup.c:2346 src/cryptsetup.c:2379 src/cryptsetup.c:2402 +#, fuzzy, c-format +msgid "Token %d is invalid." +msgstr "Sleutelplaats %d is ongeldig.\n" + +#: src/cryptsetup.c:2349 src/cryptsetup.c:2405 +#, c-format +msgid "Token %d in use." +msgstr "" + +#: src/cryptsetup.c:2356 +#, fuzzy, c-format +msgid "Failed to add luks2-keyring token %d." +msgstr "Lezen uit sleutelopslag is mislukt.\n" + +#: src/cryptsetup.c:2365 src/cryptsetup.c:2427 +#, fuzzy, c-format +msgid "Failed to assign token %d to keyslot %d." +msgstr "Schrijven naar sleutelopslag is mislukt.\n" + +#: src/cryptsetup.c:2382 +#, fuzzy, c-format +msgid "Token %d is not in use." +msgstr "Sleutelplaats %d is niet in gebruik.\n" + +#: src/cryptsetup.c:2417 +#, fuzzy +msgid "Failed to import token from file." +msgstr "Openen van sleutelbestand is mislukt.\n" + +#: src/cryptsetup.c:2442 +#, fuzzy, c-format +msgid "Failed to get token %d for export." +msgstr "Schrijven naar sleutelopslag is mislukt.\n" + +#: src/cryptsetup.c:2457 +msgid "--key-description parameter is mandatory for token add action." +msgstr "" + +#: src/cryptsetup.c:2463 src/cryptsetup.c:2471 +msgid "Action requires specific token. Use --token-id parameter." +msgstr "" + +#: src/cryptsetup.c:2476 +#, fuzzy, c-format +msgid "Invalid token operation %s." +msgstr "Ongeldige sleutelgrootte %d.\n" + +#: src/cryptsetup.c:2531 +#, c-format +msgid "Auto-detected active dm device '%s' for data device %s.\n" +msgstr "" + +#: src/cryptsetup.c:2535 +#, fuzzy, c-format +msgid "Device %s is not a block device.\n" +msgstr "Apparaat %s is geen geldig LUKS-apparaat.\n" + +#: src/cryptsetup.c:2537 +#, fuzzy, c-format +msgid "Failed to auto-detect device %s holders." +msgstr "Kan geen map voor de apparaatstoewijzer verkrijgen." + +#: src/cryptsetup.c:2539 +#, 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 "" + +#: src/cryptsetup.c:2619 +#, fuzzy +msgid "Invalid LUKS device type." +msgstr "Ongeldig apparaat %s.\n" + +#: src/cryptsetup.c:2624 +msgid "Encryption without detached header (--header) is not possible without data device size reduction (--reduce-device-size)." +msgstr "" + +#: src/cryptsetup.c:2629 +msgid "Requested data offset must be less than or equal to half of --reduce-device-size parameter." +msgstr "" + +#: src/cryptsetup.c:2638 +#, c-format +msgid "Adjusting --reduce-device-size value to twice the --offset % (sectors).\n" +msgstr "" + +#: src/cryptsetup.c:2642 +#, fuzzy +msgid "Encryption is supported only for LUKS2 format." +msgstr "Deze operatie wordt enkel ondersteund voor LUKS-apparaten.\n" + +#: src/cryptsetup.c:2664 +#, c-format +msgid "Detected LUKS device on %s. Do you want to encrypt that LUKS device again?" +msgstr "" + +#: src/cryptsetup.c:2679 +#, fuzzy, c-format +msgid "Temporary header file %s already exists. Aborting." +msgstr "Aangevraagd reservekopiebestand %s van koptekst bestaat reeds.\n" + +#: src/cryptsetup.c:2681 src/cryptsetup.c:2688 +#, fuzzy, c-format +msgid "Cannot create temporary header file %s." +msgstr "Kan reservekopiebestand %s van koptekst niet aanmaken.\n" + +#: src/cryptsetup.c:2752 +#, c-format +msgid "%s/%s is now active and ready for online encryption." +msgstr "" + +#: src/cryptsetup.c:2919 src/cryptsetup.c:2925 +#, fuzzy +msgid "Not enough free keyslots for reencryption." +msgstr "Sleutel niet wijzigen; gegevensgebied wordt niet opnieuw versleuteld." + +#: src/cryptsetup.c:2945 src/cryptsetup_reencrypt.c:1284 +#, fuzzy +msgid "Key file can be used only with --key-slot or with exactly one key slot active." +msgstr "Sleutelbestand kan enkel gebruikt worden met optie --key-slot of met enkel één actieve sleutelplaats.\n" + +#: src/cryptsetup.c:2954 src/cryptsetup_reencrypt.c:1325 +#: src/cryptsetup_reencrypt.c:1336 +#, fuzzy, c-format +msgid "Enter passphrase for key slot %d: " +msgstr "Voer wachtwoord voor sleutelplaats %u in: " + +#: src/cryptsetup.c:2962 +#, c-format +msgid "Enter passphrase for key slot %u: " +msgstr "Voer wachtwoord voor sleutelplaats %u in: " + +#: src/cryptsetup.c:3129 +#, fuzzy +msgid "Command requires device as argument." +msgstr "Opdracht vereist apparaat en toewijzingsnaam als argumenten.\n" + +#: src/cryptsetup.c:3151 +msgid "Only LUKS2 format is currently supported. Please use cryptsetup-reencrypt tool for LUKS1." +msgstr "" + +#: src/cryptsetup.c:3163 +msgid "Legacy offline reencryption already in-progress. Use cryptsetup-reencrypt utility." +msgstr "" + +#: src/cryptsetup.c:3173 src/cryptsetup_reencrypt.c:178 +msgid "Reencryption of device with integrity profile is not supported." +msgstr "" + +#: src/cryptsetup.c:3181 +msgid "LUKS2 reencryption already initialized. Aborting operation." +msgstr "" + +#: src/cryptsetup.c:3185 +#, fuzzy +msgid "LUKS2 device is not in reencryption." +msgstr "Logbestand %s bestaat reeds, herencryptie wordt herstart.\n" + +#: src/cryptsetup.c:3212 +msgid " [--type ] []" +msgstr " [--type ] []" + +#: src/cryptsetup.c:3212 src/veritysetup.c:358 src/integritysetup.c:470 +#, fuzzy +msgid "open device as " +msgstr "apparaat als toewijzing openen" + +#: src/cryptsetup.c:3213 src/cryptsetup.c:3214 src/cryptsetup.c:3215 +#: src/veritysetup.c:359 src/veritysetup.c:360 src/integritysetup.c:471 +#: src/integritysetup.c:472 +msgid "" +msgstr "" + +#: src/cryptsetup.c:3213 src/veritysetup.c:359 src/integritysetup.c:471 +msgid "close device (remove mapping)" +msgstr "apparaat sluiten (toewijzingen verwijderen)" + +#: src/cryptsetup.c:3214 +msgid "resize active device" +msgstr "actief apparaat vergroten of verkleinen" + +#: src/cryptsetup.c:3215 +msgid "show device status" +msgstr "apparaatstatus tonen" + +#: src/cryptsetup.c:3216 +msgid "[--cipher ]" +msgstr "[--cipher ]" + +#: src/cryptsetup.c:3216 +msgid "benchmark cipher" +msgstr "versleutelalgoritme benchmarken" + +#: src/cryptsetup.c:3217 src/cryptsetup.c:3218 src/cryptsetup.c:3219 +#: src/cryptsetup.c:3220 src/cryptsetup.c:3221 src/cryptsetup.c:3228 +#: src/cryptsetup.c:3229 src/cryptsetup.c:3230 src/cryptsetup.c:3231 +#: src/cryptsetup.c:3232 src/cryptsetup.c:3233 src/cryptsetup.c:3234 +#: src/cryptsetup.c:3235 +msgid "" +msgstr "" + +#: src/cryptsetup.c:3217 +msgid "try to repair on-disk metadata" +msgstr "on-disk metadata proberen te herstellen" + +#: src/cryptsetup.c:3218 +#, fuzzy +msgid "reencrypt LUKS2 device" +msgstr "sleutel aan LUKS-apparaat toevoegen" + +#: src/cryptsetup.c:3219 +msgid "erase all keyslots (remove encryption key)" +msgstr "alle sleutelplaatsen wissen (encryptiesleutel verwijderen)" + +#: src/cryptsetup.c:3220 +msgid "convert LUKS from/to LUKS2 format" +msgstr "" + +#: src/cryptsetup.c:3221 +msgid "set permanent configuration options for LUKS2" +msgstr "" + +#: src/cryptsetup.c:3222 src/cryptsetup.c:3223 +msgid " []" +msgstr " []" + +#: src/cryptsetup.c:3222 +msgid "formats a LUKS device" +msgstr "een LUKS-apparaat formatteren" + +#: src/cryptsetup.c:3223 +msgid "add key to LUKS device" +msgstr "sleutel aan LUKS-apparaat toevoegen" + +#: src/cryptsetup.c:3224 src/cryptsetup.c:3225 src/cryptsetup.c:3226 +msgid " []" +msgstr " []" + +#: src/cryptsetup.c:3224 +msgid "removes supplied key or key file from LUKS device" +msgstr "verschafte sleutel of sleutelbestand van LUKS-apparaat verwijderen" + +#: src/cryptsetup.c:3225 +msgid "changes supplied key or key file of LUKS device" +msgstr "wijzigt verschafte sleutel of sleutelbestand van LUKS-apparaat" + +#: src/cryptsetup.c:3226 +msgid "converts a key to new pbkdf parameters" +msgstr "" + +#: src/cryptsetup.c:3227 +msgid " " +msgstr " " + +#: src/cryptsetup.c:3227 +msgid "wipes key with number from LUKS device" +msgstr "sleutel met nummer van LUKS-apparaat verwijderen" + +#: src/cryptsetup.c:3228 +msgid "print UUID of LUKS device" +msgstr "UUID van LUKS-apparaat tonen" + +#: src/cryptsetup.c:3229 +msgid "tests for LUKS partition header" +msgstr " op een LUKS-partitiekoptekst testen" + +#: src/cryptsetup.c:3230 +msgid "dump LUKS partition information" +msgstr "LUKS-partitie-informatie dumpen" + +#: src/cryptsetup.c:3231 +msgid "dump TCRYPT device information" +msgstr "TCRYPT-apparaatsinformatie dumpen" + +#: src/cryptsetup.c:3232 +#, fuzzy +msgid "Suspend LUKS device and wipe key (all IOs are frozen)" +msgstr "LUKS-apparaat schorsen en sleutel wissen (alle in-/uitvoer wordt bevroren)." + +#: src/cryptsetup.c:3233 +#, fuzzy +msgid "Resume suspended LUKS device" +msgstr "Geschorst LUKS-apparaat hervatten." + +#: src/cryptsetup.c:3234 +msgid "Backup LUKS device header and keyslots" +msgstr "Reservekopie van LUKS-apparaatkoptekst en -sleutelplaatsen maken" + +#: src/cryptsetup.c:3235 +msgid "Restore LUKS device header and keyslots" +msgstr "LUKS-apparaatkoptekst en -sleutelplaatsen herstellen" + +#: src/cryptsetup.c:3236 +msgid " " +msgstr "" + +#: src/cryptsetup.c:3236 +msgid "Manipulate LUKS2 tokens" +msgstr "" + +#: src/cryptsetup.c:3254 src/veritysetup.c:376 src/integritysetup.c:488 +msgid "" +"\n" +" is one of:\n" +msgstr "" +"\n" +" is één van:\n" + +#: src/cryptsetup.c:3260 +msgid "" +"\n" +"You can also use old syntax aliases:\n" +"\topen: create (plainOpen), luksOpen, loopaesOpen, tcryptOpen\n" +"\tclose: remove (plainClose), luksClose, loopaesClose, tcryptClose\n" +msgstr "" +"\n" +"U kan ook oude -syntax aliasen gebruiken:\n" +"\topen: (plainOpen), luksOpen, loopaesOpen, tcryptOpen aanmaken\n" +"\tclose: (plainClose), luksClose, loopaesClose, tryptClose verwijderen\n" + +#: src/cryptsetup.c:3264 +#, c-format +msgid "" +"\n" +" is the device to create under %s\n" +" is the encrypted device\n" +" is the LUKS key slot number to modify\n" +" optional key file for the new key for luksAddKey action\n" +msgstr "" +"\n" +" is het onder %s aan te maken apparaat\n" +" is het versleutelde apparaat\n" +" is het nummer van de te wijzigen LUKS-sleutelplaats\n" +" optioneel sleutelbestand voor de nieuwe sleutel voor de luksAddKey-actie\n" + +#: src/cryptsetup.c:3271 +#, c-format +msgid "" +"\n" +"Default compiled-in metadata format is %s (for luksFormat action).\n" +msgstr "" + +#: src/cryptsetup.c:3276 +#, fuzzy, c-format +msgid "" +"\n" +"Default compiled-in key and passphrase parameters:\n" +"\tMaximum keyfile size: %dkB, Maximum interactive passphrase length %d (characters)\n" +"Default PBKDF for LUKS1: %s, iteration time: %d (ms)\n" +"Default PBKDF for LUKS2: %s\n" +"\tIteration time: %d, Memory required: %dkB, Parallel threads: %d\n" +msgstr "" +"\n" +"Standaard meegecompileerde sleutel- en wachtwoordparameters:\n" +"\tMaximum sleutelplaatsgrootte: %dkB, maximum lengte interactief wachtwoord %d (karakters)\n" +"Standaard PBKDF2-herhalingstijd voor LUKS: %d (ms)\n" + +#: src/cryptsetup.c:3287 +#, fuzzy, c-format +msgid "" +"\n" +"Default compiled-in device cipher parameters:\n" +"\tloop-AES: %s, Key %d bits\n" +"\tplain: %s, Key: %d bits, Password hashing: %s\n" +"\tLUKS: %s, Key: %d bits, LUKS header hashing: %s, RNG: %s\n" +msgstr "" +"\n" +"Standaard meegecompileerde parameters van het apparaatsversleutelingsalgoritme:\n" +"\tloop-AES: %s, Sleutel: %d bits\n" +"\tplain: %s, Sleutel: %d bits, Wachtwoordhashing: %s\n" +"\tLUKS1: %s, Sleutel: %d bits, LUKS-kopteksthashing: %s, RNG: %s\n" + +#: src/cryptsetup.c:3296 +msgid "\tLUKS: Default keysize with XTS mode (two internal keys) will be doubled.\n" +msgstr "" + +#: src/cryptsetup.c:3312 src/veritysetup.c:532 src/integritysetup.c:630 +#, c-format +msgid "%s: requires %s as arguments" +msgstr "%s: vereist %s als argumenten" + +#: src/cryptsetup.c:3350 src/veritysetup.c:421 src/integritysetup.c:527 +#: src/cryptsetup_reencrypt.c:1591 +msgid "Show this help message" +msgstr "Deze hulptekst tonen" + +#: src/cryptsetup.c:3351 src/veritysetup.c:422 src/integritysetup.c:528 +#: src/cryptsetup_reencrypt.c:1592 +msgid "Display brief usage" +msgstr "Korte gebruikssamenvatting tonen" + +#: src/cryptsetup.c:3352 src/veritysetup.c:423 src/integritysetup.c:529 +#: src/cryptsetup_reencrypt.c:1593 +msgid "Print package version" +msgstr "Pakketversie tonen" + +#: src/cryptsetup.c:3356 src/veritysetup.c:427 src/integritysetup.c:533 +#: src/cryptsetup_reencrypt.c:1597 +msgid "Help options:" +msgstr "Hulpopties:" + +#: src/cryptsetup.c:3357 src/veritysetup.c:428 src/integritysetup.c:534 +#: src/cryptsetup_reencrypt.c:1598 +msgid "Shows more detailed error messages" +msgstr "Gedetailleerdere foutboodschappen tonen" + +#: src/cryptsetup.c:3358 src/veritysetup.c:429 src/integritysetup.c:535 +#: src/cryptsetup_reencrypt.c:1599 +msgid "Show debug messages" +msgstr "Debug-boodschappen tonen" + +#: src/cryptsetup.c:3359 +#, fuzzy +msgid "Show debug messages including JSON metadata" +msgstr "Debug-boodschappen tonen" + +#: src/cryptsetup.c:3360 src/cryptsetup_reencrypt.c:1601 +msgid "The cipher used to encrypt the disk (see /proc/crypto)" +msgstr "Het gebruikte versleutelalgoritme om de schijf te versleutelen (zie /proc/crypto)" + +#: src/cryptsetup.c:3361 src/cryptsetup_reencrypt.c:1603 +msgid "The hash used to create the encryption key from the passphrase" +msgstr "De gebruikte hash om de encryptiesleutel uit het wachtwoord aan te maken" + +#: src/cryptsetup.c:3362 +msgid "Verifies the passphrase by asking for it twice" +msgstr "Het wachtwoord controleren door het twee keer te vragen" + +#: src/cryptsetup.c:3363 src/cryptsetup_reencrypt.c:1605 +#, fuzzy +msgid "Read the key from a file" +msgstr "De sleutel uit een bestand lezen." + +#: src/cryptsetup.c:3364 +msgid "Read the volume (master) key from file." +msgstr "De (hoofd)sleutel tot het opslagmedium uit een bestand lezen." + +#: src/cryptsetup.c:3365 +#, fuzzy +msgid "Dump volume (master) key instead of keyslots info" +msgstr "Dump (hoofd)sleutel tot het opslagmedium in plaats van de sleutelplaatsinformatie." + +#: src/cryptsetup.c:3366 src/cryptsetup_reencrypt.c:1602 +msgid "The size of the encryption key" +msgstr "De grootte van de encryptiesleutel" + +#: src/cryptsetup.c:3366 src/cryptsetup.c:3425 src/integritysetup.c:553 +#: src/integritysetup.c:557 src/integritysetup.c:561 +#: src/cryptsetup_reencrypt.c:1602 +msgid "BITS" +msgstr "BITS" + +#: src/cryptsetup.c:3367 src/cryptsetup_reencrypt.c:1618 +msgid "Limits the read from keyfile" +msgstr "Beperkt de lezing uit sleutelbestand" + +#: src/cryptsetup.c:3367 src/cryptsetup.c:3368 src/cryptsetup.c:3369 +#: src/cryptsetup.c:3370 src/cryptsetup.c:3373 src/cryptsetup.c:3422 +#: src/cryptsetup.c:3423 src/cryptsetup.c:3431 src/cryptsetup.c:3432 +#: src/veritysetup.c:432 src/veritysetup.c:433 src/veritysetup.c:434 +#: src/veritysetup.c:437 src/veritysetup.c:438 src/integritysetup.c:542 +#: src/integritysetup.c:548 src/integritysetup.c:549 +#: src/cryptsetup_reencrypt.c:1617 src/cryptsetup_reencrypt.c:1618 +#: src/cryptsetup_reencrypt.c:1619 src/cryptsetup_reencrypt.c:1620 +msgid "bytes" +msgstr "bytes" + +#: src/cryptsetup.c:3368 src/cryptsetup_reencrypt.c:1617 +msgid "Number of bytes to skip in keyfile" +msgstr "Aantal bytes over te slaan in sleutelbestand" + +#: src/cryptsetup.c:3369 +msgid "Limits the read from newly added keyfile" +msgstr "Beperkt de lezing uit een nieuw toegevoegd sleutelbestand" + +#: src/cryptsetup.c:3370 +msgid "Number of bytes to skip in newly added keyfile" +msgstr "Aantal bytes over te slaan in nieuwste toegevoegde sleutelbestand" + +#: src/cryptsetup.c:3371 +msgid "Slot number for new key (default is first free)" +msgstr "Plaatsnummer voor nieuwe sleutel (standaard is de eerste open plaats)" + +#: src/cryptsetup.c:3372 +msgid "The size of the device" +msgstr "De grootte van het apparaat" + +#: src/cryptsetup.c:3372 src/cryptsetup.c:3374 src/cryptsetup.c:3375 +#: src/cryptsetup.c:3381 src/integritysetup.c:543 src/integritysetup.c:550 +msgid "SECTORS" +msgstr "SECTOREN" + +#: src/cryptsetup.c:3373 src/cryptsetup_reencrypt.c:1620 +msgid "Use only specified device size (ignore rest of device). DANGEROUS!" +msgstr "Enkel ingegeven apparaatsgrootte gebruiken (rest van apparaat wordt genegeerd). GEVAARLIJK!" + +#: src/cryptsetup.c:3374 +msgid "The start offset in the backend device" +msgstr "De startplaats in het backend-apparaat" + +#: src/cryptsetup.c:3375 +msgid "How many sectors of the encrypted data to skip at the beginning" +msgstr "Hoeveel sectoren van de versleutelde gegevens aan het begin over te slaan" + +#: src/cryptsetup.c:3376 +msgid "Create a readonly mapping" +msgstr "Een alleen-lezen toewijzing aanmaken" + +#: src/cryptsetup.c:3377 src/integritysetup.c:536 +#: src/cryptsetup_reencrypt.c:1608 +msgid "Do not ask for confirmation" +msgstr "Niet om bevestiging vragen" + +#: src/cryptsetup.c:3378 +msgid "Timeout for interactive passphrase prompt (in seconds)" +msgstr "Timeout voor interactieve wachtwoordprompt (in seconden)" + +#: src/cryptsetup.c:3378 src/cryptsetup.c:3379 src/integritysetup.c:537 +#: src/cryptsetup_reencrypt.c:1609 +msgid "secs" +msgstr "seconden" + +#: src/cryptsetup.c:3379 src/integritysetup.c:537 +#: src/cryptsetup_reencrypt.c:1609 +msgid "Progress line update (in seconds)" +msgstr "" + +#: src/cryptsetup.c:3380 src/cryptsetup_reencrypt.c:1610 +msgid "How often the input of the passphrase can be retried" +msgstr "Hoe vaak de invoering van het wachtwoord opnieuw geprobeerd kan worden" + +#: src/cryptsetup.c:3381 +msgid "Align payload at sector boundaries - for luksFormat" +msgstr "Payload uitlijnen op meervouden van sectoren – voor luksFormat" + +#: src/cryptsetup.c:3382 +#, fuzzy +msgid "File with LUKS header and keyslots backup" +msgstr "Bestand met reservekopie van LUKS-koptekst en -sleutelplaatsen." + +#: src/cryptsetup.c:3383 src/cryptsetup_reencrypt.c:1611 +#, fuzzy +msgid "Use /dev/random for generating volume key" +msgstr "Gebruik /dev/random om de sleutel tot het opslagmedium te genereren." + +#: src/cryptsetup.c:3384 src/cryptsetup_reencrypt.c:1612 +#, fuzzy +msgid "Use /dev/urandom for generating volume key" +msgstr "Gebruik /dev/urandom om de sleutel tot het opslagmedium te genereren." + +#: src/cryptsetup.c:3385 +#, fuzzy +msgid "Share device with another non-overlapping crypt segment" +msgstr "Apparaat met een ander, niet-overlappend cryptsegment delen." + +#: src/cryptsetup.c:3386 src/veritysetup.c:441 +#, fuzzy +msgid "UUID for device to use" +msgstr "UUID van het te gebruiken apparaat." + +#: src/cryptsetup.c:3387 +#, fuzzy +msgid "Allow discards (aka TRIM) requests for device" +msgstr "Discardaanvragen (alias TRIM) op dit apparaat toelaten." + +#: src/cryptsetup.c:3388 src/cryptsetup_reencrypt.c:1629 +#, fuzzy +msgid "Device or file with separated LUKS header" +msgstr "Apparaat of bestand met verschillende LUKS-koptekst." + +#: src/cryptsetup.c:3389 +#, fuzzy +msgid "Do not activate device, just check passphrase" +msgstr "Apparaat niet activeren, enkel wachtwoord controleren." + +#: src/cryptsetup.c:3390 +#, fuzzy +msgid "Use hidden header (hidden TCRYPT device)" +msgstr "Verborgen koptekst gebruiken (verborgen TCRYPT-apparaat)." + +#: src/cryptsetup.c:3391 +#, fuzzy +msgid "Device is system TCRYPT drive (with bootloader)" +msgstr "Apparaat is TCRYPT-systeemschijf (met bootloader)." + +#: src/cryptsetup.c:3392 +#, fuzzy +msgid "Use backup (secondary) TCRYPT header" +msgstr "Reserve (secundaire) TCRYPT-koptekst gebruiken." + +#: src/cryptsetup.c:3393 +#, fuzzy +msgid "Scan also for VeraCrypt compatible device" +msgstr "Eveneens naar VeraCrypt-compatibel apparaat scannen." + +#: src/cryptsetup.c:3394 +#, fuzzy +msgid "Personal Iteration Multiplier for VeraCrypt compatible device" +msgstr "Eveneens naar VeraCrypt-compatibel apparaat scannen." + +#: src/cryptsetup.c:3395 +#, fuzzy +msgid "Query Personal Iteration Multiplier for VeraCrypt compatible device" +msgstr "Eveneens naar VeraCrypt-compatibel apparaat scannen." + +#: src/cryptsetup.c:3396 +#, fuzzy +msgid "Type of device metadata: luks, luks1, luks2, plain, loopaes, tcrypt" +msgstr "Soorten apparaat-metadata: luks, plain, loopaes, tcrypt." + +#: src/cryptsetup.c:3397 +#, fuzzy +msgid "Disable password quality check (if enabled)" +msgstr "Wachtwoordkwaliteitscontrole uitschakelen (indien ingeschakeld)." + +#: src/cryptsetup.c:3398 +#, fuzzy +msgid "Use dm-crypt same_cpu_crypt performance compatibility option" +msgstr "dm-crypt same_cpu_crypt prestatie-compatibiliteitsoptie gebruiken." + +#: src/cryptsetup.c:3399 +#, fuzzy +msgid "Use dm-crypt submit_from_crypt_cpus performance compatibility option" +msgstr "dm-crypt submit_from_crypt_cpus prestatie-compatibiliteitsoptie gebruiken." + +#: src/cryptsetup.c:3400 +msgid "Device removal is deferred until the last user closes it" +msgstr "" + +#: src/cryptsetup.c:3401 +msgid "Use global lock to serialize memory hard PBKDF (OOM workaround)" +msgstr "" + +#: src/cryptsetup.c:3402 +#, fuzzy +msgid "PBKDF iteration time for LUKS (in ms)" +msgstr "PBKDF2 herhalingstijd voor LUKS (in ms)" + +#: src/cryptsetup.c:3402 src/cryptsetup_reencrypt.c:1607 +msgid "msecs" +msgstr "milliseconden" + +#: src/cryptsetup.c:3403 src/cryptsetup_reencrypt.c:1625 +msgid "PBKDF algorithm (for LUKS2): argon2i, argon2id, pbkdf2" +msgstr "" + +#: src/cryptsetup.c:3404 src/cryptsetup_reencrypt.c:1626 +msgid "PBKDF memory cost limit" +msgstr "" + +#: src/cryptsetup.c:3404 src/cryptsetup_reencrypt.c:1626 +#, fuzzy +msgid "kilobytes" +msgstr "bytes" + +#: src/cryptsetup.c:3405 src/cryptsetup_reencrypt.c:1627 +msgid "PBKDF parallel cost" +msgstr "" + +#: src/cryptsetup.c:3405 src/cryptsetup_reencrypt.c:1627 +msgid "threads" +msgstr "" + +#: src/cryptsetup.c:3406 src/cryptsetup_reencrypt.c:1628 +msgid "PBKDF iterations cost (forced, disables benchmark)" +msgstr "" + +#: src/cryptsetup.c:3407 +msgid "Keyslot priority: ignore, normal, prefer" +msgstr "" + +#: src/cryptsetup.c:3408 +#, fuzzy +msgid "Disable locking of on-disk metadata" +msgstr "on-disk metadata proberen te herstellen" + +#: src/cryptsetup.c:3409 +msgid "Disable loading volume keys via kernel keyring" +msgstr "" + +#: src/cryptsetup.c:3410 +msgid "Data integrity algorithm (LUKS2 only)" +msgstr "" + +#: src/cryptsetup.c:3411 src/integritysetup.c:564 +msgid "Disable journal for integrity device" +msgstr "" + +#: src/cryptsetup.c:3412 src/integritysetup.c:538 +msgid "Do not wipe device after format" +msgstr "" + +#: src/cryptsetup.c:3413 +msgid "Do not ask for passphrase if activation by token fails" +msgstr "" + +#: src/cryptsetup.c:3414 +msgid "Token number (default: any)" +msgstr "" + +#: src/cryptsetup.c:3415 +msgid "Key description" +msgstr "" + +#: src/cryptsetup.c:3416 +msgid "Encryption sector size (default: 512 bytes)" +msgstr "" + +#: src/cryptsetup.c:3417 +msgid "Set activation flags persistent for device" +msgstr "" + +#: src/cryptsetup.c:3418 +#, fuzzy +msgid "Set label for the LUKS2 device" +msgstr "een LUKS-apparaat formatteren" + +#: src/cryptsetup.c:3419 +msgid "Set subsystem label for the LUKS2 device" +msgstr "" + +#: src/cryptsetup.c:3420 +msgid "Create unbound (no assigned data segment) LUKS2 keyslot" +msgstr "" + +#: src/cryptsetup.c:3421 +#, fuzzy +msgid "Read or write the json from or to a file" +msgstr "De sleutel uit een bestand lezen." + +#: src/cryptsetup.c:3422 +msgid "LUKS2 header metadata area size" +msgstr "" + +#: src/cryptsetup.c:3423 +#, fuzzy +msgid "LUKS2 header keyslots area size" +msgstr "Bestand met reservekopie van LUKS-koptekst en -sleutelplaatsen." + +#: src/cryptsetup.c:3424 +msgid "Refresh (reactivate) device with new parameters" +msgstr "" + +#: src/cryptsetup.c:3425 +#, fuzzy +msgid "LUKS2 keyslot: The size of the encryption key" +msgstr "De grootte van de encryptiesleutel" + +#: src/cryptsetup.c:3426 +msgid "LUKS2 keyslot: The cipher used for keyslot encryption" +msgstr "" + +#: src/cryptsetup.c:3427 +#, fuzzy +msgid "Encrypt LUKS2 device (in-place encryption)." +msgstr "Apparaat permanent ontsleutelen (encryptie verwijderen)." + +#: src/cryptsetup.c:3428 +#, fuzzy +msgid "Decrypt LUKS2 device (remove encryption)." +msgstr "Apparaat permanent ontsleutelen (encryptie verwijderen)." + +#: src/cryptsetup.c:3429 +msgid "Initialize LUKS2 reencryption in metadata only." +msgstr "" + +#: src/cryptsetup.c:3430 +msgid "Resume initialized LUKS2 reencryption only." +msgstr "" + +#: src/cryptsetup.c:3431 src/cryptsetup_reencrypt.c:1619 +msgid "Reduce data device size (move data offset). DANGEROUS!" +msgstr "Grootte van gegevensapparaat wijzigen (gegevenspositie wijzigen). GEVAARLIJK!" + +#: src/cryptsetup.c:3432 +#, fuzzy +msgid "Maximal reencryption hotzone size." +msgstr "Blokgrootte herencryptie" + +#: src/cryptsetup.c:3433 +msgid "Reencryption hotzone resilience type (checksum,journal,none)" +msgstr "" + +#: src/cryptsetup.c:3434 +#, fuzzy +msgid "Reencryption hotzone checksums hash" +msgstr "Blokgrootte herencryptie" + +#: src/cryptsetup.c:3435 +msgid "Override device autodetection of dm device to be reencrypted" +msgstr "" + +#: src/cryptsetup.c:3451 src/veritysetup.c:462 src/integritysetup.c:583 +msgid "[OPTION...] " +msgstr "[OPTIE…] " + +#: src/cryptsetup.c:3502 src/veritysetup.c:496 src/integritysetup.c:594 +msgid "Argument missing." +msgstr "Argument ontbreekt." + +#: src/cryptsetup.c:3565 src/veritysetup.c:527 src/integritysetup.c:625 +msgid "Unknown action." +msgstr "Onbekende actie." + +#: src/cryptsetup.c:3575 +msgid "Parameter --refresh is only allowed with open or refresh commands.\n" +msgstr "" + +#: src/cryptsetup.c:3580 +msgid "Options --refresh and --test-passphrase are mutually exclusive.\n" +msgstr "" + +#: src/cryptsetup.c:3585 +#, fuzzy +msgid "Option --deferred is allowed only for close command.\n" +msgstr "Optie --shared wordt enkel toegestaan voor open-opdracht op plain-apparaat.\n" + +#: src/cryptsetup.c:3590 +msgid "Option --shared is allowed only for open of plain device.\n" +msgstr "Optie --shared wordt enkel toegestaan voor open-opdracht op plain-apparaat.\n" + +#: src/cryptsetup.c:3595 +msgid "Option --allow-discards is allowed only for open operation.\n" +msgstr "Optie --allow-discards wordt enkel toegestaan voor de open-operatie.\n" + +#: src/cryptsetup.c:3600 +#, fuzzy +msgid "Option --persistent is allowed only for open operation.\n" +msgstr "Optie --allow-discards wordt enkel toegestaan voor de open-operatie.\n" + +#: src/cryptsetup.c:3605 +#, fuzzy +msgid "Option --serialize-memory-hard-pbkdf is allowed only for open operation.\n" +msgstr "Optie --allow-discards wordt enkel toegestaan voor de open-operatie.\n" + +#: src/cryptsetup.c:3610 +msgid "Option --persistent is not allowed with --test-passphrase.\n" +msgstr "" + +#: src/cryptsetup.c:3620 +#, fuzzy +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 "" +"Optie --key-size is enkel toegestaan bij luksFormat, open en benchmark.\n" +"Om de lezing uit een sleutelbestand te beperken, gebruik --keyfile-size=(bytes)." + +#: src/cryptsetup.c:3626 +#, fuzzy +msgid "Option --integrity is allowed only for luksFormat (LUKS2).\n" +msgstr "Optie --align-payload is enkel toegestaan voor luksFormat." + +#: src/cryptsetup.c:3631 +msgid "Option --integrity-no-wipe can be used only for format action with integrity extension.\n" +msgstr "" + +#: src/cryptsetup.c:3637 +#, fuzzy +msgid "Options --label and --subsystem are allowed only for luksFormat and config LUKS2 operations.\n" +msgstr "Optie --allow-discards wordt enkel ondersteund voor de luksOpen-, loopaesOpen- en create-opdrachten.\n" + +#: src/cryptsetup.c:3643 +msgid "Option --test-passphrase is allowed only for open of LUKS and TCRYPT devices.\n" +msgstr "Optie --test-passphrase is enkel toegestaan bij open van LUKS- en TCRYPT-apparaten.\n" + +#: src/cryptsetup.c:3648 src/cryptsetup_reencrypt.c:1692 +msgid "Key size must be a multiple of 8 bits" +msgstr "Sleutelgrootte moet een meervoud zijn van 8 bits" + +#: src/cryptsetup.c:3654 src/cryptsetup_reencrypt.c:1378 +#: src/cryptsetup_reencrypt.c:1697 +msgid "Key slot is invalid." +msgstr "Sleutelplaats is ongeldig." + +#: src/cryptsetup.c:3661 +#, fuzzy +msgid "Option --key-file takes precedence over specified key file argument." +msgstr "Optie --key-file krijgt voorrang over het gespecificeerde sleutelbestandsargument.\n" + +#: src/cryptsetup.c:3668 src/veritysetup.c:539 src/integritysetup.c:649 +#: src/cryptsetup_reencrypt.c:1671 +msgid "Negative number for option not permitted." +msgstr "Een negatief getal wordt niet toegestaan voor deze optie." + +#: src/cryptsetup.c:3672 +msgid "Only one --key-file argument is allowed." +msgstr "Slechts een enkel gebruik van het --key-file argument is toegestaan." + +#: src/cryptsetup.c:3676 src/cryptsetup_reencrypt.c:1663 +#: src/cryptsetup_reencrypt.c:1701 +msgid "Only one of --use-[u]random options is allowed." +msgstr "Slechts een enkel gebruik van de opties --use-[u]random is toegestaan." + +#: src/cryptsetup.c:3680 +msgid "Option --use-[u]random is allowed only for luksFormat." +msgstr "OPtie --use-[u]random is enkel toegestaan bij luksFormat." + +#: src/cryptsetup.c:3684 +msgid "Option --uuid is allowed only for luksFormat and luksUUID." +msgstr "Optie --uuid is enkel toegestaan bij luksFormat en luksUUID." + +#: src/cryptsetup.c:3688 +msgid "Option --align-payload is allowed only for luksFormat." +msgstr "Optie --align-payload is enkel toegestaan voor luksFormat." + +#: src/cryptsetup.c:3692 +msgid "Options --luks2-metadata-size and --opt-luks2-keyslots-size are allowed only for luksFormat with LUKS2." +msgstr "" + +#: src/cryptsetup.c:3697 +#, fuzzy +msgid "Invalid LUKS2 metadata size specification." +msgstr "Ongeldig apparaatsgrootte ingegeven." + +#: src/cryptsetup.c:3701 +#, fuzzy +msgid "Invalid LUKS2 keyslots size specification." +msgstr "Ongeldig apparaatsgrootte ingegeven." + +#: src/cryptsetup.c:3705 +#, fuzzy +msgid "Options --align-payload and --offset cannot be combined." +msgstr "Optie --align-payload is enkel toegestaan voor luksFormat." + +#: src/cryptsetup.c:3711 +msgid "Option --skip is supported only for open of plain and loopaes devices.\n" +msgstr "Optie --skip wordt enkel ondersteund voor open-opdracht op plain- en loopaes-apparaten.\n" + +#: src/cryptsetup.c:3718 +#, fuzzy +msgid "Option --offset is supported only for open of plain and loopaes devices, luksFormat and device reencryption.\n" +msgstr "Optie --offset wordt enkel ondersteund voor open-opdracht op plain- en loopaes-apparaten.\n" + +#: src/cryptsetup.c:3724 +msgid "Option --tcrypt-hidden, --tcrypt-system or --tcrypt-backup is supported only for TCRYPT device.\n" +msgstr "Optie --tcrypt-hidden, --tcrypt-system of --tcrypt-backup wordt enkel ondersteund voor TCRYPT-apparaten.\n" + +#: src/cryptsetup.c:3729 +msgid "Option --tcrypt-hidden cannot be combined with --allow-discards.\n" +msgstr "Optie --tcrypt-hidden kan niet met --allow-discards gecombineerd worden.\n" + +#: src/cryptsetup.c:3734 +msgid "Option --veracrypt is supported only for TCRYPT device type.\n" +msgstr "Optie --veracrypt wordt enkel ondersteund voor TCRYPT-apparaatstype.\n" + +#: src/cryptsetup.c:3740 +msgid "Invalid argument for parameter --veracrypt-pim supplied.\n" +msgstr "" + +#: src/cryptsetup.c:3744 +#, fuzzy +msgid "Option --veracrypt-pim is supported only for VeraCrypt compatible devices.\n" +msgstr "Optie --veracrypt wordt enkel ondersteund voor TCRYPT-apparaatstype.\n" + +#: src/cryptsetup.c:3752 +#, fuzzy +msgid "Option --veracrypt-query-pim is supported only for VeraCrypt compatible devices.\n" +msgstr "Optie --veracrypt wordt enkel ondersteund voor TCRYPT-apparaatstype.\n" + +#: src/cryptsetup.c:3756 +msgid "The options --veracrypt-pim and --veracrypt-query-pim are mutually exclusive.\n" +msgstr "" + +#: src/cryptsetup.c:3763 +msgid "Option --priority can be only ignore/normal/prefer.\n" +msgstr "" + +#: src/cryptsetup.c:3768 +msgid "Keyslot specification is required.\n" +msgstr "" + +#: src/cryptsetup.c:3773 src/cryptsetup_reencrypt.c:1677 +msgid "Password-based key derivation function (PBKDF) can be only pbkdf2 or argon2i/argon2id.\n" +msgstr "" + +#: src/cryptsetup.c:3778 src/cryptsetup_reencrypt.c:1682 +msgid "PBKDF forced iterations cannot be combined with iteration time option.\n" +msgstr "" + +#: src/cryptsetup.c:3784 +#, fuzzy +msgid "Sector size option is not supported for this command.\n" +msgstr "Deze operatie wordt niet ondersteund voor dit apparaatstype.\n" + +#: src/cryptsetup.c:3790 +#, fuzzy +msgid "Unsupported encryption sector size.\n" +msgstr "Kan herencryptie-logbestand niet lezen.\n" + +#: src/cryptsetup.c:3795 +msgid "Key size is required with --unbound option.\n" +msgstr "" + +#: src/cryptsetup.c:3800 +#, fuzzy +msgid "Option --unbound may be used only with luksAddKey action.\n" +msgstr "Optie --new kan niet samen met --decrypt gebruikt worden." + +#: src/cryptsetup.c:3805 +#, fuzzy +msgid "Option --refresh may be used only with open action.\n" +msgstr "Optie -- keep-key kan enkel samen met --hash of --iter-time gebruikt worden." + +#: src/cryptsetup.c:3816 +msgid "Cannot disable metadata locking.\n" +msgstr "" + +#: src/cryptsetup.c:3826 +#, fuzzy +msgid "Invalid max reencryption hotzone size specification." +msgstr "Ongeldig apparaatsgrootte ingegeven." + +#: src/cryptsetup.c:3834 src/cryptsetup_reencrypt.c:1706 +#: src/cryptsetup_reencrypt.c:1711 +msgid "Invalid device size specification." +msgstr "Ongeldig apparaatsgrootte ingegeven." + +#: src/cryptsetup.c:3837 +#, fuzzy +msgid "Maximum device reduce size is 1 GiB." +msgstr "Maximum apparaatsverkleiningsgrootte is 64 MB." + +#: src/cryptsetup.c:3840 src/cryptsetup_reencrypt.c:1717 +msgid "Reduce size must be multiple of 512 bytes sector." +msgstr "Verkleiningsgrootte moet een meervoud zijn van de 512 bytes-grote sector." + +#: src/cryptsetup.c:3845 +#, fuzzy +msgid "Invalid data size specification." +msgstr "Ongeldig apparaatsgrootte ingegeven." + +#: src/cryptsetup.c:3850 +#, fuzzy +msgid "Reduce size overflow." +msgstr "Overloop van apparaatsgegevenspositie.\n" + +#: src/cryptsetup.c:3854 +msgid "LUKS2 decryption requires option --header." +msgstr "" + +#: src/cryptsetup.c:3858 +#, fuzzy +msgid "Device size must be multiple of 512 bytes sector." +msgstr "Verkleiningsgrootte moet een meervoud zijn van de 512 bytes-grote sector." + +#: src/cryptsetup.c:3862 +msgid "Options --reduce-device-size and --data-size cannot be combined." +msgstr "" + +#: src/cryptsetup.c:3866 +msgid "Options --device-size and --size cannot be combined." +msgstr "" + +#: src/veritysetup.c:65 +#, fuzzy +msgid "Invalid salt string specified." +msgstr "Ongeldige salt-tekenreeks opgegeven.\n" + +#: src/veritysetup.c:96 +#, fuzzy, c-format +msgid "Cannot create hash image %s for writing." +msgstr "Kan hashafbeeling %s niet aanmaken voor beschrijving.\n" + +#: src/veritysetup.c:106 +#, fuzzy, c-format +msgid "Cannot create FEC image %s for writing." +msgstr "Kan hashafbeeling %s niet aanmaken voor beschrijving.\n" + +#: src/veritysetup.c:176 +#, fuzzy +msgid "Invalid root hash string specified." +msgstr "Ongeldige root-hash tekenreeks opgegeven.\n" + +#: src/veritysetup.c:356 +msgid " " +msgstr " " + +#: src/veritysetup.c:356 src/integritysetup.c:469 +msgid "format device" +msgstr "apparaat formateren" + +#: src/veritysetup.c:357 +msgid " " +msgstr " " + +#: src/veritysetup.c:357 +msgid "verify device" +msgstr "apparaat controleren" + +#: src/veritysetup.c:358 +#, fuzzy +msgid " " +msgstr " " + +#: src/veritysetup.c:360 src/integritysetup.c:472 +msgid "show active device status" +msgstr "status van actief apparaat tonen" + +#: src/veritysetup.c:361 +msgid "" +msgstr "" + +#: src/veritysetup.c:361 src/integritysetup.c:473 +msgid "show on-disk information" +msgstr "on-disk informatie tonen" + +#: src/veritysetup.c:380 +#, c-format +msgid "" +"\n" +" is the device to create under %s\n" +" is the data device\n" +" is the device containing verification data\n" +" hash of the root node on \n" +msgstr "" +"\n" +" is de naam van het onder %s te creëren apparaat\n" +" is het de naam van het gegevensapparaat\n" +" is de naam van het apparaat dat de verificatiegegevens bevat\n" +" is de hash van de rootnode op \n" + +#: src/veritysetup.c:387 +#, c-format +msgid "" +"\n" +"Default compiled-in dm-verity parameters:\n" +"\tHash: %s, Data block (bytes): %u, Hash block (bytes): %u, Salt size: %u, Hash format: %u\n" +msgstr "" +"\n" +"Standaard meegecompileerde dm-verity parameters:\n" +"\tHash: %s, Datablok (bytes): %u, Hashblock (bytes): %u, Saltgrootte: %u, Hashformaat: %u\n" + +#: src/veritysetup.c:430 +msgid "Do not use verity superblock" +msgstr "VERITY-superblok niet gebruiken" + +#: src/veritysetup.c:431 +msgid "Format type (1 - normal, 0 - original Chrome OS)" +msgstr "Formaatstype (1 - normaal, 0 - origineel Chrome OS)" + +#: src/veritysetup.c:431 +msgid "number" +msgstr "nummer" + +#: src/veritysetup.c:432 +msgid "Block size on the data device" +msgstr "Blokgrootte op het gegevensapparaat" + +#: src/veritysetup.c:433 +msgid "Block size on the hash device" +msgstr "Blokgrootte op het hash-apparaat" + +#: src/veritysetup.c:434 +msgid "FEC parity bytes" +msgstr "" + +#: src/veritysetup.c:435 +msgid "The number of blocks in the data file" +msgstr "Aantal blokken in het gegevensbestand" + +#: src/veritysetup.c:435 +msgid "blocks" +msgstr "blokken" + +#: src/veritysetup.c:436 +msgid "Path to device with error correction data" +msgstr "" + +#: src/veritysetup.c:436 src/integritysetup.c:540 +msgid "path" +msgstr "" + +#: src/veritysetup.c:437 +msgid "Starting offset on the hash device" +msgstr "De startplaats op het hash-apparaat" + +#: src/veritysetup.c:438 +#, fuzzy +msgid "Starting offset on the FEC device" +msgstr "De startplaats op het hash-apparaat" + +#: src/veritysetup.c:439 +msgid "Hash algorithm" +msgstr "Hash-algoritme" + +#: src/veritysetup.c:439 +msgid "string" +msgstr "tekenreeks" + +#: src/veritysetup.c:440 +msgid "Salt" +msgstr "Salt" + +#: src/veritysetup.c:440 +msgid "hex string" +msgstr "hex-tekenreeks" + +#: src/veritysetup.c:442 +msgid "Restart kernel if corruption is detected" +msgstr "Kernel herstarten bij ontdekking van corruptie" + +#: src/veritysetup.c:443 +msgid "Ignore corruption, log it only" +msgstr "Datacorruptie negeren, enkel loggen" + +#: src/veritysetup.c:444 +msgid "Do not verify zeroed blocks" +msgstr "Op nul ingestelde blokken niet controleren" + +#: src/veritysetup.c:445 +msgid "Verify data block only the first time it is read" +msgstr "" + +#: src/veritysetup.c:545 +#, fuzzy +msgid "Option --ignore-corruption, --restart-on-corruption or --ignore-zero-blocks is allowed only for open operation.\n" +msgstr "Opties --ignore-corruption, --restart-on-corruption of --ignore-zero-blocks kunnen enkel bij een create-operatie gebruikt worden.\n" + +#: src/veritysetup.c:550 +msgid "Option --ignore-corruption and --restart-on-corruption cannot be used together.\n" +msgstr "Opties --ignore-corruption en --restart-on-corruption kunnen niet samen gebruikt worden.\n" + +#: src/integritysetup.c:83 src/utils_password.c:305 +#, fuzzy, c-format +msgid "Cannot read keyfile %s." +msgstr "Kan sleutelbestand %s niet lezen.\n" + +#: src/integritysetup.c:87 src/utils_password.c:310 +#, fuzzy, c-format +msgid "Cannot read %d bytes from keyfile %s." +msgstr "Kan %d bytes uit sleutelbestand %s niet lezen.\n" + +#: src/integritysetup.c:250 +#, c-format +msgid "Formatted with tag size %u, internal integrity %s.\n" +msgstr "" + +#: src/integritysetup.c:469 src/integritysetup.c:473 +#, fuzzy +msgid "" +msgstr "apparaat controleren" + +#: src/integritysetup.c:470 +msgid " " +msgstr "" + +#: src/integritysetup.c:492 +#, fuzzy, c-format +msgid "" +"\n" +" is the device to create under %s\n" +" is the device containing data with integrity tags\n" +msgstr "" +"\n" +" is de naam van het onder %s te creëren apparaat\n" +" is het de naam van het gegevensapparaat\n" +" is de naam van het apparaat dat de verificatiegegevens bevat\n" +" is de hash van de rootnode op \n" + +#: src/integritysetup.c:497 +#, fuzzy, c-format +msgid "" +"\n" +"Default compiled-in dm-integrity parameters:\n" +"\tTag size: %u bytes, Checksum algorithm: %s\n" +msgstr "" +"\n" +"Standaard meegecompileerde dm-verity parameters:\n" +"\tHash: %s, Datablok (bytes): %u, Hashblock (bytes): %u, Saltgrootte: %u, Hashformaat: %u\n" + +#: src/integritysetup.c:540 +msgid "Path to data device (if separated)" +msgstr "" + +#: src/integritysetup.c:542 +msgid "Journal size" +msgstr "" + +#: src/integritysetup.c:543 +msgid "Interleave sectors" +msgstr "" + +#: src/integritysetup.c:544 +msgid "Journal watermark" +msgstr "" + +#: src/integritysetup.c:544 +msgid "percent" +msgstr "" + +#: src/integritysetup.c:545 +msgid "Journal commit time" +msgstr "" + +#: src/integritysetup.c:545 src/integritysetup.c:547 +msgid "ms" +msgstr "" + +#: src/integritysetup.c:546 +msgid "Number of 512-byte sectors per bit (bitmap mode)." +msgstr "" + +#: src/integritysetup.c:547 +msgid "Bitmap mode flush time" +msgstr "" + +#: src/integritysetup.c:548 +msgid "Tag size (per-sector)" +msgstr "" + +#: src/integritysetup.c:549 +msgid "Sector size" +msgstr "" + +#: src/integritysetup.c:550 +msgid "Buffers size" +msgstr "" + +#: src/integritysetup.c:552 +msgid "Data integrity algorithm" +msgstr "" + +#: src/integritysetup.c:553 +#, fuzzy +msgid "The size of the data integrity key" +msgstr "De grootte van de encryptiesleutel" + +#: src/integritysetup.c:554 +#, fuzzy +msgid "Read the integrity key from a file" +msgstr "De sleutel uit een bestand lezen." + +#: src/integritysetup.c:556 +msgid "Journal integrity algorithm" +msgstr "" + +#: src/integritysetup.c:557 +#, fuzzy +msgid "The size of the journal integrity key" +msgstr "De grootte van de encryptiesleutel" + +#: src/integritysetup.c:558 +#, fuzzy +msgid "Read the journal integrity key from a file" +msgstr "De sleutel uit een bestand lezen." + +#: src/integritysetup.c:560 +msgid "Journal encryption algorithm" +msgstr "" + +#: src/integritysetup.c:561 +#, fuzzy +msgid "The size of the journal encryption key" +msgstr "De grootte van de encryptiesleutel" + +#: src/integritysetup.c:562 +#, fuzzy +msgid "Read the journal encryption key from a file" +msgstr "De sleutel uit een bestand lezen." + +#: src/integritysetup.c:565 +msgid "Recovery mode (no journal, no tag checking)" +msgstr "" + +#: src/integritysetup.c:566 +msgid "Use bitmap to track changes and disable journal for integrity device" +msgstr "" + +#: src/integritysetup.c:567 +msgid "Recalculate initial tags automatically." +msgstr "" + +#: src/integritysetup.c:640 +#, fuzzy +msgid "Option --integrity-recalculate can be used only for open action." +msgstr "Optie --allow-discards wordt enkel toegestaan voor de open-operatie.\n" + +#: src/integritysetup.c:655 +msgid "Options --journal-size, --interleave-sectors, --sector-size, --tag-size and --no-wipe can be used only for format action.\n" +msgstr "" + +#: src/integritysetup.c:661 +#, fuzzy +msgid "Invalid journal size specification." +msgstr "Ongeldig apparaatsgrootte ingegeven." + +#: src/integritysetup.c:666 +msgid "Both key file and key size options must be specified." +msgstr "" + +#: src/integritysetup.c:669 +msgid "Integrity algorithm must be specified if integrity key is used." +msgstr "" + +#: src/integritysetup.c:674 +msgid "Both journal integrity key file and key size options must be specified." +msgstr "" + +#: src/integritysetup.c:677 +msgid "Journal integrity algorithm must be specified if journal integrity key is used." +msgstr "" + +#: src/integritysetup.c:682 +msgid "Both journal encryption key file and key size options must be specified." +msgstr "" + +#: src/integritysetup.c:685 +msgid "Journal encryption algorithm must be specified if journal encryption key is used." +msgstr "" + +#: src/integritysetup.c:689 +msgid "Recovery and bitmap mode options are mutually exclusive." +msgstr "" + +#: src/integritysetup.c:693 +msgid "Journal options cannot be used in bitmap mode." +msgstr "" + +#: src/integritysetup.c:697 +msgid "Bitmap options can be used only in bitmap mode." +msgstr "" + +#: src/cryptsetup_reencrypt.c:172 +#, fuzzy +msgid "Reencryption already in-progress." +msgstr "Blokgrootte herencryptie" + +#: src/cryptsetup_reencrypt.c:201 +#, fuzzy, c-format +msgid "Cannot exclusively open %s, device in use." +msgstr "Kan %s niet exclusief openen, apparaat wordt gebruikt.\n" + +#: src/cryptsetup_reencrypt.c:215 src/cryptsetup_reencrypt.c:1127 +#, fuzzy +msgid "Allocation of aligned memory failed." +msgstr "Reservering van uitgelijnd geheugen gefaald.\n" + +#: src/cryptsetup_reencrypt.c:222 +#, fuzzy, c-format +msgid "Cannot read device %s." +msgstr "Kan apparaat niet lezen: %s.\n" + +#: src/cryptsetup_reencrypt.c:233 +#, fuzzy, c-format +msgid "Marking LUKS1 device %s unusable." +msgstr "LUKS-apparaat %s wordt als onbruikbaar gemarkeerd.\n" + +#: src/cryptsetup_reencrypt.c:237 +#, c-format +msgid "Setting LUKS2 offline reencrypt flag on device %s." +msgstr "" + +#: src/cryptsetup_reencrypt.c:254 +#, fuzzy, c-format +msgid "Cannot write device %s." +msgstr "Kan apparaat %s niet beschrijven.\n" + +#: src/cryptsetup_reencrypt.c:302 +#, fuzzy +msgid "Cannot write reencryption log file." +msgstr "Kan herencryptie-logbestand niet schrijven.\n" + +#: src/cryptsetup_reencrypt.c:358 +#, fuzzy +msgid "Cannot read reencryption log file." +msgstr "Kan herencryptie-logbestand niet lezen.\n" + +#: src/cryptsetup_reencrypt.c:396 +#, c-format +msgid "Log file %s exists, resuming reencryption.\n" +msgstr "Logbestand %s bestaat reeds, herencryptie wordt herstart.\n" + +#: src/cryptsetup_reencrypt.c:445 +#, fuzzy +msgid "Activating temporary device using old LUKS header." +msgstr "Activatie van tijdelijke apparaat met oude LUKS-koptekst.\n" + +#: src/cryptsetup_reencrypt.c:455 +#, fuzzy +msgid "Activating temporary device using new LUKS header." +msgstr "Activatie van tijdelijke apparaat met nieuwe LUKS-koptekst.\n" + +#: src/cryptsetup_reencrypt.c:465 +#, fuzzy +msgid "Activation of temporary devices failed." +msgstr "Activatie van tijdelijke apparaten gefaald.\n" + +#: src/cryptsetup_reencrypt.c:551 +#, fuzzy +msgid "Failed to set data offset." +msgstr "Kan status van sleutelbestand niet opvragen.\n" + +#: src/cryptsetup_reencrypt.c:557 +#, fuzzy +msgid "Failed to set metadata size." +msgstr "Kan status van sleutelbestand niet opvragen.\n" + +#: src/cryptsetup_reencrypt.c:565 +#, fuzzy, c-format +msgid "New LUKS header for device %s created." +msgstr "Nieuwe LUKS-koptekst voor apparaat %s aangemaakt.\n" + +#: src/cryptsetup_reencrypt.c:625 +#, c-format +msgid "This version of cryptsetup-reencrypt can't handle new internal token type %s." +msgstr "" + +#: src/cryptsetup_reencrypt.c:647 +msgid "Failed to read activation flags from backup header." +msgstr "" + +#: src/cryptsetup_reencrypt.c:651 +#, fuzzy +msgid "Failed to write activation flags to new header." +msgstr "Schrijven naar sleutelopslag is mislukt.\n" + +#: src/cryptsetup_reencrypt.c:655 src/cryptsetup_reencrypt.c:659 +#, fuzzy +msgid "Failed to read requirements from backup header." +msgstr "Lezen uit sleutelopslag is mislukt.\n" + +#: src/cryptsetup_reencrypt.c:697 +#, fuzzy, c-format +msgid "%s header backup of device %s created." +msgstr "Reservekopie van LUKS-koptekst op apparaat %s aangemaakt .\n" + +#: src/cryptsetup_reencrypt.c:760 +#, fuzzy +msgid "Creation of LUKS backup headers failed." +msgstr "Creatie van LUKS-reservekopteksten gefaald.\n" + +#: src/cryptsetup_reencrypt.c:893 +#, fuzzy, c-format +msgid "Cannot restore %s header on device %s." +msgstr "Kan koptekst op apparaat %s niet herstellen.\n" + +#: src/cryptsetup_reencrypt.c:895 +#, fuzzy, c-format +msgid "%s header on device %s restored." +msgstr "LUKS-koptekst op apparaat %s hersteld.\n" + +#: src/cryptsetup_reencrypt.c:1099 src/cryptsetup_reencrypt.c:1105 +#, fuzzy +msgid "Cannot open temporary LUKS device." +msgstr "Kan tijdelijk LUKS-apparaat niet openen.\n" + +#: src/cryptsetup_reencrypt.c:1110 src/cryptsetup_reencrypt.c:1115 +#, fuzzy +msgid "Cannot get device size." +msgstr "Kan apparaatgrootte niet lezen.\n" + +#: src/cryptsetup_reencrypt.c:1150 +#, fuzzy +msgid "IO error during reencryption." +msgstr "Invoer/uitvoerfout tijdens herencryptie.\n" + +#: src/cryptsetup_reencrypt.c:1181 +#, fuzzy +msgid "Provided UUID is invalid." +msgstr "Opgegeven UUID is ongeldig.\n" + +#: src/cryptsetup_reencrypt.c:1407 +#, fuzzy +msgid "Cannot open reencryption log file." +msgstr "Kan herencryptie-logbestand niet openen.\n" + +#: src/cryptsetup_reencrypt.c:1413 +#, fuzzy +msgid "No decryption in progress, provided UUID can be used only to resume suspended decryption process." +msgstr "Er is geen ontsleutelingsproces aan de gang. Het opgegeven UUID kan enkel gebruikt worden om een geschorst ontsleutelingsproces opnieuw te starten.\n" + +#: src/cryptsetup_reencrypt.c:1488 +#, c-format +msgid "Changed pbkdf parameters in keyslot %i." +msgstr "" + +#: src/cryptsetup_reencrypt.c:1600 +msgid "Reencryption block size" +msgstr "Blokgrootte herencryptie" + +#: src/cryptsetup_reencrypt.c:1600 +msgid "MiB" +msgstr "MB" + +#: src/cryptsetup_reencrypt.c:1604 +#, fuzzy +msgid "Do not change key, no data area reencryption" +msgstr "Sleutel niet wijzigen; gegevensgebied wordt niet opnieuw versleuteld." + +#: src/cryptsetup_reencrypt.c:1606 +#, fuzzy +msgid "Read new volume (master) key from file" +msgstr "De (hoofd)sleutel tot het opslagmedium uit een bestand lezen." + +#: src/cryptsetup_reencrypt.c:1607 +msgid "PBKDF2 iteration time for LUKS (in ms)" +msgstr "PBKDF2 herhalingstijd voor LUKS (in ms)" + +#: src/cryptsetup_reencrypt.c:1613 +#, fuzzy +msgid "Use direct-io when accessing devices" +msgstr "direct-io gebruiken bij het lezen van apparaten." + +#: src/cryptsetup_reencrypt.c:1614 +#, fuzzy +msgid "Use fsync after each block" +msgstr "fsync na elk blok gebruiken." + +#: src/cryptsetup_reencrypt.c:1615 +#, fuzzy +msgid "Update log file after every block" +msgstr "Na elk blok het logbestand bijwerken." + +#: src/cryptsetup_reencrypt.c:1616 +#, fuzzy +msgid "Use only this slot (others will be disabled)" +msgstr "Enkel deze plaats gebruiken (anderen worden uitgeschakeld)." + +#: src/cryptsetup_reencrypt.c:1621 +#, fuzzy +msgid "Create new header on not encrypted device" +msgstr "Nieuwe koptekst op niet-versleuteld apparaat invoeren." + +#: src/cryptsetup_reencrypt.c:1622 +#, fuzzy +msgid "Permanently decrypt device (remove encryption)" +msgstr "Apparaat permanent ontsleutelen (encryptie verwijderen)." + +#: src/cryptsetup_reencrypt.c:1623 +#, fuzzy +msgid "The UUID used to resume decryption" +msgstr "Het UUID om de ontsleuteling te hervatten." + +#: src/cryptsetup_reencrypt.c:1624 +#, fuzzy +msgid "Type of LUKS metadata: luks1, luks2" +msgstr "Soorten apparaat-metadata: luks, plain, loopaes, tcrypt." + +#: src/cryptsetup_reencrypt.c:1643 +msgid "[OPTION...] " +msgstr "[OPTIE...] " + +#: src/cryptsetup_reencrypt.c:1651 +#, fuzzy, c-format +msgid "Reencryption will change: %s%s%s%s%s%s." +msgstr "Herencryptie zal sleutel tot het opslagmedium %s%s%s%s wijzigen.\n" + +#: src/cryptsetup_reencrypt.c:1652 +msgid "volume key" +msgstr "" + +#: src/cryptsetup_reencrypt.c:1654 +#, fuzzy +msgid "set hash to " +msgstr ", stel hash in op " + +#: src/cryptsetup_reencrypt.c:1655 +msgid ", set cipher to " +msgstr ", stel sleutelalgoritme in op " + +#: src/cryptsetup_reencrypt.c:1659 +msgid "Argument required." +msgstr "Argument is vereist." + +#: src/cryptsetup_reencrypt.c:1687 +msgid "Only values between 1 MiB and 64 MiB allowed for reencryption block size." +msgstr "Enkel waarden tussen 1 MB en 64 MB zijn toegestaan als herencryptieblokgrootte." + +#: src/cryptsetup_reencrypt.c:1714 +msgid "Maximum device reduce size is 64 MiB." +msgstr "Maximum apparaatsverkleiningsgrootte is 64 MB." + +#: src/cryptsetup_reencrypt.c:1721 +#, fuzzy +msgid "Option --new must be used together with --reduce-device-size or --header." +msgstr "Optie --new moet samen met --reduce-device-size gebruikt worden." + +#: src/cryptsetup_reencrypt.c:1725 +#, fuzzy +msgid "Option --keep-key can be used only with --hash, --iter-time or --pbkdf-force-iterations." +msgstr "Optie -- keep-key kan enkel samen met --hash of --iter-time gebruikt worden." + +#: src/cryptsetup_reencrypt.c:1729 +msgid "Option --new cannot be used together with --decrypt." +msgstr "Optie --new kan niet samen met --decrypt gebruikt worden." + +#: src/cryptsetup_reencrypt.c:1733 +msgid "Option --decrypt is incompatible with specified parameters." +msgstr "Optie --decrypt is niet verenigbaar met de verschafte parameters." + +#: src/cryptsetup_reencrypt.c:1737 +msgid "Option --uuid is allowed only together with --decrypt." +msgstr "Optie --uuid kan enkel samen met --decrypt gebruikt worden." + +#: src/cryptsetup_reencrypt.c:1741 +msgid "Invalid luks type. Use one of these: 'luks', 'luks1' or 'luks2'." +msgstr "" + +#: src/utils_tools.c:151 +#, fuzzy +msgid "Error reading response from terminal." +msgstr "Fout bij het lezen van antwoord uit de terminal.\n" + +#: src/utils_tools.c:186 +msgid "Command successful.\n" +msgstr "Opdracht succesvol.\n" + +#: src/utils_tools.c:194 +msgid "wrong or missing parameters" +msgstr "" + +#: src/utils_tools.c:196 +#, fuzzy +msgid "no permission or bad passphrase" +msgstr "Voer enig wachtwoord in: " + +#: src/utils_tools.c:198 +#, fuzzy +msgid "out of memory" +msgstr "Kan geheugen niet ontgrendelen.\n" + +#: src/utils_tools.c:200 +msgid "wrong device or file specified" +msgstr "" + +#: src/utils_tools.c:202 +#, fuzzy +msgid "device already exists or device is busy" +msgstr "Apparaat %s bestaat reeds.\n" + +#: src/utils_tools.c:204 +msgid "unknown error" +msgstr "" + +#: src/utils_tools.c:206 +#, fuzzy, c-format +msgid "Command failed with code %i (%s).\n" +msgstr "Opdracht is mislukt met code %i" + +#: src/utils_tools.c:283 +#, fuzzy, c-format +msgid "Key slot %i created." +msgstr "Sleutelplaats %d werd gewijzigd.\n" + +#: src/utils_tools.c:285 +#, fuzzy, c-format +msgid "Key slot %i unlocked." +msgstr "Sleutelplaats %d is ontgrendeld.\n" + +#: src/utils_tools.c:287 +#, fuzzy, c-format +msgid "Key slot %i removed." +msgstr "Sleutelplaats %d is ontgrendeld.\n" + +#: src/utils_tools.c:296 +#, c-format +msgid "Token %i created." +msgstr "" + +#: src/utils_tools.c:298 +#, c-format +msgid "Token %i removed." +msgstr "" + +#: src/utils_tools.c:464 +msgid "" +"\n" +"Wipe interrupted." +msgstr "" + +#: src/utils_tools.c:475 +#, c-format +msgid "WARNING: Device %s already contains a '%s' partition signature.\n" +msgstr "" + +#: src/utils_tools.c:483 +#, c-format +msgid "WARNING: Device %s already contains a '%s' superblock signature.\n" +msgstr "" + +#: src/utils_tools.c:504 src/utils_tools.c:568 +#, fuzzy +msgid "Failed to initialize device signature probes." +msgstr "Kan geen map voor de apparaatstoewijzer verkrijgen." + +#: src/utils_tools.c:548 +#, fuzzy, c-format +msgid "Failed to stat device %s." +msgstr "Kan status van sleutelbestand niet opvragen.\n" + +#: src/utils_tools.c:561 +#, c-format +msgid "Device %s is in use. Can not proceed with format operation." +msgstr "" + +#: src/utils_tools.c:563 +#, c-format +msgid "Failed to open file %s in read/write mode." +msgstr "" + +#: src/utils_tools.c:577 +#, c-format +msgid "Existing '%s' partition signature (offset: % bytes) on device %s will be wiped." +msgstr "" + +#: src/utils_tools.c:580 +#, c-format +msgid "Existing '%s' superblock signature (offset: % bytes) on device %s will be wiped." +msgstr "" + +#: src/utils_tools.c:583 +#, fuzzy +msgid "Failed to wipe device signature." +msgstr "Schrijven naar sleutelopslag is mislukt.\n" + +#: src/utils_tools.c:590 +#, fuzzy, c-format +msgid "Failed to probe device %s for a signature." +msgstr "Kan geen map voor de apparaatstoewijzer verkrijgen." + +#: src/utils_tools.c:629 +#, fuzzy +msgid "" +"\n" +"Reencryption interrupted." +msgstr "Blokgrootte herencryptie" + +#: src/utils_password.c:43 src/utils_password.c:75 +#, fuzzy, c-format +msgid "Cannot check password quality: %s" +msgstr "Kan wachtwoordkwaliteit niet nakijken: %s\n" + +#: src/utils_password.c:51 +#, fuzzy, c-format +msgid "" +"Password quality check failed:\n" +" %s" +msgstr "" +"Wachtwoordkwaliteitscontrole gefaald:\n" +"%s\n" + +#: src/utils_password.c:83 +#, fuzzy, c-format +msgid "Password quality check failed: Bad passphrase (%s)" +msgstr "Wachtwoordkwaliteitscontrole gefaald: Wachtwoord is van slechte kwaliteit (%s)\n" + +#: src/utils_password.c:193 src/utils_password.c:208 +#, fuzzy +msgid "Error reading passphrase from terminal." +msgstr "Fout bij het lezen van het wachtwoord uit de terminal.\n" + +#: src/utils_password.c:206 +msgid "Verify passphrase: " +msgstr "Voer wachtwoord nogmaals in: " + +#: src/utils_password.c:213 +#, fuzzy +msgid "Passphrases do not match." +msgstr "Wachtwoorden komen niet overeen.\n" + +#: src/utils_password.c:250 +#, fuzzy +msgid "Cannot use offset with terminal input." +msgstr "Kan de gegevenspositie niet via terminalinvoer gebruiken.\n" + +#: src/utils_password.c:253 +#, c-format +msgid "Enter passphrase: " +msgstr "Voer wachtwoord in: " + +#: src/utils_password.c:256 +#, c-format +msgid "Enter passphrase for %s: " +msgstr "Voer wachtwoord in voor %s: " + +#: src/utils_password.c:287 +#, fuzzy +msgid "No key available with this passphrase." +msgstr "Geen sleutel beschikbaar met dit wachtwoord.\n" + +#: src/utils_password.c:289 +msgid "No usable keyslot is available." +msgstr "" + +#: src/utils_password.c:328 +#, fuzzy, c-format +msgid "Cannot open keyfile %s for write." +msgstr "Kan bestand %s niet openen.\n" + +#: src/utils_password.c:335 +#, fuzzy, c-format +msgid "Cannot write to keyfile %s." +msgstr "Kan sleutelbestand %s niet lezen.\n" + +#: src/utils_luks2.c:47 +#, fuzzy, c-format +msgid "Failed to open file %s in read-only mode." +msgstr "Openen van sleutelbestand is mislukt.\n" + +#: src/utils_luks2.c:60 +msgid "Provide valid LUKS2 token JSON:\n" +msgstr "" + +#: src/utils_luks2.c:67 +#, fuzzy +msgid "Failed to read JSON file." +msgstr "Openen van sleutelbestand is mislukt.\n" + +#: src/utils_luks2.c:72 +#, fuzzy +msgid "" +"\n" +"Read interrupted." +msgstr "VERITY-koptekst beschadigd.\n" + +#: src/utils_luks2.c:113 +#, fuzzy, c-format +msgid "Failed to open file %s in write mode." +msgstr "Openen van sleutelbestand is mislukt.\n" + +#: src/utils_luks2.c:122 +msgid "" +"\n" +"Write interrupted." +msgstr "" + +#: src/utils_luks2.c:126 +#, fuzzy +msgid "Failed to write JSON file." +msgstr "Openen van sleutelbestand is mislukt.\n" + +#~ msgid "Replaced with key slot %d.\n" +#~ msgstr "Vervangen door sleutelplaats %d.\n" + +#~ msgid "Function not available in FIPS mode.\n" +#~ msgstr "Functie niet beschikbaar in FIPS-modus.\n" + +#~ msgid "Too many tree levels for verity volume.\n" +#~ msgstr "Te veel niveau's in de boomstructuur voor een VERITY-volume.\n" + +#~ msgid "memory allocation error in action_luksFormat" +#~ msgstr "geheugentoewijzingsfout in action_luksFormat" + +#~ msgid "Key %d not active. Can't wipe.\n" +#~ msgstr "Sleutel %d is niet actief. Kan niet wissen.\n" + +#~ msgid " " +#~ msgstr " " + +#~ msgid "create active device" +#~ msgstr "actief apparaat aanmaken" + +#~ msgid "remove (deactivate) device" +#~ msgstr "apparaat verwijderen (deactiveren)" + +#~ msgid "Activated keyslot %i.\n" +#~ msgstr "Sleutelplaats %d geactiveerd.\n" + +#~ msgid "Progress: %5.1f%%, ETA %02llu:%02llu, %4llu MiB written, speed %5.1f MiB/s%s" +#~ msgstr "Vooruitgang: %5.1f%%, geschatte voltooiïngstijd %02llu:%02llu, %4llu MB geschreven, snelheid %5.1f MiB/s%s" + +#~ msgid "Interrupted by a signal.\n" +#~ msgstr "Onderbroken door een signaal.\n" + +#~ msgid "Cannot find a free loopback device.\n" +#~ msgstr "Kan geen vrij loopback-apparaat vinden.\n" + +#~ msgid "Cannot open device %s\n" +#~ msgstr "Kan apparaat %s niet openen.\n" + +#~ msgid "Marking LUKS device %s usable.\n" +#~ msgstr "LUKS-apparaat %s wordt als bruikbaar gemarkeerd.\n" + +#~ msgid "WARNING: this is experimental code, it can completely break your data.\n" +#~ msgstr "Waarschuwing: deze code is nog experimenteel, het kan al uw data volledig vernielen.\n" + +#~ msgid "FIPS checksum verification failed.\n" +#~ msgstr "Verificatie van FIPS-controlesom gefaald.\n" + +#~ msgid "WARNING: device %s is a partition, for TCRYPT system encryption you usually need to use whole block device path.\n" +#~ msgstr "WAARSCHUWING: apparaat %s is een partitie; bij TCRYPT-systeemversleuteling moet u doorgaans het volledige pad naar het blok-apparaat gebruiken.\n" + +#~ msgid "Kernel doesn't support plain64 IV.\n" +#~ msgstr "Kernel ondersteunt plain64 IV niet.\n" + +#~ msgid "Enter LUKS passphrase: " +#~ msgstr "Voer LUKS-wachtwoord in: " + +#~ msgid "Enter new LUKS passphrase: " +#~ msgstr "Voer nieuw LUKS-wachtwoord in: " + +#~ msgid "Enter any LUKS passphrase: " +#~ msgstr "Voer een LUKS-wachtwoord in: " + +#~ msgid "Cannot open device %s for %s%s access.\n" +#~ msgstr "Kan apparaat %s niet openen voor %s%s-toegang.\n" + +#~ msgid "exclusive " +#~ msgstr "exclusieve " + +#~ msgid "writable" +#~ msgstr "schrijf" + +#~ msgid "read-only" +#~ msgstr "alleen-lezen" + +#~ msgid "WARNING!!! Possibly insecure memory. Are you root?\n" +#~ msgstr "WAARSCHUWING!!! Mogelijk onveilig geheugen. Bent u root?\n" + +#~ msgid "Unable to obtain sector size for %s" +#~ msgstr "Kan sectorgrootte van %s niet verkrijgen" + +#~ msgid "Backup file %s doesn't exist.\n" +#~ msgstr "Reservekopiebestand %s bestaat niet.\n" + +#~ msgid " " +#~ msgstr " " + +#~ msgid "create device" +#~ msgstr "apparaat aanmaken" + +#~ msgid "remove device" +#~ msgstr "apparaat verwijderen" + +#~ msgid "remove LUKS mapping" +#~ msgstr "LUKS-toewijzing verwijderen" + +#~ msgid "open loop-AES device as mapping " +#~ msgstr "loop-AES-apparaat als toewijzing openen" + +#~ msgid "remove loop-AES mapping" +#~ msgstr "loop-AES-toewijzing verwijderen" + +#~ msgid "Cannot use device %s (crypt segments overlaps or in use by another device).\n" +#~ msgstr "Kan apparaat %s niet gebruiken (cryptsegmenten overlappen of worden door een ander apparaat gebruikt).\n" + +#~ msgid "Block mode XTS is available since kernel 2.6.24.\n" +#~ msgstr "Blokmodus XTS is beschikbaar vanaf kernelversie 2.6.24.\n" + +#~ msgid "Key size in LRW mode must be 256 or 512 bits.\n" +#~ msgstr "In LRW-modus moet de sleutelgrootte 256 of 512 bits zijn.\n" + +#~ msgid "Block mode LRW is available since kernel 2.6.20.\n" +#~ msgstr "Blokmodus LRW is beschikbaar vanaf kernelversie 2.6.20.\n" + +#~ msgid "Negative keyfile size not permitted.\n" +#~ msgstr "Een negatieve sleutelbestandsgrootte is niet toegestaan.\n" + +#~ msgid "Warning: exhausting read requested, but key file is not a regular file, function might never return.\n" +#~ msgstr "Waarschuwing: volledige lezing aangevraagd, maar sleutelbestand is geen regulier bestand, functie zal misschien nooit terugkeren.\n" + +#~ msgid "Cannot find compatible device-mapper kernel modules.\n" +#~ msgstr "Kan geen compatibele kernelmodules voor apparaatstoewijzer vinden.\n" + +#~ msgid "Cannot open device: %s\n" +#~ msgstr "Kan apparaat niet openen: %s\n" + +#~ msgid "BLKROGET failed on device %s.\n" +#~ msgstr "BLKROGET() is mislukt op apparaat %s.\n" + +#~ msgid "BLKGETSIZE failed on device %s.\n" +#~ msgstr "BLKGETSIZE() is mislukt op apparaat %s.\n" + +#~ msgid "identical to luksKillSlot - DEPRECATED - see man page" +#~ msgstr "identiek aan luksKillSlot - VEROUDERD - zie man-pagina" + +#~ msgid "modify active device - DEPRECATED - see man page" +#~ msgstr "actief apparaat wijzigen - VEROUDERD - zie man-pagina" + +#~ msgid "" +#~ "The reload action is deprecated. Please use \"dmsetup reload\" in case you really need this functionality.\n" +#~ "WARNING: do not use reload to touch LUKS devices. If that is the case, hit Ctrl-C now.\n" +#~ msgstr "" +#~ "De herlaadactie is verouderd. Gebruik “dmsetup reload” indien u deze functionaliteit echt nodig hebt.\n" +#~ "WAARSCHUWING: gebruik de herlaadactie niet om LUKS-apparaten te “touchen”. Indien u dat wilt doen, typ nu Ctrl-C.\n" + +#~ msgid "Obsolete option --non-exclusive is ignored.\n" +#~ msgstr "Verouderde optie --non-exclusive wordt genegeerd.\n" + +#~ msgid "Read the key from a file (can be /dev/random)" +#~ msgstr "De sleutel uit een bestand lezen (mag /dev/random zijn)" + +#~ msgid "(Obsoleted, see man page.)" +#~ msgstr "(Verouderd, zie man-pagina.)" + +#~ msgid "%s is not LUKS device.\n" +#~ msgstr "%s is geen LUKS-apparaat.\n" diff --git a/po/pl.gmo b/po/pl.gmo new file mode 100644 index 0000000000000000000000000000000000000000..f63cef61e3b4d6802021591686af19f3731b389c GIT binary patch literal 100405 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, 2010-2019. +# +msgid "" +msgstr "" +"Project-Id-Version: cryptsetup 2.2.2-rc0\n" +"Report-Msgid-Bugs-To: dm-crypt@saout.de\n" +"POT-Creation-Date: 2019-11-01 09:04+0100\n" +"PO-Revision-Date: 2019-10-18 16:11+0200\n" +"Last-Translator: Jakub Bogusz \n" +"Language-Team: Polish \n" +"Language: pl\n" +"MIME-Version: 1.0\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" +"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:384 +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:387 +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:1082 +msgid "Requested deferred flag is not supported." +msgstr "Żądana flaga odroczona nie jest obsługiwana." + +#: lib/libdevmapper.c:1149 +#, c-format +msgid "DM-UUID for device %s was truncated." +msgstr "DM-UUID dla urządzenia %s został skrócony." + +#: lib/libdevmapper.c:1463 +msgid "Unknown dm target type." +msgstr "Nieznany typ celu dm." + +#: lib/libdevmapper.c:1565 lib/libdevmapper.c:1617 +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:1572 +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:1576 +msgid "Requested dm-verity FEC options are not supported." +msgstr "Żądane opcje FEC dm-verity nie są obsługiwane." + +#: lib/libdevmapper.c:1580 +msgid "Requested data integrity options are not supported." +msgstr "Żądane opcje integralności danych nie są obsługiwane." + +#: lib/libdevmapper.c:1582 +msgid "Requested sector_size option is not supported." +msgstr "Żądana opcja sector_size nie jest obsługiwana." + +#: lib/libdevmapper.c:1587 +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:1591 +msgid "Requested dm-integrity bitmap mode is not supported." +msgstr "Żądany tryb bitmapy dm-integrity nie jest obsługiwany." + +#: lib/libdevmapper.c:1620 +msgid "Discard/TRIM is not supported." +msgstr "Porzucenie/TRIM nie jest obsługiwane." + +#: lib/libdevmapper.c:2511 +#, c-format +msgid "Failed to query dm-%s segment." +msgstr "Nie udało się odpytać segmentu dm-%s." + +#: lib/random.c:80 +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" +msgstr "" +"Entropia w systemie wyczerpała się w trakcie generowania klucza wolumenu.\n" +"Proszę poruszać myszą albo wpisać trochę tekstu w innym oknie w celu zebrania zdarzeń losowych.\n" + +#: lib/random.c:84 +#, c-format +msgid "Generating key (%d%% done).\n" +msgstr "Generowanie klucza (gotowe %d%%).\n" + +#: lib/random.c:170 +msgid "Running in FIPS mode." +msgstr "Działanie w trybie FIPS." + +#: lib/random.c:176 +msgid "Fatal error during RNG initialisation." +msgstr "Błąd krytyczny w trakcie inicjalizacji RNG." + +#: lib/random.c:213 +msgid "Unknown RNG quality requested." +msgstr "Nieznane żądanie jakości RNG." + +#: lib/random.c:218 +msgid "Error reading from RNG." +msgstr "Błąd odczytu z RNG." + +#: lib/setup.c:223 +msgid "Cannot initialize crypto RNG backend." +msgstr "Nie można zainicjować backendu kryptograficznego RNG." + +#: lib/setup.c:229 +msgid "Cannot initialize crypto backend." +msgstr "Nie można zainicjować backendu kryptograficznego." + +#: lib/setup.c:260 lib/setup.c:1990 lib/verity/verity.c:120 +#, c-format +msgid "Hash algorithm %s not supported." +msgstr "Algorytm skrótu %s nie jest obsługiwany." + +#: lib/setup.c:263 lib/loopaes/loopaes.c:90 +#, c-format +msgid "Key processing error (using hash %s)." +msgstr "Błąd przetwarzania klucza (użyto algorytmu skrótu %s)." + +#: lib/setup.c:324 lib/setup.c:351 +msgid "Cannot determine device type. Incompatible activation of device?" +msgstr "Nie można określić rodzaju urządzenia. Niezgodny sposób aktywacji urządzenia?" + +#: lib/setup.c:330 lib/setup.c:2985 +msgid "This operation is supported only for LUKS device." +msgstr "Ta operacja jest obsługiwana tylko dla urządzeń LUKS." + +#: lib/setup.c:357 +msgid "This operation is supported only for LUKS2 device." +msgstr "Ta operacja jest obsługiwana tylko dla urządzeń LUKS2." + +#: lib/setup.c:412 lib/luks2/luks2_reencrypt.c:2345 +msgid "All key slots full." +msgstr "Wszyskie miejsca na klucze są pełne." + +#: lib/setup.c:423 +#, c-format +msgid "Key slot %d is invalid, please select between 0 and %d." +msgstr "Numer klucza %d jest błędny, proszę wybrać wartość między 0 a %d." + +#: lib/setup.c:429 +#, c-format +msgid "Key slot %d is full, please select another one." +msgstr "Miejsce na klucz %d jest pełne, proszę wybrać inne." + +#: lib/setup.c:514 lib/setup.c:2759 +msgid "Device size is not aligned to device logical block size." +msgstr "Rozmiar urządzenia nie jest wyrównany do rozmiaru bloku logicznego urządzenia." + +#: lib/setup.c:610 +#, c-format +msgid "Header detected but device %s is too small." +msgstr "Wykryto nagłówek, ale urządzenie %s jest zbyt małe." + +#: lib/setup.c:647 +msgid "This operation is not supported for this device type." +msgstr "Ta operacja nie jest obsługiwana dla tego rodzaju urządzenia." + +#: lib/setup.c:652 +msgid "Illegal operation with reencryption in-progress." +msgstr "Niedozwolona operacja w trakcie ponownego szyfrowania." + +#: lib/setup.c:821 lib/luks1/keymanage.c:476 +#, c-format +msgid "Unsupported LUKS version %d." +msgstr "Nieobsługiwana wersja LUKS %d." + +#: lib/setup.c:838 lib/setup.c:1483 lib/setup.c:1903 +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:1373 lib/setup.c:2479 lib/setup.c:2551 lib/setup.c:2563 +#: lib/setup.c:2712 lib/setup.c:4310 +#, c-format +msgid "Device %s is not active." +msgstr "Urządzenie %s nie jest aktywne." + +#: lib/setup.c:1390 +#, c-format +msgid "Underlying device for crypt device %s disappeared." +msgstr "Urządzenie stojące za urządzeniem szyfrowanym %s zniknęło." + +#: lib/setup.c:1468 +msgid "Invalid plain crypt parameters." +msgstr "Błędne parametry szyfru plain." + +#: lib/setup.c:1473 lib/setup.c:1893 src/integritysetup.c:73 +msgid "Invalid key size." +msgstr "Błędny rozmiar klucza." + +#: lib/setup.c:1478 lib/setup.c:1898 lib/setup.c:2100 +msgid "UUID is not supported for this crypt type." +msgstr "UUID nie jest obsługiwany dla tego rodzaju szyfrowania." + +#: lib/setup.c:1493 lib/setup.c:1683 lib/luks2/luks2_reencrypt.c:2308 +#: src/cryptsetup.c:1169 +msgid "Unsupported encryption sector size." +msgstr "Nieobsługiwany rozmiar sektora szyfrowania." + +#: lib/setup.c:1501 lib/setup.c:1808 lib/setup.c:2753 +msgid "Device size is not aligned to requested sector size." +msgstr "Rozmiar urządzenia nie jest wyrównany do żądanego rozmiaru sektura." + +#: lib/setup.c:1552 lib/setup.c:1671 +msgid "Can't format LUKS without device." +msgstr "Nie można sformatować LUKS-a bez urządzenia." + +#: lib/setup.c:1558 lib/setup.c:1677 +msgid "Requested data alignment is not compatible with data offset." +msgstr "Żądane wyrównanie metadanych nie jest zgodne z offsetem danych." + +#: lib/setup.c:1626 lib/setup.c:1795 +msgid "WARNING: Data offset is outside of currently available data device.\n" +msgstr "UWAGA: offset danych leży poza obecnie dostępnym urządzeniem danych.\n" + +#: lib/setup.c:1636 lib/setup.c:1823 lib/setup.c:1844 lib/setup.c:2112 +#, c-format +msgid "Cannot wipe header on device %s." +msgstr "Nie można wymazać nagłówka na urządzeniu %s." + +#: lib/setup.c:1688 +msgid "WARNING: The device activation will fail, dm-crypt is missing support for requested encryption sector size.\n" +msgstr "UWAGA: aktywacja urządzenia się nie powiedzie, dm-crypt nie ma obsługi żądanego rozmiaru sektora szyfrowania.\n" + +#: lib/setup.c:1710 +msgid "Volume key is too small for encryption with integrity extensions." +msgstr "Klucz wolumenu jest zbyt mały do szyfrowania z rozszerzeniami integralności." + +#: lib/setup.c:1765 +#, c-format +msgid "Cipher %s-%s (key size %zd bits) is not available." +msgstr "Szyfr %s-%s (rozmiar klucza w bitach: %zd) nie jest dostępny." + +#: lib/setup.c:1798 +#, c-format +msgid "WARNING: LUKS2 metadata size changed to % bytes.\n" +msgstr "UWAGA: rozmiar metadanych LUKS2 zmienił się na % (w bajtach).\n" + +#: lib/setup.c:1802 +#, c-format +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:1826 lib/utils_device.c:829 lib/luks1/keyencryption.c:256 +#: lib/luks2/luks2_reencrypt.c:2356 lib/luks2/luks2_reencrypt.c:3348 +#, c-format +msgid "Device %s is too small." +msgstr "Urządzenie %s jest zbyt małe." + +#: lib/setup.c:1837 lib/setup.c:1863 +#, c-format +msgid "Cannot format device %s in use." +msgstr "Nie można sformatować urządzenia %s, które jest w użyciu." + +#: lib/setup.c:1840 lib/setup.c:1866 +#, c-format +msgid "Cannot format device %s, permission denied." +msgstr "Nie można sformatować urządzenia %s, brak uprawnień." + +#: lib/setup.c:1852 lib/setup.c:2164 +#, c-format +msgid "Cannot format integrity for device %s." +msgstr "Nie można sformatować integralności dla urządzenia %s." + +#: lib/setup.c:1870 +#, c-format +msgid "Cannot format device %s." +msgstr "Nie można sformatować urządzenia %s." + +#: lib/setup.c:1888 +msgid "Can't format LOOPAES without device." +msgstr "Nie można sformatować urządzenia LUKSAES bez urządzenia." + +#: lib/setup.c:1933 +msgid "Can't format VERITY without device." +msgstr "Nie można sformatować VERITY bez urządzenia." + +#: lib/setup.c:1944 lib/verity/verity.c:103 +#, c-format +msgid "Unsupported VERITY hash type %d." +msgstr "Nieobsługiwany typ hasza VERITY %d." + +#: lib/setup.c:1950 lib/verity/verity.c:111 +msgid "Unsupported VERITY block size." +msgstr "Nieobsługiwany rozmiar bloku VERITY." + +#: lib/setup.c:1955 lib/verity/verity.c:75 +msgid "Unsupported VERITY hash offset." +msgstr "Nieobsługiwany offset hasza VERITY." + +#: lib/setup.c:1960 +msgid "Unsupported VERITY FEC offset." +msgstr "Nieobsługiwany offset FEC VERITY." + +#: lib/setup.c:1984 +msgid "Data area overlaps with hash area." +msgstr "Obszar danych zachodzi na obszar skrótów." + +#: lib/setup.c:2009 +msgid "Hash area overlaps with FEC area." +msgstr "Obszar skrótu zachodzi na obszar FEC." + +#: lib/setup.c:2016 +msgid "Data area overlaps with FEC area." +msgstr "Obszar danych zachodzi na obszar FEC." + +#: lib/setup.c:2221 +#, c-format +msgid "Unknown crypt device type %s requested." +msgstr "Nieznany typ żądanego urządzenia szyfrującego %s." + +#: lib/setup.c:2485 lib/setup.c:2557 lib/setup.c:2570 +#, c-format +msgid "Unsupported parameters on device %s." +msgstr "Nieobsługiwane parametry urządzenia %s." + +#: lib/setup.c:2491 lib/setup.c:2576 lib/luks2/luks2_reencrypt.c:2408 +#: lib/luks2/luks2_reencrypt.c:2718 +#, c-format +msgid "Mismatching parameters on device %s." +msgstr "Niezgodne parametry dla urządzenia %s." + +#: lib/setup.c:2596 +msgid "Crypt devices mismatch." +msgstr "Urządzenia szyfrowane nie zgadzają się." + +#: lib/setup.c:2633 lib/setup.c:2638 lib/luks2/luks2_reencrypt.c:2054 +#: lib/luks2/luks2_reencrypt.c:3126 +#, c-format +msgid "Failed to reload device %s." +msgstr "Nie udało się przeładować urządzenia %s." + +#: lib/setup.c:2643 lib/setup.c:2648 lib/luks2/luks2_reencrypt.c:2025 +#: lib/luks2/luks2_reencrypt.c:2032 +#, c-format +msgid "Failed to suspend device %s." +msgstr "Nie udało się wstrzymać urządzenia %s." + +#: lib/setup.c:2653 lib/luks2/luks2_reencrypt.c:2039 +#: lib/luks2/luks2_reencrypt.c:3061 lib/luks2/luks2_reencrypt.c:3130 +#, c-format +msgid "Failed to resume device %s." +msgstr "Nie udało wznowić urządzenia %s." + +#: lib/setup.c:2667 +#, c-format +msgid "Fatal error while reloading device %s (on top of device %s)." +msgstr "Błąd krytyczny przy przeładowywaniu urządzenia %s (w oparciu o urządzenie %s)." + +#: lib/setup.c:2670 lib/setup.c:2672 +#, c-format +msgid "Failed to switch device %s to dm-error." +msgstr "Nie udało się przełączyć urządzenia %s na dm-error." + +#: lib/setup.c:2744 +msgid "Cannot resize loop device." +msgstr "Nie można zmienić rozmiaru urządzenia loopback." + +#: lib/setup.c:2817 +msgid "Do you really want to change UUID of device?" +msgstr "Czy na pewno zmienić UUID urządzenia?" + +#: lib/setup.c:2893 +msgid "Header backup file does not contain compatible LUKS header." +msgstr "Plik nagłówka kopii zapasowej nie zawiera zgodnego nagłówka LUKS." + +#: lib/setup.c:2993 +#, c-format +msgid "Volume %s is not active." +msgstr "Wolumen %s nie jest aktywny." + +#: lib/setup.c:3004 +#, c-format +msgid "Volume %s is already suspended." +msgstr "Wolumen %s już został wstrzymany." + +#: lib/setup.c:3017 +#, c-format +msgid "Suspend is not supported for device %s." +msgstr "Wstrzymywanie nie jest obsługiwane dla urządzenia %s." + +#: lib/setup.c:3019 +#, c-format +msgid "Error during suspending device %s." +msgstr "Błąd podczas wstrzymywania urządzenia %s." + +#: lib/setup.c:3052 lib/setup.c:3119 +#, c-format +msgid "Volume %s is not suspended." +msgstr "Wolumen %s nie jest wstrzymany." + +#: lib/setup.c:3081 +#, c-format +msgid "Resume is not supported for device %s." +msgstr "Wznawianie nie jest obsługiwane dla urządzenia %s." + +#: lib/setup.c:3083 lib/setup.c:3151 +#, c-format +msgid "Error during resuming device %s." +msgstr "Błąd podczas wznawiania urządzenia %s." + +#: lib/setup.c:3219 lib/setup.c:3407 +msgid "Cannot add key slot, all slots disabled and no volume key provided." +msgstr "Nie można dodać klucza, wszystkie miejsca na klucze wyłączone i nie podano klucza wolumenu." + +#: lib/setup.c:3359 +msgid "Failed to swap new key slot." +msgstr "Nie udało się podstawić nowego klucza." + +#: lib/setup.c:3524 lib/setup.c:4161 lib/setup.c:4174 lib/setup.c:4182 +#: lib/setup.c:4195 lib/setup.c:4480 lib/setup.c:5593 +msgid "Volume key does not match the volume." +msgstr "Klucz wolumenu nie pasuje do wolumenu." + +#: lib/setup.c:3545 +#, c-format +msgid "Key slot %d is invalid." +msgstr "Numer klucza %d jest nieprawidłowy." + +#: lib/setup.c:3551 src/cryptsetup.c:1511 src/cryptsetup.c:1856 +#, c-format +msgid "Keyslot %d is not active." +msgstr "Klucz %d nie jest aktywny." + +#: lib/setup.c:3570 +msgid "Device header overlaps with data area." +msgstr "Nagłówek urządzenia zachodzi na obszar danych." + +#: lib/setup.c:3836 +msgid "Reencryption in-progress. Cannot activate device." +msgstr "Ponowne szyfrowanie trwa. Nie można uaktywnić urządzenia." + +#: lib/setup.c:3838 lib/luks2/luks2_json_metadata.c:2244 +#: lib/luks2/luks2_reencrypt.c:2817 +msgid "Failed to get reencryption lock." +msgstr "Nie udało się uzyskać blokady ponownego szyfrowania." + +#: lib/setup.c:3851 lib/luks2/luks2_reencrypt.c:2836 +msgid "LUKS2 reencryption recovery failed." +msgstr "Odtwarzanie ponownego szyfrowania LUKS2 nie powiodło się." + +#: lib/setup.c:3978 lib/setup.c:4248 +msgid "Device type is not properly initialised." +msgstr "Typ urządzenia nie został właściwie zainicjalizowany." + +#: lib/setup.c:4022 +#, 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:4025 +#, c-format +msgid "Device %s already exists." +msgstr "Urządzenie %s już istnieje." + +#: lib/setup.c:4148 +msgid "Incorrect volume key specified for plain device." +msgstr "Podano niewłaściwy klucz wolumenu dla zwykłego urządzenia." + +#: lib/setup.c:4214 +msgid "Incorrect root hash specified for verity device." +msgstr "Podano niewłaściwy hasz główny dla urządzenia VERITY." + +#: lib/setup.c:4289 lib/setup.c:4305 lib/luks2/luks2_json_metadata.c:2297 +#: src/cryptsetup.c:2527 +#, c-format +msgid "Device %s is still in use." +msgstr "Urządzenie %s jest nadal w użyciu." + +#: lib/setup.c:4314 +#, c-format +msgid "Invalid device %s." +msgstr "Błędne urządzenie %s." + +#: lib/setup.c:4430 +msgid "Volume key buffer too small." +msgstr "Bufor klucza wolumenu zbyt mały." + +#: lib/setup.c:4438 +msgid "Cannot retrieve volume key for plain device." +msgstr "Nie można odtworzyć klucza wolumenu dla zwykłego urządzenia." + +#: lib/setup.c:4449 +#, 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:4636 +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:4947 +#, 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:5229 +#, 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:5526 +#, 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:5599 +msgid "Failed to initialise default LUKS2 keyslot parameters." +msgstr "Nie udało się zainicjować domyślnych parametrów klucza LUKS2." + +#: lib/setup.c:5605 +#, c-format +msgid "Failed to assign keyslot %d to digest." +msgstr "Nie udało się przypisać klucza %d do skrótu." + +#: lib/setup.c:5690 +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:5757 +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:5767 lib/luks2/luks2_reencrypt.c:2933 +#, 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:5791 +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." + +#: lib/utils.c:81 +msgid "Cannot get process priority." +msgstr "Nie można odczytać priorytetu procesu." + +#: lib/utils.c:95 +msgid "Cannot unlock memory." +msgstr "Nie można odblokować pamięci." + +#: lib/utils.c:169 lib/tcrypt/tcrypt.c:498 +msgid "Failed to open key file." +msgstr "Nie udało się otworzyć pliku klucza." + +#: lib/utils.c:174 +msgid "Cannot read keyfile from a terminal." +msgstr "Nie można odczytać pliku klucza z terminala." + +#: lib/utils.c:191 +msgid "Failed to stat key file." +msgstr "Nie udało się wykonać stat na pliku klucza." + +#: lib/utils.c:199 lib/utils.c:220 +msgid "Cannot seek to requested keyfile offset." +msgstr "Nie można przemieścić się do żądanego położenia pliku klucza." + +#: lib/utils.c:214 lib/utils.c:229 src/utils_password.c:188 +#: src/utils_password.c:201 +msgid "Out of memory while reading passphrase." +msgstr "Brak pamięci podczas odczytu hasła." + +#: lib/utils.c:249 +msgid "Error reading passphrase." +msgstr "Błąd podczas odczytu hasła." + +#: lib/utils.c:266 +msgid "Nothing to read on input." +msgstr "Na wejściu nie ma nic do odczytu." + +#: lib/utils.c:273 +msgid "Maximum keyfile size exceeded." +msgstr "Przekroczono maksymalny rozmiar pliku klucza." + +#: lib/utils.c:278 +msgid "Cannot read requested amount of data." +msgstr "Nie można odczytać żądanej ilości danych." + +#: lib/utils_device.c:188 lib/utils_storage_wrappers.c:111 +#: lib/luks1/keyencryption.c:92 +#, c-format +msgid "Device %s doesn't exist or access denied." +msgstr "Urządzenie %s nie istnieje lub dostęp jest zabroniony." + +#: lib/utils_device.c:198 +#, c-format +msgid "Device %s is not compatible." +msgstr "Urządzenie %s nie jest zgodne." + +#: lib/utils_device.c:643 +#, 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:724 +#, 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:728 +#, c-format +msgid "Cannot use device %s, permission denied." +msgstr "Nie można użyć urządzenia %s, brak uprawnień." + +#: lib/utils_device.c:731 +#, c-format +msgid "Cannot get info about device %s." +msgstr "Nie można uzyskać informacji o urządzeniu %s." + +#: lib/utils_device.c:754 +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:764 +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:810 +#, 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:818 +#, c-format +msgid "Device %s has zero size." +msgstr "Urządzenie %s ma zerowy rozmiar." + +#: lib/utils_pbkdf.c:100 +msgid "Requested PBKDF target time cannot be zero." +msgstr "Żądany czas docelowy PBKDF nie może być zerowy." + +#: lib/utils_pbkdf.c:106 +#, c-format +msgid "Unknown PBKDF type %s." +msgstr "Nieznany typ PBKDF %s." + +#: lib/utils_pbkdf.c:111 +#, c-format +msgid "Requested hash %s is not supported." +msgstr "Żądany skrót %s nie jest obsługiwany." + +#: lib/utils_pbkdf.c:122 +msgid "Requested PBKDF type is not supported for LUKS1." +msgstr "Żądany typ PBKDF nie jest obsługiwany dla LUKS1." + +#: lib/utils_pbkdf.c:128 +msgid "PBKDF max memory or parallel threads must not be set with pbkdf2." +msgstr "Wartości maksymalnej pamięci lub liczby wątków PBKDF nie mogą być ustawione dla PBKDF2." + +#: lib/utils_pbkdf.c:133 lib/utils_pbkdf.c:143 +#, c-format +msgid "Forced iteration count is too low for %s (minimum is %u)." +msgstr "Wymuszona liczba iteracji jest zbyt mała dla %s (minimum to %u)." + +#: lib/utils_pbkdf.c:148 +#, c-format +msgid "Forced memory cost is too low for %s (minimum is %u kilobytes)." +msgstr "Wymuszony koszt pamięciowy jest zbyt mały dla %s (minimum to %u kB)." + +#: lib/utils_pbkdf.c:155 +#, c-format +msgid "Requested maximum PBKDF memory cost is too high (maximum is %d kilobytes)." +msgstr "Żądany maksymalny koszt pamięciowy PBKDF jest zbyt duży (maksimum to %d kB)." + +#: lib/utils_pbkdf.c:160 +msgid "Requested maximum PBKDF memory cannot be zero." +msgstr "Żądana maksymalna pamięć PBKDF nie może być zerowa." + +#: lib/utils_pbkdf.c:164 +msgid "Requested PBKDF parallel threads cannot be zero." +msgstr "Żądana liczba wątków PBKDF nie może być zerowa." + +#: lib/utils_pbkdf.c:184 +msgid "Only PBKDF2 is supported in FIPS mode." +msgstr "W trybie FIPS obsługiwana jest tylko PBKDF2." + +#: lib/utils_benchmark.c:166 +msgid "PBKDF benchmark disabled but iterations not set." +msgstr "Test wydajności PBKDF jest wyłączony, ale nie ustawiono liczby iteracji." + +#: lib/utils_benchmark.c:185 +#, c-format +msgid "Not compatible PBKDF2 options (using hash algorithm %s)." +msgstr "Niekompatybilne opcje PBKDF2 (przy użyciu algorytmu skrótu %s)." + +#: lib/utils_benchmark.c:205 +msgid "Not compatible PBKDF options." +msgstr "Niekompatybilne opcje PBKDF." + +#: lib/utils_device_locking.c:103 +#, c-format +msgid "Locking aborted. The locking path %s/%s is unusable (not a directory or missing)." +msgstr "Blokowanie nie powiodło się. Ścieżka blokady %s/%s jest nieużywalna (brak lub nie jest katalogiem)." + +#: lib/utils_device_locking.c:110 +#, c-format +msgid "WARNING: Locking directory %s/%s is missing!\n" +msgstr "UWAGA: brak katalogu blokad %s/%s!\n" + +#: lib/utils_device_locking.c:120 +#, c-format +msgid "Locking aborted. The locking path %s/%s is unusable (%s is not a directory)." +msgstr "Blokowanie przerwane. Ścieżka blokady %s/%s jest nieużywalna (%s nie jest katalogiem)." + +#: lib/utils_wipe.c:185 src/cryptsetup_reencrypt.c:933 +#: src/cryptsetup_reencrypt.c:1017 +msgid "Cannot seek to device offset." +msgstr "Nie można przemieścić się we właściwe położenie urządzenia." + +#: lib/utils_wipe.c:209 +#, c-format +msgid "Device wipe error, offset %." +msgstr "Błąd wymazywania urządzenia, offset %." + +#: lib/luks1/keyencryption.c:40 +#, c-format +msgid "" +"Failed to setup dm-crypt key mapping for device %s.\n" +"Check that kernel supports %s cipher (check syslog for more info)." +msgstr "" +"Nie udało się ustawić odwzorowania klucza dm-crypt dla urządzenia %s.\n" +"Proszę sprawdzić, czy jądro obsługuje szyfr %s (więcej informacji w syslogu)." + +#: lib/luks1/keyencryption.c:45 +msgid "Key size in XTS mode must be 256 or 512 bits." +msgstr "Rozmiar klucza w trybie XTS musi wynosić 256 lub 512 bitów." + +#: lib/luks1/keyencryption.c:47 +msgid "Cipher specification should be in [cipher]-[mode]-[iv] format." +msgstr "Określenie szyfru powinno być w formacie [szyfr]-[tryb]-[iv]." + +#: lib/luks1/keyencryption.c:98 lib/luks1/keymanage.c:345 +#: lib/luks1/keymanage.c:636 lib/luks1/keymanage.c:1074 +#: lib/luks2/luks2_json_metadata.c:1253 lib/luks2/luks2_keyslot.c:739 +#, c-format +msgid "Cannot write to device %s, permission denied." +msgstr "Nie można zapisać na urządzenie %s, brak uprawnień." + +#: lib/luks1/keyencryption.c:121 +msgid "Failed to open temporary keystore device." +msgstr "Nie udało się otworzyć urządzenia do tymczasowego przechowywania kluczy." + +#: lib/luks1/keyencryption.c:128 +msgid "Failed to access temporary keystore device." +msgstr "Nie udało się uzyskać dostępu do urządzenia do tymczasowego przechowywania kluczy." + +#: lib/luks1/keyencryption.c:201 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 "Błąd we/wy podczas szyfrowania klucza." + +#: lib/luks1/keyencryption.c:247 lib/luks1/keymanage.c:348 +#: lib/luks1/keymanage.c:589 lib/luks1/keymanage.c:639 lib/tcrypt/tcrypt.c:661 +#: lib/verity/verity.c:81 lib/verity/verity.c:179 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:1256 +#: src/cryptsetup_reencrypt.c:205 +#, c-format +msgid "Cannot open device %s." +msgstr "Nie można otworzyć urządzenia %s." + +#: lib/luks1/keyencryption.c:258 lib/luks2/luks2_keyslot_luks2.c:137 +msgid "IO error while decrypting keyslot." +msgstr "Błąd we/wy podczas odszyfrowywania klucza." + +#: lib/luks1/keymanage.c:111 +#, c-format +msgid "Device %s is too small. (LUKS1 requires at least % bytes.)" +msgstr "Urządzenie %s jest zbyt małe (LUKS1 wymaga przynajmniej % bajtów)." + +#: 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 +#, c-format +msgid "LUKS keyslot %u is invalid." +msgstr "Numer klucza LUKS %u jest nieprawidłowy." + +#: lib/luks1/keymanage.c:229 lib/luks1/keymanage.c:473 +#: lib/luks2/luks2_json_metadata.c:1084 src/cryptsetup.c:1372 +#: src/cryptsetup.c:1498 src/cryptsetup.c:1555 src/cryptsetup.c:1611 +#: src/cryptsetup.c:1678 src/cryptsetup.c:1781 src/cryptsetup.c:1845 +#: src/cryptsetup.c:2005 src/cryptsetup.c:2194 src/cryptsetup.c:2254 +#: src/cryptsetup.c:2320 src/cryptsetup.c:2484 src/cryptsetup.c:3137 +#: src/cryptsetup.c:3146 src/cryptsetup_reencrypt.c:1372 +#, 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:247 lib/luks2/luks2_json_metadata.c:1101 +#, c-format +msgid "Requested header backup file %s already exists." +msgstr "Żądany plik kopii zapasowej nagłówka %s już istnieje." + +#: lib/luks1/keymanage.c:249 lib/luks2/luks2_json_metadata.c:1103 +#, c-format +msgid "Cannot create header backup file %s." +msgstr "Nie można utworzyć pliku kopii zapasowej nagłówka %s." + +#: lib/luks1/keymanage.c:256 lib/luks2/luks2_json_metadata.c:1110 +#, c-format +msgid "Cannot write header backup file %s." +msgstr "Nie można zapisać pliku kopii zapasowej nagłówka %s." + +#: lib/luks1/keymanage.c:287 lib/luks2/luks2_json_metadata.c:1162 +msgid "Backup file doesn't contain valid LUKS header." +msgstr "Plik kopii zapasowej nie zawiera prawidłowego nagłówka LUKS." + +#: lib/luks1/keymanage.c:300 lib/luks1/keymanage.c:550 +#: lib/luks2/luks2_json_metadata.c:1183 +#, c-format +msgid "Cannot open header backup file %s." +msgstr "Nie można otworzyć pliku kopii zapasowej nagłówka %s." + +#: lib/luks1/keymanage.c:308 lib/luks2/luks2_json_metadata.c:1191 +#, c-format +msgid "Cannot read header backup file %s." +msgstr "Nie można odczytać pliku kopii zapasowej nagłówka %s." + +#: lib/luks1/keymanage.c:318 +msgid "Data offset or key size differs on device and backup, restore failed." +msgstr "Offset danych lub rozmiar klucza różnią się między urządzeniem a kopią zapasową; przywrócenie nie powiodło się." + +#: lib/luks1/keymanage.c:326 +#, c-format +msgid "Device %s %s%s" +msgstr "Urządzenie %s %s%s" + +#: lib/luks1/keymanage.c:327 +msgid "does not contain LUKS header. Replacing header can destroy data on that device." +msgstr "nie zawiera nagłówka LUKS. Nadpisanie nagłówka może zniszczyć dane na tym urządzeniu." + +#: lib/luks1/keymanage.c:328 +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:329 lib/luks2/luks2_json_metadata.c:1225 +msgid "" +"\n" +"WARNING: real device header has different UUID than backup!" +msgstr "" +"\n" +"UWAGA: nagłówek prawdziwego urządzenia ma inny UUID niż kopia zapasowa!" + +#: lib/luks1/keymanage.c:376 +msgid "Non standard key size, manual repair required." +msgstr "Niestandardowy rozmiar klucza, wymagana ręczna naprawa." + +#: lib/luks1/keymanage.c:381 +msgid "Non standard keyslots alignment, manual repair required." +msgstr "Niestandardowe wyrównanie kluczy, wymagana ręczna naprawa." + +#: lib/luks1/keymanage.c:391 +msgid "Repairing keyslots." +msgstr "Naprawianie kluczy." + +#: lib/luks1/keymanage.c:410 +#, c-format +msgid "Keyslot %i: offset repaired (%u -> %u)." +msgstr "Klucz %i: naprawiono offset (%u -> %u)." + +#: lib/luks1/keymanage.c:418 +#, c-format +msgid "Keyslot %i: stripes repaired (%u -> %u)." +msgstr "Klucz %i: naprawiono pasy (%u -> %u)." + +#: lib/luks1/keymanage.c:427 +#, c-format +msgid "Keyslot %i: bogus partition signature." +msgstr "Klucz %i: błędna sygnatura partycji." + +#: lib/luks1/keymanage.c:432 +#, c-format +msgid "Keyslot %i: salt wiped." +msgstr "Klucz %i: zarodek wymazany." + +#: lib/luks1/keymanage.c:449 +msgid "Writing LUKS header to disk." +msgstr "Zapis nagłówka LUKS na dysk." + +#: lib/luks1/keymanage.c:454 +msgid "Repair failed." +msgstr "Naprawa nie powiodła się." + +#: lib/luks1/keymanage.c:482 lib/luks1/keymanage.c:751 +#, c-format +msgid "Requested LUKS hash %s is not supported." +msgstr "Żądany skrót LUKS %s nie jest obsługiwany." + +#: lib/luks1/keymanage.c:510 src/cryptsetup.c:1081 +msgid "No known problems detected for LUKS header." +msgstr "W nagłówku LUKS nie wykryto żadnych znanych problemów." + +#: lib/luks1/keymanage.c:661 +#, c-format +msgid "Error during update of LUKS header on device %s." +msgstr "Błąd podczas uaktualniania nagłówka LUKS na urządzeniu %s." + +#: lib/luks1/keymanage.c:669 +#, c-format +msgid "Error re-reading LUKS header after update on device %s." +msgstr "Błęd podczas ponownego odczytu nagłówka LUKS po uaktualnieniu na urządzeniu %s." + +#: lib/luks1/keymanage.c:745 +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:756 lib/luks1/keymanage.c:821 +#: lib/luks2/luks2_json_format.c:283 lib/luks2/luks2_json_metadata.c:1002 +#: src/cryptsetup.c:2647 +msgid "Wrong LUKS UUID format provided." +msgstr "Podano zły format LUKS UUID." + +#: lib/luks1/keymanage.c:779 +msgid "Cannot create LUKS header: reading random salt failed." +msgstr "Nie można utworzyć nagłówka LUKS: odczyt losowego zarodka nie powiódł się." + +#: lib/luks1/keymanage.c:800 +#, c-format +msgid "Cannot create LUKS header: header digest failed (using hash %s)." +msgstr "Nie można utworzyć nagłówka LUKS: uzyskanie skrótu nagłówka nie powiodło się (przy użyciu algorytmu %s)." + +#: lib/luks1/keymanage.c:844 +#, c-format +msgid "Key slot %d active, purge first." +msgstr "Klucz numer %d jest aktywny, należy go najpierw wyczyścić." + +#: lib/luks1/keymanage.c:850 +#, c-format +msgid "Key slot %d material includes too few stripes. Header manipulation?" +msgstr "Klucz %d zawiera zbyt mało pasów. Zmieniony nagłówek?" + +#: lib/luks1/keymanage.c:1060 +#, c-format +msgid "Key slot %d is invalid, please select keyslot between 0 and %d." +msgstr "Numer klucza %d jest błędny, proszę wybrać numer od 0 do %d." + +#: lib/luks1/keymanage.c:1078 lib/luks2/luks2_keyslot.c:743 +#, c-format +msgid "Cannot wipe device %s." +msgstr "Nie można wymazać urządzenia %s." + +#: lib/loopaes/loopaes.c:146 +msgid "Detected not yet supported GPG encrypted keyfile." +msgstr "Wykryto jeszcze nie obsługiwany plik klucza szyfrowany GPG." + +#: lib/loopaes/loopaes.c:147 +msgid "Please use gpg --decrypt | cryptsetup --keyfile=- ...\n" +msgstr "Proszę użyć gpg --decrypt | cryptsetup --keyfile=- ...\n" + +#: lib/loopaes/loopaes.c:168 lib/loopaes/loopaes.c:188 +msgid "Incompatible loop-AES keyfile detected." +msgstr "Wykryto niekompatybilny plik klucza loop-AES." + +#: lib/loopaes/loopaes.c:245 +msgid "Kernel doesn't support loop-AES compatible mapping." +msgstr "Jądro nie obsługuje odwzorowań zgodnych z loop-AES." + +#: lib/tcrypt/tcrypt.c:505 +#, c-format +msgid "Error reading keyfile %s." +msgstr "Błąd odczytu pliku klucza %s." + +#: lib/tcrypt/tcrypt.c:545 +#, c-format +msgid "Maximum TCRYPT passphrase length (%d) exceeded." +msgstr "Przekroczono maksymalną długość hasła TCRYPT (%d)." + +#: lib/tcrypt/tcrypt.c:586 +#, c-format +msgid "PBKDF2 hash algorithm %s not available, skipping." +msgstr "Algorytm skrótu PBKDF2 %s nie jest dostępny, pominięto." + +#: lib/tcrypt/tcrypt.c:602 src/cryptsetup.c:959 +msgid "Required kernel crypto interface not available." +msgstr "Wymagany interfejs kryptograficzny jądra nie jest dostępny." + +#: lib/tcrypt/tcrypt.c:604 src/cryptsetup.c:961 +msgid "Ensure you have algif_skcipher kernel module loaded." +msgstr "Proszę upewnić się, że moduł jądra algif_skcipher został załadowany." + +#: lib/tcrypt/tcrypt.c:744 +#, c-format +msgid "Activation is not supported for %d sector size." +msgstr "Aktywacja nie jest obsługiwana dla rozmiaru sektora %d." + +#: lib/tcrypt/tcrypt.c:750 +msgid "Kernel doesn't support activation for this TCRYPT legacy mode." +msgstr "Jądro nie obsługuje aktywacji dla tego starego trybu TCRYPT." + +#: lib/tcrypt/tcrypt.c:784 +#, c-format +msgid "Activating TCRYPT system encryption for partition %s." +msgstr "Włączanie szyfrowania systemu TCRYPT dla partycji %s." + +#: lib/tcrypt/tcrypt.c:862 +msgid "Kernel doesn't support TCRYPT compatible mapping." +msgstr "Jądro nie obsługuje odwzorowań zgodnych z TCRYPT." + +#: lib/tcrypt/tcrypt.c:1084 +msgid "This function is not supported without TCRYPT header load." +msgstr "Ta funkcja nie jest obsługiwana bez załadowanego nagłówka TCRYPT." + +#: lib/verity/verity.c:69 lib/verity/verity.c:172 +#, c-format +msgid "Verity device %s doesn't use on-disk header." +msgstr "Urządzenie Verity %s nie używa nagłówka na dysku." + +#: lib/verity/verity.c:91 +#, c-format +msgid "Device %s is not a valid VERITY device." +msgstr "Urządzenie %s nie jest prawidłowym urządzeniem VERITY." + +#: lib/verity/verity.c:98 +#, c-format +msgid "Unsupported VERITY version %d." +msgstr "Nieobsługiwana wersja VERITY %d." + +#: lib/verity/verity.c:129 +msgid "VERITY header corrupted." +msgstr "Uszkodzony nagłówek VERITY." + +#: lib/verity/verity.c:166 +#, c-format +msgid "Wrong VERITY UUID format provided on device %s." +msgstr "Podano zły format UUID-a VERITY na urządzeniu %s." + +#: lib/verity/verity.c:199 +#, c-format +msgid "Error during update of verity header on device %s." +msgstr "Błąd podczas uaktualniania nagłówka VERITY na urządzeniu %s." + +#: lib/verity/verity.c:262 +msgid "Errors cannot be repaired with FEC device." +msgstr "Błędów nie można naprawić z urządzeniem FEC." + +#: lib/verity/verity.c:264 +#, c-format +msgid "Found %u repairable errors with FEC device." +msgstr "Znaleziono %u błędów możliwych do naprawienia z urządzeniem FEC." + +#: lib/verity/verity.c:302 +msgid "Kernel doesn't support dm-verity mapping." +msgstr "Jądro nie obsługuje odwzorowań dm-verity." + +#: lib/verity/verity.c:313 +msgid "Verity device detected corruption after activation." +msgstr "Urządzenie VERITY wykryło uszkodzenie po uaktywnieniu." + +#: lib/verity/verity_hash.c:59 +#, c-format +msgid "Spare area is not zeroed at position %." +msgstr "Nie wyzerowane miejsce zapasowe na pozycji %." + +#: lib/verity/verity_hash.c:160 lib/verity/verity_hash.c:287 +#: lib/verity/verity_hash.c:300 +msgid "Device offset overflow." +msgstr "Przepełnienie offsetu urządzenia." + +#: lib/verity/verity_hash.c:200 +#, c-format +msgid "Verification failed at position %." +msgstr "Weryfikacja nie powiodła się na pozycji %." + +#: lib/verity/verity_hash.c:273 +msgid "Invalid size parameters for verity device." +msgstr "Błędne parametry rozmiaru dla urządzenia VERITY." + +#: lib/verity/verity_hash.c:293 +msgid "Hash area overflow." +msgstr "Przepełnienie obszaru skrótu." + +#: lib/verity/verity_hash.c:370 +msgid "Verification of data area failed." +msgstr "Weryfikacja obszaru danych nie powiodła się." + +#: lib/verity/verity_hash.c:375 +msgid "Verification of root hash failed." +msgstr "Weryfikacja głównego hasza nie powiodła się." + +#: lib/verity/verity_hash.c:381 +msgid "Input/output error while creating hash area." +msgstr "Błąd wejścia/wyjścia podczas tworzenia obszaru haszy." + +#: lib/verity/verity_hash.c:383 +msgid "Creation of hash area failed." +msgstr "Tworzenie obszaru haszy nie powiodło się." + +#: lib/verity/verity_hash.c:430 +#, c-format +msgid "WARNING: Kernel cannot activate device if data block size exceeds page size (%u)." +msgstr "UWAGA: Jądro nie może uaktywnić urządzenia, jeśli rozmiar bloku danych przekracza rozmiar strony (%u)." + +#: lib/verity/verity_fec.c:132 +msgid "Failed to allocate RS context." +msgstr "Nie udało się przydzielić kontekstu RS." + +#: lib/verity/verity_fec.c:147 +msgid "Failed to allocate buffer." +msgstr "Nie udało się przydzielić bufora." + +#: lib/verity/verity_fec.c:157 +#, c-format +msgid "Failed to read RS block % byte %d." +msgstr "Nie udało się odczytać bloku RS % bajt %d." + +#: lib/verity/verity_fec.c:170 +#, c-format +msgid "Failed to read parity for RS block %." +msgstr "Nie udało się odczytać parzystości dla bloku RS %." + +#: lib/verity/verity_fec.c:178 +#, c-format +msgid "Failed to repair parity for block %." +msgstr "Nie udało się naprawić parzystości dla bloku %." + +#: lib/verity/verity_fec.c:189 +#, c-format +msgid "Failed to write parity for RS block %." +msgstr "Nie udało się zapisać parzystości dla bloku RS %." + +#: lib/verity/verity_fec.c:224 +msgid "Block sizes must match for FEC." +msgstr "Dla FEC rozmiary bloków muszą się zgadzać." + +#: lib/verity/verity_fec.c:230 +msgid "Invalid number of parity bytes." +msgstr "Błędna liczba bajtów parzystości." + +#: lib/verity/verity_fec.c:266 +#, c-format +msgid "Failed to determine size for device %s." +msgstr "Nie udało się określić rozmiaru urządzenia %s." + +#: lib/integrity/integrity.c:241 lib/integrity/integrity.c:306 +msgid "Kernel doesn't support dm-integrity mapping." +msgstr "Jądro nie obsługuje odwzorowań dm-integrity." + +#: lib/luks2/luks2_disk_metadata.c:383 lib/luks2/luks2_json_metadata.c:959 +#: lib/luks2/luks2_json_metadata.c:1245 +#, c-format +msgid "Failed to acquire write lock on device %s." +msgstr "Nie udało się uzyskać blokady dla zapisu na urządzeniu %s." + +#: lib/luks2/luks2_disk_metadata.c:392 +msgid "Detected attempt for concurrent LUKS2 metadata update. Aborting operation." +msgstr "Wykryto próbę jednoczesnego uaktualnienia metadanych LUKS2. Przerywanie operacji." + +#: 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 "" +"Urządzenie zawiera niejednoznaczne sygnatury, nie można automatycznie odtworzyć LUKS2.\n" +"W celu odtworzenia należy uruchomić \"cryptsetup repair\"." + +#: lib/luks2/luks2_json_format.c:227 +msgid "Requested data offset is too small." +msgstr "Żądany offset danych jest zbyt mały." + +#: 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 "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:1075 +#: lib/luks2/luks2_json_metadata.c:1151 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:1168 +#, 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:1209 +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:1215 +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:1222 +#, c-format +msgid "Device %s %s%s%s%s" +msgstr "Urządzenie %s %s%s%s%s" + +#: lib/luks2/luks2_json_metadata.c:1223 +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:1224 +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:1226 +msgid "" +"\n" +"WARNING: unknown LUKS2 requirements detected in real device header!\n" +"Replacing header with backup may corrupt the data on that device!" +msgstr "" +"\n" +"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:1228 +msgid "" +"\n" +"WARNING: Unfinished offline reencryption detected on the device!\n" +"Replacing header with backup may corrupt data." +msgstr "" +"\n" +"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:1324 +#, c-format +msgid "Ignored unknown flag %s." +msgstr "Zignorowano nieznaną flagę %s." + +#: lib/luks2/luks2_json_metadata.c:2011 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:2023 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:2029 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:2156 +msgid "Unsupported device integrity configuration." +msgstr "Nieobsługiwana konfiguracja integralności urządzenia." + +#: lib/luks2/luks2_json_metadata.c:2242 +msgid "Reencryption in-progress. Cannot deactivate device." +msgstr "Podobne szyfrowanie trwa. Nie można dezaktywować urządzenia." + +#: lib/luks2/luks2_json_metadata.c:2253 lib/luks2/luks2_reencrypt.c:3171 +#, 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:2333 +msgid "Failed to read LUKS2 requirements." +msgstr "Nie udało się odczytać wymagań LUKS2." + +#: lib/luks2/luks2_json_metadata.c:2340 +msgid "Unmet LUKS2 requirements detected." +msgstr "Wykryto nie spełnione wymagania LUKS2." + +#: lib/luks2/luks2_json_metadata.c:2348 +msgid "Offline reencryption in progress. Aborting." +msgstr "Ponowne szyfrowanie offline w trakcie. Przerwano." + +#: lib/luks2/luks2_json_metadata.c:2350 +msgid "Online reencryption in progress. Aborting." +msgstr "Ponowne szyfrowanie online trwa. Przerwano." + +#: lib/luks2/luks2_keyslot.c:552 lib/luks2/luks2_keyslot.c:589 +msgid "Not enough available memory to open a keyslot." +msgstr "Za mało dostępnej pamięci, aby otworzyć klucz." + +#: lib/luks2/luks2_keyslot.c:554 lib/luks2/luks2_keyslot.c:591 +msgid "Keyslot open failed." +msgstr "Nie udało się otworzyć klucza." + +#: 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 "Nie można użyć szyfru %s-%s do szyfrowania kluczy." + +#: lib/luks2/luks2_keyslot_luks2.c:480 +msgid "No space for new keyslot." +msgstr "Brak miejsca na nowy klucz." + +#: lib/luks2/luks2_luks1_convert.c:481 +#, c-format +msgid "Cannot check status of device with uuid: %s." +msgstr "Nie można sprawdzić stanu urządzenia mającego UUID: %s." + +#: lib/luks2/luks2_luks1_convert.c:507 +msgid "Unable to convert header with LUKSMETA additional metadata." +msgstr "Nie można przekonwertować nagłówka z dodatkowymi metadanymi LUKSMETA." + +#: lib/luks2/luks2_luks1_convert.c:547 +msgid "Unable to move keyslot area. Not enough space." +msgstr "Nie można przenieść obszaru kluczy. Brak miejsca." + +#: lib/luks2/luks2_luks1_convert.c:590 lib/luks2/luks2_luks1_convert.c:872 +msgid "Unable to move keyslot area." +msgstr "Nie można przenieść obszaru kluczy." + +#: lib/luks2/luks2_luks1_convert.c:682 +msgid "Cannot convert to LUKS1 format - default segment encryption sector size is not 512 bytes." +msgstr "Nie można przekonwertować do formatu LUKS1 - domyślny rozmiar sektora szyfrowania segmentu nie wynosi 512 bajtów." + +#: lib/luks2/luks2_luks1_convert.c:690 +msgid "Cannot convert to LUKS1 format - key slot digests are not LUKS1 compatible." +msgstr "Nie można przekonwertować formatu LUKS1 - skróty kluczy nie są zgodne z LUKS1." + +#: lib/luks2/luks2_luks1_convert.c:702 +#, c-format +msgid "Cannot convert to LUKS1 format - device uses wrapped key cipher %s." +msgstr "Nie można przekonwertować formatu LUKS1 - urządzenie używa szyfru %s z obudowanym kluczem." + +#: lib/luks2/luks2_luks1_convert.c:710 +#, c-format +msgid "Cannot convert to LUKS1 format - LUKS2 header contains %u token(s)." +msgstr "Nie można przekonwertować do formatu LUKS1 - nagłówek LUKS2 zawiera %u token(ów)." + +#: lib/luks2/luks2_luks1_convert.c:724 +#, c-format +msgid "Cannot convert to LUKS1 format - keyslot %u is in invalid state." +msgstr "Nie można przekonwertować do formatu LUKS1 - klucz %u jest w błędnym stanie." + +#: lib/luks2/luks2_luks1_convert.c:729 +#, c-format +msgid "Cannot convert to LUKS1 format - slot %u (over maximum slots) is still active." +msgstr "Nie można przekonwertować do formatu LUKS1 - klucz %u (powyzej maksimum) jest nadal aktywny." + +#: lib/luks2/luks2_luks1_convert.c:734 +#, c-format +msgid "Cannot convert to LUKS1 format - keyslot %u is not LUKS1 compatible." +msgstr "Nie można przekonwertować do formatu LUKS1 - klucz %u nie jest zgodny z LUKS1." + +#: lib/luks2/luks2_reencrypt.c:892 +#, c-format +msgid "Hotzone size must be multiple of calculated zone alignment (%zu bytes)." +msgstr "Rozmiar strefy hotzone musi być wielokrotnością wyliczonego wyrównania strefy (bajtów: %zu)." + +#: lib/luks2/luks2_reencrypt.c:897 +#, c-format +msgid "Device size must be multiple of calculated zone alignment (%zu bytes)." +msgstr "Rozmiar urządzenia musi być wielokrotnością wyliczonego wyrównania strefy (bajtów: %zu)." + +#: lib/luks2/luks2_reencrypt.c:941 +#, c-format +msgid "Unsupported resilience mode %s" +msgstr "Nieobsługiwany tryb odporności %s" + +#: lib/luks2/luks2_reencrypt.c:1158 lib/luks2/luks2_reencrypt.c:1313 +#: lib/luks2/luks2_reencrypt.c:1396 lib/luks2/luks2_reencrypt.c:1430 +#: lib/luks2/luks2_reencrypt.c:3011 +msgid "Failed to initialize old segment storage wrapper." +msgstr "Nie udało się zainicjować obudowania przestrzeni starego segmentu." + +#: lib/luks2/luks2_reencrypt.c:1172 lib/luks2/luks2_reencrypt.c:1291 +msgid "Failed to initialize new segment storage wrapper." +msgstr "Nie udało się zainicjować obudowania przestrzeni nowego segmentu." + +#: lib/luks2/luks2_reencrypt.c:1340 +msgid "Failed to read checksums for current hotzone." +msgstr "Nie udało się odczytać sum kontrolnych dla aktualnej strefy hotzone." + +#: lib/luks2/luks2_reencrypt.c:1347 lib/luks2/luks2_reencrypt.c:3019 +#, c-format +msgid "Failed to read hotzone area starting at %." +msgstr "Nie udało się odczytać obszaru hotzone zaczynającego się od %." + +#: lib/luks2/luks2_reencrypt.c:1366 +#, c-format +msgid "Failed to decrypt sector %zu." +msgstr "Nie udało się odszyfrować sektora %zu." + +#: lib/luks2/luks2_reencrypt.c:1372 +#, c-format +msgid "Failed to recover sector %zu." +msgstr "Nie udało się odtworzyć sektora %zu." + +#: lib/luks2/luks2_reencrypt.c:1867 +#, c-format +msgid "Source and target device sizes don't match. Source %, target: %." +msgstr "Rozmiary urządzenia źródłowego i docelowego różnią się. Źródłowe %, docelowe: %." + +#: lib/luks2/luks2_reencrypt.c:1965 +#, c-format +msgid "Failed to activate hotzone device %s." +msgstr "Nie udało się uaktywnić urządzenia hotzone %s." + +#: lib/luks2/luks2_reencrypt.c:1982 +#, c-format +msgid "Failed to activate overlay device %s with actual origin table." +msgstr "Nie udało się uaktywnić urządzenia nakładkowego %s z aktualną tablicą źródła." + +#: lib/luks2/luks2_reencrypt.c:1989 +#, c-format +msgid "Failed to load new mapping for device %s." +msgstr "Nie udało się załadować nowego odwzorowania dla urządzenia %s." + +#: lib/luks2/luks2_reencrypt.c:2060 +msgid "Failed to refresh reencryption devices stack." +msgstr "Nie udało się odświeżyć stosu urządzenia ponownego szyfrowania." + +#: lib/luks2/luks2_reencrypt.c:2216 +msgid "Failed to set new keyslots area size." +msgstr "Nie udało się ustawić nowego rozmiaru obszaru kluczy." + +#: lib/luks2/luks2_reencrypt.c:2318 +#, c-format +msgid "Data shift is not aligned to requested encryption sector size (% bytes)." +msgstr "Przesunięcie danych nie jest wyrównane do żądanego rozmiaru sektora szyfrowania (bajtów: %)." + +#: lib/luks2/luks2_reencrypt.c:2339 +#, c-format +msgid "Data device is not aligned to requested encryption sector size (% bytes)." +msgstr "Urzędzenie danych nie jest wyrównane do żądanego rozmiaru sektora szyfrowania (bajtów: %)." + +#: lib/luks2/luks2_reencrypt.c:2360 +#, c-format +msgid "Data shift (% sectors) is less than future data offset (% sectors)." +msgstr "Przesunięcie danych (sektorów: %) jest mniejsze niż przyszły offset danych (sektorów: %)." + +#: lib/luks2/luks2_reencrypt.c:2366 lib/luks2/luks2_reencrypt.c:2760 +#: lib/luks2/luks2_reencrypt.c:2781 +#, c-format +msgid "Failed to open %s in exclusive mode (already mapped or mounted)." +msgstr "Nie udało się otworzyć %s w trybie wyłączności (już odwzorowano lub zamontowano)." + +#: lib/luks2/luks2_reencrypt.c:2534 +msgid "No LUKS2 reencryption in progress." +msgstr "Brak trwającego ponownego szyfrowania LUKS2." + +#: lib/luks2/luks2_reencrypt.c:2540 lib/luks2/luks2_reencrypt.c:3276 +msgid "Failed to load LUKS2 reencryption context." +msgstr "Nie udało się załadować kontekstu ponownego szyfrowania LUKS2." + +#: lib/luks2/luks2_reencrypt.c:2600 +msgid "Failed to get reencryption state." +msgstr "Nie udało się pobrać stanu ponownego szyfrowania." + +#: lib/luks2/luks2_reencrypt.c:2604 +msgid "Device is not in reencryption." +msgstr "Urządzenie nie jest w trakcie ponownego szyfrowania." + +#: lib/luks2/luks2_reencrypt.c:2611 +msgid "Reencryption process is already running." +msgstr "Proces ponownego szyfrowania już trwa." + +#: lib/luks2/luks2_reencrypt.c:2613 +msgid "Failed to acquire reencryption lock." +msgstr "Nie udało się uzyskać blokady dla ponownego szyfrowania." + +#: lib/luks2/luks2_reencrypt.c:2631 +msgid "Cannot proceed with reencryption. Run reencryption recovery first." +msgstr "Nie można kontynuować ponownego szyfrowania. Należy najpierw uruchomić odtworzenie ponownego szyfrowania." + +#: lib/luks2/luks2_reencrypt.c:2731 +msgid "Active device size and requested reencryption size don't match." +msgstr "Rozmiar urządzenia aktywnego oraz żądany rozmiar ponownego szyfrowania różnią się." + +#: lib/luks2/luks2_reencrypt.c:2745 +msgid "Illegal device size requested in reencryption parameters." +msgstr "W parametrach ponownego szyfrowania zażądano niedozwolonego rozmiaru urządzenia." + +#: lib/luks2/luks2_reencrypt.c:2815 +msgid "Reencryption in-progress. Cannot perform recovery." +msgstr "Ponowne szyfrowanie trwa. Nie można wykonać odzyskiwania." + +#: lib/luks2/luks2_reencrypt.c:2887 +msgid "LUKS2 reencryption already initialized in metadata." +msgstr "Ponowne szyfrowanie LUKS2 jest już zainicjowane w metadanych." + +#: lib/luks2/luks2_reencrypt.c:2894 +msgid "Failed to initialize LUKS2 reencryption in metadata." +msgstr "Nie udało się zainicjować ponownego szyfrowania LUKS2 w metadanych." + +#: lib/luks2/luks2_reencrypt.c:2985 +msgid "Failed to set device segments for next reencryption hotzone." +msgstr "Nie udało się ustawić segmentów urządzeń dla następnej strefy hotzone ponownego szyfrowania." + +#: lib/luks2/luks2_reencrypt.c:3027 +msgid "Failed to write reencryption resilience metadata." +msgstr "Nie udało się zapisać metadanych odporności ponownego szyfrowania." + +#: lib/luks2/luks2_reencrypt.c:3034 +msgid "Decryption failed." +msgstr "Odszyfrowanie nie powiodło się." + +#: lib/luks2/luks2_reencrypt.c:3039 +#, c-format +msgid "Failed to write hotzone area starting at %." +msgstr "Nie udało się zapisać obszaru hotzone zaczynającego się od %." + +#: lib/luks2/luks2_reencrypt.c:3044 +msgid "Failed to sync data." +msgstr "Nie udało się zsynchronizować danych." + +#: lib/luks2/luks2_reencrypt.c:3052 +msgid "Failed to update metadata after current reencryption hotzone completed." +msgstr "Nie udało się uaktualnić metadanych po zakończeniu aktualnej strefy hotzone ponownego szyfrowania." + +#: lib/luks2/luks2_reencrypt.c:3119 +msgid "Failed to write LUKS2 metadata." +msgstr "Nie udało się zapisać metadanych LUKS2." + +#: lib/luks2/luks2_reencrypt.c:3142 +msgid "Failed to wipe backup segment data." +msgstr "Nie udało wymazać danych segmentu zapasowego." + +#: lib/luks2/luks2_reencrypt.c:3155 +msgid "Failed to disable reencryption requirement flag." +msgstr "Nie udało się wyłączyć flagi wymagania ponownego szyfrowania." + +#: lib/luks2/luks2_reencrypt.c:3163 +#, c-format +msgid "Fatal error while reencrypting chunk starting at %, % sectors long." +msgstr "Błąd krytyczny podczas ponownego szyfrowania fragmentu zaczynającego się od % o długości w sektorach %." + +#: lib/luks2/luks2_reencrypt.c:3172 +msgid "Do not resume the device unless replaced with error target manually." +msgstr "Proszę nie wznawiać urządzenia dopóki nie zostanie zastąpione celem błędnym ręcznie." + +#: lib/luks2/luks2_reencrypt.c:3221 +msgid "Cannot proceed with reencryption. Unexpected reencryption status." +msgstr "Nie można kontynuować ponownego szyfrowania. Nieoczekiwany stan ponownego szyfrowania." + +#: lib/luks2/luks2_reencrypt.c:3227 +msgid "Missing or invalid reencrypt context." +msgstr "Brak lub błędny kontekst ponownego szyfrowania." + +#: lib/luks2/luks2_reencrypt.c:3234 +msgid "Failed to initialize reencryption device stack." +msgstr "Nie udało się zainicjować stosu urządzenia ponownego szyfrowania." + +#: lib/luks2/luks2_reencrypt.c:3253 lib/luks2/luks2_reencrypt.c:3289 +msgid "Failed to update reencryption context." +msgstr "Nie udało się uaktualnić kontekstu ponownego szyfrowania." + +#: lib/luks2/luks2_token.c:262 +msgid "No free token slot." +msgstr "Brak wolnego miejsca na token." + +#: lib/luks2/luks2_token.c:269 +#, c-format +msgid "Failed to create builtin token %s." +msgstr "Nie udało się utworzyć wbudowanego tokenu %s." + +#: src/cryptsetup.c:162 +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:215 +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:245 src/cryptsetup.c:893 src/cryptsetup.c:1212 +#: src/cryptsetup.c:3011 src/cryptsetup_reencrypt.c:715 +#: src/cryptsetup_reencrypt.c:785 +msgid "No known cipher specification pattern detected." +msgstr "Nie wykryto znanego wzorca określającego szyfr." + +#: src/cryptsetup.c:253 +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:261 +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:301 +#, 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:307 src/cryptsetup.c:1038 src/cryptsetup.c:1090 +#: src/cryptsetup.c:1189 src/cryptsetup.c:1262 src/cryptsetup.c:1913 +#: src/cryptsetup.c:2545 src/cryptsetup.c:2668 src/integritysetup.c:232 +msgid "Operation aborted.\n" +msgstr "Operacja przerwana.\n" + +#: src/cryptsetup.c:375 +msgid "Option --key-file is required." +msgstr "Wymagana jest opcja --key-file." + +#: src/cryptsetup.c:428 +msgid "Enter VeraCrypt PIM: " +msgstr "Proszę wprowadzić PIM VeraCrypt: " + +#: src/cryptsetup.c:437 +msgid "Invalid PIM value: parse error." +msgstr "Błędna wartość PIM: błąd składni." + +#: src/cryptsetup.c:440 +msgid "Invalid PIM value: 0." +msgstr "Błędna wartość PIM: 0." + +#: src/cryptsetup.c:443 +msgid "Invalid PIM value: outside of range." +msgstr "Błędna wartość PIM: poza zakresem." + +#: src/cryptsetup.c:466 +msgid "No device header detected with this passphrase." +msgstr "Nie wykryto nagłówka urządzenia z tym hasłem." + +#: src/cryptsetup.c:528 src/cryptsetup.c:1940 +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 "" +"Zrzut nagłówka z kluczem wolumenu jest informacją wrażliwą,\n" +"pozwalającą na dostęp do zaszyfrowanej partycji bez hasła.\n" +"Zrzut ten powinien być zawsze zapisywany w postaci zaszyfrowanej\n" +"w bezpiecznym miejscu." + +#: src/cryptsetup.c:607 +#, 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:635 +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:771 +msgid "Benchmark interrupted." +msgstr "Test szybkości przerwany." + +#: src/cryptsetup.c:792 +#, c-format +msgid "PBKDF2-%-9s N/A\n" +msgstr "PBKDF2-%-9s N/D\n" + +#: src/cryptsetup.c:794 +#, 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:808 +#, c-format +msgid "%-10s N/A\n" +msgstr "%-10s N/D\n" + +#: src/cryptsetup.c:810 +#, 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:834 +msgid "Result of benchmark is not reliable." +msgstr "Wynik testu wydajności nie jest wiarygodny." + +#: src/cryptsetup.c:885 +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:919 +#, c-format +msgid "#%*s Algorithm | Key | Encryption | Decryption\n" +msgstr "#%*s Algorytm | Klucz | Szyfrowanie | Odszyfrowywanie\n" + +#: src/cryptsetup.c:923 +#, c-format +msgid "Cipher %s is not available." +msgstr "Szyfr %s nie jest dostępny." + +#. TRANSLATORS: The string is header of a table and must be exactly (right side) aligned. +#: src/cryptsetup.c:943 +msgid "# Algorithm | Key | Encryption | Decryption\n" +msgstr "# Algorytm | Klucz | Szyfrowanie | Odszyfrowywanie\n" + +#: src/cryptsetup.c:952 +msgid "N/A" +msgstr "N/D" + +#: src/cryptsetup.c:1031 +msgid "" +"Seems device does not require reencryption recovery.\n" +"Do you want to proceed anyway?" +msgstr "" +"Wygląda na to, że urządzenie nie wymaga odtwarzania ponownego szyfrowania.\n" +"Czy mimo to kontynuować?" + +#: src/cryptsetup.c:1037 +msgid "Really proceed with LUKS2 reencryption recovery?" +msgstr "Naprawdę kontynuować odtwarzanie ponownego szyfrowania LUKS2?" + +#: src/cryptsetup.c:1046 +msgid "Enter passphrase for reencryption recovery: " +msgstr "Hasło do odtwarzania ponownego szyfrowania: " + +#: src/cryptsetup.c:1089 +msgid "Really try to repair LUKS device header?" +msgstr "Naprawdę próbować naprawić nagłówek urządzenia LUKS?" + +#: src/cryptsetup.c:1108 src/integritysetup.c:145 +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 "" +"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:1130 src/integritysetup.c:167 +#, c-format +msgid "Cannot deactivate temporary device %s." +msgstr "Nie można dezaktywować urządzenia tymczasowego %s." + +#: src/cryptsetup.c:1174 +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:1179 src/cryptsetup.c:1239 +msgid "Unsupported LUKS2 metadata size options." +msgstr "Nieobsługiwane opcje rozmiaru metadanych LUKS2." + +#: src/cryptsetup.c:1196 +#, c-format +msgid "Cannot create header file %s." +msgstr "Nie można utworzyć pliku nagłówka %s." + +#: src/cryptsetup.c:1219 src/integritysetup.c:194 src/integritysetup.c:203 +#: src/integritysetup.c:212 src/integritysetup.c:279 src/integritysetup.c:288 +#: src/integritysetup.c:298 +msgid "No known integrity specification pattern detected." +msgstr "Nie wykryto znanego wzorca określającego integralność." + +#: src/cryptsetup.c:1232 +#, 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:1256 src/integritysetup.c:226 +#, c-format +msgid "This will overwrite data on %s irrevocably." +msgstr "To nieodwołalnie nadpisze dane na %s." + +#: src/cryptsetup.c:1297 src/cryptsetup.c:1627 src/cryptsetup.c:1694 +#: src/cryptsetup.c:1796 src/cryptsetup.c:1862 src/cryptsetup_reencrypt.c:545 +msgid "Failed to set pbkdf parameters." +msgstr "Nie udało się ustawić parametrów PBKDF." + +#: src/cryptsetup.c:1378 +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:1389 src/cryptsetup.c:1700 +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:1427 +msgid "Device activated but cannot make flags persistent." +msgstr "Urządzenie aktywowane, ale nie można uczynić flag trwałymi." + +#: src/cryptsetup.c:1508 src/cryptsetup.c:1578 +#, c-format +msgid "Keyslot %d is selected for deletion." +msgstr "Klucz %d jest wybrany do usunięcia." + +#: src/cryptsetup.c:1520 src/cryptsetup.c:1581 +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:1521 +msgid "Enter any remaining passphrase: " +msgstr "Dowolne pozostałe hasło: " + +#: src/cryptsetup.c:1522 src/cryptsetup.c:1583 +msgid "Operation aborted, the keyslot was NOT wiped.\n" +msgstr "Operacja przerwana, klucz NIE został wymazany.\n" + +#: src/cryptsetup.c:1560 +msgid "Enter passphrase to be deleted: " +msgstr "Hasło do usunięcia: " + +#: src/cryptsetup.c:1641 src/cryptsetup.c:1715 src/cryptsetup.c:1749 +msgid "Enter new passphrase for key slot: " +msgstr "Nowe hasło dla klucza: " + +#: src/cryptsetup.c:1732 src/cryptsetup_reencrypt.c:1327 +#, c-format +msgid "Enter any existing passphrase: " +msgstr "Dowolne istniejące hasło: " + +#: src/cryptsetup.c:1800 +msgid "Enter passphrase to be changed: " +msgstr "Hasło, które ma być zmienione: " + +#: src/cryptsetup.c:1816 src/cryptsetup_reencrypt.c:1313 +msgid "Enter new passphrase: " +msgstr "Nowe hasło: " + +#: src/cryptsetup.c:1866 +msgid "Enter passphrase for keyslot to be converted: " +msgstr "Hasło dla klucza do konwersji: " + +#: src/cryptsetup.c:1890 +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:2074 src/cryptsetup.c:2095 +msgid "Option --header-backup-file is required." +msgstr "Wymagana jest opcja --header-backup-file." + +#: src/cryptsetup.c:2125 +#, c-format +msgid "%s is not cryptsetup managed device." +msgstr "%s nie jest urządzeniem zarządzanym przez cryptsetup." + +#: src/cryptsetup.c:2136 +#, 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:2174 +#, c-format +msgid "Unrecognized metadata device type %s." +msgstr "Nie rozpoznany typ urządzenia metadanych %s." + +#: src/cryptsetup.c:2177 +msgid "Command requires device and mapped name as arguments." +msgstr "Polecenie wymaga urządzenia i nazwy odwzorowywanej jako argumentów." + +#: src/cryptsetup.c:2199 +#, c-format +msgid "" +"This operation will erase all keyslots on device %s.\n" +"Device will become unusable after this operation." +msgstr "" +"Ta operacja usunię wszystkie klucze na urządzeniu %s.\n" +"Urządzenie po tej operacji stanie się bezużyteczne." + +#: src/cryptsetup.c:2206 +msgid "Operation aborted, keyslots were NOT wiped.\n" +msgstr "Operacja przerwana, klucze NIE zostały wymazane.\n" + +#: src/cryptsetup.c:2243 +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:2261 +#, c-format +msgid "Device is already %s type." +msgstr "Urządzenie już ma typ %s." + +#: src/cryptsetup.c:2266 +#, c-format +msgid "This operation will convert %s to %s format.\n" +msgstr "Ta operacja przekonwertuje %s do formatu %s.\n" + +#: src/cryptsetup.c:2272 +msgid "Operation aborted, device was NOT converted.\n" +msgstr "Operacja przerwana, urządzenie NIE zostało skonwertowane.\n" + +#: src/cryptsetup.c:2312 +msgid "Option --priority, --label or --subsystem is missing." +msgstr "Brak opcji --priority, --label lub --subsystem." + +#: src/cryptsetup.c:2346 src/cryptsetup.c:2379 src/cryptsetup.c:2402 +#, c-format +msgid "Token %d is invalid." +msgstr "Token %d jest błędny." + +#: src/cryptsetup.c:2349 src/cryptsetup.c:2405 +#, c-format +msgid "Token %d in use." +msgstr "Token %d jest w użyciu." + +#: src/cryptsetup.c:2356 +#, 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:2365 src/cryptsetup.c:2427 +#, 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:2382 +#, c-format +msgid "Token %d is not in use." +msgstr "Token %d nie jest w użyciu." + +#: src/cryptsetup.c:2417 +msgid "Failed to import token from file." +msgstr "Nie udało się zaimportować tokenu z pliku." + +#: src/cryptsetup.c:2442 +#, c-format +msgid "Failed to get token %d for export." +msgstr "Nie udało się pobrać tokenu %d do eksportu." + +#: src/cryptsetup.c:2457 +msgid "--key-description parameter is mandatory for token add action." +msgstr "Parametr --key-description jest wymagany do akcji dodania tokenu." + +#: src/cryptsetup.c:2463 src/cryptsetup.c:2471 +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:2476 +#, c-format +msgid "Invalid token operation %s." +msgstr "Błędna operacja na tokenie %s." + +#: src/cryptsetup.c:2531 +#, 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:2535 +#, c-format +msgid "Device %s is not a block device.\n" +msgstr "Urządzenie %s nie jest urządzeniem blokowym.\n" + +#: src/cryptsetup.c:2537 +#, 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:2539 +#, 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 "" +"Nie udało się zdecydować, czy urządzenie %s jest uaktywnione, czy nie.\n" +"Czy na pewno kontynuować ponowne szyfrowanie w trybie offline?\n" +"Może to prowadzić do uszkodzenia danych, jeśli urządzenie jest aktywne.\n" +"Aby uruchomić ponowne szyfrowanie w trybie online, należy użyć parametru\n" +"--active-name.\n" + +#: src/cryptsetup.c:2619 +msgid "Invalid LUKS device type." +msgstr "Błędny typ urządzenia LUKS." + +#: src/cryptsetup.c:2624 +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:2629 +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:2638 +#, 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:2642 +msgid "Encryption is supported only for LUKS2 format." +msgstr "Szyfrowanie jest obsługiwane tylko w formacie LUKS2." + +#: src/cryptsetup.c:2664 +#, 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:2679 +#, c-format +msgid "Temporary header file %s already exists. Aborting." +msgstr "Plik nagłówka %s już istnieje. Przerwano." + +#: src/cryptsetup.c:2681 src/cryptsetup.c:2688 +#, c-format +msgid "Cannot create temporary header file %s." +msgstr "Nie można utworzyć pliku tymczasowego nagłówka %s." + +#: src/cryptsetup.c:2752 +#, c-format +msgid "%s/%s is now active and ready for online encryption." +msgstr "%s/%s jest teraz aktywne i gotowe do szyfrowania w locie." + +#: src/cryptsetup.c:2919 src/cryptsetup.c:2925 +msgid "Not enough free keyslots for reencryption." +msgstr "Za mało wolnych kluczy do ponownego szyfrowania." + +#: src/cryptsetup.c:2945 src/cryptsetup_reencrypt.c:1284 +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:2954 src/cryptsetup_reencrypt.c:1325 +#: src/cryptsetup_reencrypt.c:1336 +#, c-format +msgid "Enter passphrase for key slot %d: " +msgstr "Hasło dla klucza %d: " + +#: src/cryptsetup.c:2962 +#, c-format +msgid "Enter passphrase for key slot %u: " +msgstr "Hasło dla klucza %u: " + +#: src/cryptsetup.c:3129 +msgid "Command requires device as argument." +msgstr "Polecenie wymaga urządzenia jako argumentu." + +#: src/cryptsetup.c:3151 +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:3163 +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:3173 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:3181 +msgid "LUKS2 reencryption already initialized. Aborting operation." +msgstr "Ponowne szyfrowanie LUKS2 jest już zainicjowane. Przerywanie operacji." + +#: src/cryptsetup.c:3185 +msgid "LUKS2 device is not in reencryption." +msgstr "Urządzenie LUKS2 nie jest w trakcie ponownego szyfrowania." + +#: src/cryptsetup.c:3212 +msgid " [--type ] []" +msgstr " [--type ] []" + +#: src/cryptsetup.c:3212 src/veritysetup.c:358 src/integritysetup.c:470 +msgid "open device as " +msgstr "otwarcie urządzenia jako " + +#: src/cryptsetup.c:3213 src/cryptsetup.c:3214 src/cryptsetup.c:3215 +#: src/veritysetup.c:359 src/veritysetup.c:360 src/integritysetup.c:471 +#: src/integritysetup.c:472 +msgid "" +msgstr "" + +#: src/cryptsetup.c:3213 src/veritysetup.c:359 src/integritysetup.c:471 +msgid "close device (remove mapping)" +msgstr "zamknięcie urządzenia (usunięcie odwzorowania)" + +#: src/cryptsetup.c:3214 +msgid "resize active device" +msgstr "zmiana rozmiaru aktywnego urządzenia" + +#: src/cryptsetup.c:3215 +msgid "show device status" +msgstr "pokazanie stanu urządzenia" + +#: src/cryptsetup.c:3216 +msgid "[--cipher ]" +msgstr "[--cipher ]" + +#: src/cryptsetup.c:3216 +msgid "benchmark cipher" +msgstr "test szybkości szyfru" + +#: src/cryptsetup.c:3217 src/cryptsetup.c:3218 src/cryptsetup.c:3219 +#: src/cryptsetup.c:3220 src/cryptsetup.c:3221 src/cryptsetup.c:3228 +#: src/cryptsetup.c:3229 src/cryptsetup.c:3230 src/cryptsetup.c:3231 +#: src/cryptsetup.c:3232 src/cryptsetup.c:3233 src/cryptsetup.c:3234 +#: src/cryptsetup.c:3235 +msgid "" +msgstr "" + +#: src/cryptsetup.c:3217 +msgid "try to repair on-disk metadata" +msgstr "próba naprawy metadanych na dysku" + +#: src/cryptsetup.c:3218 +msgid "reencrypt LUKS2 device" +msgstr "ponowne szyfrowanie urządzenia LUKS2" + +#: src/cryptsetup.c:3219 +msgid "erase all keyslots (remove encryption key)" +msgstr "usunięcie wszystkich kluczy (usunięcie klucza szyfrującego)" + +#: src/cryptsetup.c:3220 +msgid "convert LUKS from/to LUKS2 format" +msgstr "przekonwertowanie formatu LUKS z/do LUKS2" + +#: src/cryptsetup.c:3221 +msgid "set permanent configuration options for LUKS2" +msgstr "ustawienie opcji trwałej konfiguracji dla LUKS2" + +#: src/cryptsetup.c:3222 src/cryptsetup.c:3223 +msgid " []" +msgstr " []" + +#: src/cryptsetup.c:3222 +msgid "formats a LUKS device" +msgstr "sformatowanie urządzenia LUKS" + +#: src/cryptsetup.c:3223 +msgid "add key to LUKS device" +msgstr "dodanie klucza do urządzenia LUKS" + +#: src/cryptsetup.c:3224 src/cryptsetup.c:3225 src/cryptsetup.c:3226 +msgid " []" +msgstr " []" + +#: src/cryptsetup.c:3224 +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:3225 +msgid "changes supplied key or key file of LUKS device" +msgstr "zmiana podanego klucza lub pliku klucza urządzenia LUKS" + +#: src/cryptsetup.c:3226 +msgid "converts a key to new pbkdf parameters" +msgstr "konwersja klucza na nowe parametry pbkdf" + +#: src/cryptsetup.c:3227 +msgid " " +msgstr " " + +#: src/cryptsetup.c:3227 +msgid "wipes key with number from LUKS device" +msgstr "wymazanie klucza o numerze z urządzenia LUKS" + +#: src/cryptsetup.c:3228 +msgid "print UUID of LUKS device" +msgstr "wypisanie UUID-a urządzenia LUKS" + +#: src/cryptsetup.c:3229 +msgid "tests for LUKS partition header" +msgstr "sprawdzenie pod kątem nagłówka partycji LUKS" + +#: src/cryptsetup.c:3230 +msgid "dump LUKS partition information" +msgstr "zrzut informacji o partycji LUKS" + +#: src/cryptsetup.c:3231 +msgid "dump TCRYPT device information" +msgstr "zrzut informacji o urządzeniu TCRYPT" + +#: src/cryptsetup.c:3232 +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:3233 +msgid "Resume suspended LUKS device" +msgstr "Wznowienie zatrzymanego urządzenia LUKS" + +#: src/cryptsetup.c:3234 +msgid "Backup LUKS device header and keyslots" +msgstr "Kopia zapasowa nagłówka i kluczy urządzenia LUKS" + +#: src/cryptsetup.c:3235 +msgid "Restore LUKS device header and keyslots" +msgstr "Odtworzenie nagłówka i kluczy urządzenia LUKS z kopii zapasowej" + +#: src/cryptsetup.c:3236 +msgid " " +msgstr " " + +#: src/cryptsetup.c:3236 +msgid "Manipulate LUKS2 tokens" +msgstr "Operacja na tokenach LUKS2" + +#: src/cryptsetup.c:3254 src/veritysetup.c:376 src/integritysetup.c:488 +msgid "" +"\n" +" is one of:\n" +msgstr "" +"\n" +" to jedno z:\n" + +#: src/cryptsetup.c:3260 +msgid "" +"\n" +"You can also use old syntax aliases:\n" +"\topen: create (plainOpen), luksOpen, loopaesOpen, tcryptOpen\n" +"\tclose: remove (plainClose), luksClose, loopaesClose, tcryptClose\n" +msgstr "" +"\n" +"Można także używać starych aliasów składni :\n" +"\topen: create (plainOpen), luksOpen, loopaesOpen, tcryptOpen\n" +"\tclose: remove (plainClose), luksClose, loopaesClose, tcryptClose\n" + +#: src/cryptsetup.c:3264 +#, c-format +msgid "" +"\n" +" is the device to create under %s\n" +" is the encrypted device\n" +" is the LUKS key slot number to modify\n" +" optional key file for the new key for luksAddKey action\n" +msgstr "" +"\n" +" to urządzenie do utworzenia wewnątrz %s\n" +" to zaszyfrowane urządzenie\n" +" to numer klucza LUKS do zmiany\n" +" to opcjonalny plik nowego klucza dla akcji luksAddKey\n" + +#: src/cryptsetup.c:3271 +#, c-format +msgid "" +"\n" +"Default compiled-in metadata format is %s (for luksFormat action).\n" +msgstr "" +"\n" +"Domyślny wkompilowany format metadanych to %s (dla akcji luksFormat).\n" + +#: src/cryptsetup.c:3276 +#, c-format +msgid "" +"\n" +"Default compiled-in key and passphrase parameters:\n" +"\tMaximum keyfile size: %dkB, Maximum interactive passphrase length %d (characters)\n" +"Default PBKDF for LUKS1: %s, iteration time: %d (ms)\n" +"Default PBKDF for LUKS2: %s\n" +"\tIteration time: %d, Memory required: %dkB, Parallel threads: %d\n" +msgstr "" +"\n" +"Domyślne wkompilowane parametry kluczy i haseł:\n" +"\tMaksymalny rozmiar pliku klucza: %dkB, maksymalna długość hasła interaktywnego %d (znaków)\n" +"Domyślny PBKDF dla LUKS1: %s, czas iteracji %d (ms)\n" +"Domyślny PBKDF dla LUKS2: %s\n" +"\tCzas iteracji: %d, wymagana pamięć: %dkB, liczba wątków: %d\n" + +#: src/cryptsetup.c:3287 +#, c-format +msgid "" +"\n" +"Default compiled-in device cipher parameters:\n" +"\tloop-AES: %s, Key %d bits\n" +"\tplain: %s, Key: %d bits, Password hashing: %s\n" +"\tLUKS: %s, Key: %d bits, LUKS header hashing: %s, RNG: %s\n" +msgstr "" +"\n" +"Domyślne wkompilowane parametry szyfrowania urządzeń:\n" +"\tloop-AES: %s, bitów klucza: %d\n" +"\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:3296 +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:3312 src/veritysetup.c:532 src/integritysetup.c:630 +#, c-format +msgid "%s: requires %s as arguments" +msgstr "%s: wymaga %s jako argumentów" + +#: src/cryptsetup.c:3350 src/veritysetup.c:421 src/integritysetup.c:527 +#: src/cryptsetup_reencrypt.c:1591 +msgid "Show this help message" +msgstr "Wyświetlenie tego opisu" + +#: src/cryptsetup.c:3351 src/veritysetup.c:422 src/integritysetup.c:528 +#: src/cryptsetup_reencrypt.c:1592 +msgid "Display brief usage" +msgstr "Wyświetlenie krótkiej informacji o składni" + +#: src/cryptsetup.c:3352 src/veritysetup.c:423 src/integritysetup.c:529 +#: src/cryptsetup_reencrypt.c:1593 +msgid "Print package version" +msgstr "Wypisanie wersji pakietu" + +#: src/cryptsetup.c:3356 src/veritysetup.c:427 src/integritysetup.c:533 +#: src/cryptsetup_reencrypt.c:1597 +msgid "Help options:" +msgstr "Opcje pomocnicze:" + +#: src/cryptsetup.c:3357 src/veritysetup.c:428 src/integritysetup.c:534 +#: src/cryptsetup_reencrypt.c:1598 +msgid "Shows more detailed error messages" +msgstr "Wyświetlanie bardziej szczegółowych komunikatów błędów" + +#: src/cryptsetup.c:3358 src/veritysetup.c:429 src/integritysetup.c:535 +#: src/cryptsetup_reencrypt.c:1599 +msgid "Show debug messages" +msgstr "Wyświetlanie informacji diagnostycznych" + +#: src/cryptsetup.c:3359 +msgid "Show debug messages including JSON metadata" +msgstr "Wyświetlanie informacji diagnostycznych wraz z metadanymi JSON" + +#: src/cryptsetup.c:3360 src/cryptsetup_reencrypt.c:1601 +msgid "The cipher used to encrypt the disk (see /proc/crypto)" +msgstr "Szyfr używany do zaszyfrowania dysku (p. /proc/crypto)" + +#: src/cryptsetup.c:3361 src/cryptsetup_reencrypt.c:1603 +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:3362 +msgid "Verifies the passphrase by asking for it twice" +msgstr "Sprawdzenie poprawności hasła poprzez dwukrotne pytanie" + +#: src/cryptsetup.c:3363 src/cryptsetup_reencrypt.c:1605 +msgid "Read the key from a file" +msgstr "Odczyt klucza z pliku" + +#: src/cryptsetup.c:3364 +msgid "Read the volume (master) key from file." +msgstr "Odczyt klucza wolumenu (klucza głównego) z pliku." + +#: src/cryptsetup.c:3365 +msgid "Dump volume (master) key instead of keyslots info" +msgstr "Zrzut (głównego) klucza wolumenu zamiast informacji o kluczach" + +#: src/cryptsetup.c:3366 src/cryptsetup_reencrypt.c:1602 +msgid "The size of the encryption key" +msgstr "Rozmiar klucza szyfrującego" + +#: src/cryptsetup.c:3366 src/cryptsetup.c:3425 src/integritysetup.c:553 +#: src/integritysetup.c:557 src/integritysetup.c:561 +#: src/cryptsetup_reencrypt.c:1602 +msgid "BITS" +msgstr "BITÓW" + +#: src/cryptsetup.c:3367 src/cryptsetup_reencrypt.c:1618 +msgid "Limits the read from keyfile" +msgstr "Ograniczenie odczytu z pliku klucza" + +#: src/cryptsetup.c:3367 src/cryptsetup.c:3368 src/cryptsetup.c:3369 +#: src/cryptsetup.c:3370 src/cryptsetup.c:3373 src/cryptsetup.c:3422 +#: src/cryptsetup.c:3423 src/cryptsetup.c:3431 src/cryptsetup.c:3432 +#: src/veritysetup.c:432 src/veritysetup.c:433 src/veritysetup.c:434 +#: src/veritysetup.c:437 src/veritysetup.c:438 src/integritysetup.c:542 +#: src/integritysetup.c:548 src/integritysetup.c:549 +#: src/cryptsetup_reencrypt.c:1617 src/cryptsetup_reencrypt.c:1618 +#: src/cryptsetup_reencrypt.c:1619 src/cryptsetup_reencrypt.c:1620 +msgid "bytes" +msgstr "bajty" + +#: src/cryptsetup.c:3368 src/cryptsetup_reencrypt.c:1617 +msgid "Number of bytes to skip in keyfile" +msgstr "Liczba bajtów do pominięcia w pliku klucza" + +#: src/cryptsetup.c:3369 +msgid "Limits the read from newly added keyfile" +msgstr "Ograniczenie odczytu z nowo dodanego pliku klucza" + +#: src/cryptsetup.c:3370 +msgid "Number of bytes to skip in newly added keyfile" +msgstr "Liczba bajtów do pominięcia w nowo dodanym kluczu" + +#: src/cryptsetup.c:3371 +msgid "Slot number for new key (default is first free)" +msgstr "Numer dla nowego klucza (domyślny: pierwszy wolny)" + +#: src/cryptsetup.c:3372 +msgid "The size of the device" +msgstr "Rozmiar urządzenia" + +#: src/cryptsetup.c:3372 src/cryptsetup.c:3374 src/cryptsetup.c:3375 +#: src/cryptsetup.c:3381 src/integritysetup.c:543 src/integritysetup.c:550 +msgid "SECTORS" +msgstr "SEKTORÓW" + +#: src/cryptsetup.c:3373 src/cryptsetup_reencrypt.c:1620 +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:3374 +msgid "The start offset in the backend device" +msgstr "Offset początku na urządzeniu przechowującym" + +#: src/cryptsetup.c:3375 +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:3376 +msgid "Create a readonly mapping" +msgstr "Utworzenie odwzorowania tylko do odczytu" + +#: src/cryptsetup.c:3377 src/integritysetup.c:536 +#: src/cryptsetup_reencrypt.c:1608 +msgid "Do not ask for confirmation" +msgstr "Bez pytań o potwierdzenie" + +#: src/cryptsetup.c:3378 +msgid "Timeout for interactive passphrase prompt (in seconds)" +msgstr "Limit czasu przy interaktywnym pytaniu o hasło (w sekundach)" + +#: src/cryptsetup.c:3378 src/cryptsetup.c:3379 src/integritysetup.c:537 +#: src/cryptsetup_reencrypt.c:1609 +msgid "secs" +msgstr "s" + +#: src/cryptsetup.c:3379 src/integritysetup.c:537 +#: src/cryptsetup_reencrypt.c:1609 +msgid "Progress line update (in seconds)" +msgstr "Uaktualnianie wiersza postępu (w sekundach)" + +#: src/cryptsetup.c:3380 src/cryptsetup_reencrypt.c:1610 +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:3381 +msgid "Align payload at sector boundaries - for luksFormat" +msgstr "Wyrównanie danych do granicy sektorów - dla luksFormat" + +#: src/cryptsetup.c:3382 +msgid "File with LUKS header and keyslots backup" +msgstr "Plik z kopią zapasową nagłówka LUKS i kluczy" + +#: src/cryptsetup.c:3383 src/cryptsetup_reencrypt.c:1611 +msgid "Use /dev/random for generating volume key" +msgstr "Użycie /dev/random do wygenerowania klucza wolumenu" + +#: src/cryptsetup.c:3384 src/cryptsetup_reencrypt.c:1612 +msgid "Use /dev/urandom for generating volume key" +msgstr "Użycie /dev/urandom do wygenerowania klucza wolumenu" + +#: src/cryptsetup.c:3385 +msgid "Share device with another non-overlapping crypt segment" +msgstr "Współdzielenie urządzenia z innym, nie zachodzącym segmentem szyfrowanym" + +#: src/cryptsetup.c:3386 src/veritysetup.c:441 +msgid "UUID for device to use" +msgstr "UUID dla urządzenia, które ma być użyte" + +#: src/cryptsetup.c:3387 +msgid "Allow discards (aka TRIM) requests for device" +msgstr "Zezwolenie na żądania porzucenia (TRIM) dla urządzenia" + +#: src/cryptsetup.c:3388 src/cryptsetup_reencrypt.c:1629 +msgid "Device or file with separated LUKS header" +msgstr "Urządzenie lub plik z osobnym nagłówkiem LUKS" + +#: src/cryptsetup.c:3389 +msgid "Do not activate device, just check passphrase" +msgstr "Sprawdzenie hasła bez uaktywniania urządzenia" + +#: src/cryptsetup.c:3390 +msgid "Use hidden header (hidden TCRYPT device)" +msgstr "Użycie nagłówka ukrytego (ukrytego urządzenia TCRYPT)" + +#: src/cryptsetup.c:3391 +msgid "Device is system TCRYPT drive (with bootloader)" +msgstr "Urządzenie jest napędem systemowym TCRYPT (z bootloaderem)" + +#: src/cryptsetup.c:3392 +msgid "Use backup (secondary) TCRYPT header" +msgstr "Użycie zapasowego (drugiego) nagłówka TCRYPT" + +#: src/cryptsetup.c:3393 +msgid "Scan also for VeraCrypt compatible device" +msgstr "Wyszukiwanie także urządzeń zgodnych z VeraCryptem" + +#: src/cryptsetup.c:3394 +msgid "Personal Iteration Multiplier for VeraCrypt compatible device" +msgstr "PIM (osobisty mnożnik iteracji) dla urządzenia zgodnego z VeraCryptem" + +#: src/cryptsetup.c:3395 +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:3396 +msgid "Type of device metadata: luks, luks1, luks2, plain, loopaes, tcrypt" +msgstr "Typ metadanych urządzenia: luks, luks1, luks2, plain, loopaes, tcrypt" + +#: src/cryptsetup.c:3397 +msgid "Disable password quality check (if enabled)" +msgstr "Wyłączenie sprawdzania jakości hasła (jeśli włączone)" + +#: src/cryptsetup.c:3398 +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:3399 +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:3400 +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:3401 +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:3402 +msgid "PBKDF iteration time for LUKS (in ms)" +msgstr "Czas iteracji PBKDF dla LUKS (w milisekundach)" + +#: src/cryptsetup.c:3402 src/cryptsetup_reencrypt.c:1607 +msgid "msecs" +msgstr "ms" + +#: src/cryptsetup.c:3403 src/cryptsetup_reencrypt.c:1625 +msgid "PBKDF algorithm (for LUKS2): argon2i, argon2id, pbkdf2" +msgstr "Algorytm PBKDF (dla LUKS2): argon2i, argon2id, pbkdf2" + +#: src/cryptsetup.c:3404 src/cryptsetup_reencrypt.c:1626 +msgid "PBKDF memory cost limit" +msgstr "Limit kosztu pamięciowego PBKDF" + +#: src/cryptsetup.c:3404 src/cryptsetup_reencrypt.c:1626 +msgid "kilobytes" +msgstr "kilobajty" + +#: src/cryptsetup.c:3405 src/cryptsetup_reencrypt.c:1627 +msgid "PBKDF parallel cost" +msgstr "Koszt zrównoleglenia PBKDF" + +#: src/cryptsetup.c:3405 src/cryptsetup_reencrypt.c:1627 +msgid "threads" +msgstr "wątki" + +#: src/cryptsetup.c:3406 src/cryptsetup_reencrypt.c:1628 +msgid "PBKDF iterations cost (forced, disables benchmark)" +msgstr "Koszt iteracji PBKDF (wymuszony, wyłącza test wydajności)" + +#: src/cryptsetup.c:3407 +msgid "Keyslot priority: ignore, normal, prefer" +msgstr "Priorytet klucza: ignore, normal, prefer" + +#: src/cryptsetup.c:3408 +msgid "Disable locking of on-disk metadata" +msgstr "Wyłączenie blokowania metadanych na dysku" + +#: src/cryptsetup.c:3409 +msgid "Disable loading volume keys via kernel keyring" +msgstr "Wyłączenie ładowania kluczy wolumenu przez pęk kluczy w jądrze" + +#: src/cryptsetup.c:3410 +msgid "Data integrity algorithm (LUKS2 only)" +msgstr "Algorytm integralności danych (tylko LUKS2)" + +#: src/cryptsetup.c:3411 src/integritysetup.c:564 +msgid "Disable journal for integrity device" +msgstr "Wyłączenie kroniki dla urządzenia integralności" + +#: src/cryptsetup.c:3412 src/integritysetup.c:538 +msgid "Do not wipe device after format" +msgstr "Bez wymazania urządzenia po formatowaniu" + +#: src/cryptsetup.c:3413 +msgid "Do not ask for passphrase if activation by token fails" +msgstr "Bez pytania o hasło, jeśli aktywacja przy użyciu tokenu się nie powiedzie" + +#: src/cryptsetup.c:3414 +msgid "Token number (default: any)" +msgstr "Numer tokenu (domyślnie: dowolny)" + +#: src/cryptsetup.c:3415 +msgid "Key description" +msgstr "Opis klucza" + +#: src/cryptsetup.c:3416 +msgid "Encryption sector size (default: 512 bytes)" +msgstr "Rozmiar sektora szyfrowania (domyślnie: 512 bajtów)" + +#: src/cryptsetup.c:3417 +msgid "Set activation flags persistent for device" +msgstr "Trwałe ustawienie flag aktywowania dla urządzenia" + +#: src/cryptsetup.c:3418 +msgid "Set label for the LUKS2 device" +msgstr "Ustawienie etykiety dla urządzenia LUKS2" + +#: src/cryptsetup.c:3419 +msgid "Set subsystem label for the LUKS2 device" +msgstr "Ustawienie etykiety podsystemu dla urządzenia LUKS2" + +#: src/cryptsetup.c:3420 +msgid "Create unbound (no assigned data segment) LUKS2 keyslot" +msgstr "Utworzenie nie powiązanego (z segmentem danych) klucza LUKS2" + +#: src/cryptsetup.c:3421 +msgid "Read or write the json from or to a file" +msgstr "Odczyt lub zapis danych JSON z/do pliku" + +#: src/cryptsetup.c:3422 +msgid "LUKS2 header metadata area size" +msgstr "Rozmiar obszaru metadanych nagłówka LUKS2" + +#: src/cryptsetup.c:3423 +msgid "LUKS2 header keyslots area size" +msgstr "Rozmiar obszaru kluczy nagłówka LUKS2" + +#: src/cryptsetup.c:3424 +msgid "Refresh (reactivate) device with new parameters" +msgstr "Odświeżenie (ponowna aktywacja) urządzenia z nowymi parametrami" + +#: src/cryptsetup.c:3425 +msgid "LUKS2 keyslot: The size of the encryption key" +msgstr "Klucz LUKS2: rozmiar klucza szyfrującego" + +#: src/cryptsetup.c:3426 +msgid "LUKS2 keyslot: The cipher used for keyslot encryption" +msgstr "Klucz LUKS2: szyfr używany do szyfrowania kluczy" + +#: src/cryptsetup.c:3427 +msgid "Encrypt LUKS2 device (in-place encryption)." +msgstr "Szyfrowanie urządzenia LUKS2 (w miejscu)." + +#: src/cryptsetup.c:3428 +msgid "Decrypt LUKS2 device (remove encryption)." +msgstr "Odszyfrowanie urządzenia LUKS2 (usunięcie szyfrowania)." + +#: src/cryptsetup.c:3429 +msgid "Initialize LUKS2 reencryption in metadata only." +msgstr "Zainicjowanie ponownego szyfrowania LUKS2 wyłącznie w metadanych." + +#: src/cryptsetup.c:3430 +msgid "Resume initialized LUKS2 reencryption only." +msgstr "Wyłącznie wznowienie zainicjowanego ponownego szyfrowania LUKS2." + +#: src/cryptsetup.c:3431 src/cryptsetup_reencrypt.c:1619 +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:3432 +msgid "Maximal reencryption hotzone size." +msgstr "Maksymalny rozmiar strefy hotzone ponownego szyfrowania." + +#: src/cryptsetup.c:3433 +msgid "Reencryption hotzone resilience type (checksum,journal,none)" +msgstr "Typ odporności strefy hotzone ponownego szyfrowania (checksum, journal, none)" + +#: src/cryptsetup.c:3434 +msgid "Reencryption hotzone checksums hash" +msgstr "Skrót sum kontrolknych strefy hotzone ponownego szyfrowania" + +#: src/cryptsetup.c:3435 +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:3451 src/veritysetup.c:462 src/integritysetup.c:583 +msgid "[OPTION...] " +msgstr "[OPCJA...] " + +#: src/cryptsetup.c:3502 src/veritysetup.c:496 src/integritysetup.c:594 +msgid "Argument missing." +msgstr "Brak argumentu ." + +#: src/cryptsetup.c:3565 src/veritysetup.c:527 src/integritysetup.c:625 +msgid "Unknown action." +msgstr "Nieznana akcja." + +#: src/cryptsetup.c:3575 +msgid "Parameter --refresh is only allowed with open or refresh commands.\n" +msgstr "Parametr --refresh jest dozwolony tylko dla operacji otwarcia i odświeżenia.\n" + +#: src/cryptsetup.c:3580 +msgid "Options --refresh and --test-passphrase are mutually exclusive.\n" +msgstr "Opcje --refresh i --test-passphrase wykluczają się wzajemnie.\n" + +#: src/cryptsetup.c:3585 +msgid "Option --deferred is allowed only for close command.\n" +msgstr "Opcja --deferred jest dozwolona tylko dla operacji zamknięcia.\n" + +#: src/cryptsetup.c:3590 +msgid "Option --shared is allowed only for open of plain device.\n" +msgstr "Opcja --shared jest dozwolona tylko dla operacji otwarcia zwykłego urządzenia.\n" + +#: src/cryptsetup.c:3595 +msgid "Option --allow-discards is allowed only for open operation.\n" +msgstr "Opcja --allow-discards jest dozwolona tylko dla operacji otwarcia.\n" + +#: src/cryptsetup.c:3600 +msgid "Option --persistent is allowed only for open operation.\n" +msgstr "Opcja --persistent jest dozwolona tylko dla operacji otwarcia.\n" + +#: src/cryptsetup.c:3605 +msgid "Option --serialize-memory-hard-pbkdf is allowed only for open operation.\n" +msgstr "Opcja --serialize-memory-hard-pbkdf jest dozwolona tylko dla operacji otwarcia.\n" + +#: src/cryptsetup.c:3610 +msgid "Option --persistent is not allowed with --test-passphrase.\n" +msgstr "Opcja --persistent nie jest dozwolona z --test-passphrase.\n" + +#: src/cryptsetup.c:3620 +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 "" +"Opcja --key-size jest dozwolona tylko dla operacji luksFormat, luksAddKey,\n" +"open i benchmark. Aby ograniczyć odczyt z pliku klucza, należy użyć\n" +"--keyfile-size=(bajty)." + +#: src/cryptsetup.c:3626 +msgid "Option --integrity is allowed only for luksFormat (LUKS2).\n" +msgstr "Opcja --integrity jest dozwolona tylko dla operacji luksFormat (LUKS2).\n" + +#: src/cryptsetup.c:3631 +msgid "Option --integrity-no-wipe can be used only for format action with integrity extension.\n" +msgstr "Opcja --integrity-no-wipe może być użyta tylko do akcji formatowania z rozszerzeniem integralności.\n" + +#: src/cryptsetup.c:3637 +msgid "Options --label and --subsystem are allowed only for luksFormat and config LUKS2 operations.\n" +msgstr "Opcje --label i --subsystem są dozwolone tylko dla operacji LUKS2 luksFormat i config.\n" + +#: src/cryptsetup.c:3643 +msgid "Option --test-passphrase is allowed only for open of LUKS and TCRYPT devices.\n" +msgstr "Opcja --test-passphrase jest dozwolona tylko przy otwieraniu urządzeń LUKS i TRCYPT.\n" + +#: src/cryptsetup.c:3648 src/cryptsetup_reencrypt.c:1692 +msgid "Key size must be a multiple of 8 bits" +msgstr "Rozmiar klucza musi być wielokrotnością 8 bitów" + +#: src/cryptsetup.c:3654 src/cryptsetup_reencrypt.c:1378 +#: src/cryptsetup_reencrypt.c:1697 +msgid "Key slot is invalid." +msgstr "Numer klucza jest nieprawidłowy." + +#: src/cryptsetup.c:3661 +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:3668 src/veritysetup.c:539 src/integritysetup.c:649 +#: src/cryptsetup_reencrypt.c:1671 +msgid "Negative number for option not permitted." +msgstr "Liczba ujemna nie jest dozwolona dla tej opcji." + +#: src/cryptsetup.c:3672 +msgid "Only one --key-file argument is allowed." +msgstr "Dozwolony jest tylko jeden argument --key-file." + +#: src/cryptsetup.c:3676 src/cryptsetup_reencrypt.c:1663 +#: src/cryptsetup_reencrypt.c:1701 +msgid "Only one of --use-[u]random options is allowed." +msgstr "Dozwolona jest tylko jedna z opcji --use-[u]random." + +#: src/cryptsetup.c:3680 +msgid "Option --use-[u]random is allowed only for luksFormat." +msgstr "Opcja --use-[u]random jest dozwolona tylko dla operacji luksFormat." + +#: src/cryptsetup.c:3684 +msgid "Option --uuid is allowed only for luksFormat and luksUUID." +msgstr "Opcja --uuid jest dozwolona tylko dla operacji luksFormat i luksUUID." + +#: src/cryptsetup.c:3688 +msgid "Option --align-payload is allowed only for luksFormat." +msgstr "Opcja --align-payload jest dozwolona tylko dla operacji luksFormat." + +#: src/cryptsetup.c:3692 +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:3697 +msgid "Invalid LUKS2 metadata size specification." +msgstr "Błędne określenie rozmiaru metadanych LUKS2." + +#: src/cryptsetup.c:3701 +msgid "Invalid LUKS2 keyslots size specification." +msgstr "Błędne określenie rozmiaru kluczy LUKS2." + +#: src/cryptsetup.c:3705 +msgid "Options --align-payload and --offset cannot be combined." +msgstr "Opcji --align-payload i --offset nie można łączyć." + +#: src/cryptsetup.c:3711 +msgid "Option --skip is supported only for open of plain and loopaes devices.\n" +msgstr "Opcja --skip jest obsługiwana tylko przy otwieraniu urządzeń plain i loopaes.\n" + +#: src/cryptsetup.c:3718 +msgid "Option --offset is supported only for open of plain and loopaes devices, luksFormat and device reencryption.\n" +msgstr "Opcja --offset jest obsługiwana tylko przy otwieraniu urządzeń plain i loopaes oraz dla operacji luksFormat i ponownego szyfrowania.\n" + +#: src/cryptsetup.c:3724 +msgid "Option --tcrypt-hidden, --tcrypt-system or --tcrypt-backup is supported only for TCRYPT device.\n" +msgstr "Opcje --tcrypt-hidden, --tcrypt-system i --tcrypt-backup są obsługiwane tylko dla urządzeń TCRYPT.\n" + +#: src/cryptsetup.c:3729 +msgid "Option --tcrypt-hidden cannot be combined with --allow-discards.\n" +msgstr "Opcji --tcrypt-hidden nie można łączyć z --allow-discards.\n" + +#: src/cryptsetup.c:3734 +msgid "Option --veracrypt is supported only for TCRYPT device type.\n" +msgstr "Opcja --veracrypt jest obsługiwana tylko dla typu urządzeń TCRYPT.\n" + +#: src/cryptsetup.c:3740 +msgid "Invalid argument for parameter --veracrypt-pim supplied.\n" +msgstr "Podano błędny argument dla parametru --veracrypt-pim.\n" + +#: src/cryptsetup.c:3744 +msgid "Option --veracrypt-pim is supported only for VeraCrypt compatible devices.\n" +msgstr "Opcja --veracrypt-pim jest obsługiwana tylko dla urządzeń zgodnych z VeraCryptem.\n" + +#: src/cryptsetup.c:3752 +msgid "Option --veracrypt-query-pim is supported only for VeraCrypt compatible devices.\n" +msgstr "Opcja --veracrypt-query-pim jest obsługiwana tylko dla urządzeń zgodnych z VeraCryptem.\n" + +#: src/cryptsetup.c:3756 +msgid "The options --veracrypt-pim and --veracrypt-query-pim are mutually exclusive.\n" +msgstr "Opcje --veracrypt-pim i --veracrypt-query-pim wykluczają się wzajemnie.\n" + +#: src/cryptsetup.c:3763 +msgid "Option --priority can be only ignore/normal/prefer.\n" +msgstr "Opcja --priority może mieć wartości tylko ignore/normal/prefer.\n" + +#: src/cryptsetup.c:3768 +msgid "Keyslot specification is required.\n" +msgstr "Wymagane jest określenie klucza.\n" + +#: src/cryptsetup.c:3773 src/cryptsetup_reencrypt.c:1677 +msgid "Password-based key derivation function (PBKDF) can be only pbkdf2 or argon2i/argon2id.\n" +msgstr "Funkcja pochodna klucza oparta na haśle (PBKDF) może być tylko pbkdf2 lub argon2i/argon2id.\n" + +#: src/cryptsetup.c:3778 src/cryptsetup_reencrypt.c:1682 +msgid "PBKDF forced iterations cannot be combined with iteration time option.\n" +msgstr "Wymuszonych iteracji PBKDF nie można łączyć z opcją czasu iteracji.\n" + +#: src/cryptsetup.c:3784 +msgid "Sector size option is not supported for this command.\n" +msgstr "Opcja rozmiaru sektora nie jest obsługiwana dla tego polecenia.\n" + +#: src/cryptsetup.c:3790 +msgid "Unsupported encryption sector size.\n" +msgstr "Nieobsługiwany rozmiar sektora szyfrowania.\n" + +#: src/cryptsetup.c:3795 +msgid "Key size is required with --unbound option.\n" +msgstr "Przy opcji --unbound wymagany jest rozmiar klucza.\n" + +#: src/cryptsetup.c:3800 +msgid "Option --unbound may be used only with luksAddKey action.\n" +msgstr "Opcja --unbound może być użyta tylko z akcją luksAddKey.\n" + +#: src/cryptsetup.c:3805 +msgid "Option --refresh may be used only with open action.\n" +msgstr "Opcja --refresh może być użyta tylko dla akcji otwierania.\n" + +#: src/cryptsetup.c:3816 +msgid "Cannot disable metadata locking.\n" +msgstr "Nie można wyłączyć blokowania metadanych.\n" + +#: src/cryptsetup.c:3826 +msgid "Invalid max reencryption hotzone size specification." +msgstr "Błędne określenie maksymalnego rozmiaru strefy hotzone ponownego szyfrowania." + +#: src/cryptsetup.c:3834 src/cryptsetup_reencrypt.c:1706 +#: src/cryptsetup_reencrypt.c:1711 +msgid "Invalid device size specification." +msgstr "Błędne określenie rozmiaru urządzenia." + +#: src/cryptsetup.c:3837 +msgid "Maximum device reduce size is 1 GiB." +msgstr "Maksymalna wartość ograniczenia rozmiaru urządzenia to 1GiB." + +#: src/cryptsetup.c:3840 src/cryptsetup_reencrypt.c:1717 +msgid "Reduce size must be multiple of 512 bytes sector." +msgstr "Rozmiar ograniczenia musi być wielokrotnością 512-bajtowego sektora." + +#: src/cryptsetup.c:3845 +msgid "Invalid data size specification." +msgstr "Błędne określenie rozmiaru danych." + +#: src/cryptsetup.c:3850 +msgid "Reduce size overflow." +msgstr "Zmniejszenie przepełnienia rozmiaru." + +#: src/cryptsetup.c:3854 +msgid "LUKS2 decryption requires option --header." +msgstr "Odszyfrowanie LUKS2 wymaga opcji --header." + +#: src/cryptsetup.c:3858 +msgid "Device size must be multiple of 512 bytes sector." +msgstr "Rozmiar urządzenia musi być wielokrotnością 512-bajtowego sektora." + +#: src/cryptsetup.c:3862 +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:3866 +msgid "Options --device-size and --size cannot be combined." +msgstr "Opcji --device-size i --size nie można łączyć." + +#: src/veritysetup.c:65 +msgid "Invalid salt string specified." +msgstr "Podano błędny łańcuch zarodka." + +#: src/veritysetup.c:96 +#, c-format +msgid "Cannot create hash image %s for writing." +msgstr "Nie można utworzyć obrazu hasza %s do zapisu." + +#: src/veritysetup.c:106 +#, c-format +msgid "Cannot create FEC image %s for writing." +msgstr "Nie można utworzyć obrazu FEC %s do zapisu." + +#: src/veritysetup.c:176 +msgid "Invalid root hash string specified." +msgstr "Podano błędny łańcuch głównego hasza." + +#: src/veritysetup.c:356 +msgid " " +msgstr " " + +#: src/veritysetup.c:356 src/integritysetup.c:469 +msgid "format device" +msgstr "sformatowanie urządzenia" + +#: src/veritysetup.c:357 +msgid " " +msgstr " " + +#: src/veritysetup.c:357 +msgid "verify device" +msgstr "weryfikacja urządzenia" + +#: src/veritysetup.c:358 +msgid " " +msgstr " " + +#: src/veritysetup.c:360 src/integritysetup.c:472 +msgid "show active device status" +msgstr "pokazanie stanu aktywnego urządzenia" + +#: src/veritysetup.c:361 +msgid "" +msgstr "" + +#: src/veritysetup.c:361 src/integritysetup.c:473 +msgid "show on-disk information" +msgstr "wyświetlenie informacji z dysku" + +#: src/veritysetup.c:380 +#, c-format +msgid "" +"\n" +" is the device to create under %s\n" +" is the data device\n" +" is the device containing verification data\n" +" hash of the root node on \n" +msgstr "" +"\n" +" to urządzenie do utworzenia pod %s\n" +" to urządzenie z danymi\n" +" to urządzenie zawierające dane weryfikacyjne\n" +" to hasz głównego węzła na \n" + +#: src/veritysetup.c:387 +#, c-format +msgid "" +"\n" +"Default compiled-in dm-verity parameters:\n" +"\tHash: %s, Data block (bytes): %u, Hash block (bytes): %u, Salt size: %u, Hash format: %u\n" +msgstr "" +"\n" +"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:430 +msgid "Do not use verity superblock" +msgstr "Nieużywanie superbloku VERITY" + +#: src/veritysetup.c:431 +msgid "Format type (1 - normal, 0 - original Chrome OS)" +msgstr "Typ formatu (1 - normalny, 0 - oryginalny Chrome OS)" + +#: src/veritysetup.c:431 +msgid "number" +msgstr "liczba" + +#: src/veritysetup.c:432 +msgid "Block size on the data device" +msgstr "Rozmiar bloku na urządzeniu z danymi" + +#: src/veritysetup.c:433 +msgid "Block size on the hash device" +msgstr "Rozmiar bloku na urządzeniu z haszami" + +#: src/veritysetup.c:434 +msgid "FEC parity bytes" +msgstr "bajty parzystości FEC" + +#: src/veritysetup.c:435 +msgid "The number of blocks in the data file" +msgstr "Liczba bloków w pliku danych" + +#: src/veritysetup.c:435 +msgid "blocks" +msgstr "bloki" + +#: src/veritysetup.c:436 +msgid "Path to device with error correction data" +msgstr "Ścieżka do urządzenia z danymi korekcji błędów" + +#: src/veritysetup.c:436 src/integritysetup.c:540 +msgid "path" +msgstr "ścieżka" + +#: src/veritysetup.c:437 +msgid "Starting offset on the hash device" +msgstr "Offset początku na urządzeniu z haszami" + +#: src/veritysetup.c:438 +msgid "Starting offset on the FEC device" +msgstr "Offset początku na urządzeniu FEC" + +#: src/veritysetup.c:439 +msgid "Hash algorithm" +msgstr "Algorytm skrótu" + +#: src/veritysetup.c:439 +msgid "string" +msgstr "łańcuch" + +#: src/veritysetup.c:440 +msgid "Salt" +msgstr "Zarodek" + +#: src/veritysetup.c:440 +msgid "hex string" +msgstr "Łańcuch szesnastkowy" + +#: src/veritysetup.c:442 +msgid "Restart kernel if corruption is detected" +msgstr "Restart jądra po wykryciu uszkodzenia" + +#: src/veritysetup.c:443 +msgid "Ignore corruption, log it only" +msgstr "Zignotowanie uszkodzenia, jedynie logowanie" + +#: src/veritysetup.c:444 +msgid "Do not verify zeroed blocks" +msgstr "Bez weryfikacji wyzerowanych bloków" + +#: src/veritysetup.c:445 +msgid "Verify data block only the first time it is read" +msgstr "Sprawdzenie bloku danych tylko przy pierwszym odczycie" + +#: src/veritysetup.c:545 +msgid "Option --ignore-corruption, --restart-on-corruption or --ignore-zero-blocks is allowed only for open operation.\n" +msgstr "Opcje --ignore-corruption, --restart-on-corruption oraz --ignore-zero-blocks są dozwolone tylko przy operacji otwierania.\n" + +#: src/veritysetup.c:550 +msgid "Option --ignore-corruption and --restart-on-corruption cannot be used together.\n" +msgstr "Opcji --ignore-corruption oraz --restart-on-corruption nie można użyć naraz.\n" + +#: src/integritysetup.c:83 src/utils_password.c:305 +#, c-format +msgid "Cannot read keyfile %s." +msgstr "Nie można odczytać pliku klucza %s." + +#: src/integritysetup.c:87 src/utils_password.c:310 +#, c-format +msgid "Cannot read %d bytes from keyfile %s." +msgstr "Nie można odczytać %d bajtów z pliku klucza %s." + +#: src/integritysetup.c:250 +#, c-format +msgid "Formatted with tag size %u, internal integrity %s.\n" +msgstr "Sformatowano z rozmiarem znacznika %u, wewnętrzna integralność %s.\n" + +#: src/integritysetup.c:469 src/integritysetup.c:473 +msgid "" +msgstr "" + +#: src/integritysetup.c:470 +msgid " " +msgstr " " + +#: src/integritysetup.c:492 +#, c-format +msgid "" +"\n" +" is the device to create under %s\n" +" is the device containing data with integrity tags\n" +msgstr "" +"\n" +" to urządzenie do utworzenia pod %s\n" +" to urządzenie zawierające dane ze znacznikami integralności\n" + +#: src/integritysetup.c:497 +#, c-format +msgid "" +"\n" +"Default compiled-in dm-integrity parameters:\n" +"\tTag size: %u bytes, Checksum algorithm: %s\n" +msgstr "" +"\n" +"Domyślnie wkompilowane parametry dm-integrity:\n" +"\tRozmiar znacznika (bajtów): %u, algorytm sumy kontrolnej: %s\n" + +#: src/integritysetup.c:540 +msgid "Path to data device (if separated)" +msgstr "Ścieżka do urządzenia danych (jeśli osobne)" + +#: src/integritysetup.c:542 +msgid "Journal size" +msgstr "Rozmiar kroniki" + +#: src/integritysetup.c:543 +msgid "Interleave sectors" +msgstr "Sektory przeplotu" + +#: src/integritysetup.c:544 +msgid "Journal watermark" +msgstr "Znak wodny kroniki" + +#: src/integritysetup.c:544 +msgid "percent" +msgstr "procent" + +#: src/integritysetup.c:545 +msgid "Journal commit time" +msgstr "Czas zatwierdzania kroniki" + +#: src/integritysetup.c:545 src/integritysetup.c:547 +msgid "ms" +msgstr "ms" + +#: src/integritysetup.c:546 +msgid "Number of 512-byte sectors per bit (bitmap mode)." +msgstr "Liczba 512-bajtowych sektorów na bit (tryb bitmapy)." + +#: src/integritysetup.c:547 +msgid "Bitmap mode flush time" +msgstr "Czas zrzutu trybu bitmapy" + +#: src/integritysetup.c:548 +msgid "Tag size (per-sector)" +msgstr "Rozmiar znacznika (na sektor)" + +#: src/integritysetup.c:549 +msgid "Sector size" +msgstr "Rozmiar sektora" + +#: src/integritysetup.c:550 +msgid "Buffers size" +msgstr "Rozmiar buforów" + +#: src/integritysetup.c:552 +msgid "Data integrity algorithm" +msgstr "Algorytm integralności danych" + +#: src/integritysetup.c:553 +msgid "The size of the data integrity key" +msgstr "Rozmiar klucza integralności danych" + +#: src/integritysetup.c:554 +msgid "Read the integrity key from a file" +msgstr "Odczyt klucza integralności z pliku" + +#: src/integritysetup.c:556 +msgid "Journal integrity algorithm" +msgstr "Algorytm integralności kroniki" + +#: src/integritysetup.c:557 +msgid "The size of the journal integrity key" +msgstr "Rozmiar klucza integralności kroniki" + +#: src/integritysetup.c:558 +msgid "Read the journal integrity key from a file" +msgstr "Odczyt klucza integralności z pliku" + +#: src/integritysetup.c:560 +msgid "Journal encryption algorithm" +msgstr "Algorytm szyfrowania kroniki" + +#: src/integritysetup.c:561 +msgid "The size of the journal encryption key" +msgstr "Rozmiar klucza szyfrowania kroniki" + +#: src/integritysetup.c:562 +msgid "Read the journal encryption key from a file" +msgstr "Odczyt klucza szyfrującego kroniki z pliku" + +#: src/integritysetup.c:565 +msgid "Recovery mode (no journal, no tag checking)" +msgstr "Tryb odtwarzania (bez kroniki, bez sprawdzania znaczników)" + +#: src/integritysetup.c:566 +msgid "Use bitmap to track changes and disable journal for integrity device" +msgstr "Użycie bitmapy do śledzenia zmian i wyłączenie kroniki dla urządzenia integralności" + +#: src/integritysetup.c:567 +msgid "Recalculate initial tags automatically." +msgstr "Automatyczne przeliczenie znaczników początkowych." + +#: src/integritysetup.c:640 +msgid "Option --integrity-recalculate can be used only for open action." +msgstr "Opcja --integrity-recalculate może być użyta tylko dla akcji otwierania." + +#: src/integritysetup.c:655 +msgid "Options --journal-size, --interleave-sectors, --sector-size, --tag-size and --no-wipe can be used only for format action.\n" +msgstr "Opcje --journal-size, --interleave-sectors, --sector-size, --tag-size oraz --no-wipe mogą być użyte tylko dla akcji formatowania.\n" + +#: src/integritysetup.c:661 +msgid "Invalid journal size specification." +msgstr "Błędne określenie rozmiaru kroniki." + +#: src/integritysetup.c:666 +msgid "Both key file and key size options must be specified." +msgstr "Muszą być podane obie opcje: pliku klucza i rozmiaru klucza." + +#: src/integritysetup.c:669 +msgid "Integrity algorithm must be specified if integrity key is used." +msgstr "Algorytm integralności musi być podany, jeśli używany jest klucz integralności." + +#: src/integritysetup.c:674 +msgid "Both journal integrity key file and key size options must be specified." +msgstr "Muszą być podane obie opcje: pliku klucza integralności i rozmiaru klucza." + +#: src/integritysetup.c:677 +msgid "Journal integrity algorithm must be specified if journal integrity key is used." +msgstr "Algorytm integralności kroniki musi być podany, jeśli używany jest klucz integralności kroniki." + +#: src/integritysetup.c:682 +msgid "Both journal encryption key file and key size options must be specified." +msgstr "Muszą być podane obie opcje: pliku szyfrowania kroniki i rozmiaru klucza." + +#: src/integritysetup.c:685 +msgid "Journal encryption algorithm must be specified if journal encryption key is used." +msgstr "Algorytm szyfrowania kroniki musi być podany, jeśli używany jest klucz szyfrowania kroniki." + +#: src/integritysetup.c:689 +msgid "Recovery and bitmap mode options are mutually exclusive." +msgstr "Opcje trybu odtwarzania i bitmapy wykluczają się wzajemnie." + +#: src/integritysetup.c:693 +msgid "Journal options cannot be used in bitmap mode." +msgstr "Opcji kroniki nie można używać w trybie bitmapy." + +#: src/integritysetup.c:697 +msgid "Bitmap options can be used only in bitmap mode." +msgstr "Opcje bitmapy mogą być używane tylko w trybie bitmapy." + +#: src/cryptsetup_reencrypt.c:172 +msgid "Reencryption already in-progress." +msgstr "Ponowne szyfrowanie już trwa." + +#: src/cryptsetup_reencrypt.c:201 +#, c-format +msgid "Cannot exclusively open %s, device in use." +msgstr "Nie można otworzyć %s w trybie wyłącznym, urządzenie jest w użyciu." + +#: src/cryptsetup_reencrypt.c:215 src/cryptsetup_reencrypt.c:1127 +msgid "Allocation of aligned memory failed." +msgstr "Przydzielenie wyrównanego obszaru pamięci nie powiodło się." + +#: src/cryptsetup_reencrypt.c:222 +#, c-format +msgid "Cannot read device %s." +msgstr "Nie można odczytać urządzenia %s." + +#: src/cryptsetup_reencrypt.c:233 +#, c-format +msgid "Marking LUKS1 device %s unusable." +msgstr "Oznaczanie urządzenia LUKS1 %s jako bezużytecznego." + +#: src/cryptsetup_reencrypt.c:237 +#, c-format +msgid "Setting LUKS2 offline reencrypt flag on device %s." +msgstr "Ustawianie flagi ponownego szyfrowania offline LUKS2 na urządzeniu %s." + +#: src/cryptsetup_reencrypt.c:254 +#, c-format +msgid "Cannot write device %s." +msgstr "Nie można zapisać na urządzenie %s." + +#: src/cryptsetup_reencrypt.c:302 +msgid "Cannot write reencryption log file." +msgstr "Nie można zapisać pliku logu ponownego szyfrowania." + +#: src/cryptsetup_reencrypt.c:358 +msgid "Cannot read reencryption log file." +msgstr "Nie można odczytać pliku logu ponownego szyfrowania." + +#: src/cryptsetup_reencrypt.c:396 +#, c-format +msgid "Log file %s exists, resuming reencryption.\n" +msgstr "Plik logu %s istnieje, wznowienie ponownego szyfrowania.\n" + +#: src/cryptsetup_reencrypt.c:445 +msgid "Activating temporary device using old LUKS header." +msgstr "Aktywacja urządzenia tymczasowego przy użyciu starego nagłówka LUKS." + +#: src/cryptsetup_reencrypt.c:455 +msgid "Activating temporary device using new LUKS header." +msgstr "Aktywacja urządzenia tymczasowego przy użyciu nowego nagłówka LUKS." + +#: src/cryptsetup_reencrypt.c:465 +msgid "Activation of temporary devices failed." +msgstr "Aktywacja urządzeń tymczasowych nie powiodła się." + +#: src/cryptsetup_reencrypt.c:551 +msgid "Failed to set data offset." +msgstr "Nie udało się ustawić offsetu danych." + +#: src/cryptsetup_reencrypt.c:557 +msgid "Failed to set metadata size." +msgstr "Nie udało się ustawić rozmiaru metadanych." + +#: src/cryptsetup_reencrypt.c:565 +#, c-format +msgid "New LUKS header for device %s created." +msgstr "Utworzono nowy nagłówek LUKS dla urządzenia %s." + +#: src/cryptsetup_reencrypt.c:625 +#, c-format +msgid "This version of cryptsetup-reencrypt can't handle new internal token type %s." +msgstr "Ta wersja cryptsetup-reencrypt nie obsługuje nowego typu tokenu wewnętrznego %s." + +#: src/cryptsetup_reencrypt.c:647 +msgid "Failed to read activation flags from backup header." +msgstr "Nie udało się odczytać flag aktywacji z nagłówka zapasowego." + +#: src/cryptsetup_reencrypt.c:651 +msgid "Failed to write activation flags to new header." +msgstr "Nie udało się zapisać flag aktywacji w nowym nagłówku." + +#: src/cryptsetup_reencrypt.c:655 src/cryptsetup_reencrypt.c:659 +msgid "Failed to read requirements from backup header." +msgstr "Nie udało się odczytać wymagań z nagłówka zapasowego." + +#: src/cryptsetup_reencrypt.c:697 +#, c-format +msgid "%s header backup of device %s created." +msgstr "Utworzono kopię zapasową nagłówka %s urządzenia %s." + +#: src/cryptsetup_reencrypt.c:760 +msgid "Creation of LUKS backup headers failed." +msgstr "Tworzenie kopii zapasowych nagłówków LUKS nie powiodło się." + +#: src/cryptsetup_reencrypt.c:893 +#, c-format +msgid "Cannot restore %s header on device %s." +msgstr "Nie można odtworzyć nagłówka %s na urządzeniu %s." + +#: src/cryptsetup_reencrypt.c:895 +#, c-format +msgid "%s header on device %s restored." +msgstr "Odtworzono nagłówek %s na urządzeniu %s." + +#: src/cryptsetup_reencrypt.c:1099 src/cryptsetup_reencrypt.c:1105 +msgid "Cannot open temporary LUKS device." +msgstr "Nie można otworzyć tymczasowego urządzenia LUKS." + +#: src/cryptsetup_reencrypt.c:1110 src/cryptsetup_reencrypt.c:1115 +msgid "Cannot get device size." +msgstr "Nie można pobrać rozmiaru urządzenia." + +#: src/cryptsetup_reencrypt.c:1150 +msgid "IO error during reencryption." +msgstr "Błąd we/wy podczas ponownego szyfrowania." + +#: src/cryptsetup_reencrypt.c:1181 +msgid "Provided UUID is invalid." +msgstr "Dostarczony UUID jest nieprawidłowy." + +#: src/cryptsetup_reencrypt.c:1407 +msgid "Cannot open reencryption log file." +msgstr "Nie można otworzyć pliku logu ponownego szyfrowania." + +#: src/cryptsetup_reencrypt.c:1413 +msgid "No decryption in progress, provided UUID can be used only to resume suspended decryption process." +msgstr "Nie w trakcie odszyfrowywania; dostarczony UUID może być użyty tylko do wznowienia wstrzymanego procesu odszyfrowywania." + +#: src/cryptsetup_reencrypt.c:1488 +#, c-format +msgid "Changed pbkdf parameters in keyslot %i." +msgstr "Zmieniono parametry PBKDF dla klucza %i." + +#: src/cryptsetup_reencrypt.c:1600 +msgid "Reencryption block size" +msgstr "Rozmiar bloku ponownego szyfrowania" + +#: src/cryptsetup_reencrypt.c:1600 +msgid "MiB" +msgstr "MiB" + +#: src/cryptsetup_reencrypt.c:1604 +msgid "Do not change key, no data area reencryption" +msgstr "Bez zmiany klucza i ponownego szyfrowania obszaru danych" + +#: src/cryptsetup_reencrypt.c:1606 +msgid "Read new volume (master) key from file" +msgstr "Odczyt nowego klucza wolumenu (klucza głównego) z pliku" + +#: src/cryptsetup_reencrypt.c:1607 +msgid "PBKDF2 iteration time for LUKS (in ms)" +msgstr "Czas iteracji PBKDF2 dla LUKS (w milisekundach)" + +#: src/cryptsetup_reencrypt.c:1613 +msgid "Use direct-io when accessing devices" +msgstr "Użycie bezpośredniego we/wy przy dostępie do urządzeń" + +#: src/cryptsetup_reencrypt.c:1614 +msgid "Use fsync after each block" +msgstr "Użycie fsync po każdym bloku" + +#: src/cryptsetup_reencrypt.c:1615 +msgid "Update log file after every block" +msgstr "Uaktualnianie pliku logu po każdym bloku" + +#: src/cryptsetup_reencrypt.c:1616 +msgid "Use only this slot (others will be disabled)" +msgstr "Użycie tylko tego slotu (wyłączenie pozostałych)" + +#: src/cryptsetup_reencrypt.c:1621 +msgid "Create new header on not encrypted device" +msgstr "Utworzenie nowego nagłówka na nieszyfrowanym urządzeniu" + +#: src/cryptsetup_reencrypt.c:1622 +msgid "Permanently decrypt device (remove encryption)" +msgstr "Trwałe odszyfrowanie urządzenia (usunięcie szyfrowania)" + +#: src/cryptsetup_reencrypt.c:1623 +msgid "The UUID used to resume decryption" +msgstr "UUID używany do wznowienia odszyfrowywania" + +#: src/cryptsetup_reencrypt.c:1624 +msgid "Type of LUKS metadata: luks1, luks2" +msgstr "Typ metadanych LUKS: luks1, luks2" + +#: src/cryptsetup_reencrypt.c:1643 +msgid "[OPTION...] " +msgstr "[OPCJA...] " + +#: src/cryptsetup_reencrypt.c:1651 +#, c-format +msgid "Reencryption will change: %s%s%s%s%s%s." +msgstr "Ponowne szyfrowanie zmieni: %s%s%s%s%s%s." + +#: src/cryptsetup_reencrypt.c:1652 +msgid "volume key" +msgstr "klucz wolumenu" + +#: src/cryptsetup_reencrypt.c:1654 +msgid "set hash to " +msgstr "hasz na " + +#: src/cryptsetup_reencrypt.c:1655 +msgid ", set cipher to " +msgstr ", szyfr na" + +#: src/cryptsetup_reencrypt.c:1659 +msgid "Argument required." +msgstr "Wymagany argument." + +#: src/cryptsetup_reencrypt.c:1687 +msgid "Only values between 1 MiB and 64 MiB allowed for reencryption block size." +msgstr "Jako rozmiar bloku ponownego szyfrowania dozwolone są jedynie wartości od 1 MiB do 64 MiB." + +#: src/cryptsetup_reencrypt.c:1714 +msgid "Maximum device reduce size is 64 MiB." +msgstr "Maksymalna wartość ograniczenia rozmiaru urządzenia to 64MiB." + +#: src/cryptsetup_reencrypt.c:1721 +msgid "Option --new must be used together with --reduce-device-size or --header." +msgstr "Opcja --new musi być użyta wraz z --reduce_device_size lub --header." + +#: src/cryptsetup_reencrypt.c:1725 +msgid "Option --keep-key can be used only with --hash, --iter-time or --pbkdf-force-iterations." +msgstr "Opcja --keep-key może być użyta tylko z --hash, --iter-time lub --pbkdf-force-iterations.." + +#: src/cryptsetup_reencrypt.c:1729 +msgid "Option --new cannot be used together with --decrypt." +msgstr "Opcja --new nie może być użyta wraz z --decrypt." + +#: src/cryptsetup_reencrypt.c:1733 +msgid "Option --decrypt is incompatible with specified parameters." +msgstr "Opcja --decrypt jest niezgodna z podanymi parametrami." + +#: src/cryptsetup_reencrypt.c:1737 +msgid "Option --uuid is allowed only together with --decrypt." +msgstr "Opcja --uuid jest dozwolona tylko wraz z --decrypt." + +#: src/cryptsetup_reencrypt.c:1741 +msgid "Invalid luks type. Use one of these: 'luks', 'luks1' or 'luks2'." +msgstr "Błędny typ LUKS - musi być jednym z 'luks', 'luks1' lub 'luks2'." + +#: src/utils_tools.c:151 +msgid "Error reading response from terminal." +msgstr "Błąd podczas odczytu odpowiedzi z terminala." + +#: src/utils_tools.c:186 +msgid "Command successful.\n" +msgstr "Polecenie się powiodło.\n" + +#: src/utils_tools.c:194 +msgid "wrong or missing parameters" +msgstr "niewłaściwe lub brakujące parametry" + +#: src/utils_tools.c:196 +msgid "no permission or bad passphrase" +msgstr "brak uprawnień lub błędne hasło" + +#: src/utils_tools.c:198 +msgid "out of memory" +msgstr "brak pamięci" + +#: src/utils_tools.c:200 +msgid "wrong device or file specified" +msgstr "podano niewłaściwe urządzenie lub plik" + +#: src/utils_tools.c:202 +msgid "device already exists or device is busy" +msgstr "urządzenie już istnieje lub jest zajęte" + +#: src/utils_tools.c:204 +msgid "unknown error" +msgstr "nieznany błąd" + +#: src/utils_tools.c:206 +#, c-format +msgid "Command failed with code %i (%s).\n" +msgstr "Polecenie nie powiodło się z kodem %i (%s).\n" + +#: src/utils_tools.c:283 +#, c-format +msgid "Key slot %i created." +msgstr "Klucz numer %i utworzony." + +#: src/utils_tools.c:285 +#, c-format +msgid "Key slot %i unlocked." +msgstr "Klucz numer %i odblokowany." + +#: src/utils_tools.c:287 +#, c-format +msgid "Key slot %i removed." +msgstr "Klucz numer %i usunięty." + +#: src/utils_tools.c:296 +#, c-format +msgid "Token %i created." +msgstr "Token %i utworzony." + +#: src/utils_tools.c:298 +#, c-format +msgid "Token %i removed." +msgstr "Token %i usunięty." + +#: src/utils_tools.c:464 +msgid "" +"\n" +"Wipe interrupted." +msgstr "" +"\n" +"Wymazywanie przerwane." + +#: src/utils_tools.c:475 +#, c-format +msgid "WARNING: Device %s already contains a '%s' partition signature.\n" +msgstr "UWAGA: urządzenie %s już zawiera sygnaturę partycji '%s'.\n" + +#: src/utils_tools.c:483 +#, c-format +msgid "WARNING: Device %s already contains a '%s' superblock signature.\n" +msgstr "UWAGA: urządzenie %s już zawiera sygnaturę superbloku '%s'.\n" + +#: src/utils_tools.c:504 src/utils_tools.c:568 +msgid "Failed to initialize device signature probes." +msgstr "Nie udało się zainicjować sond sygnatur urządzeń." + +#: src/utils_tools.c:548 +#, c-format +msgid "Failed to stat device %s." +msgstr "Nie udało się wykonać stat na urządzeniu %s." + +#: src/utils_tools.c:561 +#, c-format +msgid "Device %s is in use. Can not proceed with format operation." +msgstr "Urządzenie %s jest w użyciu. Nie można kontynuować operacji formatowania." + +#: src/utils_tools.c:563 +#, c-format +msgid "Failed to open file %s in read/write mode." +msgstr "Nie udało się otworzyć pliku %s do odczytu i zapisu." + +#: src/utils_tools.c:577 +#, c-format +msgid "Existing '%s' partition signature (offset: % bytes) on device %s will be wiped." +msgstr "Istniejąca sygnatura partycji '%s' (offset w bajtach: %) na urządzeniu %s zostanie wymazana." + +#: src/utils_tools.c:580 +#, c-format +msgid "Existing '%s' superblock signature (offset: % bytes) on device %s will be wiped." +msgstr "Istniejąca sygnatura superbloku '%s' (offset w bajtach: %) na urządzeniu %s zostanie wymazana." + +#: src/utils_tools.c:583 +msgid "Failed to wipe device signature." +msgstr "Nie udało się wymazać sygnatury urządzenia." + +#: src/utils_tools.c:590 +#, c-format +msgid "Failed to probe device %s for a signature." +msgstr "Nie udało się sprawdzić sygnatury urządzenia %s." + +#: src/utils_tools.c:629 +msgid "" +"\n" +"Reencryption interrupted." +msgstr "" +"\n" +"Ponowne szyfrowanie przerwane." + +#: src/utils_password.c:43 src/utils_password.c:75 +#, c-format +msgid "Cannot check password quality: %s" +msgstr "Nie można sprawdzić jakości hasła: %s" + +#: src/utils_password.c:51 +#, c-format +msgid "" +"Password quality check failed:\n" +" %s" +msgstr "" +"Sprawdzenie jakości hasła nie powiodło się:\n" +" %s" + +#: src/utils_password.c:83 +#, c-format +msgid "Password quality check failed: Bad passphrase (%s)" +msgstr "Sprawdzenie jakości hasła nie powiodło się: błędne hasło (%s)" + +#: src/utils_password.c:193 src/utils_password.c:208 +msgid "Error reading passphrase from terminal." +msgstr "Błąd podczas odczytu hasła z terminala." + +#: src/utils_password.c:206 +msgid "Verify passphrase: " +msgstr "Weryfikacja hasła: " + +#: src/utils_password.c:213 +msgid "Passphrases do not match." +msgstr "Hasła nie zgadzają się." + +#: src/utils_password.c:250 +msgid "Cannot use offset with terminal input." +msgstr "Nie można użyć offsetu, jeśli wejściem jest terminal." + +#: src/utils_password.c:253 +#, c-format +msgid "Enter passphrase: " +msgstr "Hasło: " + +#: src/utils_password.c:256 +#, c-format +msgid "Enter passphrase for %s: " +msgstr "Hasło dla %s: " + +#: src/utils_password.c:287 +msgid "No key available with this passphrase." +msgstr "Dla tego hasła nie ma dostępnego klucza." + +#: src/utils_password.c:289 +msgid "No usable keyslot is available." +msgstr "Brak dostępnego miejsca na klucz." + +#: src/utils_password.c:328 +#, c-format +msgid "Cannot open keyfile %s for write." +msgstr "Nie można otworzyć pliku klucza %s do zapisu." + +#: src/utils_password.c:335 +#, c-format +msgid "Cannot write to keyfile %s." +msgstr "Nie można zapisać pliku klucza %s." + +#: src/utils_luks2.c:47 +#, c-format +msgid "Failed to open file %s in read-only mode." +msgstr "Nie udało się otworzyć pliku %s tylko do odczytu." + +#: src/utils_luks2.c:60 +msgid "Provide valid LUKS2 token JSON:\n" +msgstr "Poprawny token JSON dla LUKS2:\n" + +#: src/utils_luks2.c:67 +msgid "Failed to read JSON file." +msgstr "Nie udało się odczytać pliku JSON." + +#: src/utils_luks2.c:72 +msgid "" +"\n" +"Read interrupted." +msgstr "" +"\n" +"Odczyt przerwany." + +#: src/utils_luks2.c:113 +#, c-format +msgid "Failed to open file %s in write mode." +msgstr "Nie udało się otworzyć pliku %s do zapisu." + +#: src/utils_luks2.c:122 +msgid "" +"\n" +"Write interrupted." +msgstr "" +"\n" +"Zapis przerwany." + +#: src/utils_luks2.c:126 +msgid "Failed to write JSON file." +msgstr "Nie udało się zapisać pliku JSON." diff --git a/po/pt_BR.gmo b/po/pt_BR.gmo new file mode 100644 index 0000000000000000000000000000000000000000..fe925dc2cf136088c71ffb0aacdf42d12db488f1 GIT binary patch literal 82289 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, 2016-2019. +# , +# ##### Terminologia usada ##### +# , +# device mapper = mapeador de dispositivo +# digest = resumo +# key slots = slots de chave +# plain = claro (pois "mensagem plana" é tradução incorreta) +# passphrase = senha +# salt = sal # https://pt.wikipedia.org/wiki/Sal_(criptografia) +# , +# ############################## +# , +msgid "" +msgstr "" +"Project-Id-Version: cryptsetup 2.1.0\n" +"Report-Msgid-Bugs-To: dm-crypt@saout.de\n" +"POT-Creation-Date: 2019-11-01 09:04+0100\n" +"PO-Revision-Date: 2019-01-28 07:58-0200\n" +"Last-Translator: Rafael Fontenelle \n" +"Language-Team: Brazilian Portuguese \n" +"Language: pt_BR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Virtaal 1.0.0-beta1\n" +"X-Bugs: Report translation errors to the Language-Team address.\n" + +#: lib/libdevmapper.c:384 +msgid "Cannot initialize device-mapper, running as non-root user." +msgstr "Não foi possível inicializar o mapeador de dispositivo, executando como usuário não-root." + +#: lib/libdevmapper.c:387 +msgid "Cannot initialize device-mapper. Is dm_mod kernel module loaded?" +msgstr "Não foi possível inicializar o mapeador de dispositivo. O módulo de kernel dm_mod está carregado?" + +#: lib/libdevmapper.c:1082 +msgid "Requested deferred flag is not supported." +msgstr "Não há suporte ao sinalizador atrasado requisitado." + +#: lib/libdevmapper.c:1149 +#, c-format +msgid "DM-UUID for device %s was truncated." +msgstr "DM-UUID para o dispositivo \"%s\" estava truncada." + +#: lib/libdevmapper.c:1463 +#, fuzzy +msgid "Unknown dm target type." +msgstr "Tipo %s de PBKDF desconhecido." + +#: lib/libdevmapper.c:1565 lib/libdevmapper.c:1617 +msgid "Requested dm-crypt performance options are not supported." +msgstr "Não há suporte às opções de desempenho de dm-crypt requisitadas." + +#: lib/libdevmapper.c:1572 +msgid "Requested dm-verity data corruption handling options are not supported." +msgstr "Não há suporte à tratamento de corrompimento de dados de dm-verify requisitada." + +#: lib/libdevmapper.c:1576 +msgid "Requested dm-verity FEC options are not supported." +msgstr "Não há suporte às opções FEC dm-verity requisitadas." + +#: lib/libdevmapper.c:1580 +msgid "Requested data integrity options are not supported." +msgstr "Não há suporte às opções de integridade de dados requisitadas." + +#: lib/libdevmapper.c:1582 +msgid "Requested sector_size option is not supported." +msgstr "Não há suporte à opção sector_size requisitada." + +#: lib/libdevmapper.c:1587 +msgid "Requested automatic recalculation of integrity tags is not supported." +msgstr "Não há suporte à recalculação automática de tags de integridade requisitada." + +#: lib/libdevmapper.c:1591 +#, fuzzy +msgid "Requested dm-integrity bitmap mode is not supported." +msgstr "Não há suporte às opções de integridade de dados requisitadas." + +#: lib/libdevmapper.c:1620 +msgid "Discard/TRIM is not supported." +msgstr "Não há suporte a descarte/TRIM." + +#: lib/libdevmapper.c:2511 +#, c-format +msgid "Failed to query dm-%s segment." +msgstr "Falha ao consultar o segmento dm-%s." + +#: lib/random.c:80 +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" +msgstr "" +"O sistema sem entropia suficiente enquanto gera chave de volume.\n" +"Por favor mova o mouse ou digite algum texto em outra janela para obter alguns eventos aleatórios.\n" + +#: lib/random.c:84 +#, c-format +msgid "Generating key (%d%% done).\n" +msgstr "Gerando chave (%d%% concluído).\n" + +#: lib/random.c:170 +msgid "Running in FIPS mode." +msgstr "Executando no modo FIPS." + +#: lib/random.c:176 +msgid "Fatal error during RNG initialisation." +msgstr "Erro fatal durante inicialização de RNG." + +#: lib/random.c:213 +msgid "Unknown RNG quality requested." +msgstr "Qualidade RNG requisitada desconhecida." + +#: lib/random.c:218 +msgid "Error reading from RNG." +msgstr "Erro na leitura de RNG." + +#: lib/setup.c:223 +msgid "Cannot initialize crypto RNG backend." +msgstr "Não foi possível inicializar o backend RNG de criptografia." + +#: lib/setup.c:229 +msgid "Cannot initialize crypto backend." +msgstr "Não foi possível inicializar o backend de criptografia." + +#: lib/setup.c:260 lib/setup.c:1990 lib/verity/verity.c:120 +#, c-format +msgid "Hash algorithm %s not supported." +msgstr "Não há suporte ao algoritmo hash %s." + +#: lib/setup.c:263 lib/loopaes/loopaes.c:90 +#, c-format +msgid "Key processing error (using hash %s)." +msgstr "Erro de processamento de chave (usando hash %s)." + +#: lib/setup.c:324 lib/setup.c:351 +msgid "Cannot determine device type. Incompatible activation of device?" +msgstr "Não foi possível determinar o tipo do dispositivo. Ativação de dispositivo incompatível?" + +#: lib/setup.c:330 lib/setup.c:2985 +msgid "This operation is supported only for LUKS device." +msgstr "Há suporte a esta operação apenas para dispositivo LUKS." + +#: lib/setup.c:357 +msgid "This operation is supported only for LUKS2 device." +msgstr "Há suporte a esta operação apenas para dispositivo LUKS2." + +#: lib/setup.c:412 lib/luks2/luks2_reencrypt.c:2345 +msgid "All key slots full." +msgstr "Todos os slots de chave estão cheios." + +#: lib/setup.c:423 +#, c-format +msgid "Key slot %d is invalid, please select between 0 and %d." +msgstr "Slot de chave %d é inválido, por favor selecione entre 0 e %d." + +#: lib/setup.c:429 +#, c-format +msgid "Key slot %d is full, please select another one." +msgstr "Slot de chave %d está cheio, por favor selecione outro." + +#: lib/setup.c:514 lib/setup.c:2759 +#, fuzzy +msgid "Device size is not aligned to device logical block size." +msgstr "Tamanho do dispositivo não está alinhado com o tamanho de setor requisitado." + +#: lib/setup.c:610 +#, c-format +msgid "Header detected but device %s is too small." +msgstr "Cabeçalho detectado, mas o dispositivo %s é muito pequeno." + +#: lib/setup.c:647 +msgid "This operation is not supported for this device type." +msgstr "Não há suporte a esta operação para este tipo de dispositivo." + +#: lib/setup.c:652 +#, fuzzy +msgid "Illegal operation with reencryption in-progress." +msgstr "Recriptografia offline em progresso. Abortando." + +#: lib/setup.c:821 lib/luks1/keymanage.c:476 +#, c-format +msgid "Unsupported LUKS version %d." +msgstr "Não há suporte ao LUKS versão %d." + +#: lib/setup.c:838 lib/setup.c:1483 lib/setup.c:1903 +msgid "Detached metadata device is not supported for this crypt type." +msgstr "Não há suporte ao dispositivo de metadados desanexado para este tipo de criptografia." + +#: lib/setup.c:1373 lib/setup.c:2479 lib/setup.c:2551 lib/setup.c:2563 +#: lib/setup.c:2712 lib/setup.c:4310 +#, c-format +msgid "Device %s is not active." +msgstr "O dispositivo \"%s\" não está ativado." + +#: lib/setup.c:1390 +#, c-format +msgid "Underlying device for crypt device %s disappeared." +msgstr "O dispositivo subjacente para o dispositivo de criptografia %s desapareceu." + +#: lib/setup.c:1468 +msgid "Invalid plain crypt parameters." +msgstr "Parâmetros de criptografia clara inválidos." + +#: lib/setup.c:1473 lib/setup.c:1893 src/integritysetup.c:73 +msgid "Invalid key size." +msgstr "Tamanho de chave inválida." + +#: lib/setup.c:1478 lib/setup.c:1898 lib/setup.c:2100 +msgid "UUID is not supported for this crypt type." +msgstr "Não há suporte ao UUID para este tipo de criptografia." + +#: lib/setup.c:1493 lib/setup.c:1683 lib/luks2/luks2_reencrypt.c:2308 +#: src/cryptsetup.c:1169 +msgid "Unsupported encryption sector size." +msgstr "Não há suporte ao tamanho de setor de criptografia." + +#: lib/setup.c:1501 lib/setup.c:1808 lib/setup.c:2753 +msgid "Device size is not aligned to requested sector size." +msgstr "Tamanho do dispositivo não está alinhado com o tamanho de setor requisitado." + +#: lib/setup.c:1552 lib/setup.c:1671 +msgid "Can't format LUKS without device." +msgstr "Não é possível formatar LUKS sem dispositivo." + +#: lib/setup.c:1558 lib/setup.c:1677 +msgid "Requested data alignment is not compatible with data offset." +msgstr "Alinhamento de dados requisitado não é compatível com a posição dos dados." + +#: lib/setup.c:1626 lib/setup.c:1795 +msgid "WARNING: Data offset is outside of currently available data device.\n" +msgstr "AVISO: A posição dos dados está fora do dispositivo de dados atualmente disponível.\n" + +#: lib/setup.c:1636 lib/setup.c:1823 lib/setup.c:1844 lib/setup.c:2112 +#, c-format +msgid "Cannot wipe header on device %s." +msgstr "Não foi possível apagar o cabeçalho no dispositivo %s." + +#: lib/setup.c:1688 +msgid "WARNING: The device activation will fail, dm-crypt is missing support for requested encryption sector size.\n" +msgstr "AVISO: A ativação do dispositivo vai falhar, dm-crypt carece de suporte para o tamanho de setor de criptografia requisitado.\n" + +#: lib/setup.c:1710 +msgid "Volume key is too small for encryption with integrity extensions." +msgstr "A chave de volume é pequena demais para criptografia com extensões de integridade." + +#: lib/setup.c:1765 +#, c-format +msgid "Cipher %s-%s (key size %zd bits) is not available." +msgstr "A cifra %s-%s (tamanho de chave %zd bits) não está disponível." + +#: lib/setup.c:1798 +#, c-format +msgid "WARNING: LUKS2 metadata size changed to % bytes.\n" +msgstr "" + +#: lib/setup.c:1802 +#, c-format +msgid "WARNING: LUKS2 keyslots area size changed to % bytes.\n" +msgstr "" + +#: lib/setup.c:1826 lib/utils_device.c:829 lib/luks1/keyencryption.c:256 +#: lib/luks2/luks2_reencrypt.c:2356 lib/luks2/luks2_reencrypt.c:3348 +#, c-format +msgid "Device %s is too small." +msgstr "O dispositivo %s é muito pequeno." + +#: lib/setup.c:1837 lib/setup.c:1863 +#, c-format +msgid "Cannot format device %s in use." +msgstr "Não é possível formatar dispositivo %s em uso." + +#: lib/setup.c:1840 lib/setup.c:1866 +#, c-format +msgid "Cannot format device %s, permission denied." +msgstr "Não é possível formatar o dispositivo %s, permissão negada." + +#: lib/setup.c:1852 lib/setup.c:2164 +#, c-format +msgid "Cannot format integrity for device %s." +msgstr "Não foi possível formatar integridade para o dispositivo %s." + +#: lib/setup.c:1870 +#, c-format +msgid "Cannot format device %s." +msgstr "Não foi possível formatar o dispositivo %s." + +#: lib/setup.c:1888 +msgid "Can't format LOOPAES without device." +msgstr "Não foi possível formatar LOOPAES sem dispositivo." + +#: lib/setup.c:1933 +msgid "Can't format VERITY without device." +msgstr "Não foi possível formatar VERITY sem dispositivo." + +#: lib/setup.c:1944 lib/verity/verity.c:103 +#, c-format +msgid "Unsupported VERITY hash type %d." +msgstr "Não há suporte ao tipo de hash VERITY %d." + +#: lib/setup.c:1950 lib/verity/verity.c:111 +msgid "Unsupported VERITY block size." +msgstr "Não há suporte ao tamanho de bloco VERITY." + +#: lib/setup.c:1955 lib/verity/verity.c:75 +msgid "Unsupported VERITY hash offset." +msgstr "Não há suporte à posição de hash VERITY." + +#: lib/setup.c:1960 +msgid "Unsupported VERITY FEC offset." +msgstr "Não há suporte à posição de FEC VERITY." + +#: lib/setup.c:1984 +msgid "Data area overlaps with hash area." +msgstr "A área de dados se sobrepõe à área hash." + +#: lib/setup.c:2009 +msgid "Hash area overlaps with FEC area." +msgstr "Área de hash sobreposta com área de FEC." + +#: lib/setup.c:2016 +msgid "Data area overlaps with FEC area." +msgstr "Área de dados sobreposta com área de FEC." + +#: lib/setup.c:2221 +#, c-format +msgid "Unknown crypt device type %s requested." +msgstr "Tipo de dispositivo de criptografia requisitado %s desconhecido." + +#: lib/setup.c:2485 lib/setup.c:2557 lib/setup.c:2570 +#, c-format +msgid "Unsupported parameters on device %s." +msgstr "Não há suporte aos parâmetros no dispositivo %s." + +#: lib/setup.c:2491 lib/setup.c:2576 lib/luks2/luks2_reencrypt.c:2408 +#: lib/luks2/luks2_reencrypt.c:2718 +#, c-format +msgid "Mismatching parameters on device %s." +msgstr "Parâmetros incompatíveis no dispositivo %s." + +#: lib/setup.c:2596 +msgid "Crypt devices mismatch." +msgstr "" + +#: lib/setup.c:2633 lib/setup.c:2638 lib/luks2/luks2_reencrypt.c:2054 +#: lib/luks2/luks2_reencrypt.c:3126 +#, fuzzy, c-format +msgid "Failed to reload device %s." +msgstr "Falha ao obter estado do dispositivo %s." + +#: lib/setup.c:2643 lib/setup.c:2648 lib/luks2/luks2_reencrypt.c:2025 +#: lib/luks2/luks2_reencrypt.c:2032 +#, fuzzy, c-format +msgid "Failed to suspend device %s." +msgstr "Falha ao obter estado do dispositivo %s." + +#: lib/setup.c:2653 lib/luks2/luks2_reencrypt.c:2039 +#: lib/luks2/luks2_reencrypt.c:3061 lib/luks2/luks2_reencrypt.c:3130 +#, fuzzy, c-format +msgid "Failed to resume device %s." +msgstr "Falha ao obter estado do dispositivo %s." + +#: lib/setup.c:2667 +#, c-format +msgid "Fatal error while reloading device %s (on top of device %s)." +msgstr "" + +#: lib/setup.c:2670 lib/setup.c:2672 +#, fuzzy, c-format +msgid "Failed to switch device %s to dm-error." +msgstr "Falha ao obter estado do dispositivo %s." + +#: lib/setup.c:2744 +msgid "Cannot resize loop device." +msgstr "Não foi possível redimensionar o dispositivo de loop." + +#: lib/setup.c:2817 +msgid "Do you really want to change UUID of device?" +msgstr "Você realmente deseja alterar o UUID do dispositivo?" + +#: lib/setup.c:2893 +msgid "Header backup file does not contain compatible LUKS header." +msgstr "Arquivo de cópia de segurança de cabeçalho não contém um cabeçalho LUKS compatível." + +#: lib/setup.c:2993 +#, c-format +msgid "Volume %s is not active." +msgstr "O volume %s não está ativado." + +#: lib/setup.c:3004 +#, c-format +msgid "Volume %s is already suspended." +msgstr "O volume %s já está suspenso." + +#: lib/setup.c:3017 +#, c-format +msgid "Suspend is not supported for device %s." +msgstr "A suspensão não oferece suporte ao dispositivo %s." + +#: lib/setup.c:3019 +#, c-format +msgid "Error during suspending device %s." +msgstr "Ocorreu um erro ao suspender o dispositivo %s." + +#: lib/setup.c:3052 lib/setup.c:3119 +#, c-format +msgid "Volume %s is not suspended." +msgstr "O volume %s não estava suspenso." + +#: lib/setup.c:3081 +#, c-format +msgid "Resume is not supported for device %s." +msgstr "O resumo não oferece suporte a este dispositivo %s." + +#: lib/setup.c:3083 lib/setup.c:3151 +#, c-format +msgid "Error during resuming device %s." +msgstr "Ocorreu um erro ao resumir o dispositivo %s." + +#: lib/setup.c:3219 lib/setup.c:3407 +msgid "Cannot add key slot, all slots disabled and no volume key provided." +msgstr "Não foi possível adicionar slot de chave, todos slots desabilitados ou nenhuma chave de volume fornecida." + +#: lib/setup.c:3359 +msgid "Failed to swap new key slot." +msgstr "Falha ao trocar novo slot de chave." + +#: lib/setup.c:3524 lib/setup.c:4161 lib/setup.c:4174 lib/setup.c:4182 +#: lib/setup.c:4195 lib/setup.c:4480 lib/setup.c:5593 +msgid "Volume key does not match the volume." +msgstr "A chave de volume não corresponde ao volume." + +#: lib/setup.c:3545 +#, c-format +msgid "Key slot %d is invalid." +msgstr "O slot de chave %d é inválido." + +#: lib/setup.c:3551 src/cryptsetup.c:1511 src/cryptsetup.c:1856 +#, c-format +msgid "Keyslot %d is not active." +msgstr "O slot de chave %d não está ativo." + +#: lib/setup.c:3570 +msgid "Device header overlaps with data area." +msgstr "O cabeçalho do dispositivo se sobrepõe à área de dados." + +#: lib/setup.c:3836 +#, fuzzy +msgid "Reencryption in-progress. Cannot activate device." +msgstr "Recriptografia já está em progresso." + +#: lib/setup.c:3838 lib/luks2/luks2_json_metadata.c:2244 +#: lib/luks2/luks2_reencrypt.c:2817 +#, fuzzy +msgid "Failed to get reencryption lock." +msgstr "Falha ao obter trava de dispositivo de escrita." + +#: lib/setup.c:3851 lib/luks2/luks2_reencrypt.c:2836 +#, fuzzy +msgid "LUKS2 reencryption recovery failed." +msgstr "Não há suporte ao tamanho de setor de criptografia." + +#: lib/setup.c:3978 lib/setup.c:4248 +msgid "Device type is not properly initialised." +msgstr "O tipo de dispositivo não foi inicializado corretamente." + +#: lib/setup.c:4022 +#, c-format +msgid "Cannot use device %s, name is invalid or still in use." +msgstr "Não foi possível usar o dispositivo %s, o nome é inválido ou ainda está em uso." + +#: lib/setup.c:4025 +#, c-format +msgid "Device %s already exists." +msgstr "O dispositivo %s já existe." + +#: lib/setup.c:4148 +msgid "Incorrect volume key specified for plain device." +msgstr "Chave de volume incorreta especificada para dispositivo claro." + +#: lib/setup.c:4214 +msgid "Incorrect root hash specified for verity device." +msgstr "Hash raiz incorreta especificada para o dispositivo verity." + +#: lib/setup.c:4289 lib/setup.c:4305 lib/luks2/luks2_json_metadata.c:2297 +#: src/cryptsetup.c:2527 +#, c-format +msgid "Device %s is still in use." +msgstr "O dispositivo %s ainda está em uso." + +#: lib/setup.c:4314 +#, c-format +msgid "Invalid device %s." +msgstr "Dispositivo inválido %s." + +#: lib/setup.c:4430 +msgid "Volume key buffer too small." +msgstr "Buffer de chave de volume muito pequena." + +#: lib/setup.c:4438 +msgid "Cannot retrieve volume key for plain device." +msgstr "Não foi possível obter chave de volume para dispositivo claro." + +#: lib/setup.c:4449 +#, c-format +msgid "This operation is not supported for %s crypt device." +msgstr "Não há suporte a esta operação para o dispositivo de criptografia %s." + +#: lib/setup.c:4636 +msgid "Dump operation is not supported for this device type." +msgstr "Não há suporte à operação de despejo para este tipo de dispositivo." + +#: lib/setup.c:4947 +#, c-format +msgid "Data offset is not multiple of %u bytes." +msgstr "" + +#: lib/setup.c:5229 +#, c-format +msgid "Cannot convert device %s which is still in use." +msgstr "Não foi possível converter o dispositivo %s, o qual ainda está em uso." + +#: lib/setup.c:5526 +#, c-format +msgid "Failed to assign keyslot %u as the new volume key." +msgstr "Falha ao atribuir o slot de chave %u como a nova chave de volume." + +#: lib/setup.c:5599 +msgid "Failed to initialise default LUKS2 keyslot parameters." +msgstr "Falha ao inicializar os parâmetros padrão de slot de chave LUKS2." + +#: lib/setup.c:5605 +#, c-format +msgid "Failed to assign keyslot %d to digest." +msgstr "Falha ao atribuir o slot de chave %d ao resumo." + +#: lib/setup.c:5690 +msgid "Failed to load key in kernel keyring." +msgstr "Falha ao carregar chave no chaveiro de kernel." + +#: lib/setup.c:5757 +msgid "Kernel keyring is not supported by the kernel." +msgstr "Não há suporte a chaveiro de kernel neste kernel." + +#: lib/setup.c:5767 lib/luks2/luks2_reencrypt.c:2933 +#, c-format +msgid "Failed to read passphrase from keyring (error %d)." +msgstr "Falha ao ler senha do chaveiro (erro %d)." + +#: lib/setup.c:5791 +msgid "Failed to acquire global memory-hard access serialization lock." +msgstr "" + +#: lib/utils.c:81 +msgid "Cannot get process priority." +msgstr "Não foi possível obter prioridade de processo." + +#: lib/utils.c:95 +msgid "Cannot unlock memory." +msgstr "Não foi possível desbloquear memória." + +#: lib/utils.c:169 lib/tcrypt/tcrypt.c:498 +msgid "Failed to open key file." +msgstr "Falha ao abrir arquivo de chave." + +#: lib/utils.c:174 +msgid "Cannot read keyfile from a terminal." +msgstr "Não foi possível ler o arquivo de chave de um terminal." + +#: lib/utils.c:191 +msgid "Failed to stat key file." +msgstr "Falha ao obter estado do arquivo." + +#: lib/utils.c:199 lib/utils.c:220 +msgid "Cannot seek to requested keyfile offset." +msgstr "Não foi possível buscar a posição do arquivo de chave requisitado." + +#: lib/utils.c:214 lib/utils.c:229 src/utils_password.c:188 +#: src/utils_password.c:201 +msgid "Out of memory while reading passphrase." +msgstr "Memória insuficiente para leitura da senha." + +#: lib/utils.c:249 +msgid "Error reading passphrase." +msgstr "Erro ao ler a senha." + +#: lib/utils.c:266 +msgid "Nothing to read on input." +msgstr "Nada para ler na entrada." + +#: lib/utils.c:273 +msgid "Maximum keyfile size exceeded." +msgstr "Tamanho máximo de arquivo de chave excedido." + +#: lib/utils.c:278 +msgid "Cannot read requested amount of data." +msgstr "Não foi possível ler a quantidade requisitada de dados." + +#: lib/utils_device.c:188 lib/utils_storage_wrappers.c:111 +#: lib/luks1/keyencryption.c:92 +#, c-format +msgid "Device %s doesn't exist or access denied." +msgstr "O dispositivo %s não existe ou acesso negado." + +#: lib/utils_device.c:198 +#, c-format +msgid "Device %s is not compatible." +msgstr "O dispositivo %s não é compatível." + +#: lib/utils_device.c:643 +#, c-format +msgid "Device %s is too small. Need at least % bytes." +msgstr "Dispositivo %s é muito pequeno. Necessita de pelo menos % bytes." + +#: lib/utils_device.c:724 +#, c-format +msgid "Cannot use device %s which is in use (already mapped or mounted)." +msgstr "Não foi possível usar o dispositivo %s, o qual está em uso (já mapeado ou montado)." + +#: lib/utils_device.c:728 +#, c-format +msgid "Cannot use device %s, permission denied." +msgstr "Não foi possível usar o dispositivo %s, permissão negada." + +#: lib/utils_device.c:731 +#, c-format +msgid "Cannot get info about device %s." +msgstr "Não foi possível obter informação sobre o dispositivo %s." + +#: lib/utils_device.c:754 +msgid "Cannot use a loopback device, running as non-root user." +msgstr "Não foi possível usar um dispositivo de loopback, executando como usuário não-root." + +#: lib/utils_device.c:764 +msgid "Attaching loopback device failed (loop device with autoclear flag is required)." +msgstr "Anexação de dispositivo loopback falhou (dispositivo de loop com sinalizador autoclear é necessário)." + +#: lib/utils_device.c:810 +#, c-format +msgid "Requested offset is beyond real size of device %s." +msgstr "A posição requisitada está além do tamanho real do dispositivo %s." + +#: lib/utils_device.c:818 +#, c-format +msgid "Device %s has zero size." +msgstr "O dispositivo %s possui tamanho zero." + +#: lib/utils_pbkdf.c:100 +msgid "Requested PBKDF target time cannot be zero." +msgstr "Tempo alvo PBKDF requisitado não pode ser zero." + +#: lib/utils_pbkdf.c:106 +#, c-format +msgid "Unknown PBKDF type %s." +msgstr "Tipo %s de PBKDF desconhecido." + +#: lib/utils_pbkdf.c:111 +#, c-format +msgid "Requested hash %s is not supported." +msgstr "Não há suporte ao hash requisitado %s." + +#: lib/utils_pbkdf.c:122 +msgid "Requested PBKDF type is not supported for LUKS1." +msgstr "Não há suporte ao tipo de PBKDF requisitado para LUKS1." + +#: lib/utils_pbkdf.c:128 +msgid "PBKDF max memory or parallel threads must not be set with pbkdf2." +msgstr "Fluxos paralelos ou memória máxima de PBKDF não pode estar definida com pbkdf2." + +#: lib/utils_pbkdf.c:133 lib/utils_pbkdf.c:143 +#, c-format +msgid "Forced iteration count is too low for %s (minimum is %u)." +msgstr "Contagem de iterações forçadas é pequena demais para %s (mínimo é %u)." + +#: lib/utils_pbkdf.c:148 +#, c-format +msgid "Forced memory cost is too low for %s (minimum is %u kilobytes)." +msgstr "Custo de memória forçada é pequeno demais para %s (mínimo é %u kilobytes)." + +#: lib/utils_pbkdf.c:155 +#, c-format +msgid "Requested maximum PBKDF memory cost is too high (maximum is %d kilobytes)." +msgstr "Custo de memória PBKDF máximo requisitado é alto demais (o máximo é %d kilobytes)." + +#: lib/utils_pbkdf.c:160 +msgid "Requested maximum PBKDF memory cannot be zero." +msgstr "Memória PBKDF máxima requisitada não pode ser zero." + +#: lib/utils_pbkdf.c:164 +msgid "Requested PBKDF parallel threads cannot be zero." +msgstr "Fluxos paralelos PBKDF requisitados não podem ser zero." + +#: lib/utils_pbkdf.c:184 +msgid "Only PBKDF2 is supported in FIPS mode." +msgstr "" + +#: lib/utils_benchmark.c:166 +msgid "PBKDF benchmark disabled but iterations not set." +msgstr "Teste de PBKDF desabilitado, mas iterações não definidas." + +#: lib/utils_benchmark.c:185 +#, c-format +msgid "Not compatible PBKDF2 options (using hash algorithm %s)." +msgstr "Opções PBKDF2 não compatíveis (sando algoritmo hash %s)." + +#: lib/utils_benchmark.c:205 +msgid "Not compatible PBKDF options." +msgstr "Opções PBKDF2 não compatíveis." + +#: lib/utils_device_locking.c:103 +#, c-format +msgid "Locking aborted. The locking path %s/%s is unusable (not a directory or missing)." +msgstr "Trava abortada. O caminho de trava %s/%s não é usável (faltando ou não é um diretório)." + +#: lib/utils_device_locking.c:110 +#, c-format +msgid "WARNING: Locking directory %s/%s is missing!\n" +msgstr "AVISO: Diretório de trava %s/%s está faltando!\n" + +#: lib/utils_device_locking.c:120 +#, c-format +msgid "Locking aborted. The locking path %s/%s is unusable (%s is not a directory)." +msgstr "Trava abortada. O caminho de trava %s/%s não é usável (%s não é um diretório)." + +#: lib/utils_wipe.c:185 src/cryptsetup_reencrypt.c:933 +#: src/cryptsetup_reencrypt.c:1017 +msgid "Cannot seek to device offset." +msgstr "Não foi possível ir à posição do dispositivo." + +#: lib/utils_wipe.c:209 +#, c-format +msgid "Device wipe error, offset %." +msgstr "" + +#: lib/luks1/keyencryption.c:40 +#, c-format +msgid "" +"Failed to setup dm-crypt key mapping for device %s.\n" +"Check that kernel supports %s cipher (check syslog for more info)." +msgstr "" +"Falha ao configurar mapeamento de chave dm-crypt para o dispositivo %s.\n" +"Certifique-se de que o kernel oferece suporte cifra de %s (verifique o syslog para mais informação)." + +#: lib/luks1/keyencryption.c:45 +msgid "Key size in XTS mode must be 256 or 512 bits." +msgstr "Tamanho de chave no modo XTS deve ser 256 ou 512 bits." + +#: lib/luks1/keyencryption.c:47 +msgid "Cipher specification should be in [cipher]-[mode]-[iv] format." +msgstr "A especificação de cifra deve estar no formato [cifra]-[modo]-[iv]." + +#: lib/luks1/keyencryption.c:98 lib/luks1/keymanage.c:345 +#: lib/luks1/keymanage.c:636 lib/luks1/keymanage.c:1074 +#: lib/luks2/luks2_json_metadata.c:1253 lib/luks2/luks2_keyslot.c:739 +#, c-format +msgid "Cannot write to device %s, permission denied." +msgstr "Não foi possível escrever para o dispositivo %s, permissão negada." + +#: lib/luks1/keyencryption.c:121 +msgid "Failed to open temporary keystore device." +msgstr "Falha ao abrir o dispositivo temporário de armazenamento de chave." + +#: lib/luks1/keyencryption.c:128 +msgid "Failed to access temporary keystore device." +msgstr "Falha ao acessar o dispositivo temporário de armazenamento de chave." + +#: lib/luks1/keyencryption.c:201 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 "Erro de E/S ao criptografar slot de chave." + +#: lib/luks1/keyencryption.c:247 lib/luks1/keymanage.c:348 +#: lib/luks1/keymanage.c:589 lib/luks1/keymanage.c:639 lib/tcrypt/tcrypt.c:661 +#: lib/verity/verity.c:81 lib/verity/verity.c:179 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:1256 +#: src/cryptsetup_reencrypt.c:205 +#, c-format +msgid "Cannot open device %s." +msgstr "Não foi possível abrir o dispositivo %s." + +#: lib/luks1/keyencryption.c:258 lib/luks2/luks2_keyslot_luks2.c:137 +msgid "IO error while decrypting keyslot." +msgstr "Erro de E/S ao descriptografar slot de chave." + +#: lib/luks1/keymanage.c:111 +#, c-format +msgid "Device %s is too small. (LUKS1 requires at least % bytes.)" +msgstr "Dispositivo %s é muito pequeno. (LUKS1 precisa de pelo menos % bytes.)" + +#: 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 +#, c-format +msgid "LUKS keyslot %u is invalid." +msgstr "O slot de chave LUKS %u é inválido." + +#: lib/luks1/keymanage.c:229 lib/luks1/keymanage.c:473 +#: lib/luks2/luks2_json_metadata.c:1084 src/cryptsetup.c:1372 +#: src/cryptsetup.c:1498 src/cryptsetup.c:1555 src/cryptsetup.c:1611 +#: src/cryptsetup.c:1678 src/cryptsetup.c:1781 src/cryptsetup.c:1845 +#: src/cryptsetup.c:2005 src/cryptsetup.c:2194 src/cryptsetup.c:2254 +#: src/cryptsetup.c:2320 src/cryptsetup.c:2484 src/cryptsetup.c:3137 +#: src/cryptsetup.c:3146 src/cryptsetup_reencrypt.c:1372 +#, c-format +msgid "Device %s is not a valid LUKS device." +msgstr "O dispositivo %s não é um dispositivo LUKS válido." + +#: lib/luks1/keymanage.c:247 lib/luks2/luks2_json_metadata.c:1101 +#, c-format +msgid "Requested header backup file %s already exists." +msgstr "O arquivo de cópia de segurança de cabeçalho requisitado %s já existe." + +#: lib/luks1/keymanage.c:249 lib/luks2/luks2_json_metadata.c:1103 +#, c-format +msgid "Cannot create header backup file %s." +msgstr "Não foi possível criar o arquivo de cópia de segurança de cabeçalho %s." + +#: lib/luks1/keymanage.c:256 lib/luks2/luks2_json_metadata.c:1110 +#, c-format +msgid "Cannot write header backup file %s." +msgstr "Não foi possível escrever o arquivo de cópia de segurança de cabeçalho %s." + +#: lib/luks1/keymanage.c:287 lib/luks2/luks2_json_metadata.c:1162 +msgid "Backup file doesn't contain valid LUKS header." +msgstr "Arquivo de cópia de segurança não contém cabeçalho LUKS válido." + +#: lib/luks1/keymanage.c:300 lib/luks1/keymanage.c:550 +#: lib/luks2/luks2_json_metadata.c:1183 +#, c-format +msgid "Cannot open header backup file %s." +msgstr "Não foi possível abrir o arquivo de cópia de segurança de cabeçalho %s." + +#: lib/luks1/keymanage.c:308 lib/luks2/luks2_json_metadata.c:1191 +#, c-format +msgid "Cannot read header backup file %s." +msgstr "Não foi possível ler o arquivo de cópia de segurança de cabeçalho %s." + +#: lib/luks1/keymanage.c:318 +msgid "Data offset or key size differs on device and backup, restore failed." +msgstr "Posição de dados ou tamanho de chave divergem entre dispositivo e cópia de segurança, restauração falhou." + +#: lib/luks1/keymanage.c:326 +#, c-format +msgid "Device %s %s%s" +msgstr "Dispositivo %s %s%s" + +#: lib/luks1/keymanage.c:327 +msgid "does not contain LUKS header. Replacing header can destroy data on that device." +msgstr "não contém cabeçalho LUKS. A substituição do cabeçalho pode destruir dados naquele dispositivo." + +#: lib/luks1/keymanage.c:328 +msgid "already contains LUKS header. Replacing header will destroy existing keyslots." +msgstr "já contém cabeçalho LUKS. A substituição do cabeçalho vai destruir slots de chave existentes." + +#: lib/luks1/keymanage.c:329 lib/luks2/luks2_json_metadata.c:1225 +msgid "" +"\n" +"WARNING: real device header has different UUID than backup!" +msgstr "" +"\n" +"AVISO: o cabeçalho do dispositivo real possui um UUID diferente da cópia de segurança!" + +#: lib/luks1/keymanage.c:376 +msgid "Non standard key size, manual repair required." +msgstr "Tamanho de chave fora do padrão, correção manual necessária." + +#: lib/luks1/keymanage.c:381 +msgid "Non standard keyslots alignment, manual repair required." +msgstr "Alinhamento de slots de chave fora do padrão, correção manual necessária." + +#: lib/luks1/keymanage.c:391 +msgid "Repairing keyslots." +msgstr "Corrigindo slots de chave." + +#: lib/luks1/keymanage.c:410 +#, c-format +msgid "Keyslot %i: offset repaired (%u -> %u)." +msgstr "Slot de chave %i: posição corrigida (%u -> %u)." + +#: lib/luks1/keymanage.c:418 +#, c-format +msgid "Keyslot %i: stripes repaired (%u -> %u)." +msgstr "Slot de chave %i: barras corrigidas (%u -> %u)." + +#: lib/luks1/keymanage.c:427 +#, c-format +msgid "Keyslot %i: bogus partition signature." +msgstr "Slot de chave %i: assinatura de partição é falsa." + +#: lib/luks1/keymanage.c:432 +#, c-format +msgid "Keyslot %i: salt wiped." +msgstr "Slot de chave %i: sal apagado." + +#: lib/luks1/keymanage.c:449 +msgid "Writing LUKS header to disk." +msgstr "Escrevendo cabeçalho LUKS para disco." + +#: lib/luks1/keymanage.c:454 +msgid "Repair failed." +msgstr "Correção falhou." + +#: lib/luks1/keymanage.c:482 lib/luks1/keymanage.c:751 +#, c-format +msgid "Requested LUKS hash %s is not supported." +msgstr "Não há suporte ao hash LUKS requisitado %s." + +#: lib/luks1/keymanage.c:510 src/cryptsetup.c:1081 +msgid "No known problems detected for LUKS header." +msgstr "Nenhum problema conhecido foi detectado no cabeçalho LUKS." + +#: lib/luks1/keymanage.c:661 +#, c-format +msgid "Error during update of LUKS header on device %s." +msgstr "Erro durante atualização de cabeçalho LUKS no dispositivo %s." + +#: lib/luks1/keymanage.c:669 +#, c-format +msgid "Error re-reading LUKS header after update on device %s." +msgstr "Erro ao reler cabeçalho LUKS após atualização no dispositivo %s." + +#: lib/luks1/keymanage.c:745 +msgid "Data offset for LUKS header must be either 0 or higher than header size." +msgstr "A posição de dados para cabeçalho LUKS deve ser 0 ou maior do que o tamanho do cabeçalho." + +#: lib/luks1/keymanage.c:756 lib/luks1/keymanage.c:821 +#: lib/luks2/luks2_json_format.c:283 lib/luks2/luks2_json_metadata.c:1002 +#: src/cryptsetup.c:2647 +msgid "Wrong LUKS UUID format provided." +msgstr "Formato de UUID LUKS incorreto foi fornecido." + +#: lib/luks1/keymanage.c:779 +msgid "Cannot create LUKS header: reading random salt failed." +msgstr "Não foi possível criar cabeçalho LUKS: leitura de sal aleatório falhou." + +#: lib/luks1/keymanage.c:800 +#, c-format +msgid "Cannot create LUKS header: header digest failed (using hash %s)." +msgstr "Não foi possível criar cabeçalho LUKS: resumo de cabeçalho falhou (usando hash %s)." + +#: lib/luks1/keymanage.c:844 +#, c-format +msgid "Key slot %d active, purge first." +msgstr "Slot de chave %d ativado, apagar primeiro." + +#: lib/luks1/keymanage.c:850 +#, c-format +msgid "Key slot %d material includes too few stripes. Header manipulation?" +msgstr "O material do slot de chave %d inclui muito poucas barras. Manipulação do cabeçalho?" + +#: lib/luks1/keymanage.c:1060 +#, c-format +msgid "Key slot %d is invalid, please select keyslot between 0 and %d." +msgstr "Slot de chave %d é inválido, por favor selecione um slot de chave entre 0 e %d." + +#: lib/luks1/keymanage.c:1078 lib/luks2/luks2_keyslot.c:743 +#, c-format +msgid "Cannot wipe device %s." +msgstr "Não foi possível apagar o dispositivo %s." + +#: lib/loopaes/loopaes.c:146 +msgid "Detected not yet supported GPG encrypted keyfile." +msgstr "Detectado arquivo de chave criptografado com GPG ainda sem suporte." + +#: lib/loopaes/loopaes.c:147 +msgid "Please use gpg --decrypt | cryptsetup --keyfile=- ...\n" +msgstr "Por favor use gpg --decrypt | cryptsetup --keyfile=- ...\n" + +#: lib/loopaes/loopaes.c:168 lib/loopaes/loopaes.c:188 +msgid "Incompatible loop-AES keyfile detected." +msgstr "Arquivo de chave loop-AES incompatível detectado." + +#: lib/loopaes/loopaes.c:245 +msgid "Kernel doesn't support loop-AES compatible mapping." +msgstr "O kernel não oferece suporte a mapeamento compatível com loop-AES." + +#: lib/tcrypt/tcrypt.c:505 +#, c-format +msgid "Error reading keyfile %s." +msgstr "Erro ao ler arquivo de chave %s." + +#: lib/tcrypt/tcrypt.c:545 +#, c-format +msgid "Maximum TCRYPT passphrase length (%d) exceeded." +msgstr "Tamanho máximo de senha TCRYPT (%d) excedido." + +#: lib/tcrypt/tcrypt.c:586 +#, c-format +msgid "PBKDF2 hash algorithm %s not available, skipping." +msgstr "Algoritmo hash PBKDF2 %s não disponível, ignorando." + +#: lib/tcrypt/tcrypt.c:602 src/cryptsetup.c:959 +msgid "Required kernel crypto interface not available." +msgstr "Interface necessário de criptografia do kernel não disponível." + +#: lib/tcrypt/tcrypt.c:604 src/cryptsetup.c:961 +msgid "Ensure you have algif_skcipher kernel module loaded." +msgstr "Certifique-se de que você tenha o módulo de kernel algif_skcipher carregado." + +#: lib/tcrypt/tcrypt.c:744 +#, c-format +msgid "Activation is not supported for %d sector size." +msgstr "Não há suporte a ativação para o tamanho de setor %d." + +#: lib/tcrypt/tcrypt.c:750 +msgid "Kernel doesn't support activation for this TCRYPT legacy mode." +msgstr "O kernel não oferece suporte a ativação para este modo legado TCRYPT." + +#: lib/tcrypt/tcrypt.c:784 +#, c-format +msgid "Activating TCRYPT system encryption for partition %s." +msgstr "Ativando criptografia de sistema TCRYPT para partição %s." + +#: lib/tcrypt/tcrypt.c:862 +msgid "Kernel doesn't support TCRYPT compatible mapping." +msgstr "O kernel não oferece suporte a mapeamento compatível com TCRYPT." + +#: lib/tcrypt/tcrypt.c:1084 +msgid "This function is not supported without TCRYPT header load." +msgstr "Não há suporte a esta função sem carga de cabeçalho TCRYPT." + +#: lib/verity/verity.c:69 lib/verity/verity.c:172 +#, c-format +msgid "Verity device %s doesn't use on-disk header." +msgstr "Dispositivo verity %s não usa cabeçalho em disco." + +#: lib/verity/verity.c:91 +#, c-format +msgid "Device %s is not a valid VERITY device." +msgstr "O dispositivo %s não é um dispositivo VERITY válido." + +#: lib/verity/verity.c:98 +#, c-format +msgid "Unsupported VERITY version %d." +msgstr "Não há suporte ao VERITY versão %d." + +#: lib/verity/verity.c:129 +msgid "VERITY header corrupted." +msgstr "Cabeçalho VERITY corrompido." + +#: lib/verity/verity.c:166 +#, c-format +msgid "Wrong VERITY UUID format provided on device %s." +msgstr "Formato de UUID VERITY inválido fornecido no dispositivo %s." + +#: lib/verity/verity.c:199 +#, c-format +msgid "Error during update of verity header on device %s." +msgstr "Erro durante a atualização do cabeçalho verity no dispositivo %s." + +#: lib/verity/verity.c:262 +msgid "Errors cannot be repaired with FEC device." +msgstr "Os erros não puderam ser consertados com dispositivo FEC." + +#: lib/verity/verity.c:264 +#, c-format +msgid "Found %u repairable errors with FEC device." +msgstr "Localizados %u erros corrigíveis com dispositivo FEC." + +#: lib/verity/verity.c:302 +msgid "Kernel doesn't support dm-verity mapping." +msgstr "O kernel não oferece suporte a mapeamento dm-verity." + +#: lib/verity/verity.c:313 +msgid "Verity device detected corruption after activation." +msgstr "O dispositivo verity detectou corrompimento após ativação." + +#: lib/verity/verity_hash.c:59 +#, c-format +msgid "Spare area is not zeroed at position %." +msgstr "Área disponível não está zerada na posição %." + +#: lib/verity/verity_hash.c:160 lib/verity/verity_hash.c:287 +#: lib/verity/verity_hash.c:300 +msgid "Device offset overflow." +msgstr "Excesso na posição do dispositivo." + +#: lib/verity/verity_hash.c:200 +#, c-format +msgid "Verification failed at position %." +msgstr "Verificação falhou na posição %." + +#: lib/verity/verity_hash.c:273 +msgid "Invalid size parameters for verity device." +msgstr "Parâmetros de tamanho inválido para dispositivo verity." + +#: lib/verity/verity_hash.c:293 +msgid "Hash area overflow." +msgstr "Estouro de área de hash." + +#: lib/verity/verity_hash.c:370 +msgid "Verification of data area failed." +msgstr "Verificação da área de dados falhou." + +#: lib/verity/verity_hash.c:375 +msgid "Verification of root hash failed." +msgstr "Verificação do hash raiz falhou." + +#: lib/verity/verity_hash.c:381 +msgid "Input/output error while creating hash area." +msgstr "Erro de entrada/saída enquanto criava área de hash." + +#: lib/verity/verity_hash.c:383 +msgid "Creation of hash area failed." +msgstr "Criação da área de hash falhou." + +#: lib/verity/verity_hash.c:430 +#, c-format +msgid "WARNING: Kernel cannot activate device if data block size exceeds page size (%u)." +msgstr "AVISO: O kernel não pode ativar um dispositivo se o tamanho do bloco de dados exceder o tamanho da página (%u)." + +#: lib/verity/verity_fec.c:132 +msgid "Failed to allocate RS context." +msgstr "Falha ao alocar contexto de RS." + +#: lib/verity/verity_fec.c:147 +msgid "Failed to allocate buffer." +msgstr "Falha ao alocar buffer." + +#: lib/verity/verity_fec.c:157 +#, c-format +msgid "Failed to read RS block % byte %d." +msgstr "Falha ao ler byte %2$d de bloco RS %1$." + +#: lib/verity/verity_fec.c:170 +#, c-format +msgid "Failed to read parity for RS block %." +msgstr "Falha ao ler paridade para o bloco RS %." + +#: lib/verity/verity_fec.c:178 +#, c-format +msgid "Failed to repair parity for block %." +msgstr "Falha ao corrigir paridade para o bloco %." + +#: lib/verity/verity_fec.c:189 +#, c-format +msgid "Failed to write parity for RS block %." +msgstr "Falha ao escrever paridade para o bloco RS %." + +#: lib/verity/verity_fec.c:224 +msgid "Block sizes must match for FEC." +msgstr "Tamanhos de bolcos devem corresponder para FEC." + +#: lib/verity/verity_fec.c:230 +msgid "Invalid number of parity bytes." +msgstr "Número inválido de paridade de bytes." + +#: lib/verity/verity_fec.c:266 +#, c-format +msgid "Failed to determine size for device %s." +msgstr "Falha ao determinar o tamanho para dispositivo %s." + +#: lib/integrity/integrity.c:241 lib/integrity/integrity.c:306 +msgid "Kernel doesn't support dm-integrity mapping." +msgstr "O kernel não oferece suporte a mapeamento dm-integrity." + +#: lib/luks2/luks2_disk_metadata.c:383 lib/luks2/luks2_json_metadata.c:959 +#: lib/luks2/luks2_json_metadata.c:1245 +#, c-format +msgid "Failed to acquire write lock on device %s." +msgstr "Falha ao obter trava de escrita no dispositivo %s." + +#: lib/luks2/luks2_disk_metadata.c:392 +msgid "Detected attempt for concurrent LUKS2 metadata update. Aborting operation." +msgstr "" + +#: 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 "" +"O dispositivo contém assinaturas ambíguas, falha ao autorrecuperar LUKS2.\n" +"Por favor, execute \"cryptsetup repair\" para recuperação." + +#: lib/luks2/luks2_json_format.c:227 +msgid "Requested data offset is too small." +msgstr "A posição dos dados requisitados é muito pequena." + +#: 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 "AVISO: área de slot de chaves (% bytes) é muito pequena, a contagem de slot de chaves LUKS2 disponível é muito limitada.\n" + +#: lib/luks2/luks2_json_metadata.c:946 lib/luks2/luks2_json_metadata.c:1075 +#: lib/luks2/luks2_json_metadata.c:1151 lib/luks2/luks2_keyslot_luks2.c:92 +#: lib/luks2/luks2_keyslot_luks2.c:114 +#, c-format +msgid "Failed to acquire read lock on device %s." +msgstr "Falha ao obter trava de leitura no dispositivo %s." + +#: lib/luks2/luks2_json_metadata.c:1168 +#, c-format +msgid "Forbidden LUKS2 requirements detected in backup %s." +msgstr "Requisitos LUKS2 proibidos detectados na cópia de segurança %s." + +#: lib/luks2/luks2_json_metadata.c:1209 +msgid "Data offset differ on device and backup, restore failed." +msgstr "Posição de dados diverge entre dispositivo e cópia de segurança, restauração falhou." + +#: lib/luks2/luks2_json_metadata.c:1215 +msgid "Binary header with keyslot areas size differ on device and backup, restore failed." +msgstr "Cabeçalho binário com áreas de slot de chave diverge entre dispositivo e cópia de segurança, restauração falhou." + +#: lib/luks2/luks2_json_metadata.c:1222 +#, c-format +msgid "Device %s %s%s%s%s" +msgstr "Dispositivo %s %s%s%s%s" + +#: lib/luks2/luks2_json_metadata.c:1223 +msgid "does not contain LUKS2 header. Replacing header can destroy data on that device." +msgstr "não contém cabeçalho LUKS2. A substituição do cabeçalho pode destruir dados naquele dispositivo." + +#: lib/luks2/luks2_json_metadata.c:1224 +msgid "already contains LUKS2 header. Replacing header will destroy existing keyslots." +msgstr "já contém cabeçalho LUKS2. A substituição do cabeçalho vai destruir slots de chave existentes." + +#: lib/luks2/luks2_json_metadata.c:1226 +msgid "" +"\n" +"WARNING: unknown LUKS2 requirements detected in real device header!\n" +"Replacing header with backup may corrupt the data on that device!" +msgstr "" +"\n" +"AVISO: requisitos LUKS2 desconhecidos detectados em cabeçalho de\n" +"dispositivo real! Substituir cabeçalho com cópia de segurança pode\n" +"corromper os dados naquele dispositivo!" + +#: lib/luks2/luks2_json_metadata.c:1228 +msgid "" +"\n" +"WARNING: Unfinished offline reencryption detected on the device!\n" +"Replacing header with backup may corrupt data." +msgstr "" +"\n" +"AVISO: recriptografia offline não finalizada detectada no dispositivo!\n" +"Substituir cabeçalho com cópia de segurança pode corromper os dados." + +#: lib/luks2/luks2_json_metadata.c:1324 +#, c-format +msgid "Ignored unknown flag %s." +msgstr "Sinalizador desconhecido %s ignorado." + +#: lib/luks2/luks2_json_metadata.c:2011 lib/luks2/luks2_reencrypt.c:1746 +#, c-format +msgid "Missing key for dm-crypt segment %u" +msgstr "" + +#: lib/luks2/luks2_json_metadata.c:2023 lib/luks2/luks2_reencrypt.c:1764 +#, fuzzy +msgid "Failed to set dm-crypt segment." +msgstr "Falha ao consultar o segmento dm-%s." + +#: lib/luks2/luks2_json_metadata.c:2029 lib/luks2/luks2_reencrypt.c:1770 +#, fuzzy +msgid "Failed to set dm-linear segment." +msgstr "Falha ao consultar o segmento dm-%s." + +#: lib/luks2/luks2_json_metadata.c:2156 +msgid "Unsupported device integrity configuration." +msgstr "" + +#: lib/luks2/luks2_json_metadata.c:2242 +msgid "Reencryption in-progress. Cannot deactivate device." +msgstr "" + +#: lib/luks2/luks2_json_metadata.c:2253 lib/luks2/luks2_reencrypt.c:3171 +#, c-format +msgid "Failed to replace suspended device %s with dm-error target." +msgstr "" + +#: lib/luks2/luks2_json_metadata.c:2333 +msgid "Failed to read LUKS2 requirements." +msgstr "Falha ao ler requisitos LUKS2." + +#: lib/luks2/luks2_json_metadata.c:2340 +msgid "Unmet LUKS2 requirements detected." +msgstr "Requisitos LUKS2 não atendidos detectados." + +#: lib/luks2/luks2_json_metadata.c:2348 +msgid "Offline reencryption in progress. Aborting." +msgstr "Recriptografia offline em progresso. Abortando." + +#: lib/luks2/luks2_json_metadata.c:2350 +#, fuzzy +msgid "Online reencryption in progress. Aborting." +msgstr "Recriptografia offline em progresso. Abortando." + +#: lib/luks2/luks2_keyslot.c:552 lib/luks2/luks2_keyslot.c:589 +msgid "Not enough available memory to open a keyslot." +msgstr "" + +#: lib/luks2/luks2_keyslot.c:554 lib/luks2/luks2_keyslot.c:591 +#, fuzzy +msgid "Keyslot open failed." +msgstr "Slot de chave %i: sal apagado." + +#: lib/luks2/luks2_keyslot_luks2.c:53 lib/luks2/luks2_keyslot_luks2.c:108 +#, fuzzy, c-format +msgid "Cannot use %s-%s cipher for keyslot encryption." +msgstr "Slot de chave LUKS2: A cifra usada para criptografia de slot de chave" + +#: lib/luks2/luks2_keyslot_luks2.c:480 +msgid "No space for new keyslot." +msgstr "Sem espaço para um novo slot de chave." + +#: lib/luks2/luks2_luks1_convert.c:481 +#, fuzzy, c-format +msgid "Cannot check status of device with uuid: %s." +msgstr "Não foi possível verificar status do dispositivo com uuid: %s." + +#: lib/luks2/luks2_luks1_convert.c:507 +msgid "Unable to convert header with LUKSMETA additional metadata." +msgstr "Não foi possível converter cabeçalho com metadados adicionais LUKSMETA." + +#: lib/luks2/luks2_luks1_convert.c:547 +msgid "Unable to move keyslot area. Not enough space." +msgstr "Não foi possível mover área de slot de chave. Espaço insuficiente." + +#: lib/luks2/luks2_luks1_convert.c:590 lib/luks2/luks2_luks1_convert.c:872 +msgid "Unable to move keyslot area." +msgstr "Não foi possível mover área de slot de chave." + +#: lib/luks2/luks2_luks1_convert.c:682 +#, fuzzy +msgid "Cannot convert to LUKS1 format - default segment encryption sector size is not 512 bytes." +msgstr "Não foi possível converter ao formato LUKS1 - o slot de chave %u não é compatível com LUKS1." + +#: lib/luks2/luks2_luks1_convert.c:690 +msgid "Cannot convert to LUKS1 format - key slot digests are not LUKS1 compatible." +msgstr "Não foi possível converter ao formato LUKS1 - resumos de slot de chave não são compatíveis com LUKS1." + +#: lib/luks2/luks2_luks1_convert.c:702 +#, c-format +msgid "Cannot convert to LUKS1 format - device uses wrapped key cipher %s." +msgstr "Não foi possível converter para o formato LUKS1 - o dispositivo usa cifra de chave envolta %s." + +#: lib/luks2/luks2_luks1_convert.c:710 +#, c-format +msgid "Cannot convert to LUKS1 format - LUKS2 header contains %u token(s)." +msgstr "Não foi possível converter para o formato LUKS1 - o cabeçalho LUKS2 contém %u token(s)." + +#: lib/luks2/luks2_luks1_convert.c:724 +#, c-format +msgid "Cannot convert to LUKS1 format - keyslot %u is in invalid state." +msgstr "Não foi possível converter para o formato LUKS1 - o slot de chave %u está em um estado inválido." + +#: lib/luks2/luks2_luks1_convert.c:729 +#, c-format +msgid "Cannot convert to LUKS1 format - slot %u (over maximum slots) is still active." +msgstr "Não foi possível converter para o formato LUKS1 - o slot %u (acima do máximo de slots) ainda está ativo." + +#: lib/luks2/luks2_luks1_convert.c:734 +#, c-format +msgid "Cannot convert to LUKS1 format - keyslot %u is not LUKS1 compatible." +msgstr "Não foi possível converter ao formato LUKS1 - o slot de chave %u não é compatível com LUKS1." + +#: lib/luks2/luks2_reencrypt.c:892 +#, c-format +msgid "Hotzone size must be multiple of calculated zone alignment (%zu bytes)." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:897 +#, fuzzy, c-format +msgid "Device size must be multiple of calculated zone alignment (%zu bytes)." +msgstr "Tamanho do dispositivo %s não está alinhado com o tamanho de setor requisitado (%u bytes)." + +#: lib/luks2/luks2_reencrypt.c:941 +#, fuzzy, c-format +msgid "Unsupported resilience mode %s" +msgstr "Não há suporte aos parâmetros no dispositivo %s." + +#: lib/luks2/luks2_reencrypt.c:1158 lib/luks2/luks2_reencrypt.c:1313 +#: lib/luks2/luks2_reencrypt.c:1396 lib/luks2/luks2_reencrypt.c:1430 +#: lib/luks2/luks2_reencrypt.c:3011 +#, fuzzy +msgid "Failed to initialize old segment storage wrapper." +msgstr "Falha ao inicializar as sondas de assinatura de dispositivo." + +#: lib/luks2/luks2_reencrypt.c:1172 lib/luks2/luks2_reencrypt.c:1291 +#, fuzzy +msgid "Failed to initialize new segment storage wrapper." +msgstr "Falha ao inicializar as sondas de assinatura de dispositivo." + +#: lib/luks2/luks2_reencrypt.c:1340 +#, fuzzy +msgid "Failed to read checksums for current hotzone." +msgstr "Falha ao ler requisitos do cabeçalho de cópia de segurança." + +#: lib/luks2/luks2_reencrypt.c:1347 lib/luks2/luks2_reencrypt.c:3019 +#, fuzzy, c-format +msgid "Failed to read hotzone area starting at %." +msgstr "Falha ao ler paridade para o bloco RS %." + +#: lib/luks2/luks2_reencrypt.c:1366 +#, fuzzy, c-format +msgid "Failed to decrypt sector %zu." +msgstr "Falha ao obter estado do dispositivo %s." + +#: lib/luks2/luks2_reencrypt.c:1372 +#, fuzzy, c-format +msgid "Failed to recover sector %zu." +msgstr "Falha ao remover o token %d.\n" + +#: lib/luks2/luks2_reencrypt.c:1867 +#, c-format +msgid "Source and target device sizes don't match. Source %, target: %." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:1965 +#, fuzzy, c-format +msgid "Failed to activate hotzone device %s." +msgstr "Falha ao obter estado do dispositivo %s." + +#: lib/luks2/luks2_reencrypt.c:1982 +#, fuzzy, c-format +msgid "Failed to activate overlay device %s with actual origin table." +msgstr "Falha ao sondar o dispositivo %s por uma assinatura." + +#: lib/luks2/luks2_reencrypt.c:1989 +#, fuzzy, c-format +msgid "Failed to load new mapping for device %s." +msgstr "Falha ao determinar o tamanho para dispositivo %s." + +#: lib/luks2/luks2_reencrypt.c:2060 +#, fuzzy +msgid "Failed to refresh reencryption devices stack." +msgstr "Falha ao obter trava de leitura no dispositivo %s." + +#: lib/luks2/luks2_reencrypt.c:2216 +#, fuzzy +msgid "Failed to set new keyslots area size." +msgstr "Falha ao trocar novo slot de chave." + +#: lib/luks2/luks2_reencrypt.c:2318 +#, fuzzy, c-format +msgid "Data shift is not aligned to requested encryption sector size (% bytes)." +msgstr "Tamanho do dispositivo %s não está alinhado com o tamanho de setor requisitado (%u bytes)." + +#: lib/luks2/luks2_reencrypt.c:2339 +#, fuzzy, c-format +msgid "Data device is not aligned to requested encryption sector size (% bytes)." +msgstr "Tamanho do dispositivo %s não está alinhado com o tamanho de setor requisitado (%u bytes)." + +#: lib/luks2/luks2_reencrypt.c:2360 +#, c-format +msgid "Data shift (% sectors) is less than future data offset (% sectors)." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:2366 lib/luks2/luks2_reencrypt.c:2760 +#: lib/luks2/luks2_reencrypt.c:2781 +#, fuzzy, c-format +msgid "Failed to open %s in exclusive mode (already mapped or mounted)." +msgstr "Não foi possível usar o dispositivo %s, o qual está em uso (já mapeado ou montado)." + +#: lib/luks2/luks2_reencrypt.c:2534 +#, fuzzy +msgid "No LUKS2 reencryption in progress." +msgstr "Recriptografia já está em progresso." + +#: lib/luks2/luks2_reencrypt.c:2540 lib/luks2/luks2_reencrypt.c:3276 +#, fuzzy +msgid "Failed to load LUKS2 reencryption context." +msgstr "Falha ao alocar contexto de RS." + +#: lib/luks2/luks2_reencrypt.c:2600 +#, fuzzy +msgid "Failed to get reencryption state." +msgstr "Falha ao obter o token %d para exportação." + +#: lib/luks2/luks2_reencrypt.c:2604 +#, fuzzy +msgid "Device is not in reencryption." +msgstr "O dispositivo \"%s\" não está ativado." + +#: lib/luks2/luks2_reencrypt.c:2611 +#, fuzzy +msgid "Reencryption process is already running." +msgstr "Recriptografia já está em progresso." + +#: lib/luks2/luks2_reencrypt.c:2613 +#, fuzzy +msgid "Failed to acquire reencryption lock." +msgstr "Falha ao obter trava de dispositivo de escrita." + +#: lib/luks2/luks2_reencrypt.c:2631 +msgid "Cannot proceed with reencryption. Run reencryption recovery first." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:2731 +#, fuzzy +msgid "Active device size and requested reencryption size don't match." +msgstr "Tamanho do dispositivo não está alinhado com o tamanho de setor requisitado." + +#: lib/luks2/luks2_reencrypt.c:2745 +msgid "Illegal device size requested in reencryption parameters." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:2815 +#, fuzzy +msgid "Reencryption in-progress. Cannot perform recovery." +msgstr "Recriptografia já está em progresso." + +#: lib/luks2/luks2_reencrypt.c:2887 +msgid "LUKS2 reencryption already initialized in metadata." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:2894 +#, fuzzy +msgid "Failed to initialize LUKS2 reencryption in metadata." +msgstr "Falha ao inicializar os parâmetros padrão de slot de chave LUKS2." + +#: lib/luks2/luks2_reencrypt.c:2985 +#, fuzzy +msgid "Failed to set device segments for next reencryption hotzone." +msgstr "Falha ao sondar o dispositivo %s por uma assinatura." + +#: lib/luks2/luks2_reencrypt.c:3027 +#, fuzzy +msgid "Failed to write reencryption resilience metadata." +msgstr "Falha ao escrever sinalizadores de ativação para novo cabeçalho." + +#: lib/luks2/luks2_reencrypt.c:3034 +#, fuzzy +msgid "Decryption failed." +msgstr "Correção falhou." + +#: lib/luks2/luks2_reencrypt.c:3039 +#, fuzzy, c-format +msgid "Failed to write hotzone area starting at %." +msgstr "Falha ao escrever paridade para o bloco RS %." + +#: lib/luks2/luks2_reencrypt.c:3044 +#, fuzzy +msgid "Failed to sync data." +msgstr "Falha ao definir a posição de dados." + +#: lib/luks2/luks2_reencrypt.c:3052 +msgid "Failed to update metadata after current reencryption hotzone completed." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:3119 +#, fuzzy +msgid "Failed to write LUKS2 metadata." +msgstr "Falha ao ler requisitos LUKS2." + +#: lib/luks2/luks2_reencrypt.c:3142 +#, fuzzy +msgid "Failed to wipe backup segment data." +msgstr "Falha ao apagar assinatura do dispositivo." + +#: lib/luks2/luks2_reencrypt.c:3155 +#, fuzzy +msgid "Failed to disable reencryption requirement flag." +msgstr "Falha ao ler requisitos LUKS2." + +#: lib/luks2/luks2_reencrypt.c:3163 +#, c-format +msgid "Fatal error while reencrypting chunk starting at %, % sectors long." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:3172 +msgid "Do not resume the device unless replaced with error target manually." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:3221 +msgid "Cannot proceed with reencryption. Unexpected reencryption status." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:3227 +msgid "Missing or invalid reencrypt context." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:3234 +#, fuzzy +msgid "Failed to initialize reencryption device stack." +msgstr "Falha ao inicializar as sondas de assinatura de dispositivo." + +#: lib/luks2/luks2_reencrypt.c:3253 lib/luks2/luks2_reencrypt.c:3289 +#, fuzzy +msgid "Failed to update reencryption context." +msgstr "Falha ao alocar contexto de RS." + +#: lib/luks2/luks2_token.c:262 +msgid "No free token slot." +msgstr "Nenhum slot de token livre." + +#: lib/luks2/luks2_token.c:269 +#, c-format +msgid "Failed to create builtin token %s." +msgstr "Falha ao criar um token incorporado %s." + +#: src/cryptsetup.c:162 +msgid "Can't do passphrase verification on non-tty inputs." +msgstr "Não é possível fazer verificação de senha em entradas diferente de tty." + +#: src/cryptsetup.c:215 +msgid "Keyslot encryption parameters can be set only for LUKS2 device." +msgstr "Parâmetros de criptografia de slot de chaves só pode ser definido para dispositivo LUKS2." + +#: src/cryptsetup.c:245 src/cryptsetup.c:893 src/cryptsetup.c:1212 +#: src/cryptsetup.c:3011 src/cryptsetup_reencrypt.c:715 +#: src/cryptsetup_reencrypt.c:785 +msgid "No known cipher specification pattern detected." +msgstr "Nenhum padrão de especificação de cifra conhecida foi detectada." + +#: src/cryptsetup.c:253 +msgid "WARNING: The --hash parameter is being ignored in plain mode with keyfile specified.\n" +msgstr "AVISO: O parâmetro de --hash está sendo ignorado claro com o arquivo de chave especificado.\n" + +#: src/cryptsetup.c:261 +msgid "WARNING: The --keyfile-size option is being ignored, the read size is the same as the encryption key size.\n" +msgstr "AVISO: A opção --keyfile-size está sendo ignorada, o tamanho lido é o mesmo que o tamanho da chave de criptografia.\n" + +#: src/cryptsetup.c:301 +#, c-format +msgid "Detected device signature(s) on %s. Proceeding further may damage existing data." +msgstr "Detectada assinatura(s) de dispositivo em %s. Prosseguir pode danificar dados existentes." + +#: src/cryptsetup.c:307 src/cryptsetup.c:1038 src/cryptsetup.c:1090 +#: src/cryptsetup.c:1189 src/cryptsetup.c:1262 src/cryptsetup.c:1913 +#: src/cryptsetup.c:2545 src/cryptsetup.c:2668 src/integritysetup.c:232 +msgid "Operation aborted.\n" +msgstr "Operação abortada.\n" + +#: src/cryptsetup.c:375 +msgid "Option --key-file is required." +msgstr "A opção --key-file é necessária." + +#: src/cryptsetup.c:428 +msgid "Enter VeraCrypt PIM: " +msgstr "Insira o PIM VeraCrypt: " + +#: src/cryptsetup.c:437 +msgid "Invalid PIM value: parse error." +msgstr "Valor de PIM inválido: erro de análise." + +#: src/cryptsetup.c:440 +msgid "Invalid PIM value: 0." +msgstr "Valor de PIM inválido: 0." + +#: src/cryptsetup.c:443 +msgid "Invalid PIM value: outside of range." +msgstr "Valor de PIM inválido: fora do intervalo." + +#: src/cryptsetup.c:466 +msgid "No device header detected with this passphrase." +msgstr "Nenhum cabeçalho de dispositivo detectado com esta senha." + +#: src/cryptsetup.c:528 src/cryptsetup.c:1940 +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 "" +"O despejo de cabeçalho com chave de volume é uma informação sensível\n" +"que permite acesso a uma partição criptografada sem senha.\n" +"Este despejo deve sempre ser armazenado criptografado em um local seguro." + +#: src/cryptsetup.c:607 +#, c-format +msgid "Device %s is still active and scheduled for deferred removal.\n" +msgstr "O dispositivo %s ainda está ativo e agendado para a remoção atrasada.\n" + +#: src/cryptsetup.c:635 +msgid "Resize of active device requires volume key in keyring but --disable-keyring option is set." +msgstr "Redimensionamento de dispositivo ativo requer chave de volume no chaveiro, mas a opção --disable-keyring está definida." + +#: src/cryptsetup.c:771 +msgid "Benchmark interrupted." +msgstr "Teste interrompido." + +#: src/cryptsetup.c:792 +#, c-format +msgid "PBKDF2-%-9s N/A\n" +msgstr "PBKDF2-%-9s N/A\n" + +#: src/cryptsetup.c:794 +#, c-format +msgid "PBKDF2-%-9s %7u iterations per second for %zu-bit key\n" +msgstr "PBKDF2-%-9s %7u iterações por segundo para chave de %zu bits\n" + +#: src/cryptsetup.c:808 +#, c-format +msgid "%-10s N/A\n" +msgstr "%-10s N/D\n" + +#: src/cryptsetup.c:810 +#, c-format +msgid "%-10s %4u iterations, %5u memory, %1u parallel threads (CPUs) for %zu-bit key (requested %u ms time)\n" +msgstr "%-10s %4u iterações, %5u memória, %1u threads paralelas (CPUs) para chave de %zu bits (requisitado tempo de %u ms)\n" + +#: src/cryptsetup.c:834 +msgid "Result of benchmark is not reliable." +msgstr "O resultado do teste não é confiável." + +#: src/cryptsetup.c:885 +msgid "# Tests are approximate using memory only (no storage IO).\n" +msgstr "# Testes são aproximados usando apenas memória (sem E/S de armazenamento).\n" + +#. TRANSLATORS: The string is header of a table and must be exactly (right side) aligned. +#: src/cryptsetup.c:919 +#, c-format +msgid "#%*s Algorithm | Key | Encryption | Decryption\n" +msgstr "#%*s Algoritmo | Chave | Criptografia | Descriptografia\n" + +#: src/cryptsetup.c:923 +#, c-format +msgid "Cipher %s is not available." +msgstr "A cifra %s não está disponível." + +#. TRANSLATORS: The string is header of a table and must be exactly (right side) aligned. +#: src/cryptsetup.c:943 +msgid "# Algorithm | Key | Encryption | Decryption\n" +msgstr "# Algoritmo | Chave | Criptografia | Descriptografia\n" + +#: src/cryptsetup.c:952 +msgid "N/A" +msgstr "N/D" + +#: src/cryptsetup.c:1031 +msgid "" +"Seems device does not require reencryption recovery.\n" +"Do you want to proceed anyway?" +msgstr "" + +#: src/cryptsetup.c:1037 +msgid "Really proceed with LUKS2 reencryption recovery?" +msgstr "" + +#: src/cryptsetup.c:1046 +#, fuzzy +msgid "Enter passphrase for reencryption recovery: " +msgstr "Digite uma senha para slot de chave a ser convertido: " + +#: src/cryptsetup.c:1089 +msgid "Really try to repair LUKS device header?" +msgstr "Realmente tentar corrigir o cabeçalho do dispositivo LUKS?" + +#: src/cryptsetup.c:1108 src/integritysetup.c:145 +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 "" +"Apando dispositivo para inicializar a verificação de soma de integridade.\n" +"Você pode interromper isso pressionando CTRL+C (o resto dos dispositivo não apagado conterão verificação de soma inválida).\n" + +#: src/cryptsetup.c:1130 src/integritysetup.c:167 +#, c-format +msgid "Cannot deactivate temporary device %s." +msgstr "Não foi possível desativar o dispositivo temporário %s." + +#: src/cryptsetup.c:1174 +msgid "Integrity option can be used only for LUKS2 format." +msgstr "A opção de integridade pode ser usada apenas para o formato LUKS2." + +#: src/cryptsetup.c:1179 src/cryptsetup.c:1239 +msgid "Unsupported LUKS2 metadata size options." +msgstr "Não há suporte às opções de tamanho de metadados LUKS." + +#: src/cryptsetup.c:1196 +#, c-format +msgid "Cannot create header file %s." +msgstr "Não foi possível criar o arquivo de cabeçalho %s." + +#: src/cryptsetup.c:1219 src/integritysetup.c:194 src/integritysetup.c:203 +#: src/integritysetup.c:212 src/integritysetup.c:279 src/integritysetup.c:288 +#: src/integritysetup.c:298 +msgid "No known integrity specification pattern detected." +msgstr "Nenhum padrão de especificação de integridade conhecida foi detectado." + +#: src/cryptsetup.c:1232 +#, c-format +msgid "Cannot use %s as on-disk header." +msgstr "Não foi possível usar %s como um cabeçalho em disco." + +#: src/cryptsetup.c:1256 src/integritysetup.c:226 +#, c-format +msgid "This will overwrite data on %s irrevocably." +msgstr "Isto vai sobrescrever dados em %s permanentemente." + +#: src/cryptsetup.c:1297 src/cryptsetup.c:1627 src/cryptsetup.c:1694 +#: src/cryptsetup.c:1796 src/cryptsetup.c:1862 src/cryptsetup_reencrypt.c:545 +msgid "Failed to set pbkdf parameters." +msgstr "Falha ao definir os parâmetros de pbkdf." + +#: src/cryptsetup.c:1378 +msgid "Reduced data offset is allowed only for detached LUKS header." +msgstr "Posição de dados reduzida é permitido apenas cabeçalho LUKS desanexado." + +#: src/cryptsetup.c:1389 src/cryptsetup.c:1700 +msgid "Cannot determine volume key size for LUKS without keyslots, please use --key-size option." +msgstr "" + +#: src/cryptsetup.c:1427 +msgid "Device activated but cannot make flags persistent." +msgstr "Dispositivo ativado, mas não foi possível tornar os sinalizadores persistentes." + +#: src/cryptsetup.c:1508 src/cryptsetup.c:1578 +#, c-format +msgid "Keyslot %d is selected for deletion." +msgstr "Slot de chave %d selecionado para exclusão." + +#: src/cryptsetup.c:1520 src/cryptsetup.c:1581 +msgid "This is the last keyslot. Device will become unusable after purging this key." +msgstr "Este é o último slot de chave. O dispositivo se tornará não usável após apagar esta chave." + +#: src/cryptsetup.c:1521 +msgid "Enter any remaining passphrase: " +msgstr "Digite qualquer senha remanescente: " + +#: src/cryptsetup.c:1522 src/cryptsetup.c:1583 +msgid "Operation aborted, the keyslot was NOT wiped.\n" +msgstr "Operação abortada, o slot de chave NÃO foi apagado.\n" + +#: src/cryptsetup.c:1560 +msgid "Enter passphrase to be deleted: " +msgstr "Digite a senha para ser excluída: " + +#: src/cryptsetup.c:1641 src/cryptsetup.c:1715 src/cryptsetup.c:1749 +msgid "Enter new passphrase for key slot: " +msgstr "Digite uma senha para o slot de chave: " + +#: src/cryptsetup.c:1732 src/cryptsetup_reencrypt.c:1327 +#, c-format +msgid "Enter any existing passphrase: " +msgstr "Digite qualquer senha existente: " + +#: src/cryptsetup.c:1800 +msgid "Enter passphrase to be changed: " +msgstr "Digite a senha para ser alterada: " + +#: src/cryptsetup.c:1816 src/cryptsetup_reencrypt.c:1313 +msgid "Enter new passphrase: " +msgstr "Digite uma nova senha: " + +#: src/cryptsetup.c:1866 +msgid "Enter passphrase for keyslot to be converted: " +msgstr "Digite uma senha para slot de chave a ser convertido: " + +#: src/cryptsetup.c:1890 +msgid "Only one device argument for isLuks operation is supported." +msgstr "Há suporte apenas a um argumento de dispositivo para a operação isLuks." + +#: src/cryptsetup.c:2074 src/cryptsetup.c:2095 +msgid "Option --header-backup-file is required." +msgstr "A opção --header-backup-file é necessária." + +#: src/cryptsetup.c:2125 +#, c-format +msgid "%s is not cryptsetup managed device." +msgstr "%s não é um dispositivo cryptsetup gerenciado." + +#: src/cryptsetup.c:2136 +#, c-format +msgid "Refresh is not supported for device type %s" +msgstr "A renovação não oferece suporte a este tipo de dispositivo %s" + +#: src/cryptsetup.c:2174 +#, c-format +msgid "Unrecognized metadata device type %s." +msgstr "Tipo de dispositivo de metadados %s não reconhecido." + +#: src/cryptsetup.c:2177 +msgid "Command requires device and mapped name as arguments." +msgstr "O comando requer um dispositivo e nome mapeado como argumentos." + +#: src/cryptsetup.c:2199 +#, c-format +msgid "" +"This operation will erase all keyslots on device %s.\n" +"Device will become unusable after this operation." +msgstr "" +"Esta operação vai apagar todos os slots de chave no dispositivo %s.\n" +"O dispositivo se tornará não usável após esta operação." + +#: src/cryptsetup.c:2206 +msgid "Operation aborted, keyslots were NOT wiped.\n" +msgstr "Operação abortada, os slots de chave NÃO foram apagados.\n" + +#: src/cryptsetup.c:2243 +msgid "Invalid LUKS type, only luks1 and luks2 are supported." +msgstr "Tipo de LUKS inválido, há suporte apenas a luks1 e luks2." + +#: src/cryptsetup.c:2261 +#, c-format +msgid "Device is already %s type." +msgstr "O dispositivo já é do tipo %s." + +#: src/cryptsetup.c:2266 +#, c-format +msgid "This operation will convert %s to %s format.\n" +msgstr "Essa operação vai converter %s para o formato %s.\n" + +#: src/cryptsetup.c:2272 +msgid "Operation aborted, device was NOT converted.\n" +msgstr "Operação abortada, o dispositivo NÃO foi convertido.\n" + +#: src/cryptsetup.c:2312 +msgid "Option --priority, --label or --subsystem is missing." +msgstr "Está faltando a opção --priority, --label ou --subsystem." + +#: src/cryptsetup.c:2346 src/cryptsetup.c:2379 src/cryptsetup.c:2402 +#, c-format +msgid "Token %d is invalid." +msgstr "O token %d é inválido." + +#: src/cryptsetup.c:2349 src/cryptsetup.c:2405 +#, c-format +msgid "Token %d in use." +msgstr "O token %d em uso." + +#: src/cryptsetup.c:2356 +#, c-format +msgid "Failed to add luks2-keyring token %d." +msgstr "Falha ao adicionar o token de chaveiro luks2 %d." + +#: src/cryptsetup.c:2365 src/cryptsetup.c:2427 +#, c-format +msgid "Failed to assign token %d to keyslot %d." +msgstr "Falha ao atribuir o token %d ao slot de chave %d." + +#: src/cryptsetup.c:2382 +#, c-format +msgid "Token %d is not in use." +msgstr "O token %d não está em uso." + +#: src/cryptsetup.c:2417 +msgid "Failed to import token from file." +msgstr "Falha ao abrir arquivo de chave." + +#: src/cryptsetup.c:2442 +#, c-format +msgid "Failed to get token %d for export." +msgstr "Falha ao obter o token %d para exportação." + +#: src/cryptsetup.c:2457 +msgid "--key-description parameter is mandatory for token add action." +msgstr "O parâmetro --key-description é obrigatório para ação de adicionar token." + +#: src/cryptsetup.c:2463 src/cryptsetup.c:2471 +msgid "Action requires specific token. Use --token-id parameter." +msgstr "A ação requer um token específico. Use o parâmetro --token-id." + +#: src/cryptsetup.c:2476 +#, c-format +msgid "Invalid token operation %s." +msgstr "Operação de token inválida %s." + +#: src/cryptsetup.c:2531 +#, c-format +msgid "Auto-detected active dm device '%s' for data device %s.\n" +msgstr "" + +#: src/cryptsetup.c:2535 +#, fuzzy, c-format +msgid "Device %s is not a block device.\n" +msgstr "O dispositivo %s não é um dispositivo LUKS válido." + +#: src/cryptsetup.c:2537 +#, fuzzy, c-format +msgid "Failed to auto-detect device %s holders." +msgstr "Falha ao obter estado do dispositivo %s." + +#: src/cryptsetup.c:2539 +#, 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 "" + +#: src/cryptsetup.c:2619 +#, fuzzy +msgid "Invalid LUKS device type." +msgstr "Dispositivo inválido %s." + +#: src/cryptsetup.c:2624 +msgid "Encryption without detached header (--header) is not possible without data device size reduction (--reduce-device-size)." +msgstr "" + +#: src/cryptsetup.c:2629 +msgid "Requested data offset must be less than or equal to half of --reduce-device-size parameter." +msgstr "" + +#: src/cryptsetup.c:2638 +#, c-format +msgid "Adjusting --reduce-device-size value to twice the --offset % (sectors).\n" +msgstr "" + +#: src/cryptsetup.c:2642 +#, fuzzy +msgid "Encryption is supported only for LUKS2 format." +msgstr "A opção de integridade pode ser usada apenas para o formato LUKS2." + +#: src/cryptsetup.c:2664 +#, c-format +msgid "Detected LUKS device on %s. Do you want to encrypt that LUKS device again?" +msgstr "" + +#: src/cryptsetup.c:2679 +#, fuzzy, c-format +msgid "Temporary header file %s already exists. Aborting." +msgstr "O arquivo de cópia de segurança de cabeçalho requisitado %s já existe." + +#: src/cryptsetup.c:2681 src/cryptsetup.c:2688 +#, fuzzy, c-format +msgid "Cannot create temporary header file %s." +msgstr "Não foi possível criar o arquivo de cabeçalho %s." + +#: src/cryptsetup.c:2752 +#, c-format +msgid "%s/%s is now active and ready for online encryption." +msgstr "" + +#: src/cryptsetup.c:2919 src/cryptsetup.c:2925 +#, fuzzy +msgid "Not enough free keyslots for reencryption." +msgstr "Não altera chave, nenhuma área de dados de recriptografia" + +#: src/cryptsetup.c:2945 src/cryptsetup_reencrypt.c:1284 +msgid "Key file can be used only with --key-slot or with exactly one key slot active." +msgstr "O arquivo de chave pode ser usado apenas com --key-slot ou com exatamente um slot de chave ativado." + +#: src/cryptsetup.c:2954 src/cryptsetup_reencrypt.c:1325 +#: src/cryptsetup_reencrypt.c:1336 +#, fuzzy, c-format +msgid "Enter passphrase for key slot %d: " +msgstr "Digite uma senha para o slot de chave %u: " + +#: src/cryptsetup.c:2962 +#, c-format +msgid "Enter passphrase for key slot %u: " +msgstr "Digite uma senha para o slot de chave %u: " + +#: src/cryptsetup.c:3129 +#, fuzzy +msgid "Command requires device as argument." +msgstr "O comando requer um dispositivo e nome mapeado como argumentos." + +#: src/cryptsetup.c:3151 +msgid "Only LUKS2 format is currently supported. Please use cryptsetup-reencrypt tool for LUKS1." +msgstr "" + +#: src/cryptsetup.c:3163 +msgid "Legacy offline reencryption already in-progress. Use cryptsetup-reencrypt utility." +msgstr "" + +#: src/cryptsetup.c:3173 src/cryptsetup_reencrypt.c:178 +msgid "Reencryption of device with integrity profile is not supported." +msgstr "Não há suporte a recriptografia de dispositivo com perfil de integridade." + +#: src/cryptsetup.c:3181 +msgid "LUKS2 reencryption already initialized. Aborting operation." +msgstr "" + +#: src/cryptsetup.c:3185 +#, fuzzy +msgid "LUKS2 device is not in reencryption." +msgstr "Arquivo log %s existe, resumindo recriptografia.\n" + +#: src/cryptsetup.c:3212 +msgid " [--type ] []" +msgstr " [--type ] []" + +#: src/cryptsetup.c:3212 src/veritysetup.c:358 src/integritysetup.c:470 +msgid "open device as " +msgstr "abre dispositivo como " + +#: src/cryptsetup.c:3213 src/cryptsetup.c:3214 src/cryptsetup.c:3215 +#: src/veritysetup.c:359 src/veritysetup.c:360 src/integritysetup.c:471 +#: src/integritysetup.c:472 +msgid "" +msgstr "" + +#: src/cryptsetup.c:3213 src/veritysetup.c:359 src/integritysetup.c:471 +msgid "close device (remove mapping)" +msgstr "fecha dispositivo (remove mapeamento)" + +#: src/cryptsetup.c:3214 +msgid "resize active device" +msgstr "redimensiona dispositivo ativado" + +#: src/cryptsetup.c:3215 +msgid "show device status" +msgstr "mostra o estado do dispositivo" + +#: src/cryptsetup.c:3216 +msgid "[--cipher ]" +msgstr "[--cipher ]" + +#: src/cryptsetup.c:3216 +msgid "benchmark cipher" +msgstr "testa a cifra" + +#: src/cryptsetup.c:3217 src/cryptsetup.c:3218 src/cryptsetup.c:3219 +#: src/cryptsetup.c:3220 src/cryptsetup.c:3221 src/cryptsetup.c:3228 +#: src/cryptsetup.c:3229 src/cryptsetup.c:3230 src/cryptsetup.c:3231 +#: src/cryptsetup.c:3232 src/cryptsetup.c:3233 src/cryptsetup.c:3234 +#: src/cryptsetup.c:3235 +msgid "" +msgstr "" + +#: src/cryptsetup.c:3217 +msgid "try to repair on-disk metadata" +msgstr "tente corrigir os metadados em disco" + +#: src/cryptsetup.c:3218 +#, fuzzy +msgid "reencrypt LUKS2 device" +msgstr "adiciona uma chave ao dispositivo LUKS" + +#: src/cryptsetup.c:3219 +msgid "erase all keyslots (remove encryption key)" +msgstr "apaga todos os slots de chave (remove a chave de criptografia)" + +#: src/cryptsetup.c:3220 +msgid "convert LUKS from/to LUKS2 format" +msgstr "converte formato LUKS de/para LUKS2" + +#: src/cryptsetup.c:3221 +msgid "set permanent configuration options for LUKS2" +msgstr "define opções de configuração permanentes para LUKS2" + +#: src/cryptsetup.c:3222 src/cryptsetup.c:3223 +msgid " []" +msgstr " []" + +#: src/cryptsetup.c:3222 +msgid "formats a LUKS device" +msgstr "formata um dispositivo LUKS" + +#: src/cryptsetup.c:3223 +msgid "add key to LUKS device" +msgstr "adiciona uma chave ao dispositivo LUKS" + +#: src/cryptsetup.c:3224 src/cryptsetup.c:3225 src/cryptsetup.c:3226 +msgid " []" +msgstr " []" + +#: src/cryptsetup.c:3224 +msgid "removes supplied key or key file from LUKS device" +msgstr "remove a chave ou arquivo chave fornecidos do dispositivo LUKS" + +#: src/cryptsetup.c:3225 +msgid "changes supplied key or key file of LUKS device" +msgstr "altera a chave ou arquivo chave fornecidos do dispositivo LUKS" + +#: src/cryptsetup.c:3226 +msgid "converts a key to new pbkdf parameters" +msgstr "converte uma chave aos novos parâmetros de pbkdf" + +#: src/cryptsetup.c:3227 +msgid " " +msgstr " " + +#: src/cryptsetup.c:3227 +msgid "wipes key with number from LUKS device" +msgstr "apaga chave com número do dispositivo LUKS" + +#: src/cryptsetup.c:3228 +msgid "print UUID of LUKS device" +msgstr "emite UUID do dispositivo LUKS" + +#: src/cryptsetup.c:3229 +msgid "tests for LUKS partition header" +msgstr "testa por cabeçalho de partição LUKS" + +#: src/cryptsetup.c:3230 +msgid "dump LUKS partition information" +msgstr "despeja informação da partição LUKS" + +#: src/cryptsetup.c:3231 +msgid "dump TCRYPT device information" +msgstr "despeja informação do dispositivo TCRYPT" + +#: src/cryptsetup.c:3232 +msgid "Suspend LUKS device and wipe key (all IOs are frozen)" +msgstr "Suspende dispositivo LUKS e apaga chave (todas E/S ficam congeladas)" + +#: src/cryptsetup.c:3233 +msgid "Resume suspended LUKS device" +msgstr "Resume dispositivo LUKS suspenso" + +#: src/cryptsetup.c:3234 +msgid "Backup LUKS device header and keyslots" +msgstr "Faz uma cópia de segurança de slots de chave e cabeçalho de dispositivo LUKS" + +#: src/cryptsetup.c:3235 +msgid "Restore LUKS device header and keyslots" +msgstr "Restaura slots de chave e cabeçalho de dispositivo LUKS" + +#: src/cryptsetup.c:3236 +msgid " " +msgstr " " + +#: src/cryptsetup.c:3236 +msgid "Manipulate LUKS2 tokens" +msgstr "Manipula tokens LUKS2" + +#: src/cryptsetup.c:3254 src/veritysetup.c:376 src/integritysetup.c:488 +msgid "" +"\n" +" is one of:\n" +msgstr "" +"\n" +" é um entre:\n" + +#: src/cryptsetup.c:3260 +msgid "" +"\n" +"You can also use old syntax aliases:\n" +"\topen: create (plainOpen), luksOpen, loopaesOpen, tcryptOpen\n" +"\tclose: remove (plainClose), luksClose, loopaesClose, tcryptClose\n" +msgstr "" +"\n" +"Você também pode usar apelidos de sintaxe antigos:\n" +"\topen: create (plainOpen), luksOpen, loopaesOpen, tcryptOpen\n" +"\tclose: remove (plainClose), luksClose, loopaesClose, tcryptClose\n" + +#: src/cryptsetup.c:3264 +#, c-format +msgid "" +"\n" +" is the device to create under %s\n" +" is the encrypted device\n" +" is the LUKS key slot number to modify\n" +" optional key file for the new key for luksAddKey action\n" +msgstr "" +"\n" +" é o dispositivo a ser criado sob %s\n" +" é o dispositivo criptografado\n" +" é o número do slot de chave LUKS a ser modificado\n" +" arquivo de chave opcional para a nova chave para a ação luksAddKey\n" + +#: src/cryptsetup.c:3271 +#, c-format +msgid "" +"\n" +"Default compiled-in metadata format is %s (for luksFormat action).\n" +msgstr "" +"\n" +"O formato padrão de metadados compilados é %s (para a ação luksFormat).\n" + +#: src/cryptsetup.c:3276 +#, c-format +msgid "" +"\n" +"Default compiled-in key and passphrase parameters:\n" +"\tMaximum keyfile size: %dkB, Maximum interactive passphrase length %d (characters)\n" +"Default PBKDF for LUKS1: %s, iteration time: %d (ms)\n" +"Default PBKDF for LUKS2: %s\n" +"\tIteration time: %d, Memory required: %dkB, Parallel threads: %d\n" +msgstr "" +"\n" +"Parâmetros padrões de senha e chave compilados internamente:\n" +"\tTamanho do arquivo chave máximo: %dkB, Tamanho máximo de senha interativa %d (caracteres)\n" +"PBKDF padrão para LUKS1: %s, tempo de iteração: %d (ms)\n" +"PBKDF padrão para LUKS2: %s\n" +"\tTempo de iteração: %d: memória exigida: %dkB, Threads paralelas: %d\n" + +#: src/cryptsetup.c:3287 +#, c-format +msgid "" +"\n" +"Default compiled-in device cipher parameters:\n" +"\tloop-AES: %s, Key %d bits\n" +"\tplain: %s, Key: %d bits, Password hashing: %s\n" +"\tLUKS: %s, Key: %d bits, LUKS header hashing: %s, RNG: %s\n" +msgstr "" +"\n" +"Parâmetros de cifra de dispositivo pré-compilados por padrão:\n" +"\tloop-AES: %s, Chave %d bits\n" +"\tplain: %s, Chave: %d bits, Hash de senha: %s\n" +"\tLUKS: %s, Chave: %d bits, Hash de cabeçalho LUKS: %s, RNG: %s\n" + +#: src/cryptsetup.c:3296 +msgid "\tLUKS: Default keysize with XTS mode (two internal keys) will be doubled.\n" +msgstr "\tLUKS: keysize padrão com modo XTS (duas chaves internas) será duplicado.\n" + +#: src/cryptsetup.c:3312 src/veritysetup.c:532 src/integritysetup.c:630 +#, c-format +msgid "%s: requires %s as arguments" +msgstr "%s: necessita %s como argumentos" + +#: src/cryptsetup.c:3350 src/veritysetup.c:421 src/integritysetup.c:527 +#: src/cryptsetup_reencrypt.c:1591 +msgid "Show this help message" +msgstr "Mostra essa mensagem de ajuda" + +#: src/cryptsetup.c:3351 src/veritysetup.c:422 src/integritysetup.c:528 +#: src/cryptsetup_reencrypt.c:1592 +msgid "Display brief usage" +msgstr "Exibe instrução de uso" + +#: src/cryptsetup.c:3352 src/veritysetup.c:423 src/integritysetup.c:529 +#: src/cryptsetup_reencrypt.c:1593 +msgid "Print package version" +msgstr "Emite a versão do pacote" + +#: src/cryptsetup.c:3356 src/veritysetup.c:427 src/integritysetup.c:533 +#: src/cryptsetup_reencrypt.c:1597 +msgid "Help options:" +msgstr "Opções de ajuda:" + +#: src/cryptsetup.c:3357 src/veritysetup.c:428 src/integritysetup.c:534 +#: src/cryptsetup_reencrypt.c:1598 +msgid "Shows more detailed error messages" +msgstr "Mostra mensagens de erro mais detalhadas" + +#: src/cryptsetup.c:3358 src/veritysetup.c:429 src/integritysetup.c:535 +#: src/cryptsetup_reencrypt.c:1599 +msgid "Show debug messages" +msgstr "Mostra mensagens de depuração" + +#: src/cryptsetup.c:3359 +msgid "Show debug messages including JSON metadata" +msgstr "Mostra mensagens de depuração incluindo metadados JSON" + +#: src/cryptsetup.c:3360 src/cryptsetup_reencrypt.c:1601 +msgid "The cipher used to encrypt the disk (see /proc/crypto)" +msgstr "A cifra usada para criptografar o disco (veja /proc/crypto)" + +#: src/cryptsetup.c:3361 src/cryptsetup_reencrypt.c:1603 +msgid "The hash used to create the encryption key from the passphrase" +msgstr "A hash usada para criar a chave de criptografia a partir da senha" + +#: src/cryptsetup.c:3362 +msgid "Verifies the passphrase by asking for it twice" +msgstr "Verifica a senha perguntando-a duas vezes" + +#: src/cryptsetup.c:3363 src/cryptsetup_reencrypt.c:1605 +msgid "Read the key from a file" +msgstr "Lê a chave de um arquivo" + +#: src/cryptsetup.c:3364 +msgid "Read the volume (master) key from file." +msgstr "Lê a chave do volume (mestre) a partir do arquivo." + +#: src/cryptsetup.c:3365 +msgid "Dump volume (master) key instead of keyslots info" +msgstr "Despeja a chave de volume (mestre) ao invés da informação de slots de chave" + +#: src/cryptsetup.c:3366 src/cryptsetup_reencrypt.c:1602 +msgid "The size of the encryption key" +msgstr "O tamanho da chave de criptografia" + +#: src/cryptsetup.c:3366 src/cryptsetup.c:3425 src/integritysetup.c:553 +#: src/integritysetup.c:557 src/integritysetup.c:561 +#: src/cryptsetup_reencrypt.c:1602 +msgid "BITS" +msgstr "BITS" + +#: src/cryptsetup.c:3367 src/cryptsetup_reencrypt.c:1618 +msgid "Limits the read from keyfile" +msgstr "Limita a leitura do arquivo de chave" + +#: src/cryptsetup.c:3367 src/cryptsetup.c:3368 src/cryptsetup.c:3369 +#: src/cryptsetup.c:3370 src/cryptsetup.c:3373 src/cryptsetup.c:3422 +#: src/cryptsetup.c:3423 src/cryptsetup.c:3431 src/cryptsetup.c:3432 +#: src/veritysetup.c:432 src/veritysetup.c:433 src/veritysetup.c:434 +#: src/veritysetup.c:437 src/veritysetup.c:438 src/integritysetup.c:542 +#: src/integritysetup.c:548 src/integritysetup.c:549 +#: src/cryptsetup_reencrypt.c:1617 src/cryptsetup_reencrypt.c:1618 +#: src/cryptsetup_reencrypt.c:1619 src/cryptsetup_reencrypt.c:1620 +msgid "bytes" +msgstr "bytes" + +#: src/cryptsetup.c:3368 src/cryptsetup_reencrypt.c:1617 +msgid "Number of bytes to skip in keyfile" +msgstr "Número de bytes a ignorar no arquivo de chave" + +#: src/cryptsetup.c:3369 +msgid "Limits the read from newly added keyfile" +msgstr "Limita a leitura do arquivo de chave recém-adicionado" + +#: src/cryptsetup.c:3370 +msgid "Number of bytes to skip in newly added keyfile" +msgstr "Número de bytes a ignorar em arquivo de chave recém-adicionado" + +#: src/cryptsetup.c:3371 +msgid "Slot number for new key (default is first free)" +msgstr "Número de slot para a nova chave (padrão é a primeira livre)" + +#: src/cryptsetup.c:3372 +msgid "The size of the device" +msgstr "O tamanho do dispositivo" + +#: src/cryptsetup.c:3372 src/cryptsetup.c:3374 src/cryptsetup.c:3375 +#: src/cryptsetup.c:3381 src/integritysetup.c:543 src/integritysetup.c:550 +msgid "SECTORS" +msgstr "SETORES" + +#: src/cryptsetup.c:3373 src/cryptsetup_reencrypt.c:1620 +msgid "Use only specified device size (ignore rest of device). DANGEROUS!" +msgstr "Usa apenas o tamanho de dispositivo especificado (ignora o resto do dispositivo). PERIGOSO!" + +#: src/cryptsetup.c:3374 +msgid "The start offset in the backend device" +msgstr "A posição inicial do dispositivo de backend" + +#: src/cryptsetup.c:3375 +msgid "How many sectors of the encrypted data to skip at the beginning" +msgstr "Quantos setores dos dados criptografados ignorar no começo" + +#: src/cryptsetup.c:3376 +msgid "Create a readonly mapping" +msgstr "Cria um mapeamento somente leitura" + +#: src/cryptsetup.c:3377 src/integritysetup.c:536 +#: src/cryptsetup_reencrypt.c:1608 +msgid "Do not ask for confirmation" +msgstr "Não solicitar confirmação" + +#: src/cryptsetup.c:3378 +msgid "Timeout for interactive passphrase prompt (in seconds)" +msgstr "Tempo limite para a solicitação interativa de senha (em segundos)" + +#: src/cryptsetup.c:3378 src/cryptsetup.c:3379 src/integritysetup.c:537 +#: src/cryptsetup_reencrypt.c:1609 +msgid "secs" +msgstr "s" + +#: src/cryptsetup.c:3379 src/integritysetup.c:537 +#: src/cryptsetup_reencrypt.c:1609 +msgid "Progress line update (in seconds)" +msgstr "Atualização de linha de progresso (em segundos)" + +#: src/cryptsetup.c:3380 src/cryptsetup_reencrypt.c:1610 +msgid "How often the input of the passphrase can be retried" +msgstr "Com qual frequência a entrada da senha pode ser tentada novamente" + +#: src/cryptsetup.c:3381 +msgid "Align payload at sector boundaries - for luksFormat" +msgstr "Alinha a carga em limites de setores - para luksFormat" + +#: src/cryptsetup.c:3382 +msgid "File with LUKS header and keyslots backup" +msgstr "Arquivo cópia de segurança de slots de chave e cabeçalho LUKS" + +#: src/cryptsetup.c:3383 src/cryptsetup_reencrypt.c:1611 +msgid "Use /dev/random for generating volume key" +msgstr "Usa /dev/random para gerar chave de volume" + +#: src/cryptsetup.c:3384 src/cryptsetup_reencrypt.c:1612 +msgid "Use /dev/urandom for generating volume key" +msgstr "Usa /dev/urandom para gerar chave de volume" + +#: src/cryptsetup.c:3385 +msgid "Share device with another non-overlapping crypt segment" +msgstr "Compartilha o dispositivo com um outro segmento de criptografia sem sobreposição" + +#: src/cryptsetup.c:3386 src/veritysetup.c:441 +msgid "UUID for device to use" +msgstr "UUID para dispositivo a ser usado" + +#: src/cryptsetup.c:3387 +msgid "Allow discards (aka TRIM) requests for device" +msgstr "Permite requisições de descartes (i.e. TRIM) para dispositivo" + +#: src/cryptsetup.c:3388 src/cryptsetup_reencrypt.c:1629 +msgid "Device or file with separated LUKS header" +msgstr "Dispositivo ou arquivo com cabeçalho LUKS separado" + +#: src/cryptsetup.c:3389 +msgid "Do not activate device, just check passphrase" +msgstr "Não ativa o dispositivo, apenas verifica a senha" + +#: src/cryptsetup.c:3390 +msgid "Use hidden header (hidden TCRYPT device)" +msgstr "Usa cabeçalho oculto (dispositivo TCRYPT oculto)" + +#: src/cryptsetup.c:3391 +msgid "Device is system TCRYPT drive (with bootloader)" +msgstr "O dispositivo é uma unidade TCRYPT de sistema (com carregador de inicialização)" + +#: src/cryptsetup.c:3392 +msgid "Use backup (secondary) TCRYPT header" +msgstr "Usa o cabeçalho TRCYPT secundário (cópia de segurança)" + +#: src/cryptsetup.c:3393 +msgid "Scan also for VeraCrypt compatible device" +msgstr "Verifica também por dispositivo compatível com VeraCrypt" + +#: src/cryptsetup.c:3394 +msgid "Personal Iteration Multiplier for VeraCrypt compatible device" +msgstr "Multiplicador de Iteração Pessoal (PIM) por dispositivo compatível com VeraCrypt" + +#: src/cryptsetup.c:3395 +msgid "Query Personal Iteration Multiplier for VeraCrypt compatible device" +msgstr "Consulta Multiplicador de Iteração Pessoal (PIM) por dispositivo compatível com VeraCrypt" + +#: src/cryptsetup.c:3396 +#, fuzzy +msgid "Type of device metadata: luks, luks1, luks2, plain, loopaes, tcrypt" +msgstr "Tipo de metadados de dispositivo: luks, plain, loopaes, tcrypt" + +#: src/cryptsetup.c:3397 +msgid "Disable password quality check (if enabled)" +msgstr "Desabilita a verificação de qualidade da senha (se habilitada)" + +#: src/cryptsetup.c:3398 +msgid "Use dm-crypt same_cpu_crypt performance compatibility option" +msgstr "Usa a opção de compatibilidade de desempenho same_cpu_crypt do dm-crypt" + +#: src/cryptsetup.c:3399 +msgid "Use dm-crypt submit_from_crypt_cpus performance compatibility option" +msgstr "Usa a opção de compatibilidade de desempenho submit_from_crypt_cpus do dm-crypt" + +#: src/cryptsetup.c:3400 +msgid "Device removal is deferred until the last user closes it" +msgstr "A remoção de dispositivo está adiada até o último usuário fechá-lo" + +#: src/cryptsetup.c:3401 +msgid "Use global lock to serialize memory hard PBKDF (OOM workaround)" +msgstr "" + +#: src/cryptsetup.c:3402 +msgid "PBKDF iteration time for LUKS (in ms)" +msgstr "Tempo de iteração PBKDF para LUKS (em ms)" + +#: src/cryptsetup.c:3402 src/cryptsetup_reencrypt.c:1607 +msgid "msecs" +msgstr "ms" + +# argon2i, argon2id, pbkdf2 são opções, não traduzir. +#: src/cryptsetup.c:3403 src/cryptsetup_reencrypt.c:1625 +msgid "PBKDF algorithm (for LUKS2): argon2i, argon2id, pbkdf2" +msgstr "Algoritmo PBKDF (para LUKS2): argon2i, argon2id, pbkdf2" + +#: src/cryptsetup.c:3404 src/cryptsetup_reencrypt.c:1626 +msgid "PBKDF memory cost limit" +msgstr "limite de custo de memória de PBKDF" + +#: src/cryptsetup.c:3404 src/cryptsetup_reencrypt.c:1626 +msgid "kilobytes" +msgstr "kilobytes" + +#: src/cryptsetup.c:3405 src/cryptsetup_reencrypt.c:1627 +msgid "PBKDF parallel cost" +msgstr "Custo paralelo de PBKDF" + +#: src/cryptsetup.c:3405 src/cryptsetup_reencrypt.c:1627 +msgid "threads" +msgstr "threads" + +#: src/cryptsetup.c:3406 src/cryptsetup_reencrypt.c:1628 +msgid "PBKDF iterations cost (forced, disables benchmark)" +msgstr "Custo de iterações de PBKDF (forçado, desabilita teste)" + +# ignore, normal e prefer são opções, não traduzir. +#: src/cryptsetup.c:3407 +msgid "Keyslot priority: ignore, normal, prefer" +msgstr "Prioridade de slot de chave: ignore, normal, prefer" + +#: src/cryptsetup.c:3408 +msgid "Disable locking of on-disk metadata" +msgstr "Desabilita travamento de metadados em disco" + +#: src/cryptsetup.c:3409 +msgid "Disable loading volume keys via kernel keyring" +msgstr "Desabilita carregamento de chaves de volume via chaveiro do kernel" + +#: src/cryptsetup.c:3410 +msgid "Data integrity algorithm (LUKS2 only)" +msgstr "Algoritmo de integridade de dados (LUKS2 apenas)" + +#: src/cryptsetup.c:3411 src/integritysetup.c:564 +msgid "Disable journal for integrity device" +msgstr "Desabilita jornal para dispositivo de integridade" + +#: src/cryptsetup.c:3412 src/integritysetup.c:538 +msgid "Do not wipe device after format" +msgstr "Não apaga o dispositivo após formatar" + +#: src/cryptsetup.c:3413 +msgid "Do not ask for passphrase if activation by token fails" +msgstr "Não pede por senha se ativação por token falhar" + +#: src/cryptsetup.c:3414 +msgid "Token number (default: any)" +msgstr "Número de token (padrão: qualquer)" + +#: src/cryptsetup.c:3415 +msgid "Key description" +msgstr "Descrição da chave" + +#: src/cryptsetup.c:3416 +msgid "Encryption sector size (default: 512 bytes)" +msgstr "Tamanho do setor de criptografia (padrão: 512 bytes)" + +#: src/cryptsetup.c:3417 +msgid "Set activation flags persistent for device" +msgstr "Define sinalizadores de ativação persistentes para o dispositivo" + +#: src/cryptsetup.c:3418 +msgid "Set label for the LUKS2 device" +msgstr "Define o rótulo para o dispositivo LUKS2" + +#: src/cryptsetup.c:3419 +msgid "Set subsystem label for the LUKS2 device" +msgstr "Define o rótulo de subsistema para o dispositivo LUKS2" + +#: src/cryptsetup.c:3420 +msgid "Create unbound (no assigned data segment) LUKS2 keyslot" +msgstr "Cria slot de chave LUKS2 não associado (nenhum segmento de dados atribuído)" + +#: src/cryptsetup.c:3421 +msgid "Read or write the json from or to a file" +msgstr "Lê ou escreve o json de ou para um arquivo" + +#: src/cryptsetup.c:3422 +msgid "LUKS2 header metadata area size" +msgstr "Tamanho de área de metadados de cabeçalho LUKS2" + +#: src/cryptsetup.c:3423 +msgid "LUKS2 header keyslots area size" +msgstr "Tamanho de área de slots de chave de cabeçalho LUKS2" + +#: src/cryptsetup.c:3424 +msgid "Refresh (reactivate) device with new parameters" +msgstr "Renova (reativa) dispositivo com novos parâmetros" + +#: src/cryptsetup.c:3425 +msgid "LUKS2 keyslot: The size of the encryption key" +msgstr "Slot de chave LUKS2: O tamanho da chave de criptografia" + +#: src/cryptsetup.c:3426 +msgid "LUKS2 keyslot: The cipher used for keyslot encryption" +msgstr "Slot de chave LUKS2: A cifra usada para criptografia de slot de chave" + +#: src/cryptsetup.c:3427 +#, fuzzy +msgid "Encrypt LUKS2 device (in-place encryption)." +msgstr "Descriptografa permanentemente o dispositivo (remove criptografia)" + +#: src/cryptsetup.c:3428 +#, fuzzy +msgid "Decrypt LUKS2 device (remove encryption)." +msgstr "Descriptografa permanentemente o dispositivo (remove criptografia)" + +#: src/cryptsetup.c:3429 +msgid "Initialize LUKS2 reencryption in metadata only." +msgstr "" + +#: src/cryptsetup.c:3430 +msgid "Resume initialized LUKS2 reencryption only." +msgstr "" + +#: src/cryptsetup.c:3431 src/cryptsetup_reencrypt.c:1619 +msgid "Reduce data device size (move data offset). DANGEROUS!" +msgstr "Reduz tamanho do dispositivo de dados (move opção dos dados). PERIGOSO!" + +#: src/cryptsetup.c:3432 +#, fuzzy +msgid "Maximal reencryption hotzone size." +msgstr "Tamanho do bloco de recriptografia" + +#: src/cryptsetup.c:3433 +msgid "Reencryption hotzone resilience type (checksum,journal,none)" +msgstr "" + +#: src/cryptsetup.c:3434 +#, fuzzy +msgid "Reencryption hotzone checksums hash" +msgstr "Tamanho do bloco de recriptografia" + +#: src/cryptsetup.c:3435 +msgid "Override device autodetection of dm device to be reencrypted" +msgstr "" + +#: src/cryptsetup.c:3451 src/veritysetup.c:462 src/integritysetup.c:583 +msgid "[OPTION...] " +msgstr "[OPÇÃO...] " + +#: src/cryptsetup.c:3502 src/veritysetup.c:496 src/integritysetup.c:594 +msgid "Argument missing." +msgstr "Faltando o argumento de ." + +#: src/cryptsetup.c:3565 src/veritysetup.c:527 src/integritysetup.c:625 +msgid "Unknown action." +msgstr "Ação desconhecida." + +#: src/cryptsetup.c:3575 +msgid "Parameter --refresh is only allowed with open or refresh commands.\n" +msgstr "O parâmetro --refresh é apenas permitida com comandos de abrir ou renovar.\n" + +#: src/cryptsetup.c:3580 +msgid "Options --refresh and --test-passphrase are mutually exclusive.\n" +msgstr "As opções --refresh e --test-passphrase são mutuamente exclusivas.\n" + +#: src/cryptsetup.c:3585 +msgid "Option --deferred is allowed only for close command.\n" +msgstr "A opção --deferred é apenas permitida para o comando de fechamento.\n" + +#: src/cryptsetup.c:3590 +msgid "Option --shared is allowed only for open of plain device.\n" +msgstr "A opção --shared é permitida apenas para abertura de dispositivo claro.\n" + +#: src/cryptsetup.c:3595 +msgid "Option --allow-discards is allowed only for open operation.\n" +msgstr "A opção --allow-discards é permitida apenas para a operação de abertura.\n" + +#: src/cryptsetup.c:3600 +msgid "Option --persistent is allowed only for open operation.\n" +msgstr "A opção --persistent é permitida apenas para a operação de abertura.\n" + +#: src/cryptsetup.c:3605 +#, fuzzy +msgid "Option --serialize-memory-hard-pbkdf is allowed only for open operation.\n" +msgstr "A opção --allow-discards é permitida apenas para a operação de abertura.\n" + +#: src/cryptsetup.c:3610 +msgid "Option --persistent is not allowed with --test-passphrase.\n" +msgstr "A opção --persistent não é permitida com --test-passphrase.\n" + +#: src/cryptsetup.c:3620 +#, fuzzy +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 "" +"A opção --key-size só é permitida para luksFormat, luksAddKey (com --unbound),\n" +"ações de abertura e teste. Para limitar a leitura do arquivo de chave,\n" +"use --keyfile-size=(bytes)." + +#: src/cryptsetup.c:3626 +msgid "Option --integrity is allowed only for luksFormat (LUKS2).\n" +msgstr "A opção --integrity é permitida apenas para luksFormat (LUKS2).\n" + +#: src/cryptsetup.c:3631 +msgid "Option --integrity-no-wipe can be used only for format action with integrity extension.\n" +msgstr "A opção --integrity-no-wipe só pode ser usada para ação de formato com extensão de integridade.\n" + +#: src/cryptsetup.c:3637 +msgid "Options --label and --subsystem are allowed only for luksFormat and config LUKS2 operations.\n" +msgstr "As opções --label e --subsystem são permitidas apenas para luksFormat e operações de configuração de LUKS2.\n" + +#: src/cryptsetup.c:3643 +msgid "Option --test-passphrase is allowed only for open of LUKS and TCRYPT devices.\n" +msgstr "A opção --test-passphrase é permitida apenas para abertura de dispositivos LUKS e TCRYPT.\n" + +#: src/cryptsetup.c:3648 src/cryptsetup_reencrypt.c:1692 +msgid "Key size must be a multiple of 8 bits" +msgstr "Tamanho de chave deve ser um múltiplo de 8 bits" + +#: src/cryptsetup.c:3654 src/cryptsetup_reencrypt.c:1378 +#: src/cryptsetup_reencrypt.c:1697 +msgid "Key slot is invalid." +msgstr "O slot de chave é inválido." + +#: src/cryptsetup.c:3661 +msgid "Option --key-file takes precedence over specified key file argument." +msgstr "A opção --key-file tem precedência sobre um argumento de arquivo de chave especificado." + +#: src/cryptsetup.c:3668 src/veritysetup.c:539 src/integritysetup.c:649 +#: src/cryptsetup_reencrypt.c:1671 +msgid "Negative number for option not permitted." +msgstr "Número negativo para opção não permitido." + +#: src/cryptsetup.c:3672 +msgid "Only one --key-file argument is allowed." +msgstr "Apenas um argumento de --key-file é permitido." + +#: src/cryptsetup.c:3676 src/cryptsetup_reencrypt.c:1663 +#: src/cryptsetup_reencrypt.c:1701 +msgid "Only one of --use-[u]random options is allowed." +msgstr "Apenas uma das opções --use-[u]random são permitidas." + +#: src/cryptsetup.c:3680 +msgid "Option --use-[u]random is allowed only for luksFormat." +msgstr "A opção --use-[u]random é permitida apenas para luksFormat." + +#: src/cryptsetup.c:3684 +msgid "Option --uuid is allowed only for luksFormat and luksUUID." +msgstr "A opção --uuid é permitida apenas para luksFormat e luksUUID." + +#: src/cryptsetup.c:3688 +msgid "Option --align-payload is allowed only for luksFormat." +msgstr "A opção --align-payload é permitida apenas para luksFormat." + +#: src/cryptsetup.c:3692 +msgid "Options --luks2-metadata-size and --opt-luks2-keyslots-size are allowed only for luksFormat with LUKS2." +msgstr "As opçãos --luks2-metadata-size e --opt-luks2-keyslots-size são permitidas apenas para luksFormat com LUKS2." + +#: src/cryptsetup.c:3697 +msgid "Invalid LUKS2 metadata size specification." +msgstr "Especificação inválida de tamanho de metadados LUKS2." + +#: src/cryptsetup.c:3701 +msgid "Invalid LUKS2 keyslots size specification." +msgstr "Especificação inválida de tamanho de slots de chave LUKS2." + +#: src/cryptsetup.c:3705 +#, fuzzy +msgid "Options --align-payload and --offset cannot be combined." +msgstr "As opções --align-payload e --offset não podem ser combinadas." + +#: src/cryptsetup.c:3711 +msgid "Option --skip is supported only for open of plain and loopaes devices.\n" +msgstr "Há suporte a --skip apenas para abertura de dispositivos claro e loopaes.\n" + +#: src/cryptsetup.c:3718 +#, fuzzy +msgid "Option --offset is supported only for open of plain and loopaes devices, luksFormat and device reencryption.\n" +msgstr "Há suporte a --offset apenas para abertura de dispositivos claro e loopaes. e para luksFormat.\n" + +#: src/cryptsetup.c:3724 +msgid "Option --tcrypt-hidden, --tcrypt-system or --tcrypt-backup is supported only for TCRYPT device.\n" +msgstr "Há suporte à opção --tcrypt-hidden, --tcrypt-system ou --tcrypt-backup apenas para dispositivo TCRYPT.\n" + +#: src/cryptsetup.c:3729 +msgid "Option --tcrypt-hidden cannot be combined with --allow-discards.\n" +msgstr "A opção --tcrypt-hidden não pode ser combinada com --allow-discards.\n" + +#: src/cryptsetup.c:3734 +msgid "Option --veracrypt is supported only for TCRYPT device type.\n" +msgstr "Há suporte à opção --veracrypt apenas para o tipo de dispositivo TCRYPT.\n" + +#: src/cryptsetup.c:3740 +msgid "Invalid argument for parameter --veracrypt-pim supplied.\n" +msgstr "Argumento inválido para o parâmetro --veracrypt-pim fornecido.\n" + +#: src/cryptsetup.c:3744 +msgid "Option --veracrypt-pim is supported only for VeraCrypt compatible devices.\n" +msgstr "Há suporte à opção --veracrypt-pim apenas para dispositivos compatíveis com VeraCrypt.\n" + +#: src/cryptsetup.c:3752 +msgid "Option --veracrypt-query-pim is supported only for VeraCrypt compatible devices.\n" +msgstr "Há suporte à opção --veracrypt-query-pim apenas para dispositivos compatíveis com VeraCrypt.\n" + +#: src/cryptsetup.c:3756 +msgid "The options --veracrypt-pim and --veracrypt-query-pim are mutually exclusive.\n" +msgstr "As opções --veracrypt-pim e --veracrypt-query-pim são mutuamente exclusivas.\n" + +# ignore, normal, prefer são opções, não traduzir. +#: src/cryptsetup.c:3763 +msgid "Option --priority can be only ignore/normal/prefer.\n" +msgstr "A opção --priority só pode ser ignore/normal/prefer.\n" + +#: src/cryptsetup.c:3768 +msgid "Keyslot specification is required.\n" +msgstr "A especificação de slot de chave é exigido.\n" + +# argon2i, argon2id, pbkdf2 são opções, não traduzir. +#: src/cryptsetup.c:3773 src/cryptsetup_reencrypt.c:1677 +msgid "Password-based key derivation function (PBKDF) can be only pbkdf2 or argon2i/argon2id.\n" +msgstr "A função de derivação de chave baseada em senha (PBKDF) só pode ser pbkdf2 ou argon2i/argon2id.\n" + +#: src/cryptsetup.c:3778 src/cryptsetup_reencrypt.c:1682 +msgid "PBKDF forced iterations cannot be combined with iteration time option.\n" +msgstr "Iterações forçadas de PBKDF não podem ser compiladas com opção de tempo de iteração.\n" + +#: src/cryptsetup.c:3784 +msgid "Sector size option is not supported for this command.\n" +msgstr "Não há suporte a opção de tamanho de setor para este comando.\n" + +#: src/cryptsetup.c:3790 +msgid "Unsupported encryption sector size.\n" +msgstr "Não há suporte ao tamanho de setor de criptografia.\n" + +#: src/cryptsetup.c:3795 +msgid "Key size is required with --unbound option.\n" +msgstr "Tamanho de chave é necessário com a opção --unbound.\n" + +#: src/cryptsetup.c:3800 +msgid "Option --unbound may be used only with luksAddKey action.\n" +msgstr "A opção --unbound só pode ser usada com a ação luksAddKey.\n" + +#: src/cryptsetup.c:3805 +msgid "Option --refresh may be used only with open action.\n" +msgstr "A opção --refresh só pode ser usada com a ação de abrir.\n" + +#: src/cryptsetup.c:3816 +msgid "Cannot disable metadata locking.\n" +msgstr "Não foi possível desabilitar trava de metadados.\n" + +#: src/cryptsetup.c:3826 +#, fuzzy +msgid "Invalid max reencryption hotzone size specification." +msgstr "Especificação inválida de tamanho de dispositivo." + +#: src/cryptsetup.c:3834 src/cryptsetup_reencrypt.c:1706 +#: src/cryptsetup_reencrypt.c:1711 +msgid "Invalid device size specification." +msgstr "Especificação inválida de tamanho de dispositivo." + +#: src/cryptsetup.c:3837 +#, fuzzy +msgid "Maximum device reduce size is 1 GiB." +msgstr "Tamanho máximo de redução do dispositivo é 64 MB." + +#: src/cryptsetup.c:3840 src/cryptsetup_reencrypt.c:1717 +msgid "Reduce size must be multiple of 512 bytes sector." +msgstr "Tamanho da redução deve ser múltiplo de 512 bytes (setores)." + +#: src/cryptsetup.c:3845 +#, fuzzy +msgid "Invalid data size specification." +msgstr "Especificação inválida de tamanho de dispositivo." + +#: src/cryptsetup.c:3850 +#, fuzzy +msgid "Reduce size overflow." +msgstr "Excesso na posição do dispositivo." + +#: src/cryptsetup.c:3854 +msgid "LUKS2 decryption requires option --header." +msgstr "" + +#: src/cryptsetup.c:3858 +#, fuzzy +msgid "Device size must be multiple of 512 bytes sector." +msgstr "Tamanho da redução deve ser múltiplo de 512 bytes (setores)." + +#: src/cryptsetup.c:3862 +#, fuzzy +msgid "Options --reduce-device-size and --data-size cannot be combined." +msgstr "As opções --align-payload e --offset não podem ser combinadas." + +#: src/cryptsetup.c:3866 +#, fuzzy +msgid "Options --device-size and --size cannot be combined." +msgstr "As opções --align-payload e --offset não podem ser combinadas." + +#: src/veritysetup.c:65 +msgid "Invalid salt string specified." +msgstr "Uma string salgada inválida foi especificada." + +#: src/veritysetup.c:96 +#, c-format +msgid "Cannot create hash image %s for writing." +msgstr "Não foi possível criar imagem hash %s para escrita." + +#: src/veritysetup.c:106 +#, c-format +msgid "Cannot create FEC image %s for writing." +msgstr "Não foi possível criar imagem FEC %s para escrita." + +#: src/veritysetup.c:176 +msgid "Invalid root hash string specified." +msgstr "Uma string hash raiz inválida foi especificada." + +#: src/veritysetup.c:356 +msgid " " +msgstr " " + +#: src/veritysetup.c:356 src/integritysetup.c:469 +msgid "format device" +msgstr "formata o dispositivo" + +#: src/veritysetup.c:357 +msgid " " +msgstr " " + +#: src/veritysetup.c:357 +msgid "verify device" +msgstr "verifica o dispositivo" + +#: src/veritysetup.c:358 +msgid " " +msgstr " " + +#: src/veritysetup.c:360 src/integritysetup.c:472 +msgid "show active device status" +msgstr "mostra o estado do dispositivo ativado" + +#: src/veritysetup.c:361 +msgid "" +msgstr "" + +#: src/veritysetup.c:361 src/integritysetup.c:473 +msgid "show on-disk information" +msgstr "mostra informação em disco" + +#: src/veritysetup.c:380 +#, c-format +msgid "" +"\n" +" is the device to create under %s\n" +" is the data device\n" +" is the device containing verification data\n" +" hash of the root node on \n" +msgstr "" +"\n" +" é o dispositivo a ser criado sob %s\n" +" é o dispositivo de dados\n" +" é o dispositivo contendo dados de verificação\n" +" hash do nó raiz no \n" + +#: src/veritysetup.c:387 +#, c-format +msgid "" +"\n" +"Default compiled-in dm-verity parameters:\n" +"\tHash: %s, Data block (bytes): %u, Hash block (bytes): %u, Salt size: %u, Hash format: %u\n" +msgstr "" +"\n" +"Parâmetros dm-verity pré-compilados por padrão:\n" +"\tHash: %s, Bloco de dados (bytes): %u, Bloco de hash (bytes): %u, Tamanho salgado: %u, Formato hash: %u\n" + +#: src/veritysetup.c:430 +msgid "Do not use verity superblock" +msgstr "Não usa superbloco verity" + +#: src/veritysetup.c:431 +msgid "Format type (1 - normal, 0 - original Chrome OS)" +msgstr "Tipo de formato (1 - normal, 0 - Chrome OS original)" + +#: src/veritysetup.c:431 +msgid "number" +msgstr "número" + +#: src/veritysetup.c:432 +msgid "Block size on the data device" +msgstr "Tamanho de bloco no dispositivo de dados" + +#: src/veritysetup.c:433 +msgid "Block size on the hash device" +msgstr "Tamanho de bloco no dispositivo de hash" + +#: src/veritysetup.c:434 +msgid "FEC parity bytes" +msgstr "Bytes de paridade FEC" + +#: src/veritysetup.c:435 +msgid "The number of blocks in the data file" +msgstr "O número de blocos no arquivo de dados" + +#: src/veritysetup.c:435 +msgid "blocks" +msgstr "blocos" + +#: src/veritysetup.c:436 +msgid "Path to device with error correction data" +msgstr "Caminho para dispositivo com dados de correção de erro" + +#: src/veritysetup.c:436 src/integritysetup.c:540 +msgid "path" +msgstr "caminho" + +#: src/veritysetup.c:437 +msgid "Starting offset on the hash device" +msgstr "Posição inicial no dispositivo de hash" + +#: src/veritysetup.c:438 +msgid "Starting offset on the FEC device" +msgstr "Posição inicial no dispositivo FEC" + +#: src/veritysetup.c:439 +msgid "Hash algorithm" +msgstr "Algoritmo hash" + +#: src/veritysetup.c:439 +msgid "string" +msgstr "string" + +#: src/veritysetup.c:440 +msgid "Salt" +msgstr "Sal" + +#: src/veritysetup.c:440 +msgid "hex string" +msgstr "string hexa" + +#: src/veritysetup.c:442 +msgid "Restart kernel if corruption is detected" +msgstr "Reinicia o kernel, se um corrompimento for detectado" + +#: src/veritysetup.c:443 +msgid "Ignore corruption, log it only" +msgstr "Ignora corrompimento, apenas registra no log" + +#: src/veritysetup.c:444 +msgid "Do not verify zeroed blocks" +msgstr "Não verifica por blocos zerados" + +#: src/veritysetup.c:445 +msgid "Verify data block only the first time it is read" +msgstr "Verifica bloco de dados apenas na primeira vez que é lido" + +#: src/veritysetup.c:545 +msgid "Option --ignore-corruption, --restart-on-corruption or --ignore-zero-blocks is allowed only for open operation.\n" +msgstr "O uso da opção --ignore-corruption, --restart-on-corruption ou --ignore-zero-blocks é permitido apenas para operação de abertura.\n" + +#: src/veritysetup.c:550 +msgid "Option --ignore-corruption and --restart-on-corruption cannot be used together.\n" +msgstr "As opções --ignore-corruption e --restart-on-corruption não podem ser usadas em conjunto.\n" + +#: src/integritysetup.c:83 src/utils_password.c:305 +#, c-format +msgid "Cannot read keyfile %s." +msgstr "Não foi possível ler o arquivo de chave %s." + +#: src/integritysetup.c:87 src/utils_password.c:310 +#, c-format +msgid "Cannot read %d bytes from keyfile %s." +msgstr "Não foi possível ler %d bytes do arquivo de chave %s." + +#: src/integritysetup.c:250 +#, c-format +msgid "Formatted with tag size %u, internal integrity %s.\n" +msgstr "Formatado com tamanho de tag %u, integridade interna %s.\n" + +#: src/integritysetup.c:469 src/integritysetup.c:473 +msgid "" +msgstr "" + +#: src/integritysetup.c:470 +msgid " " +msgstr " " + +#: src/integritysetup.c:492 +#, c-format +msgid "" +"\n" +" is the device to create under %s\n" +" is the device containing data with integrity tags\n" +msgstr "" +"\n" +" é o dispositivo a ser criado sob %s\n" +" é o dispositivo com dados com tags de integridade\n" + +#: src/integritysetup.c:497 +#, c-format +msgid "" +"\n" +"Default compiled-in dm-integrity parameters:\n" +"\tTag size: %u bytes, Checksum algorithm: %s\n" +msgstr "" +"\n" +"Parâmetros dm-integrity compilados por padrão:\n" +"\tTamanho Tag: %u bytes, Algoritmo de soma de verificação: %s\n" + +#: src/integritysetup.c:540 +msgid "Path to data device (if separated)" +msgstr "Caminho para dispositivo de dados (se separado)" + +#: src/integritysetup.c:542 +msgid "Journal size" +msgstr "Tamanho do journal" + +#: src/integritysetup.c:543 +msgid "Interleave sectors" +msgstr "Intercalar setores" + +#: src/integritysetup.c:544 +msgid "Journal watermark" +msgstr "Marca d'água do jornal" + +#: src/integritysetup.c:544 +msgid "percent" +msgstr "porcentagem" + +#: src/integritysetup.c:545 +msgid "Journal commit time" +msgstr "Tempo de commit do journal" + +#: src/integritysetup.c:545 src/integritysetup.c:547 +msgid "ms" +msgstr "ms" + +#: src/integritysetup.c:546 +msgid "Number of 512-byte sectors per bit (bitmap mode)." +msgstr "" + +#: src/integritysetup.c:547 +msgid "Bitmap mode flush time" +msgstr "" + +#: src/integritysetup.c:548 +msgid "Tag size (per-sector)" +msgstr "Tamanho de tag (por setor)" + +#: src/integritysetup.c:549 +msgid "Sector size" +msgstr "Tamanho do setor" + +#: src/integritysetup.c:550 +msgid "Buffers size" +msgstr "Tamanho de buffers" + +#: src/integritysetup.c:552 +msgid "Data integrity algorithm" +msgstr "Algoritmo de integridade de dados" + +#: src/integritysetup.c:553 +msgid "The size of the data integrity key" +msgstr "O tamanho da chave de integridade de dados" + +#: src/integritysetup.c:554 +msgid "Read the integrity key from a file" +msgstr "Lê a chave de integridade de um arquivo" + +#: src/integritysetup.c:556 +msgid "Journal integrity algorithm" +msgstr "Algoritmo de integridade de journal" + +#: src/integritysetup.c:557 +msgid "The size of the journal integrity key" +msgstr "O tamanho da chave de integridade de journal" + +#: src/integritysetup.c:558 +msgid "Read the journal integrity key from a file" +msgstr "Lê a chave de integridade de journal de um arquivo" + +#: src/integritysetup.c:560 +msgid "Journal encryption algorithm" +msgstr "Algoritmo de criptografia de journal" + +#: src/integritysetup.c:561 +msgid "The size of the journal encryption key" +msgstr "O tamanho da chave de criptografia de journal" + +#: src/integritysetup.c:562 +msgid "Read the journal encryption key from a file" +msgstr "Lê a chave de criptografia de journal de um arquivo" + +#: src/integritysetup.c:565 +msgid "Recovery mode (no journal, no tag checking)" +msgstr "Modo de recuperação (sem journal, sem verificação de tag)" + +#: src/integritysetup.c:566 +#, fuzzy +msgid "Use bitmap to track changes and disable journal for integrity device" +msgstr "Desabilita jornal para dispositivo de integridade" + +#: src/integritysetup.c:567 +msgid "Recalculate initial tags automatically." +msgstr "Recalcula tags iniciais automaticamente." + +#: src/integritysetup.c:640 +msgid "Option --integrity-recalculate can be used only for open action." +msgstr "A opção --integrity-recalculate só pode ser usada para ação de abrir." + +#: src/integritysetup.c:655 +msgid "Options --journal-size, --interleave-sectors, --sector-size, --tag-size and --no-wipe can be used only for format action.\n" +msgstr "As opções --journal-size, --interleave-sectors, --sector-size, --tag-size e --no-wipe só podem ser usadas para ação de formatação.\n" + +#: src/integritysetup.c:661 +msgid "Invalid journal size specification." +msgstr "Especificação inválida de tamanho de journal." + +#: src/integritysetup.c:666 +msgid "Both key file and key size options must be specified." +msgstr "As opções de arquivo de chave e tamanho de chave devem ser especificadas." + +#: src/integritysetup.c:669 +msgid "Integrity algorithm must be specified if integrity key is used." +msgstr "Um algoritmo de integridade deve ser especificado se uma chave de integridade é usada." + +#: src/integritysetup.c:674 +msgid "Both journal integrity key file and key size options must be specified." +msgstr "As opções de arquivo de chave de integridade de journal e tamanho de chave devem ser especificadas." + +#: src/integritysetup.c:677 +msgid "Journal integrity algorithm must be specified if journal integrity key is used." +msgstr "Um algoritmo de integridade de journal deve ser especificado se uma chave de integridade de journal é usada." + +#: src/integritysetup.c:682 +msgid "Both journal encryption key file and key size options must be specified." +msgstr "As opções de arquivo de chave de criptografia de journal e tamanho de chave devem ser especificadas." + +#: src/integritysetup.c:685 +msgid "Journal encryption algorithm must be specified if journal encryption key is used." +msgstr "Um algoritmo de criptografia de journal deve ser especificado se uma chave de criptografia de journal é usada." + +#: src/integritysetup.c:689 +#, fuzzy +msgid "Recovery and bitmap mode options are mutually exclusive." +msgstr "As opções --refresh e --test-passphrase são mutuamente exclusivas.\n" + +#: src/integritysetup.c:693 +msgid "Journal options cannot be used in bitmap mode." +msgstr "" + +#: src/integritysetup.c:697 +#, fuzzy +msgid "Bitmap options can be used only in bitmap mode." +msgstr "A opção de integridade pode ser usada apenas para o formato LUKS2." + +#: src/cryptsetup_reencrypt.c:172 +msgid "Reencryption already in-progress." +msgstr "Recriptografia já está em progresso." + +#: src/cryptsetup_reencrypt.c:201 +#, c-format +msgid "Cannot exclusively open %s, device in use." +msgstr "Não foi possível abrir exclusivamente %s, dispositivo em uso." + +#: src/cryptsetup_reencrypt.c:215 src/cryptsetup_reencrypt.c:1127 +msgid "Allocation of aligned memory failed." +msgstr "A alocação de memória alinhada falhou." + +#: src/cryptsetup_reencrypt.c:222 +#, c-format +msgid "Cannot read device %s." +msgstr "Não foi possível ler o dispositivo %s." + +#: src/cryptsetup_reencrypt.c:233 +#, c-format +msgid "Marking LUKS1 device %s unusable." +msgstr "Marcando o dispositivo LUKS1 %s como não usável." + +#: src/cryptsetup_reencrypt.c:237 +#, c-format +msgid "Setting LUKS2 offline reencrypt flag on device %s." +msgstr "Definindo o sinalizador de recriptografia offline do LUKS2 no dispositivo %s." + +#: src/cryptsetup_reencrypt.c:254 +#, c-format +msgid "Cannot write device %s." +msgstr "Não foi possível escrever o dispositivo %s." + +#: src/cryptsetup_reencrypt.c:302 +msgid "Cannot write reencryption log file." +msgstr "Não foi possível escrever o arquivo log de recriptografia." + +#: src/cryptsetup_reencrypt.c:358 +msgid "Cannot read reencryption log file." +msgstr "Não foi possível abrir o arquivo log de recriptografia." + +#: src/cryptsetup_reencrypt.c:396 +#, c-format +msgid "Log file %s exists, resuming reencryption.\n" +msgstr "Arquivo log %s existe, resumindo recriptografia.\n" + +#: src/cryptsetup_reencrypt.c:445 +msgid "Activating temporary device using old LUKS header." +msgstr "Ativando dispositivo temporário usando antigo cabeçalho LUKS." + +#: src/cryptsetup_reencrypt.c:455 +msgid "Activating temporary device using new LUKS header." +msgstr "Ativando dispositivo temporário usando novo cabeçalho LUKS." + +#: src/cryptsetup_reencrypt.c:465 +msgid "Activation of temporary devices failed." +msgstr "A ativação de dispositivos temporários falhou." + +#: src/cryptsetup_reencrypt.c:551 +msgid "Failed to set data offset." +msgstr "Falha ao definir a posição de dados." + +#: src/cryptsetup_reencrypt.c:557 +#, fuzzy +msgid "Failed to set metadata size." +msgstr "Falha ao definir a posição de dados." + +#: src/cryptsetup_reencrypt.c:565 +#, c-format +msgid "New LUKS header for device %s created." +msgstr "Novo cabeçalho LUKS para dispositivo %s criado." + +# "cryptsetup-reencrypt" é o nome do programa, não traduzir. +#: src/cryptsetup_reencrypt.c:625 +#, c-format +msgid "This version of cryptsetup-reencrypt can't handle new internal token type %s." +msgstr "Essa versão de cryptsetup-reencrypt não sabe lidar com o novo tipo de token interno %s." + +#: src/cryptsetup_reencrypt.c:647 +msgid "Failed to read activation flags from backup header." +msgstr "Falha ao ler sinalizadores de ativação do cabeçalho de cópia de segurança." + +#: src/cryptsetup_reencrypt.c:651 +msgid "Failed to write activation flags to new header." +msgstr "Falha ao escrever sinalizadores de ativação para novo cabeçalho." + +#: src/cryptsetup_reencrypt.c:655 src/cryptsetup_reencrypt.c:659 +msgid "Failed to read requirements from backup header." +msgstr "Falha ao ler requisitos do cabeçalho de cópia de segurança." + +#: src/cryptsetup_reencrypt.c:697 +#, c-format +msgid "%s header backup of device %s created." +msgstr "Cópia de segurança de cabeçalho %s para dispositivo %s criado." + +#: src/cryptsetup_reencrypt.c:760 +msgid "Creation of LUKS backup headers failed." +msgstr "A criação de cópia de segurança de cabeçalhos LUKS falhou." + +#: src/cryptsetup_reencrypt.c:893 +#, c-format +msgid "Cannot restore %s header on device %s." +msgstr "Não foi possível restaurar o cabeçalho %s no dispositivo %s." + +#: src/cryptsetup_reencrypt.c:895 +#, c-format +msgid "%s header on device %s restored." +msgstr "Cabeçalho %s no dispositivo %s restaurado." + +#: src/cryptsetup_reencrypt.c:1099 src/cryptsetup_reencrypt.c:1105 +msgid "Cannot open temporary LUKS device." +msgstr "Não foi possível abrir o dispositivo LUKS temporário." + +#: src/cryptsetup_reencrypt.c:1110 src/cryptsetup_reencrypt.c:1115 +msgid "Cannot get device size." +msgstr "Não foi possível obter o tamanho do dispositivo." + +#: src/cryptsetup_reencrypt.c:1150 +msgid "IO error during reencryption." +msgstr "Erro de E/S durante a recriptografia." + +#: src/cryptsetup_reencrypt.c:1181 +msgid "Provided UUID is invalid." +msgstr "O UUID fornecido é inválido." + +#: src/cryptsetup_reencrypt.c:1407 +msgid "Cannot open reencryption log file." +msgstr "Não foi possível abrir o arquivo log de recriptografia." + +#: src/cryptsetup_reencrypt.c:1413 +msgid "No decryption in progress, provided UUID can be used only to resume suspended decryption process." +msgstr "Nenhuma descriptografia em progresso, UUID fornecido pode ser usado apenas para resumir um processo de descriptografia suspendido." + +#: src/cryptsetup_reencrypt.c:1488 +#, c-format +msgid "Changed pbkdf parameters in keyslot %i." +msgstr "Alterados os parâmetros de pbkdf no slot de chave %i." + +#: src/cryptsetup_reencrypt.c:1600 +msgid "Reencryption block size" +msgstr "Tamanho do bloco de recriptografia" + +#: src/cryptsetup_reencrypt.c:1600 +msgid "MiB" +msgstr "MB" + +#: src/cryptsetup_reencrypt.c:1604 +msgid "Do not change key, no data area reencryption" +msgstr "Não altera chave, nenhuma área de dados de recriptografia" + +#: src/cryptsetup_reencrypt.c:1606 +msgid "Read new volume (master) key from file" +msgstr "Lê nova chave do volume (mestre) a partir do arquivo" + +#: src/cryptsetup_reencrypt.c:1607 +msgid "PBKDF2 iteration time for LUKS (in ms)" +msgstr "Tempo de iteração PBKDF2 para LUKS (em ms)" + +#: src/cryptsetup_reencrypt.c:1613 +msgid "Use direct-io when accessing devices" +msgstr "Usa direct-io ao acessar dispositivos" + +#: src/cryptsetup_reencrypt.c:1614 +msgid "Use fsync after each block" +msgstr "Usa fsync após cada bloco" + +#: src/cryptsetup_reencrypt.c:1615 +msgid "Update log file after every block" +msgstr "Atualiza o arquivo log após todo bloco" + +#: src/cryptsetup_reencrypt.c:1616 +msgid "Use only this slot (others will be disabled)" +msgstr "Usa apenas este slot (outros serão desabilitados)" + +#: src/cryptsetup_reencrypt.c:1621 +msgid "Create new header on not encrypted device" +msgstr "Cria um novo cabeçalho em dispositivo não criptografado" + +#: src/cryptsetup_reencrypt.c:1622 +msgid "Permanently decrypt device (remove encryption)" +msgstr "Descriptografa permanentemente o dispositivo (remove criptografia)" + +#: src/cryptsetup_reencrypt.c:1623 +msgid "The UUID used to resume decryption" +msgstr "A UUID usada para resumir a descriptografia" + +#: src/cryptsetup_reencrypt.c:1624 +msgid "Type of LUKS metadata: luks1, luks2" +msgstr "Tipo de metadados LUKS: luks1, luks2" + +#: src/cryptsetup_reencrypt.c:1643 +msgid "[OPTION...] " +msgstr "[OPÇÃO...] " + +#: src/cryptsetup_reencrypt.c:1651 +#, c-format +msgid "Reencryption will change: %s%s%s%s%s%s." +msgstr "Recriptografia vai alterar: %s%s%s%s%s%s." + +#: src/cryptsetup_reencrypt.c:1652 +msgid "volume key" +msgstr "chave de volume" + +#: src/cryptsetup_reencrypt.c:1654 +msgid "set hash to " +msgstr "definir hash para " + +#: src/cryptsetup_reencrypt.c:1655 +msgid ", set cipher to " +msgstr ", definir cifra para " + +#: src/cryptsetup_reencrypt.c:1659 +msgid "Argument required." +msgstr "Argumento necessário." + +#: src/cryptsetup_reencrypt.c:1687 +msgid "Only values between 1 MiB and 64 MiB allowed for reencryption block size." +msgstr "Apenas valores entre 1 MB e 64 MB são permitidos para tamanho de bloco de recriptografia." + +#: src/cryptsetup_reencrypt.c:1714 +msgid "Maximum device reduce size is 64 MiB." +msgstr "Tamanho máximo de redução do dispositivo é 64 MB." + +#: src/cryptsetup_reencrypt.c:1721 +msgid "Option --new must be used together with --reduce-device-size or --header." +msgstr "A opção --new deve ser usada junto de --reduce-device-size ou --header." + +#: src/cryptsetup_reencrypt.c:1725 +msgid "Option --keep-key can be used only with --hash, --iter-time or --pbkdf-force-iterations." +msgstr "A opção --keep-key pode ser usada apenas com --hash, --iter-time ou --pbkdf-force-iterations." + +#: src/cryptsetup_reencrypt.c:1729 +msgid "Option --new cannot be used together with --decrypt." +msgstr "A opção --new não pode ser usada junto de --decrypt." + +#: src/cryptsetup_reencrypt.c:1733 +msgid "Option --decrypt is incompatible with specified parameters." +msgstr "A opção --decrypt é incompatível com os parâmetros especificados." + +#: src/cryptsetup_reencrypt.c:1737 +msgid "Option --uuid is allowed only together with --decrypt." +msgstr "A opção --uuid é permitida apenas junto de --decrypt." + +#: src/cryptsetup_reencrypt.c:1741 +msgid "Invalid luks type. Use one of these: 'luks', 'luks1' or 'luks2'." +msgstr "Tipo de luks inválido. Use um desses: \"luks\", \"luks1\" ou \"luks2\"." + +#: src/utils_tools.c:151 +msgid "Error reading response from terminal." +msgstr "Erro ao ler resposta do terminal." + +#: src/utils_tools.c:186 +msgid "Command successful.\n" +msgstr "Comando executado com sucesso.\n" + +#: src/utils_tools.c:194 +msgid "wrong or missing parameters" +msgstr "parâmetros errados ou faltando" + +#: src/utils_tools.c:196 +msgid "no permission or bad passphrase" +msgstr "sem permissão ou senha incorreta" + +#: src/utils_tools.c:198 +msgid "out of memory" +msgstr "memória insuficiente" + +#: src/utils_tools.c:200 +msgid "wrong device or file specified" +msgstr "dispositivo ou arquivo errado especificado" + +#: src/utils_tools.c:202 +msgid "device already exists or device is busy" +msgstr "o dispositivo já existe ou está ocupado" + +#: src/utils_tools.c:204 +msgid "unknown error" +msgstr "erro desconhecido" + +#: src/utils_tools.c:206 +#, c-format +msgid "Command failed with code %i (%s).\n" +msgstr "O comando falhou com código %i (%s).\n" + +#: src/utils_tools.c:283 +#, c-format +msgid "Key slot %i created." +msgstr "Slot de chave %i criado." + +#: src/utils_tools.c:285 +#, c-format +msgid "Key slot %i unlocked." +msgstr "Slot de chave %i desbloqueado." + +#: src/utils_tools.c:287 +#, c-format +msgid "Key slot %i removed." +msgstr "Slot de chave %i removido." + +#: src/utils_tools.c:296 +#, c-format +msgid "Token %i created." +msgstr "Token %i criado." + +#: src/utils_tools.c:298 +#, c-format +msgid "Token %i removed." +msgstr "Token %i removido." + +#: src/utils_tools.c:464 +#, fuzzy +msgid "" +"\n" +"Wipe interrupted." +msgstr "" +"\n" +"Escrita interrompida." + +#: src/utils_tools.c:475 +#, c-format +msgid "WARNING: Device %s already contains a '%s' partition signature.\n" +msgstr "AVISO: O dispositivo %s já contém uma assinatura de partição \"%s\".\n" + +#: src/utils_tools.c:483 +#, c-format +msgid "WARNING: Device %s already contains a '%s' superblock signature.\n" +msgstr "AVISO: O dispositivo %s já contém uma assinatura de superbloco \"%s\".\n" + +#: src/utils_tools.c:504 src/utils_tools.c:568 +msgid "Failed to initialize device signature probes." +msgstr "Falha ao inicializar as sondas de assinatura de dispositivo." + +#: src/utils_tools.c:548 +#, c-format +msgid "Failed to stat device %s." +msgstr "Falha ao obter estado do dispositivo %s." + +#: src/utils_tools.c:561 +#, c-format +msgid "Device %s is in use. Can not proceed with format operation." +msgstr "O dispositivo %s está em uso. Não é possível proceder com a operação de formatação." + +#: src/utils_tools.c:563 +#, c-format +msgid "Failed to open file %s in read/write mode." +msgstr "Falha ao abrir o arquivo %s no modo leitura/escrita." + +#: src/utils_tools.c:577 +#, c-format +msgid "Existing '%s' partition signature (offset: % bytes) on device %s will be wiped." +msgstr "" + +#: src/utils_tools.c:580 +#, c-format +msgid "Existing '%s' superblock signature (offset: % bytes) on device %s will be wiped." +msgstr "" + +#: src/utils_tools.c:583 +msgid "Failed to wipe device signature." +msgstr "Falha ao apagar assinatura do dispositivo." + +#: src/utils_tools.c:590 +#, c-format +msgid "Failed to probe device %s for a signature." +msgstr "Falha ao sondar o dispositivo %s por uma assinatura." + +#: src/utils_tools.c:629 +#, fuzzy +msgid "" +"\n" +"Reencryption interrupted." +msgstr "" +"\n" +"Leitura interrompida." + +#: src/utils_password.c:43 src/utils_password.c:75 +#, c-format +msgid "Cannot check password quality: %s" +msgstr "Não foi possível verificar qualidade da senha: %s" + +#: src/utils_password.c:51 +#, c-format +msgid "" +"Password quality check failed:\n" +" %s" +msgstr "" +"Verificação de qualidade da senha falhou:\n" +" %s" + +#: src/utils_password.c:83 +#, c-format +msgid "Password quality check failed: Bad passphrase (%s)" +msgstr "Verificação de qualidade da senha falhou: Senha incorreta (%s)" + +#: src/utils_password.c:193 src/utils_password.c:208 +msgid "Error reading passphrase from terminal." +msgstr "Erro ao ler senha do terminal." + +#: src/utils_password.c:206 +msgid "Verify passphrase: " +msgstr "Verificar senha: " + +#: src/utils_password.c:213 +msgid "Passphrases do not match." +msgstr "As senhas não conferem." + +#: src/utils_password.c:250 +msgid "Cannot use offset with terminal input." +msgstr "Não foi possível usar posição com a entrada do terminal." + +#: src/utils_password.c:253 +#, c-format +msgid "Enter passphrase: " +msgstr "Digite a senha: " + +#: src/utils_password.c:256 +#, c-format +msgid "Enter passphrase for %s: " +msgstr "Digite a senha para %s: " + +#: src/utils_password.c:287 +msgid "No key available with this passphrase." +msgstr "Nenhuma chave disponível com esta senha." + +#: src/utils_password.c:289 +msgid "No usable keyslot is available." +msgstr "" + +#: src/utils_password.c:328 +#, c-format +msgid "Cannot open keyfile %s for write." +msgstr "Não foi possível abrir o arquivo de chave %s para escrita." + +#: src/utils_password.c:335 +#, c-format +msgid "Cannot write to keyfile %s." +msgstr "Não foi possível escrever no arquivo de chave %s." + +#: src/utils_luks2.c:47 +#, c-format +msgid "Failed to open file %s in read-only mode." +msgstr "Falha ao abrir o arquivo %s no modo somente leitura." + +#: src/utils_luks2.c:60 +msgid "Provide valid LUKS2 token JSON:\n" +msgstr "Forneça um JSON de token LUKS2 válido:\n" + +#: src/utils_luks2.c:67 +msgid "Failed to read JSON file." +msgstr "Falha ao ler o arquivo JSON." + +#: src/utils_luks2.c:72 +msgid "" +"\n" +"Read interrupted." +msgstr "" +"\n" +"Leitura interrompida." + +#: src/utils_luks2.c:113 +#, c-format +msgid "Failed to open file %s in write mode." +msgstr "Falha ao abrir o arquivo %s no modo escrita." + +#: src/utils_luks2.c:122 +msgid "" +"\n" +"Write interrupted." +msgstr "" +"\n" +"Escrita interrompida." + +#: src/utils_luks2.c:126 +msgid "Failed to write JSON file." +msgstr "Falha ao escrever arquivo JSON." + +#~ msgid "Requested dmcrypt performance options are not supported." +#~ msgstr "Não há suporte às opções de desempenho de dmcrypt requisitadas." + +#~ msgid "Cannot format device %s which is still in use." +#~ msgstr "Não foi possível formatar o dispositivo %s, o qual ainda está em uso." + +#~ msgid "Key slot %d is not used." +#~ msgstr "O slot de chave %d não está sendo usado." + +#~ msgid "Function not available in FIPS mode." +#~ msgstr "Função não disponível no modo FIPS." + +#~ msgid "Key slot %d selected for deletion." +#~ msgstr "Slot de chave %d selecionado para exclusão." + +#~ msgid "open device as mapping " +#~ msgstr "abre dispositivo como mapeamento " + +#~ msgid "close device (deactivate and remove mapping)" +#~ msgstr "fecha dispositivo (desativa e remove mapeamento)" + +#~ msgid "Failed to set PBKDF parameters." +#~ msgstr "Falha ao definir os parâmetros de sessão PBKDF." + +#~ msgid "Cannot seek to device offset.\n" +#~ msgstr "Não foi possível ir à posição do dispositivo.\n" + +#~ msgid "Interrupted by a signal." +#~ msgstr "Interrompido por um sinal." + +#~ msgid "Device %s is too small. (LUKS2 requires at least % bytes.)" +#~ msgstr "Dispositivo %s é muito pequeno. (LUKS2 precisa de pelo menos % bytes.)" + +#, fuzzy +#~| msgid "Replaced with key slot %d.\n" +#~ msgid "Replaced with key slot %d." +#~ msgstr "Substituído com o slot de chave %d.\n" + +#, fuzzy +#~| msgid "Missing LUKS target type, option --type is required.\n" +#~ msgid "Missing LUKS target type, option --type is required." +#~ msgstr "Faltando o tipo de alvo LUKS, a opção --type é necessária.\n" + +#, fuzzy +#~| msgid "Missing --token option specifying token for removal.\n" +#~ msgid "Missing --token option specifying token for removal." +#~ msgstr "Faltando a opção --token especificando token para remoção.\n" + +#~ msgid "Add or remove keyring token" +#~ msgstr "Adiciona ou remove o token de chaveiro" + +#, fuzzy +#~| msgid "Activated keyslot %i.\n" +#~ msgid "Activated keyslot %i." +#~ msgstr "Slot de chave %i ativado.\n" + +#~ msgid "memory allocation error in action_luksFormat" +#~ msgstr "erro de alocação de memória em action_luksFormat" + +#, fuzzy +#~| msgid "Key slot is invalid." +#~ msgid "Key slot is invalid.\n" +#~ msgstr "O slot de chave é inválido." + +#~ msgid "Too many tree levels for verity volume.\n" +#~ msgstr "Número excessivo de níveis de árvore para volume verity.\n" + +#~ msgid "Key %d not active. Can't wipe.\n" +#~ msgstr "Chave %d não ativada. Não é possível apagar.\n" + +#~ msgid " " +#~ msgstr " " + +#~ msgid "create active device" +#~ msgstr "cria um dispositivo ativado" + +#~ msgid "remove (deactivate) device" +#~ msgstr "remove (desativa) o dispositivo" + +#~ msgid "Progress: %5.1f%%, ETA %02llu:%02llu, %4llu MiB written, speed %5.1f MiB/s%s" +#~ msgstr "Progresso: %5.1f%%, ETA %02llu:%02llu, %4llu MB escrito, vel. %5.1f MB/s%s" + +#~ msgid "Cannot find a free loopback device.\n" +#~ msgstr "Não foi possível localizar um dispositivo de loop livre.\n" + +# Ponto final acrescentado, pois as mensagens em volta possível, sugerindo ser necessário aqui também. +#~ msgid "Cannot open device %s\n" +#~ msgstr "Não foi possível abrir o dispositivo %s.\n" + +#~ msgid "Cannot use passed UUID unless decryption in progress.\n" +#~ msgstr "Não é possível usar o UUID passado a menos que descriptografia estiver em progresso.\n" + +#~ msgid "Marking LUKS device %s usable.\n" +#~ msgstr "Marcando o dispositivo LUKS %s como usável.\n" diff --git a/po/quot.sed b/po/quot.sed new file mode 100644 index 0000000..0122c46 --- /dev/null +++ b/po/quot.sed @@ -0,0 +1,6 @@ +s/"\([^"]*\)"/“\1”/g +s/`\([^`']*\)'/‘\1’/g +s/ '\([^`']*\)' / ‘\1’ /g +s/ '\([^`']*\)'$/ ‘\1’/g +s/^'\([^`']*\)' /‘\1’ /g +s/“”/""/g diff --git a/po/remove-potcdate.sin b/po/remove-potcdate.sin new file mode 100644 index 0000000..2436c49 --- /dev/null +++ b/po/remove-potcdate.sin @@ -0,0 +1,19 @@ +# Sed script that remove the POT-Creation-Date line in the header entry +# from a POT file. +# +# The distinction between the first and the following occurrences of the +# pattern is achieved by looking at the hold space. +/^"POT-Creation-Date: .*"$/{ +x +# Test if the hold space is empty. +s/P/P/ +ta +# Yes it was empty. First occurrence. Remove the line. +g +d +bb +:a +# The hold space was nonempty. Following occurrences. Do nothing. +x +:b +} diff --git a/po/ru.gmo b/po/ru.gmo new file mode 100644 index 0000000000000000000000000000000000000000..fb0be539fd76b02952da226d510e81ce6d67b281 GIT binary patch literal 132090 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 BVxIs2 literal 0 HcmV?d00001 diff --git a/po/ru.po b/po/ru.po new file mode 100644 index 0000000..7182f9b --- /dev/null +++ b/po/ru.po @@ -0,0 +1,4161 @@ +# Russian translation for cryptsetup +# Copyright (C) 2018 Free Software Foundation, Inc. +# This file is distributed under the same license as the cryptsetup package. +# +# Rosetta Contributors and Canonical Ltd , 2007. +# Eugene Roskin , 2016. +# Yuri Kozlov , 2018, 2019. +msgid "" +msgstr "" +"Project-Id-Version: cryptsetup 2.2.2-rc0\n" +"Report-Msgid-Bugs-To: dm-crypt@saout.de\n" +"POT-Creation-Date: 2019-11-01 09:04+0100\n" +"PO-Revision-Date: 2019-10-25 19:33+0300\n" +"Last-Translator: Yuri Kozlov \n" +"Language-Team: Russian \n" +"Language: ru\n" +"MIME-Version: 1.0\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-Launchpad-Export-Date: 2018-12-03 15:52+0000\n" +"X-Generator: Lokalize 2.0\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +#: lib/libdevmapper.c:384 +msgid "Cannot initialize device-mapper, running as non-root user." +msgstr "Не удалось инициализировать device-mapper, выполняется без прав суперпользователя." + +#: lib/libdevmapper.c:387 +msgid "Cannot initialize device-mapper. Is dm_mod kernel module loaded?" +msgstr "Не удалось инициализировать device-mapper. Загружен ли модуль ядра dm_mod?" + +#: lib/libdevmapper.c:1082 +msgid "Requested deferred flag is not supported." +msgstr "Запрошенный флаг отсрочки не поддерживается." + +#: lib/libdevmapper.c:1149 +#, c-format +msgid "DM-UUID for device %s was truncated." +msgstr "У устройства %s был обрезан DM-UUID." + +#: lib/libdevmapper.c:1463 +msgid "Unknown dm target type." +msgstr "Неизвестный тип цели dm." + +#: lib/libdevmapper.c:1565 lib/libdevmapper.c:1617 +msgid "Requested dm-crypt performance options are not supported." +msgstr "Запрошенные параметры производительности dm-crypt не поддерживаются." + +#: lib/libdevmapper.c:1572 +msgid "Requested dm-verity data corruption handling options are not supported." +msgstr "Запрошенные параметры обработки повреждённых данных dm-verify не поддерживаются." + +#: lib/libdevmapper.c:1576 +msgid "Requested dm-verity FEC options are not supported." +msgstr "Запрошенные параметры FEC dm-verify не поддерживаются." + +#: lib/libdevmapper.c:1580 +msgid "Requested data integrity options are not supported." +msgstr "Запрошенные параметры целостности данных не поддерживаются." + +#: lib/libdevmapper.c:1582 +msgid "Requested sector_size option is not supported." +msgstr "Запрошенный параметр sector_size не поддерживается." + +#: lib/libdevmapper.c:1587 +msgid "Requested automatic recalculation of integrity tags is not supported." +msgstr "Запрошенный автоматический пересчёт тегов целостности не поддерживается." + +#: lib/libdevmapper.c:1591 +msgid "Requested dm-integrity bitmap mode is not supported." +msgstr "Запрошенный режим битовой карты dm-integrity не поддерживается." + +#: lib/libdevmapper.c:1620 +msgid "Discard/TRIM is not supported." +msgstr "Discard/TRIM не поддерживается." + +#: lib/libdevmapper.c:2511 +#, c-format +msgid "Failed to query dm-%s segment." +msgstr "Ошибка при запросе сегмента dm-%s." + +#: lib/random.c:80 +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" +msgstr "" +"При генерации ключа тома в системе закончились данные энтропии.\n" +"Подвигайте мышь или наберите любой текст в другом окне, чтобы возникли случайные события.\n" + +#: lib/random.c:84 +#, c-format +msgid "Generating key (%d%% done).\n" +msgstr "Генерация ключа (выполнена на %d%%).\n" + +#: lib/random.c:170 +msgid "Running in FIPS mode." +msgstr "Выполнение в режиме FIPS." + +#: lib/random.c:176 +msgid "Fatal error during RNG initialisation." +msgstr "При инициализации RNG возникла критическая ошибка." + +#: lib/random.c:213 +msgid "Unknown RNG quality requested." +msgstr "Запрошено неизвестное качество RNG." + +#: lib/random.c:218 +msgid "Error reading from RNG." +msgstr "Ошибка чтения из RNG." + +#: lib/setup.c:223 +msgid "Cannot initialize crypto RNG backend." +msgstr "Невозможно инициализировать внутренний интерфейс crypto RNG." + +#: lib/setup.c:229 +msgid "Cannot initialize crypto backend." +msgstr "Невозможно инициализировать внутренний интерфейс crypto." + +#: lib/setup.c:260 lib/setup.c:1990 lib/verity/verity.c:120 +#, c-format +msgid "Hash algorithm %s not supported." +msgstr "Алгоритм хэширования %s не поддерживается." + +#: lib/setup.c:263 lib/loopaes/loopaes.c:90 +#, c-format +msgid "Key processing error (using hash %s)." +msgstr "Ошибка обработки ключа (используется хэш %s)." + +#: lib/setup.c:324 lib/setup.c:351 +msgid "Cannot determine device type. Incompatible activation of device?" +msgstr "Невозможно определить тип устройства. Несовместимая активация устройства?" + +#: lib/setup.c:330 lib/setup.c:2985 +msgid "This operation is supported only for LUKS device." +msgstr "Эта операция поддерживается только для устройства LUKS." + +#: lib/setup.c:357 +msgid "This operation is supported only for LUKS2 device." +msgstr "Эта операция поддерживается только для устройства LUKS2." + +#: lib/setup.c:412 lib/luks2/luks2_reencrypt.c:2345 +msgid "All key slots full." +msgstr "Заполнены все слоты ключей." + +#: lib/setup.c:423 +#, c-format +msgid "Key slot %d is invalid, please select between 0 and %d." +msgstr "Некорректный слот ключа %d, укажите значение между 0 и %d." + +#: lib/setup.c:429 +#, c-format +msgid "Key slot %d is full, please select another one." +msgstr "Слот ключа %d заполнен, выберите другой." + +#: lib/setup.c:514 lib/setup.c:2759 +msgid "Device size is not aligned to device logical block size." +msgstr "Размер устройства не выровнен к размеру логического блока устройства." + +#: lib/setup.c:610 +#, c-format +msgid "Header detected but device %s is too small." +msgstr "Обнаружен заголовок, но устройство %s слишком маленькое." + +#: lib/setup.c:647 +msgid "This operation is not supported for this device type." +msgstr "Эта операция не поддерживается для этого типа устройств." + +#: lib/setup.c:652 +msgid "Illegal operation with reencryption in-progress." +msgstr "Недопустимая операция во время работы перешифрования." + +#: lib/setup.c:821 lib/luks1/keymanage.c:476 +#, c-format +msgid "Unsupported LUKS version %d." +msgstr "Неподдерживаемая версия LUKS %d." + +#: lib/setup.c:838 lib/setup.c:1483 lib/setup.c:1903 +msgid "Detached metadata device is not supported for this crypt type." +msgstr "Отсоединение устройства метаданных не поддерживается для этого типа crypt." + +#: lib/setup.c:1373 lib/setup.c:2479 lib/setup.c:2551 lib/setup.c:2563 +#: lib/setup.c:2712 lib/setup.c:4310 +#, c-format +msgid "Device %s is not active." +msgstr "Устройство %s не активно." + +#: lib/setup.c:1390 +#, c-format +msgid "Underlying device for crypt device %s disappeared." +msgstr "Исчезло нижележащее устройство у устройства crypt %s." + +#: lib/setup.c:1468 +msgid "Invalid plain crypt parameters." +msgstr "Неверные параметры plain crypt." + +#: lib/setup.c:1473 lib/setup.c:1893 src/integritysetup.c:73 +msgid "Invalid key size." +msgstr "Неверный размер ключа." + +#: lib/setup.c:1478 lib/setup.c:1898 lib/setup.c:2100 +msgid "UUID is not supported for this crypt type." +msgstr "Для данного типа crypt UUID не поддерживается." + +#: lib/setup.c:1493 lib/setup.c:1683 lib/luks2/luks2_reencrypt.c:2308 +#: src/cryptsetup.c:1169 +msgid "Unsupported encryption sector size." +msgstr "Неподдерживаемый размер сектора шифрования." + +#: lib/setup.c:1501 lib/setup.c:1808 lib/setup.c:2753 +msgid "Device size is not aligned to requested sector size." +msgstr "Размер устройства не выровнен к запрошенному размеру сектора." + +#: lib/setup.c:1552 lib/setup.c:1671 +msgid "Can't format LUKS without device." +msgstr "Невозможно отформатировать LUKS без устройства." + +#: lib/setup.c:1558 lib/setup.c:1677 +msgid "Requested data alignment is not compatible with data offset." +msgstr "Запрошенный тип выравнивания данных не совместим со смещением данных." + +#: lib/setup.c:1626 lib/setup.c:1795 +msgid "WARNING: Data offset is outside of currently available data device.\n" +msgstr "ПРЕДУПРЕЖДЕНИЕ: смещение данных находится за пределами доступного в данный момент устройства данных.\n" + +#: lib/setup.c:1636 lib/setup.c:1823 lib/setup.c:1844 lib/setup.c:2112 +#, c-format +msgid "Cannot wipe header on device %s." +msgstr "невозможно затереть заголовок на устройстве %s." + +#: lib/setup.c:1688 +msgid "WARNING: The device activation will fail, dm-crypt is missing support for requested encryption sector size.\n" +msgstr "ПРЕДУПРЕЖДЕНИЕ: Активация устройства завершится ошибкой, так как отсутствует поддержка dm-crypt для запрошенного размера сектора шифрования.\n" + +#: lib/setup.c:1710 +msgid "Volume key is too small for encryption with integrity extensions." +msgstr "Ключ тома слишком мал для шифрования с целостными расширениями." + +#: lib/setup.c:1765 +#, c-format +msgid "Cipher %s-%s (key size %zd bits) is not available." +msgstr "Шифр %s-%s (размер ключа %zd бит) недоступен." + +#: lib/setup.c:1798 +#, c-format +msgid "WARNING: LUKS2 metadata size changed to % bytes.\n" +msgstr "ПРЕДУПРЕЖДЕНИЕ: размер метаданных LUKS2 изменился и стал % байт.\n" + +#: lib/setup.c:1802 +#, c-format +msgid "WARNING: LUKS2 keyslots area size changed to % bytes.\n" +msgstr "ПРЕДУПРЕЖДЕНИЕ: размер слотов ключа LUKS2 изменился и стал % байт.\n" + +#: lib/setup.c:1826 lib/utils_device.c:829 lib/luks1/keyencryption.c:256 +#: lib/luks2/luks2_reencrypt.c:2356 lib/luks2/luks2_reencrypt.c:3348 +#, c-format +msgid "Device %s is too small." +msgstr "Устройство %s слишком маленькое." + +#: lib/setup.c:1837 lib/setup.c:1863 +#, c-format +msgid "Cannot format device %s in use." +msgstr "Невозможно отформатировать устройство %s, которое используется." + +#: lib/setup.c:1840 lib/setup.c:1866 +#, c-format +msgid "Cannot format device %s, permission denied." +msgstr "Невозможно отформатировать устройство %s, недостаточно прав." + +#: lib/setup.c:1852 lib/setup.c:2164 +#, c-format +msgid "Cannot format integrity for device %s." +msgstr "Невозможно отформатировать целостность для устройства %s." + +#: lib/setup.c:1870 +#, c-format +msgid "Cannot format device %s." +msgstr "Невозможно отформатировать устройство %s." + +#: lib/setup.c:1888 +msgid "Can't format LOOPAES without device." +msgstr "Невозможно отформатировать LOOPAES без устройства." + +#: lib/setup.c:1933 +msgid "Can't format VERITY without device." +msgstr "Невозможно отформатировать VERITY без устройства." + +#: lib/setup.c:1944 lib/verity/verity.c:103 +#, c-format +msgid "Unsupported VERITY hash type %d." +msgstr "Неподдерживаемый тип хэша %d для VERITY." + +#: lib/setup.c:1950 lib/verity/verity.c:111 +msgid "Unsupported VERITY block size." +msgstr "Неподдерживаемый размер блока для VERITY." + +#: lib/setup.c:1955 lib/verity/verity.c:75 +msgid "Unsupported VERITY hash offset." +msgstr "Неподдерживаемое смещение хэша для VERITY." + +#: lib/setup.c:1960 +msgid "Unsupported VERITY FEC offset." +msgstr "Неподдерживаемое смещение FEC для VERITY." + +#: lib/setup.c:1984 +msgid "Data area overlaps with hash area." +msgstr "Область данных перекрывает области хэша." + +#: lib/setup.c:2009 +msgid "Hash area overlaps with FEC area." +msgstr "Область хэша перекрывает область FEC." + +#: lib/setup.c:2016 +msgid "Data area overlaps with FEC area." +msgstr "Область данных перекрывает область FEC." + +#: lib/setup.c:2221 +#, c-format +msgid "Unknown crypt device type %s requested." +msgstr "Запрошен неизвестный тип устройства crypt %s." + +#: lib/setup.c:2485 lib/setup.c:2557 lib/setup.c:2570 +#, c-format +msgid "Unsupported parameters on device %s." +msgstr "Неподдерживаемые параметры для устройства %s." + +#: lib/setup.c:2491 lib/setup.c:2576 lib/luks2/luks2_reencrypt.c:2408 +#: lib/luks2/luks2_reencrypt.c:2718 +#, c-format +msgid "Mismatching parameters on device %s." +msgstr "Несовпадение параметров для устройства %s." + +#: lib/setup.c:2596 +msgid "Crypt devices mismatch." +msgstr "Несоответствие устройств crypt." + +#: lib/setup.c:2633 lib/setup.c:2638 lib/luks2/luks2_reencrypt.c:2054 +#: lib/luks2/luks2_reencrypt.c:3126 +#, c-format +msgid "Failed to reload device %s." +msgstr "Ошибка при перезагрузке устройства %s." + +#: lib/setup.c:2643 lib/setup.c:2648 lib/luks2/luks2_reencrypt.c:2025 +#: lib/luks2/luks2_reencrypt.c:2032 +#, c-format +msgid "Failed to suspend device %s." +msgstr "Ошибка при приостановке устройства %s." + +#: lib/setup.c:2653 lib/luks2/luks2_reencrypt.c:2039 +#: lib/luks2/luks2_reencrypt.c:3061 lib/luks2/luks2_reencrypt.c:3130 +#, c-format +msgid "Failed to resume device %s." +msgstr "Ошибка при возобновлении работы устройства %s." + +#: lib/setup.c:2667 +#, c-format +msgid "Fatal error while reloading device %s (on top of device %s)." +msgstr "Критическая ошибка при перезагрузке устройства %s (поверх устройства %s)." + +#: lib/setup.c:2670 lib/setup.c:2672 +#, c-format +msgid "Failed to switch device %s to dm-error." +msgstr "Ошибка при переключении устройства %s на dm-error." + +#: lib/setup.c:2744 +msgid "Cannot resize loop device." +msgstr "Невозможно изменить размер закольцованного (loop) устройства." + +#: lib/setup.c:2817 +msgid "Do you really want to change UUID of device?" +msgstr "Вы действительно хотите изменить UUID устройства?" + +#: lib/setup.c:2893 +msgid "Header backup file does not contain compatible LUKS header." +msgstr "Файл резервного заголовка не содержит заголовка совместимого с LUKS." + +#: lib/setup.c:2993 +#, c-format +msgid "Volume %s is not active." +msgstr "Том %s не активен." + +#: lib/setup.c:3004 +#, c-format +msgid "Volume %s is already suspended." +msgstr "Том %s уже приостановлен." + +#: lib/setup.c:3017 +#, c-format +msgid "Suspend is not supported for device %s." +msgstr "Приостановка не поддерживается устройством %s." + +#: lib/setup.c:3019 +#, c-format +msgid "Error during suspending device %s." +msgstr "Ошибка во время приостановки устройства %s." + +#: lib/setup.c:3052 lib/setup.c:3119 +#, c-format +msgid "Volume %s is not suspended." +msgstr "Том %s не приостановлен." + +#: lib/setup.c:3081 +#, c-format +msgid "Resume is not supported for device %s." +msgstr "Возобновление не поддерживается устройством %s." + +#: lib/setup.c:3083 lib/setup.c:3151 +#, c-format +msgid "Error during resuming device %s." +msgstr "Ошибка во время возобновления устройства %s." + +#: lib/setup.c:3219 lib/setup.c:3407 +msgid "Cannot add key slot, all slots disabled and no volume key provided." +msgstr "Невозможно добавить слот ключа, все слоты отключены и не предоставлен ключ тома." + +#: lib/setup.c:3359 +msgid "Failed to swap new key slot." +msgstr "Ошибка при переключении на новый слот ключа." + +#: lib/setup.c:3524 lib/setup.c:4161 lib/setup.c:4174 lib/setup.c:4182 +#: lib/setup.c:4195 lib/setup.c:4480 lib/setup.c:5593 +msgid "Volume key does not match the volume." +msgstr "Ключ тома не подходит к тому." + +#: lib/setup.c:3545 +#, c-format +msgid "Key slot %d is invalid." +msgstr "Некорректный слот ключа %d." + +#: lib/setup.c:3551 src/cryptsetup.c:1511 src/cryptsetup.c:1856 +#, c-format +msgid "Keyslot %d is not active." +msgstr "Слот ключа %d не активен." + +#: lib/setup.c:3570 +msgid "Device header overlaps with data area." +msgstr "Заголовок устройства перекрывает область данных." + +#: lib/setup.c:3836 +msgid "Reencryption in-progress. Cannot activate device." +msgstr "Выполняется перешифрование. Невозможно активировать устройство." + +#: lib/setup.c:3838 lib/luks2/luks2_json_metadata.c:2244 +#: lib/luks2/luks2_reencrypt.c:2817 +msgid "Failed to get reencryption lock." +msgstr "Ошибка при получении блокировки перешифрования." + +#: lib/setup.c:3851 lib/luks2/luks2_reencrypt.c:2836 +msgid "LUKS2 reencryption recovery failed." +msgstr "Ошибка восстановления перешифрования LUKS2." + +#: lib/setup.c:3978 lib/setup.c:4248 +msgid "Device type is not properly initialised." +msgstr "Тип устройства инициализирован неправильно." + +#: lib/setup.c:4022 +#, c-format +msgid "Cannot use device %s, name is invalid or still in use." +msgstr "Невозможно использовать устройство %s, некорректное имя или оно всё ещё используется." + +#: lib/setup.c:4025 +#, c-format +msgid "Device %s already exists." +msgstr "Устройство %s уже существует." + +#: lib/setup.c:4148 +msgid "Incorrect volume key specified for plain device." +msgstr "Для устройства plain указан некорректный ключ тома." + +#: lib/setup.c:4214 +msgid "Incorrect root hash specified for verity device." +msgstr "Некорректный корневой хэш для указанного устройства verity." + +#: lib/setup.c:4289 lib/setup.c:4305 lib/luks2/luks2_json_metadata.c:2297 +#: src/cryptsetup.c:2527 +#, c-format +msgid "Device %s is still in use." +msgstr "Устройство %s всё ещё используется." + +#: lib/setup.c:4314 +#, c-format +msgid "Invalid device %s." +msgstr "Неверное устройство %s." + +#: lib/setup.c:4430 +msgid "Volume key buffer too small." +msgstr "Буфер ключа тома слишком мал." + +#: lib/setup.c:4438 +msgid "Cannot retrieve volume key for plain device." +msgstr "Невозможно получить ключ тома для устройства plain." + +#: lib/setup.c:4449 +#, c-format +msgid "This operation is not supported for %s crypt device." +msgstr "Эта операция не поддерживается для устройства crypt %s." + +#: lib/setup.c:4636 +msgid "Dump operation is not supported for this device type." +msgstr "Операция дампа не поддерживается для устройства этого типа." + +#: lib/setup.c:4947 +#, c-format +msgid "Data offset is not multiple of %u bytes." +msgstr "Смещение данных не кратно %u байтам." + +#: lib/setup.c:5229 +#, c-format +msgid "Cannot convert device %s which is still in use." +msgstr "Невозможно преобразовать устройство %s, которое всё ещё используется." + +#: lib/setup.c:5526 +#, c-format +msgid "Failed to assign keyslot %u as the new volume key." +msgstr "Ошибка при назначении слота ключа %u в качестве нового ключа тома." + +#: lib/setup.c:5599 +msgid "Failed to initialise default LUKS2 keyslot parameters." +msgstr "Ошибка при инициализации параметров слота ключа по умолчанию LUKS2." + +#: lib/setup.c:5605 +#, c-format +msgid "Failed to assign keyslot %d to digest." +msgstr "Ошибка при назначении слота ключа %d дайджесту." + +#: lib/setup.c:5690 +msgid "Failed to load key in kernel keyring." +msgstr "Ошибка при загрузке ключа в связку ключей ядра." + +#: lib/setup.c:5757 +msgid "Kernel keyring is not supported by the kernel." +msgstr "Связка ключей ядра не поддерживается ядром." + +#: lib/setup.c:5767 lib/luks2/luks2_reencrypt.c:2933 +#, c-format +msgid "Failed to read passphrase from keyring (error %d)." +msgstr "Не удалось прочитать парольную фразу из связки ключей (ошибка %d)." + +#: lib/setup.c:5791 +msgid "Failed to acquire global memory-hard access serialization lock." +msgstr "Не удалось захватить глобальную блокировку сериализации доступа на скорости памяти (memory-hard)." + +#: lib/utils.c:81 +msgid "Cannot get process priority." +msgstr "Невозможно получить приоритет процесса." + +#: lib/utils.c:95 +msgid "Cannot unlock memory." +msgstr "Невозможно разблокировать память." + +#: lib/utils.c:169 lib/tcrypt/tcrypt.c:498 +msgid "Failed to open key file." +msgstr "Не удалось открыть файл ключа." + +#: lib/utils.c:174 +msgid "Cannot read keyfile from a terminal." +msgstr "Невозможно прочитать файл ключа с терминала." + +#: lib/utils.c:191 +msgid "Failed to stat key file." +msgstr "Не удалось выполнить stat для файла ключа." + +#: lib/utils.c:199 lib/utils.c:220 +msgid "Cannot seek to requested keyfile offset." +msgstr "Невозможно переместиться по запрошенному смещению в файле ключа." + +#: lib/utils.c:214 lib/utils.c:229 src/utils_password.c:188 +#: src/utils_password.c:201 +msgid "Out of memory while reading passphrase." +msgstr "Не хватило памяти при чтении парольной фразы." + +#: lib/utils.c:249 +msgid "Error reading passphrase." +msgstr "Ошибка чтения парольной фразы." + +#: lib/utils.c:266 +msgid "Nothing to read on input." +msgstr "Нет ничего для чтения со стандартного ввода." + +#: lib/utils.c:273 +msgid "Maximum keyfile size exceeded." +msgstr "Превышен максимальный размер файла ключа." + +#: lib/utils.c:278 +msgid "Cannot read requested amount of data." +msgstr "невозможно прочитать запрошенное количество данных." + +#: lib/utils_device.c:188 lib/utils_storage_wrappers.c:111 +#: lib/luks1/keyencryption.c:92 +#, c-format +msgid "Device %s doesn't exist or access denied." +msgstr "Устройство %s не существует или отказано в доступе." + +#: lib/utils_device.c:198 +#, c-format +msgid "Device %s is not compatible." +msgstr "Устройство %s несовместимо." + +#: lib/utils_device.c:643 +#, c-format +msgid "Device %s is too small. Need at least % bytes." +msgstr "Устройство %s слишком маленькое. Требуется не менее % байт." + +#: lib/utils_device.c:724 +#, c-format +msgid "Cannot use device %s which is in use (already mapped or mounted)." +msgstr "Невозможно использовать устройство %s, которое используется (отображено или примонтировано)." + +#: lib/utils_device.c:728 +#, c-format +msgid "Cannot use device %s, permission denied." +msgstr "Невозможно использовать устройство %s, недостаточно прав." + +#: lib/utils_device.c:731 +#, c-format +msgid "Cannot get info about device %s." +msgstr "Невозможно получить информацию об устройстве %s." + +#: lib/utils_device.c:754 +msgid "Cannot use a loopback device, running as non-root user." +msgstr "Невозможно использовать закольцованное устройство, выполняется без прав суперпользователя." + +#: lib/utils_device.c:764 +msgid "Attaching loopback device failed (loop device with autoclear flag is required)." +msgstr "Ошибка при присоединении закольцованного устройства (требуется закольцованное устройство с флагом autoclear)." + +#: lib/utils_device.c:810 +#, c-format +msgid "Requested offset is beyond real size of device %s." +msgstr "Запрошенный размер вне реального размера устройства %s." + +#: lib/utils_device.c:818 +#, c-format +msgid "Device %s has zero size." +msgstr "Устройство %s имеет нулевой размер." + +#: lib/utils_pbkdf.c:100 +msgid "Requested PBKDF target time cannot be zero." +msgstr "Запрошенное время цели PBKDF не может быть нулевым." + +#: lib/utils_pbkdf.c:106 +#, c-format +msgid "Unknown PBKDF type %s." +msgstr "Неизвестный тип PBKDF %s." + +#: lib/utils_pbkdf.c:111 +#, c-format +msgid "Requested hash %s is not supported." +msgstr "Запрошенный хэш %s не поддерживается." + +#: lib/utils_pbkdf.c:122 +msgid "Requested PBKDF type is not supported for LUKS1." +msgstr "Запрошенный тип PBKDF %s не поддерживается в LUKS1." + +#: lib/utils_pbkdf.c:128 +msgid "PBKDF max memory or parallel threads must not be set with pbkdf2." +msgstr "Максимальный размер памяти PBKDF и количество параллельных нитей нельзя задавать вместе с pbkdf2." + +#: lib/utils_pbkdf.c:133 lib/utils_pbkdf.c:143 +#, c-format +msgid "Forced iteration count is too low for %s (minimum is %u)." +msgstr "Навязанный счётчик итераций слишком мал для %s (минимальное значение равно %u)." + +#: lib/utils_pbkdf.c:148 +#, c-format +msgid "Forced memory cost is too low for %s (minimum is %u kilobytes)." +msgstr "Навязанная стоимость памяти слишком мала для %s (минимальное значение равно %u килобайт)." + +#: lib/utils_pbkdf.c:155 +#, c-format +msgid "Requested maximum PBKDF memory cost is too high (maximum is %d kilobytes)." +msgstr "Запрошенная максимальная стоимость памяти PBKDF слишком высока (максимальное значение равно %d килобайт)." + +#: lib/utils_pbkdf.c:160 +msgid "Requested maximum PBKDF memory cannot be zero." +msgstr "Запрошенная максимальная стоимость памяти PBKDF не может быть равна нулю." + +#: lib/utils_pbkdf.c:164 +msgid "Requested PBKDF parallel threads cannot be zero." +msgstr "Запрошенное количество параллельных нитей PBKDF не может быть нулевым." + +#: lib/utils_pbkdf.c:184 +msgid "Only PBKDF2 is supported in FIPS mode." +msgstr "В режиме FIPS поддерживается только PBKDF2." + +#: lib/utils_benchmark.c:166 +msgid "PBKDF benchmark disabled but iterations not set." +msgstr "Оценка производительности PBKDF выключена, но не задано количество итераций." + +#: lib/utils_benchmark.c:185 +#, c-format +msgid "Not compatible PBKDF2 options (using hash algorithm %s)." +msgstr "Несовместимые параметры PBKDF2 (используется алгоритм хэширования %s)." + +#: lib/utils_benchmark.c:205 +msgid "Not compatible PBKDF options." +msgstr "Несовместимые параметры PBKDF." + +#: lib/utils_device_locking.c:103 +#, c-format +msgid "Locking aborted. The locking path %s/%s is unusable (not a directory or missing)." +msgstr "Блокировка прервана. Путь блокировки %s/%s использовать невозможно (не является каталогом или отсутствует)." + +#: lib/utils_device_locking.c:110 +#, c-format +msgid "WARNING: Locking directory %s/%s is missing!\n" +msgstr "ПРЕДУПРЕЖДЕНИЕ: Каталог блокировки %s/%s отсутствует!\n" + +#: lib/utils_device_locking.c:120 +#, c-format +msgid "Locking aborted. The locking path %s/%s is unusable (%s is not a directory)." +msgstr "Блокировка прервана. Путь блокировки %s/%s использовать невозможно (%s не является каталогом)." + +#: lib/utils_wipe.c:185 src/cryptsetup_reencrypt.c:933 +#: src/cryptsetup_reencrypt.c:1017 +msgid "Cannot seek to device offset." +msgstr "Невозможно перемещаться по устройству." + +#: lib/utils_wipe.c:209 +#, c-format +msgid "Device wipe error, offset %." +msgstr "Ошибка затирания устройства, смещение %." + +#: lib/luks1/keyencryption.c:40 +#, c-format +msgid "" +"Failed to setup dm-crypt key mapping for device %s.\n" +"Check that kernel supports %s cipher (check syslog for more info)." +msgstr "" +"Ошибка при настройке отображения ключей dm-crypt для устройства %s.\n" +"Убедитесь, что ядро поддерживает шифр %s (подробности смотрите в syslog)." + +#: lib/luks1/keyencryption.c:45 +msgid "Key size in XTS mode must be 256 or 512 bits." +msgstr "Размер ключа в режиме XTS должен быть 256 или 512 бит." + +#: lib/luks1/keyencryption.c:47 +msgid "Cipher specification should be in [cipher]-[mode]-[iv] format." +msgstr "Шифр должен указываться в формате [шифр]-[режим]-[iv]." + +#: lib/luks1/keyencryption.c:98 lib/luks1/keymanage.c:345 +#: lib/luks1/keymanage.c:636 lib/luks1/keymanage.c:1074 +#: lib/luks2/luks2_json_metadata.c:1253 lib/luks2/luks2_keyslot.c:739 +#, c-format +msgid "Cannot write to device %s, permission denied." +msgstr "Невозможно записать на устройство %s, недостаточно прав." + +#: lib/luks1/keyencryption.c:121 +msgid "Failed to open temporary keystore device." +msgstr "Не удалось открыть временное устройство keystore." + +#: lib/luks1/keyencryption.c:128 +msgid "Failed to access temporary keystore device." +msgstr "Не удалось получить доступ к временному устройству keystore." + +#: lib/luks1/keyencryption.c:201 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 "Ошибка ввода-вывода при шифровании слота ключа." + +#: lib/luks1/keyencryption.c:247 lib/luks1/keymanage.c:348 +#: lib/luks1/keymanage.c:589 lib/luks1/keymanage.c:639 lib/tcrypt/tcrypt.c:661 +#: lib/verity/verity.c:81 lib/verity/verity.c:179 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:1256 +#: src/cryptsetup_reencrypt.c:205 +#, c-format +msgid "Cannot open device %s." +msgstr "Невозможно открыть устройство %s." + +#: lib/luks1/keyencryption.c:258 lib/luks2/luks2_keyslot_luks2.c:137 +msgid "IO error while decrypting keyslot." +msgstr "Ошибка ввода-вывода при расшифровке слота ключа." + +#: lib/luks1/keymanage.c:111 +#, c-format +msgid "Device %s is too small. (LUKS1 requires at least % bytes.)" +msgstr "Устройство %s слишком маленькое (для LUKS1 требуется не менее % байт)." + +#: 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 +#, c-format +msgid "LUKS keyslot %u is invalid." +msgstr "Некорректный слот ключа LUKS %u." + +#: lib/luks1/keymanage.c:229 lib/luks1/keymanage.c:473 +#: lib/luks2/luks2_json_metadata.c:1084 src/cryptsetup.c:1372 +#: src/cryptsetup.c:1498 src/cryptsetup.c:1555 src/cryptsetup.c:1611 +#: src/cryptsetup.c:1678 src/cryptsetup.c:1781 src/cryptsetup.c:1845 +#: src/cryptsetup.c:2005 src/cryptsetup.c:2194 src/cryptsetup.c:2254 +#: src/cryptsetup.c:2320 src/cryptsetup.c:2484 src/cryptsetup.c:3137 +#: src/cryptsetup.c:3146 src/cryptsetup_reencrypt.c:1372 +#, c-format +msgid "Device %s is not a valid LUKS device." +msgstr "Устройство %s не является корректным устройством LUKS." + +#: lib/luks1/keymanage.c:247 lib/luks2/luks2_json_metadata.c:1101 +#, c-format +msgid "Requested header backup file %s already exists." +msgstr "Запрошенный файл резервного заголовка %s уже существует." + +#: lib/luks1/keymanage.c:249 lib/luks2/luks2_json_metadata.c:1103 +#, c-format +msgid "Cannot create header backup file %s." +msgstr "Невозможно создать файл резервного заголовка %s." + +#: lib/luks1/keymanage.c:256 lib/luks2/luks2_json_metadata.c:1110 +#, c-format +msgid "Cannot write header backup file %s." +msgstr "Невозможно записать файл резервного заголовка %s." + +#: lib/luks1/keymanage.c:287 lib/luks2/luks2_json_metadata.c:1162 +msgid "Backup file doesn't contain valid LUKS header." +msgstr "Резервный файл не содержит корректный заголовок LUKS." + +#: lib/luks1/keymanage.c:300 lib/luks1/keymanage.c:550 +#: lib/luks2/luks2_json_metadata.c:1183 +#, c-format +msgid "Cannot open header backup file %s." +msgstr "Невозможно открыть файл резервного заголовка %s." + +#: lib/luks1/keymanage.c:308 lib/luks2/luks2_json_metadata.c:1191 +#, c-format +msgid "Cannot read header backup file %s." +msgstr "Невозможно прочитать файл резервного заголовка %s." + +#: lib/luks1/keymanage.c:318 +msgid "Data offset or key size differs on device and backup, restore failed." +msgstr "Смещение данных или размер ключа различаются на устройстве и в резервной копии, восстановление невозможно." + +#: lib/luks1/keymanage.c:326 +#, c-format +msgid "Device %s %s%s" +msgstr "Устройство %s %s%s" + +#: lib/luks1/keymanage.c:327 +msgid "does not contain LUKS header. Replacing header can destroy data on that device." +msgstr "не содержит заголовка LUKS. Замена заголовка может уничтожить данные на этом устройстве." + +#: lib/luks1/keymanage.c:328 +msgid "already contains LUKS header. Replacing header will destroy existing keyslots." +msgstr "уже содержит заголовок LUKS. Замена заголовка уничтожит существующие слоты ключей." + +#: lib/luks1/keymanage.c:329 lib/luks2/luks2_json_metadata.c:1225 +msgid "" +"\n" +"WARNING: real device header has different UUID than backup!" +msgstr "" +"\n" +"ПРЕДУПРЕЖДЕНИЕ: заголовок устройства и резервная копия содержат разные UUID!" + +#: lib/luks1/keymanage.c:376 +msgid "Non standard key size, manual repair required." +msgstr "Нестандартный размер ключа, требуется исправление вручную." + +#: lib/luks1/keymanage.c:381 +msgid "Non standard keyslots alignment, manual repair required." +msgstr "Нестандартное выравнивание слотов ключей, требуется исправление вручную." + +#: lib/luks1/keymanage.c:391 +msgid "Repairing keyslots." +msgstr "Исправление слотов ключей." + +#: lib/luks1/keymanage.c:410 +#, c-format +msgid "Keyslot %i: offset repaired (%u -> %u)." +msgstr "Слот ключа %i: исправлено смещение (%u -> %u)." + +#: lib/luks1/keymanage.c:418 +#, c-format +msgid "Keyslot %i: stripes repaired (%u -> %u)." +msgstr "Слот ключа %i: исправлены полосы (%u -> %u)." + +#: lib/luks1/keymanage.c:427 +#, c-format +msgid "Keyslot %i: bogus partition signature." +msgstr "Слот ключа %i: фиктивная подпись раздела." + +#: lib/luks1/keymanage.c:432 +#, c-format +msgid "Keyslot %i: salt wiped." +msgstr "Слот ключа %i: соль затёрта." + +#: lib/luks1/keymanage.c:449 +msgid "Writing LUKS header to disk." +msgstr "Запись заголовка LUKS на диск." + +#: lib/luks1/keymanage.c:454 +msgid "Repair failed." +msgstr "Ошибка при исправлении." + +#: lib/luks1/keymanage.c:482 lib/luks1/keymanage.c:751 +#, c-format +msgid "Requested LUKS hash %s is not supported." +msgstr "Запрошенный хэш LUKS %s не поддерживается." + +#: lib/luks1/keymanage.c:510 src/cryptsetup.c:1081 +msgid "No known problems detected for LUKS header." +msgstr "Известных неполадок в заголовке LUKS не обнаружено." + +#: lib/luks1/keymanage.c:661 +#, c-format +msgid "Error during update of LUKS header on device %s." +msgstr "Ошибка при обновлении заголовка LUKS на устройстве %s." + +#: lib/luks1/keymanage.c:669 +#, c-format +msgid "Error re-reading LUKS header after update on device %s." +msgstr "Ошибка при повторном считывании заголовка LUKS после обновления на устройстве %s." + +#: lib/luks1/keymanage.c:745 +msgid "Data offset for LUKS header must be either 0 or higher than header size." +msgstr "Смещение данных заголовка LUKS должно быть равно 0 или быть больше размера заголовка." + +#: lib/luks1/keymanage.c:756 lib/luks1/keymanage.c:821 +#: lib/luks2/luks2_json_format.c:283 lib/luks2/luks2_json_metadata.c:1002 +#: src/cryptsetup.c:2647 +msgid "Wrong LUKS UUID format provided." +msgstr "Указан неправильный формат LUKS UUID." + +#: lib/luks1/keymanage.c:779 +msgid "Cannot create LUKS header: reading random salt failed." +msgstr "Невозможно создать заголовок LUKS: ошибка при чтении случайной соли." + +#: lib/luks1/keymanage.c:800 +#, c-format +msgid "Cannot create LUKS header: header digest failed (using hash %s)." +msgstr "Невозможно создать заголовок LUKS: ошибка подсчёта дайджеста заголовка (используйте хэш %s)." + +#: lib/luks1/keymanage.c:844 +#, c-format +msgid "Key slot %d active, purge first." +msgstr "Активен слот ключа %d, сначала нужна вычистка." + +#: lib/luks1/keymanage.c:850 +#, c-format +msgid "Key slot %d material includes too few stripes. Header manipulation?" +msgstr "Данный слота ключа %d содержат несколько полос. Подделка заголовка?" + +#: lib/luks1/keymanage.c:1060 +#, c-format +msgid "Key slot %d is invalid, please select keyslot between 0 and %d." +msgstr "Некорректный слот ключа %d, значение слота ключа должно быть между 0 и %d." + +#: lib/luks1/keymanage.c:1078 lib/luks2/luks2_keyslot.c:743 +#, c-format +msgid "Cannot wipe device %s." +msgstr "Невозможно затереть устройство %s." + +#: lib/loopaes/loopaes.c:146 +msgid "Detected not yet supported GPG encrypted keyfile." +msgstr "Обнаружен пока не поддерживаемый зашифрованный файл ключа GPG." + +#: lib/loopaes/loopaes.c:147 +msgid "Please use gpg --decrypt | cryptsetup --keyfile=- ...\n" +msgstr "Используйте gpg --decrypt <ФАЙЛ_КЛЮЧА> | cryptsetup --keyfile=- …\n" + +#: lib/loopaes/loopaes.c:168 lib/loopaes/loopaes.c:188 +msgid "Incompatible loop-AES keyfile detected." +msgstr "Обнаружен несовместимый файл ключа loop-AES." + +#: lib/loopaes/loopaes.c:245 +msgid "Kernel doesn't support loop-AES compatible mapping." +msgstr "Ядро не поддерживает совместимое отображение loop-AES." + +#: lib/tcrypt/tcrypt.c:505 +#, c-format +msgid "Error reading keyfile %s." +msgstr "Ошибка при чтении файла ключа %s." + +#: lib/tcrypt/tcrypt.c:545 +#, c-format +msgid "Maximum TCRYPT passphrase length (%d) exceeded." +msgstr "Превышена максимальная длина парольной фразы TCRYPT (%d)." + +#: lib/tcrypt/tcrypt.c:586 +#, c-format +msgid "PBKDF2 hash algorithm %s not available, skipping." +msgstr "Алгоритм хэширования PBKDF2 %s недоступен, пропускается." + +#: lib/tcrypt/tcrypt.c:602 src/cryptsetup.c:959 +msgid "Required kernel crypto interface not available." +msgstr "Требуемый интерфейс ядра crypto недоступен." + +#: lib/tcrypt/tcrypt.c:604 src/cryptsetup.c:961 +msgid "Ensure you have algif_skcipher kernel module loaded." +msgstr "Убедитесь, что загружен ядерный модуль algif_skcipher." + +#: lib/tcrypt/tcrypt.c:744 +#, c-format +msgid "Activation is not supported for %d sector size." +msgstr "Активация не поддерживается при размере сектора %d." + +#: lib/tcrypt/tcrypt.c:750 +msgid "Kernel doesn't support activation for this TCRYPT legacy mode." +msgstr "Ядро не поддерживает активацию для данного устаревшего режима TCRYPT." + +#: lib/tcrypt/tcrypt.c:784 +#, c-format +msgid "Activating TCRYPT system encryption for partition %s." +msgstr "Активируется система шифрования TCRYPT для раздела %s." + +#: lib/tcrypt/tcrypt.c:862 +msgid "Kernel doesn't support TCRYPT compatible mapping." +msgstr "Ядро не поддерживает совместимое отображение TCRYPT." + +#: lib/tcrypt/tcrypt.c:1084 +msgid "This function is not supported without TCRYPT header load." +msgstr "эта функция не поддерживается без загрузки заголовка TCRYPT." + +#: lib/verity/verity.c:69 lib/verity/verity.c:172 +#, c-format +msgid "Verity device %s doesn't use on-disk header." +msgstr "Устройство verity %s не содержит заголовка на диске." + +#: lib/verity/verity.c:91 +#, c-format +msgid "Device %s is not a valid VERITY device." +msgstr "Устройство %s не является корректным устройством VERITY." + +#: lib/verity/verity.c:98 +#, c-format +msgid "Unsupported VERITY version %d." +msgstr "Неподдерживаемая версия VERITY %d." + +#: lib/verity/verity.c:129 +msgid "VERITY header corrupted." +msgstr "Повреждён заголовок VERITY." + +#: lib/verity/verity.c:166 +#, c-format +msgid "Wrong VERITY UUID format provided on device %s." +msgstr "Указан неправильный формат VERITY UUID на устройстве %s." + +#: lib/verity/verity.c:199 +#, c-format +msgid "Error during update of verity header on device %s." +msgstr "Ошибка при обновлении заголовка verity на устройстве %s." + +#: lib/verity/verity.c:262 +msgid "Errors cannot be repaired with FEC device." +msgstr "Невозможно исправить ошибки с устройством FEC." + +#: lib/verity/verity.c:264 +#, c-format +msgid "Found %u repairable errors with FEC device." +msgstr "Найдено %u исправимых ошибок с устройством FEC." + +#: lib/verity/verity.c:302 +msgid "Kernel doesn't support dm-verity mapping." +msgstr "Ядро не поддерживает отображение dm-verity." + +#: lib/verity/verity.c:313 +msgid "Verity device detected corruption after activation." +msgstr "После активации обнаружено повреждение устройства verity." + +#: lib/verity/verity_hash.c:59 +#, c-format +msgid "Spare area is not zeroed at position %." +msgstr "Резервная область не заполнена нулями по адресу %." + +#: lib/verity/verity_hash.c:160 lib/verity/verity_hash.c:287 +#: lib/verity/verity_hash.c:300 +msgid "Device offset overflow." +msgstr "Переполнение смещения устройства." + +#: lib/verity/verity_hash.c:200 +#, c-format +msgid "Verification failed at position %." +msgstr "Ошибка при проверке по адресу %." + +#: lib/verity/verity_hash.c:273 +msgid "Invalid size parameters for verity device." +msgstr "Неправильный размер параметров для устройства verity." + +#: lib/verity/verity_hash.c:293 +msgid "Hash area overflow." +msgstr "Переполнение области хэша." + +#: lib/verity/verity_hash.c:370 +msgid "Verification of data area failed." +msgstr "Ошибка при сверке области данных." + +#: lib/verity/verity_hash.c:375 +msgid "Verification of root hash failed." +msgstr "Ошибка при сверке корневого хэша." + +#: lib/verity/verity_hash.c:381 +msgid "Input/output error while creating hash area." +msgstr "Ошибка ввода-вывода при создании области хэша." + +#: lib/verity/verity_hash.c:383 +msgid "Creation of hash area failed." +msgstr "Ошибка при создании области хэша." + +#: lib/verity/verity_hash.c:430 +#, c-format +msgid "WARNING: Kernel cannot activate device if data block size exceeds page size (%u)." +msgstr "ПРЕДУПРЕЖДЕНИЕ: ядро не сможет активировать устройство, если размер блока данных превышает размер страницы (%u)." + +#: lib/verity/verity_fec.c:132 +msgid "Failed to allocate RS context." +msgstr "Ошибка при выделении контекста RS." + +#: lib/verity/verity_fec.c:147 +msgid "Failed to allocate buffer." +msgstr "Ошибка при выделении буфера." + +#: lib/verity/verity_fec.c:157 +#, c-format +msgid "Failed to read RS block % byte %d." +msgstr "Не удалось прочитать блок RS %, байт %d." + +#: lib/verity/verity_fec.c:170 +#, c-format +msgid "Failed to read parity for RS block %." +msgstr "Не удалось прочитать чётность для блока RS %." + +#: lib/verity/verity_fec.c:178 +#, c-format +msgid "Failed to repair parity for block %." +msgstr "Не удалось исправить чётность для блока %." + +#: lib/verity/verity_fec.c:189 +#, c-format +msgid "Failed to write parity for RS block %." +msgstr "Не удалось записать чётность для блока RS %." + +#: lib/verity/verity_fec.c:224 +msgid "Block sizes must match for FEC." +msgstr "Для FEC размеры блока должны совпадать." + +#: lib/verity/verity_fec.c:230 +msgid "Invalid number of parity bytes." +msgstr "Неверное количество байт чётности." + +#: lib/verity/verity_fec.c:266 +#, c-format +msgid "Failed to determine size for device %s." +msgstr "Не удалось определить размер устройства %s." + +#: lib/integrity/integrity.c:241 lib/integrity/integrity.c:306 +msgid "Kernel doesn't support dm-integrity mapping." +msgstr "Ядро не поддерживает отображение dm-integrity." + +#: lib/luks2/luks2_disk_metadata.c:383 lib/luks2/luks2_json_metadata.c:959 +#: lib/luks2/luks2_json_metadata.c:1245 +#, c-format +msgid "Failed to acquire write lock on device %s." +msgstr "Не удалось захватить блокировку на запись на устройстве %s." + +#: lib/luks2/luks2_disk_metadata.c:392 +msgid "Detected attempt for concurrent LUKS2 metadata update. Aborting operation." +msgstr "Обнаружена попытка одновременного обновления метаданных LUKS2. Отмена операции." + +#: 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 "" +"Устройство содержит двусмысленные подписи, невозможно провести автоматическое\n" +"восстановление LUKS2. Для восстановления запустите «cryptsetup repair»." + +#: lib/luks2/luks2_json_format.c:227 +msgid "Requested data offset is too small." +msgstr "Запрошенное смещение данных слишком мало." + +#: 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 "ПРЕДУПРЕЖДЕНИЕ: очень маленькая область слотов ключа (% байт), количество доступных слотов ключа LUKS2 очень ограничено.\n" + +#: lib/luks2/luks2_json_metadata.c:946 lib/luks2/luks2_json_metadata.c:1075 +#: lib/luks2/luks2_json_metadata.c:1151 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:1168 +#, c-format +msgid "Forbidden LUKS2 requirements detected in backup %s." +msgstr "В резервной копии %s обнаружены запрещённые требования LUKS2." + +#: lib/luks2/luks2_json_metadata.c:1209 +msgid "Data offset differ on device and backup, restore failed." +msgstr "Смещение данных различается на устройстве и в резервной копии, восстановление невозможно." + +#: lib/luks2/luks2_json_metadata.c:1215 +msgid "Binary header with keyslot areas size differ on device and backup, restore failed." +msgstr "Двоичный заголовок с областями слота ключа различается на устройстве и в резервной копии, восстановление невозможно." + +#: lib/luks2/luks2_json_metadata.c:1222 +#, c-format +msgid "Device %s %s%s%s%s" +msgstr "Устройство %s %s%s%s%s" + +#: lib/luks2/luks2_json_metadata.c:1223 +msgid "does not contain LUKS2 header. Replacing header can destroy data on that device." +msgstr "не содержит заголовка LUKS2. Замена заголовка может уничтожить данные на этом устройстве." + +#: lib/luks2/luks2_json_metadata.c:1224 +msgid "already contains LUKS2 header. Replacing header will destroy existing keyslots." +msgstr "уже содержит заголовок LUKS2. Замена заголовка уничтожит существующие слоты ключей." + +#: lib/luks2/luks2_json_metadata.c:1226 +msgid "" +"\n" +"WARNING: unknown LUKS2 requirements detected in real device header!\n" +"Replacing header with backup may corrupt the data on that device!" +msgstr "" +"\n" +"ПРЕДУПРЕЖДЕНИЕ: обнаружены неизвестные требования LUKS2 в заголовке\n" +"действующего устройства! Замена заголовка из резервной копии может повредить\n" +"данные на этом устройстве!" + +#: lib/luks2/luks2_json_metadata.c:1228 +msgid "" +"\n" +"WARNING: Unfinished offline reencryption detected on the device!\n" +"Replacing header with backup may corrupt data." +msgstr "" +"\n" +"ПРЕДУПРЕЖДЕНИЕ: на устройстве обнаружено незаконченное внесистемное (offline)\n" +"перешифрование! Замена заголовка из резервной копии может повредить данные." + +#: lib/luks2/luks2_json_metadata.c:1324 +#, c-format +msgid "Ignored unknown flag %s." +msgstr "Неизвестный флаг %s игнорируется." + +#: lib/luks2/luks2_json_metadata.c:2011 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:2023 lib/luks2/luks2_reencrypt.c:1764 +msgid "Failed to set dm-crypt segment." +msgstr "Ошибка при задании сегмента dm-crypt." + +#: lib/luks2/luks2_json_metadata.c:2029 lib/luks2/luks2_reencrypt.c:1770 +msgid "Failed to set dm-linear segment." +msgstr "Ошибка при задании сегмента dm-linear." + +#: lib/luks2/luks2_json_metadata.c:2156 +msgid "Unsupported device integrity configuration." +msgstr "Неподдерживаемые настройки целостности устройства." + +#: lib/luks2/luks2_json_metadata.c:2242 +msgid "Reencryption in-progress. Cannot deactivate device." +msgstr "Выполняется перешифрование. Невозможно деактивировать устройство." + +#: lib/luks2/luks2_json_metadata.c:2253 lib/luks2/luks2_reencrypt.c:3171 +#, c-format +msgid "Failed to replace suspended device %s with dm-error target." +msgstr "Не удалось заменить приостановленное устройство %s на цель dm-error." + +#: lib/luks2/luks2_json_metadata.c:2333 +msgid "Failed to read LUKS2 requirements." +msgstr "Ошибка при чтении требований LUKS2." + +#: lib/luks2/luks2_json_metadata.c:2340 +msgid "Unmet LUKS2 requirements detected." +msgstr "Обнаружены неудовлетворяемые требования LUKS2." + +#: lib/luks2/luks2_json_metadata.c:2348 +msgid "Offline reencryption in progress. Aborting." +msgstr "Ведётся внесистемное (offline) перешифрование. Прерываемся." + +#: lib/luks2/luks2_json_metadata.c:2350 +msgid "Online reencryption in progress. Aborting." +msgstr "Ведётся оперативное (online) перешифрование. Прерываемся." + +#: lib/luks2/luks2_keyslot.c:552 lib/luks2/luks2_keyslot.c:589 +msgid "Not enough available memory to open a keyslot." +msgstr "Недостаточно памяти для открытия слота ключа." + +#: lib/luks2/luks2_keyslot.c:554 lib/luks2/luks2_keyslot.c:591 +msgid "Keyslot open failed." +msgstr "Ошибка открытия слота ключа." + +#: 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 "Невозможно использовать шифр %s-%s для шифрования слота ключа." + +#: lib/luks2/luks2_keyslot_luks2.c:480 +msgid "No space for new keyslot." +msgstr "Нет места для нового слота ключа." + +#: lib/luks2/luks2_luks1_convert.c:481 +#, c-format +msgid "Cannot check status of device with uuid: %s." +msgstr "Невозможно определить состояние устройства с uuid: %s." + +#: lib/luks2/luks2_luks1_convert.c:507 +msgid "Unable to convert header with LUKSMETA additional metadata." +msgstr "Невозможно преобразовать заголовок с дополнительными метаданными LUKSMETA." + +#: lib/luks2/luks2_luks1_convert.c:547 +msgid "Unable to move keyslot area. Not enough space." +msgstr "Невозможно переместить область слота ключа. Недостаточно места." + +#: lib/luks2/luks2_luks1_convert.c:590 lib/luks2/luks2_luks1_convert.c:872 +msgid "Unable to move keyslot area." +msgstr "Невозможно переместить область слота ключа." + +#: lib/luks2/luks2_luks1_convert.c:682 +msgid "Cannot convert to LUKS1 format - default segment encryption sector size is not 512 bytes." +msgstr "Невозможно преобразовать в формат LUKS1 — размер сектора шифрования сегмента по умолчанию не равно 512 байтам." + +#: lib/luks2/luks2_luks1_convert.c:690 +msgid "Cannot convert to LUKS1 format - key slot digests are not LUKS1 compatible." +msgstr "Невозможно преобразовать в формат LUKS1 — дайджесты слота ключа несовместимы с LUKS1." + +#: lib/luks2/luks2_luks1_convert.c:702 +#, c-format +msgid "Cannot convert to LUKS1 format - device uses wrapped key cipher %s." +msgstr "Невозможно преобразовать в формат LUKS1 — устройство использует шифр %s с обёрточным ключом." + +#: lib/luks2/luks2_luks1_convert.c:710 +#, c-format +msgid "Cannot convert to LUKS1 format - LUKS2 header contains %u token(s)." +msgstr "Невозможно преобразовать в формат LUKS1 — заголовок LUKS2 содержит %u токенов." + +#: lib/luks2/luks2_luks1_convert.c:724 +#, c-format +msgid "Cannot convert to LUKS1 format - keyslot %u is in invalid state." +msgstr "Невозможно преобразовать в формат LUKS1 — слот ключа %u находится в некорректном состоянии." + +#: lib/luks2/luks2_luks1_convert.c:729 +#, c-format +msgid "Cannot convert to LUKS1 format - slot %u (over maximum slots) is still active." +msgstr "Невозможно преобразовать в формат LUKS1 — слот %u (больше максимального количества слотов) всё ещё активен." + +#: lib/luks2/luks2_luks1_convert.c:734 +#, c-format +msgid "Cannot convert to LUKS1 format - keyslot %u is not LUKS1 compatible." +msgstr "Невозможно преобразовать в формат LUKS1 — слот ключа %u несовместим с LUKS1." + +#: lib/luks2/luks2_reencrypt.c:892 +#, c-format +msgid "Hotzone size must be multiple of calculated zone alignment (%zu bytes)." +msgstr "Размер hotzone должен быть кратен вычисленному выравниванию зоны (%zu байт)." + +#: lib/luks2/luks2_reencrypt.c:897 +#, c-format +msgid "Device size must be multiple of calculated zone alignment (%zu bytes)." +msgstr "Размер устройства должен быть кратен вычисленному выравниванию зоны (%zu байт)." + +#: lib/luks2/luks2_reencrypt.c:941 +#, c-format +msgid "Unsupported resilience mode %s" +msgstr "Неподдерживаемый режим устойчивости %s." + +#: lib/luks2/luks2_reencrypt.c:1158 lib/luks2/luks2_reencrypt.c:1313 +#: lib/luks2/luks2_reencrypt.c:1396 lib/luks2/luks2_reencrypt.c:1430 +#: lib/luks2/luks2_reencrypt.c:3011 +msgid "Failed to initialize old segment storage wrapper." +msgstr "Ошибка при инициализации старой сегментной обёртки хранилища." + +#: lib/luks2/luks2_reencrypt.c:1172 lib/luks2/luks2_reencrypt.c:1291 +msgid "Failed to initialize new segment storage wrapper." +msgstr "Ошибка при инициализации новой сегментной обёртки хранилища." + +#: lib/luks2/luks2_reencrypt.c:1340 +msgid "Failed to read checksums for current hotzone." +msgstr "Ошибка чтения контрольных сумм текущей hotzone." + +#: lib/luks2/luks2_reencrypt.c:1347 lib/luks2/luks2_reencrypt.c:3019 +#, c-format +msgid "Failed to read hotzone area starting at %." +msgstr "Не удалось прочитать область hotzone начиная с %." + +#: lib/luks2/luks2_reencrypt.c:1366 +#, c-format +msgid "Failed to decrypt sector %zu." +msgstr "Не удалось расшифровать сектор %zu." + +#: lib/luks2/luks2_reencrypt.c:1372 +#, c-format +msgid "Failed to recover sector %zu." +msgstr "Не удалось восстановить сектор %zu." + +#: lib/luks2/luks2_reencrypt.c:1867 +#, c-format +msgid "Source and target device sizes don't match. Source %, target: %." +msgstr "Размеры устройств источника и назначения не совпадают. Источник %, назначение: %." + +#: lib/luks2/luks2_reencrypt.c:1965 +#, c-format +msgid "Failed to activate hotzone device %s." +msgstr "Ошибка при активации устройства hotzone %s." + +#: lib/luks2/luks2_reencrypt.c:1982 +#, c-format +msgid "Failed to activate overlay device %s with actual origin table." +msgstr "Ошибка при активации оверлейного устройства %s с действительной исходной таблицей." + +#: lib/luks2/luks2_reencrypt.c:1989 +#, c-format +msgid "Failed to load new mapping for device %s." +msgstr "Ошибка при загрузке нового отображения устройства %s." + +#: lib/luks2/luks2_reencrypt.c:2060 +msgid "Failed to refresh reencryption devices stack." +msgstr "Ошибка при обновлении стека устройств перешифрования." + +#: lib/luks2/luks2_reencrypt.c:2216 +msgid "Failed to set new keyslots area size." +msgstr "Ошибка при задании нового размера области слотов ключей." + +#: lib/luks2/luks2_reencrypt.c:2318 +#, c-format +msgid "Data shift is not aligned to requested encryption sector size (% bytes)." +msgstr "Сдвиг данные не выровнен к запрошенному размеру сектора шифрования (% байт)." + +#: lib/luks2/luks2_reencrypt.c:2339 +#, c-format +msgid "Data device is not aligned to requested encryption sector size (% bytes)." +msgstr "Устройство данных не выровнено к запрошенному размеру сектора шифрования (% байт)." + +#: lib/luks2/luks2_reencrypt.c:2360 +#, c-format +msgid "Data shift (% sectors) is less than future data offset (% sectors)." +msgstr "Сдвиг данных (% секторов) меньше чем будущее смещение данных (% секторов)." + +#: lib/luks2/luks2_reencrypt.c:2366 lib/luks2/luks2_reencrypt.c:2760 +#: lib/luks2/luks2_reencrypt.c:2781 +#, c-format +msgid "Failed to open %s in exclusive mode (already mapped or mounted)." +msgstr "Ошибка при открытии %s в монопольном режиме (уже отображено или примонтировано)." + +#: lib/luks2/luks2_reencrypt.c:2534 +msgid "No LUKS2 reencryption in progress." +msgstr "Перешифрование LUKS2 в данный момент не выполняется." + +#: lib/luks2/luks2_reencrypt.c:2540 lib/luks2/luks2_reencrypt.c:3276 +msgid "Failed to load LUKS2 reencryption context." +msgstr "Ошибка при загрузке контекста перешифрования LUKS2." + +#: lib/luks2/luks2_reencrypt.c:2600 +msgid "Failed to get reencryption state." +msgstr "Ошибка при получении состояния перешифрования." + +#: lib/luks2/luks2_reencrypt.c:2604 +msgid "Device is not in reencryption." +msgstr "Устройство не перешифровывается." + +#: lib/luks2/luks2_reencrypt.c:2611 +msgid "Reencryption process is already running." +msgstr "Процесс перешифрования уже запущен." + +#: lib/luks2/luks2_reencrypt.c:2613 +msgid "Failed to acquire reencryption lock." +msgstr "Ошибка при захвате блокировки перешифрования." + +#: lib/luks2/luks2_reencrypt.c:2631 +msgid "Cannot proceed with reencryption. Run reencryption recovery first." +msgstr "Невозможно продолжить с перешифрованием. Сначала запустите восстановление перешифрования." + +#: lib/luks2/luks2_reencrypt.c:2731 +msgid "Active device size and requested reencryption size don't match." +msgstr "Активный размер устройства и запрошенный размер перешифрования не совпадают." + +#: lib/luks2/luks2_reencrypt.c:2745 +msgid "Illegal device size requested in reencryption parameters." +msgstr "В параметрах перешифрования запрошен некорректный размер устройства." + +#: lib/luks2/luks2_reencrypt.c:2815 +msgid "Reencryption in-progress. Cannot perform recovery." +msgstr "Выполняется перешифрование. Восстановление выполнить невозможно." + +#: lib/luks2/luks2_reencrypt.c:2887 +msgid "LUKS2 reencryption already initialized in metadata." +msgstr "Перешифрование LUKS2 уже инициализировано в метаданных." + +#: lib/luks2/luks2_reencrypt.c:2894 +msgid "Failed to initialize LUKS2 reencryption in metadata." +msgstr "Не удалось инициализировать перешифрование LUKS2 в метаданных." + +#: lib/luks2/luks2_reencrypt.c:2985 +msgid "Failed to set device segments for next reencryption hotzone." +msgstr "Ошибка при назначении сегментов устройства для следующей hotzone перешифрования." + +#: lib/luks2/luks2_reencrypt.c:3027 +msgid "Failed to write reencryption resilience metadata." +msgstr "Ошибка при записи метаданных устойчивости перешифрования." + +#: lib/luks2/luks2_reencrypt.c:3034 +msgid "Decryption failed." +msgstr "Не удалось расшифровать." + +#: lib/luks2/luks2_reencrypt.c:3039 +#, c-format +msgid "Failed to write hotzone area starting at %." +msgstr "Не удалось записать область hotzone начиная с %." + +#: lib/luks2/luks2_reencrypt.c:3044 +msgid "Failed to sync data." +msgstr "Ошибка синхронизации данных." + +#: lib/luks2/luks2_reencrypt.c:3052 +msgid "Failed to update metadata after current reencryption hotzone completed." +msgstr "Ошибка при обновлении метаданных после завершения текущей hotzone перешифрования." + +#: lib/luks2/luks2_reencrypt.c:3119 +msgid "Failed to write LUKS2 metadata." +msgstr "Ошибка при записи метаданных LUKS2." + +#: lib/luks2/luks2_reencrypt.c:3142 +msgid "Failed to wipe backup segment data." +msgstr "Ошибка при затирании резервной копии сегмента данных." + +#: lib/luks2/luks2_reencrypt.c:3155 +msgid "Failed to disable reencryption requirement flag." +msgstr "Не удалось выключить флаг требования перешифрования." + +#: lib/luks2/luks2_reencrypt.c:3163 +#, c-format +msgid "Fatal error while reencrypting chunk starting at %, % sectors long." +msgstr "Критическая ошибка при перешифровании куска начиная с %, длиной в % секторов." + +#: lib/luks2/luks2_reencrypt.c:3172 +msgid "Do not resume the device unless replaced with error target manually." +msgstr "Устройство не возобновит работу пока не будет заменено вручную с целью error." + +#: lib/luks2/luks2_reencrypt.c:3221 +msgid "Cannot proceed with reencryption. Unexpected reencryption status." +msgstr "Невозможно продолжить с перешифрованием. Неожиданное состояние перешифрования." + +#: lib/luks2/luks2_reencrypt.c:3227 +msgid "Missing or invalid reencrypt context." +msgstr "Контекст перешифрования отсутствует или неверен." + +#: lib/luks2/luks2_reencrypt.c:3234 +msgid "Failed to initialize reencryption device stack." +msgstr "Ошибка при инициализации стека устройства перешифрования." + +#: lib/luks2/luks2_reencrypt.c:3253 lib/luks2/luks2_reencrypt.c:3289 +msgid "Failed to update reencryption context." +msgstr "Ошибка при обновлении контекста перешифрования." + +#: lib/luks2/luks2_token.c:262 +msgid "No free token slot." +msgstr "Нет свободного слота под токен." + +#: lib/luks2/luks2_token.c:269 +#, c-format +msgid "Failed to create builtin token %s." +msgstr "Ошибка при создании встроенного токена %s." + +#: src/cryptsetup.c:162 +msgid "Can't do passphrase verification on non-tty inputs." +msgstr "Невозможно проверить парольную фразу не с входных tty." + +#: src/cryptsetup.c:215 +msgid "Keyslot encryption parameters can be set only for LUKS2 device." +msgstr "Параметры шифрования слота ключа могут задаваться только для устройства LUKS2." + +#: src/cryptsetup.c:245 src/cryptsetup.c:893 src/cryptsetup.c:1212 +#: src/cryptsetup.c:3011 src/cryptsetup_reencrypt.c:715 +#: src/cryptsetup_reencrypt.c:785 +msgid "No known cipher specification pattern detected." +msgstr "Обнаружено указание неизвестного шаблона шифра." + +#: src/cryptsetup.c:253 +msgid "WARNING: The --hash parameter is being ignored in plain mode with keyfile specified.\n" +msgstr "ПРЕДУПРЕЖДЕНИЕ: параметр --hash игнорируется в режиме plain с указанным файлом ключа.\n" + +#: src/cryptsetup.c:261 +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:301 +#, c-format +msgid "Detected device signature(s) on %s. Proceeding further may damage existing data." +msgstr "Обнаружены подпись(и) устройства на %s. Продолжение работы может повредить существующие данные." + +#: src/cryptsetup.c:307 src/cryptsetup.c:1038 src/cryptsetup.c:1090 +#: src/cryptsetup.c:1189 src/cryptsetup.c:1262 src/cryptsetup.c:1913 +#: src/cryptsetup.c:2545 src/cryptsetup.c:2668 src/integritysetup.c:232 +msgid "Operation aborted.\n" +msgstr "Операция прервана.\n" + +#: src/cryptsetup.c:375 +msgid "Option --key-file is required." +msgstr "Параметр --key-file является обязательным." + +#: src/cryptsetup.c:428 +msgid "Enter VeraCrypt PIM: " +msgstr "Введите VeraCrypt PIM: " + +#: src/cryptsetup.c:437 +msgid "Invalid PIM value: parse error." +msgstr "Недопустимое значение PIM: ошибка при разборе." + +#: src/cryptsetup.c:440 +msgid "Invalid PIM value: 0." +msgstr "Недопустимое значение PIM: 0." + +#: src/cryptsetup.c:443 +msgid "Invalid PIM value: outside of range." +msgstr "Недопустимое значение PIM: вышло за границы диапазона." + +#: src/cryptsetup.c:466 +msgid "No device header detected with this passphrase." +msgstr "С этой парольной фразой заголовка устройства не обнаружено." + +#: src/cryptsetup.c:528 src/cryptsetup.c:1940 +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 "" +"Дамп заголовка с ключом тома является секретной информацией,\n" +"обеспечивающей доступ к зашифрованному разделу без парольной фразы.\n" +"Этот дамп следует всегда хранить зашифрованным в надёжном месте." + +#: src/cryptsetup.c:607 +#, c-format +msgid "Device %s is still active and scheduled for deferred removal.\n" +msgstr "Устройство %s всё ещё активно и запланировано к отложенному удалению.\n" + +#: src/cryptsetup.c:635 +msgid "Resize of active device requires volume key in keyring but --disable-keyring option is set." +msgstr "Для изменения размера активного устройства требуется ключ тома в связке ключей, но указан параметр --disable-keyring." + +#: src/cryptsetup.c:771 +msgid "Benchmark interrupted." +msgstr "Оценка производительности прервана." + +#: src/cryptsetup.c:792 +#, c-format +msgid "PBKDF2-%-9s N/A\n" +msgstr "PBKDF2-%-9s Н/Д\n" + +#: src/cryptsetup.c:794 +#, c-format +msgid "PBKDF2-%-9s %7u iterations per second for %zu-bit key\n" +msgstr "PBKDF2-%-9s %7u итераций в секунду для %zu-битного ключа\n" + +#: src/cryptsetup.c:808 +#, c-format +msgid "%-10s N/A\n" +msgstr "%-10s Н/Д\n" + +#: src/cryptsetup.c:810 +#, 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:834 +msgid "Result of benchmark is not reliable." +msgstr "Результат оценки производительности ненадёжен." + +#: src/cryptsetup.c:885 +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:919 +#, c-format +msgid "#%*s Algorithm | Key | Encryption | Decryption\n" +msgstr "#%*s Алгоритм | Ключ | Шифрование | Расшифровка\n" + +#: src/cryptsetup.c:923 +#, c-format +msgid "Cipher %s is not available." +msgstr "Шифр %s недоступен." + +#. TRANSLATORS: The string is header of a table and must be exactly (right side) aligned. +#: src/cryptsetup.c:943 +msgid "# Algorithm | Key | Encryption | Decryption\n" +msgstr "" +"# Algorithm | Key | Encryption | Decryption\n" +"# Алгоритм | Ключ | Шифрование | Расшифровка\n" + +#: src/cryptsetup.c:952 +msgid "N/A" +msgstr "Н/Д" + +#: src/cryptsetup.c:1031 +msgid "" +"Seems device does not require reencryption recovery.\n" +"Do you want to proceed anyway?" +msgstr "" +"Кажется, что устройству не требуется восстановление перешифрования.\n" +"Продолжить?" + +#: src/cryptsetup.c:1037 +msgid "Really proceed with LUKS2 reencryption recovery?" +msgstr "Действительно продолжить восстановление перешифрования LUKS2?" + +#: src/cryptsetup.c:1046 +msgid "Enter passphrase for reencryption recovery: " +msgstr "Введите пароль для восстановления перешифрования: " + +#: src/cryptsetup.c:1089 +msgid "Really try to repair LUKS device header?" +msgstr "Действительно попробовать восстановить заголовок устройства LUKS?" + +#: src/cryptsetup.c:1108 src/integritysetup.c:145 +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 "" +"Затирается устройство для инициализации целостности контрольной суммы.\n" +"Вы можете прервать процесс нажав CTRL+c (остаток незатёртого устройства будет содержать некорректную контрольную сумму).\n" + +#: src/cryptsetup.c:1130 src/integritysetup.c:167 +#, c-format +msgid "Cannot deactivate temporary device %s." +msgstr "Невозможно деактивировать временное устройство %s." + +#: src/cryptsetup.c:1174 +msgid "Integrity option can be used only for LUKS2 format." +msgstr "Параметр целостности можно использовать только в формате LUKS2." + +#: src/cryptsetup.c:1179 src/cryptsetup.c:1239 +msgid "Unsupported LUKS2 metadata size options." +msgstr "Неподдерживаемый размер параметров метаданных LUKS2." + +#: src/cryptsetup.c:1196 +#, c-format +msgid "Cannot create header file %s." +msgstr "Невозможно создать файл заголовка %s." + +#: src/cryptsetup.c:1219 src/integritysetup.c:194 src/integritysetup.c:203 +#: src/integritysetup.c:212 src/integritysetup.c:279 src/integritysetup.c:288 +#: src/integritysetup.c:298 +msgid "No known integrity specification pattern detected." +msgstr "Обнаружено указание неизвестного шаблона целостности." + +#: src/cryptsetup.c:1232 +#, c-format +msgid "Cannot use %s as on-disk header." +msgstr "Невозможно использовать %s в качестве заголовка для диска." + +#: src/cryptsetup.c:1256 src/integritysetup.c:226 +#, c-format +msgid "This will overwrite data on %s irrevocably." +msgstr "Данные на %s будут перезаписаны без возможности восстановления." + +#: src/cryptsetup.c:1297 src/cryptsetup.c:1627 src/cryptsetup.c:1694 +#: src/cryptsetup.c:1796 src/cryptsetup.c:1862 src/cryptsetup_reencrypt.c:545 +msgid "Failed to set pbkdf parameters." +msgstr "Ошибка при задании параметров pbkdf." + +#: src/cryptsetup.c:1378 +msgid "Reduced data offset is allowed only for detached LUKS header." +msgstr "Сокращение смещения данных допускается только для отсоединённого заголовка LUKS." + +#: src/cryptsetup.c:1389 src/cryptsetup.c:1700 +msgid "Cannot determine volume key size for LUKS without keyslots, please use --key-size option." +msgstr "Невозможно определить размер ключа тома LUKS без слотов ключа, укажите параметр --key-size." + +#: src/cryptsetup.c:1427 +msgid "Device activated but cannot make flags persistent." +msgstr "Устройство активировано, но нельзя сделать флаги постоянными." + +#: src/cryptsetup.c:1508 src/cryptsetup.c:1578 +#, c-format +msgid "Keyslot %d is selected for deletion." +msgstr "Для удаления выбран слот ключа %d." + +#: src/cryptsetup.c:1520 src/cryptsetup.c:1581 +msgid "This is the last keyslot. Device will become unusable after purging this key." +msgstr "Это последний слот ключа. Устройство станет неработоспособным после вычистки этого ключа." + +#: src/cryptsetup.c:1521 +msgid "Enter any remaining passphrase: " +msgstr "Введите любую оставшуюся парольную фразу: " + +#: src/cryptsetup.c:1522 src/cryptsetup.c:1583 +msgid "Operation aborted, the keyslot was NOT wiped.\n" +msgstr "Операция прервана, слот ключа НЕ затёрт.\n" + +#: src/cryptsetup.c:1560 +msgid "Enter passphrase to be deleted: " +msgstr "Введите удаляемую парольную фразу: " + +#: src/cryptsetup.c:1641 src/cryptsetup.c:1715 src/cryptsetup.c:1749 +msgid "Enter new passphrase for key slot: " +msgstr "Введите новую парольную фразу для слота ключа: " + +#: src/cryptsetup.c:1732 src/cryptsetup_reencrypt.c:1327 +#, c-format +msgid "Enter any existing passphrase: " +msgstr "Введите любую существующую парольную фразу: " + +#: src/cryptsetup.c:1800 +msgid "Enter passphrase to be changed: " +msgstr "Введите изменяемую парольную фразу: " + +#: src/cryptsetup.c:1816 src/cryptsetup_reencrypt.c:1313 +msgid "Enter new passphrase: " +msgstr "Введите новую парольную фразу: " + +#: src/cryptsetup.c:1866 +msgid "Enter passphrase for keyslot to be converted: " +msgstr "Введите парольную фразу для преобразуемого слота ключа: " + +#: src/cryptsetup.c:1890 +msgid "Only one device argument for isLuks operation is supported." +msgstr "Только одно устройство можно указать для операции isLuks." + +#: src/cryptsetup.c:2074 src/cryptsetup.c:2095 +msgid "Option --header-backup-file is required." +msgstr "Параметр --header-backup-file является обязательным." + +#: src/cryptsetup.c:2125 +#, c-format +msgid "%s is not cryptsetup managed device." +msgstr "%s не является управляемым устройством cryptsetup." + +#: src/cryptsetup.c:2136 +#, c-format +msgid "Refresh is not supported for device type %s" +msgstr "Обновление не поддерживается для устройств типа %s" + +#: src/cryptsetup.c:2174 +#, c-format +msgid "Unrecognized metadata device type %s." +msgstr "Нераспознанный тип метаданных устройства %s." + +#: src/cryptsetup.c:2177 +msgid "Command requires device and mapped name as arguments." +msgstr "Для команды требуется задать устройство и имя отображения." + +#: src/cryptsetup.c:2199 +#, c-format +msgid "" +"This operation will erase all keyslots on device %s.\n" +"Device will become unusable after this operation." +msgstr "" +"Эта операция сотрёт все слоты ключей на устройстве %s.\n" +"Устройство станет неработоспособным после этой операции." + +#: src/cryptsetup.c:2206 +msgid "Operation aborted, keyslots were NOT wiped.\n" +msgstr "Операция прервана, слоты ключа НЕ затёрты.\n" + +#: src/cryptsetup.c:2243 +msgid "Invalid LUKS type, only luks1 and luks2 are supported." +msgstr "Некорректный тип LUKS, поддерживаются только luks1 и luks2." + +#: src/cryptsetup.c:2261 +#, c-format +msgid "Device is already %s type." +msgstr "Устройство уже имеет тип %s." + +#: src/cryptsetup.c:2266 +#, c-format +msgid "This operation will convert %s to %s format.\n" +msgstr "Данная операция преобразует формат %s в %s.\n" + +#: src/cryptsetup.c:2272 +msgid "Operation aborted, device was NOT converted.\n" +msgstr "Операция прервана, устройство НЕ преобразовано.\n" + +#: src/cryptsetup.c:2312 +msgid "Option --priority, --label or --subsystem is missing." +msgstr "Отсутствует параметр --priority, --label или --subsystem." + +#: src/cryptsetup.c:2346 src/cryptsetup.c:2379 src/cryptsetup.c:2402 +#, c-format +msgid "Token %d is invalid." +msgstr "Некорректный токен %d." + +#: src/cryptsetup.c:2349 src/cryptsetup.c:2405 +#, c-format +msgid "Token %d in use." +msgstr "Используется токен %d." + +#: src/cryptsetup.c:2356 +#, c-format +msgid "Failed to add luks2-keyring token %d." +msgstr "Ошибка при добавлении токена luks2-keyring %d." + +#: src/cryptsetup.c:2365 src/cryptsetup.c:2427 +#, c-format +msgid "Failed to assign token %d to keyslot %d." +msgstr "Ошибка при назначении токена %d слоту ключа %d." + +#: src/cryptsetup.c:2382 +#, c-format +msgid "Token %d is not in use." +msgstr "Токен %d не используется." + +#: src/cryptsetup.c:2417 +msgid "Failed to import token from file." +msgstr "Ошибка при импорте токена из файла." + +#: src/cryptsetup.c:2442 +#, c-format +msgid "Failed to get token %d for export." +msgstr "Ошибка при получении токена %d для экспорта." + +#: src/cryptsetup.c:2457 +msgid "--key-description parameter is mandatory for token add action." +msgstr "Для добавления токена требуется параметр --key-description." + +#: src/cryptsetup.c:2463 src/cryptsetup.c:2471 +msgid "Action requires specific token. Use --token-id parameter." +msgstr "Для действия требуется указать токен. Используйте параметр --token-id." + +#: src/cryptsetup.c:2476 +#, c-format +msgid "Invalid token operation %s." +msgstr "Некорректная операция с токеном %s." + +#: src/cryptsetup.c:2531 +#, c-format +msgid "Auto-detected active dm device '%s' for data device %s.\n" +msgstr "Автоматически обнаруженное активное устройство dm «%s» для устройства данных %s.\n" + +#: src/cryptsetup.c:2535 +#, c-format +msgid "Device %s is not a block device.\n" +msgstr "Устройство %s не является блочным.\n" + +#: src/cryptsetup.c:2537 +#, c-format +msgid "Failed to auto-detect device %s holders." +msgstr "Не удалось автоматически обнаружить держателей устройства %s." + +#: src/cryptsetup.c:2539 +#, 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 "" +"Невозможно понять, активно устройство %s или нет.\n" +"Вы действительно хотите продолжить перешифрование в отложенном режиме?\n" +"Это может привести к потере данных, если устройство всё же активно.\n" +"Для запуска перешифрования в оперативном режиме укажите параметр --active-name.\n" + +#: src/cryptsetup.c:2619 +msgid "Invalid LUKS device type." +msgstr "Неверный тип устройства LUKS." + +#: src/cryptsetup.c:2624 +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:2629 +msgid "Requested data offset must be less than or equal to half of --reduce-device-size parameter." +msgstr "Запрошенное смещение данных должно быть меньше или равно половине значения параметра --reduce-device-size." + +#: src/cryptsetup.c:2638 +#, c-format +msgid "Adjusting --reduce-device-size value to twice the --offset % (sectors).\n" +msgstr "Подгоняется значение --reduce-device-size под двукратный размер --offset % (секторов).\n" + +#: src/cryptsetup.c:2642 +msgid "Encryption is supported only for LUKS2 format." +msgstr "Шифрование поддерживается только для формата LUKS2." + +#: src/cryptsetup.c:2664 +#, c-format +msgid "Detected LUKS device on %s. Do you want to encrypt that LUKS device again?" +msgstr "На %s обнаружено устройство LUKS. Хотите снова зашифровать это устройство LUKS?" + +#: src/cryptsetup.c:2679 +#, c-format +msgid "Temporary header file %s already exists. Aborting." +msgstr "Временный файл заголовка %s уже существует. Прекращение работы." + +#: src/cryptsetup.c:2681 src/cryptsetup.c:2688 +#, c-format +msgid "Cannot create temporary header file %s." +msgstr "Невозможно создать временный файл заголовка %s." + +#: src/cryptsetup.c:2752 +#, c-format +msgid "%s/%s is now active and ready for online encryption." +msgstr "%s/%s теперь активен и готов для оперативного шифрования." + +#: src/cryptsetup.c:2919 src/cryptsetup.c:2925 +msgid "Not enough free keyslots for reencryption." +msgstr "Для шифрования недостаточно свободных слотов ключей." + +#: src/cryptsetup.c:2945 src/cryptsetup_reencrypt.c:1284 +msgid "Key file can be used only with --key-slot or with exactly one key slot active." +msgstr "Файл ключа можно использовать только с --key-slot или только при одном активном слоте." + +#: src/cryptsetup.c:2954 src/cryptsetup_reencrypt.c:1325 +#: src/cryptsetup_reencrypt.c:1336 +#, c-format +msgid "Enter passphrase for key slot %d: " +msgstr "Введите парольную фразу для слота ключа %d: " + +#: src/cryptsetup.c:2962 +#, c-format +msgid "Enter passphrase for key slot %u: " +msgstr "Введите парольную фразу для слота ключа %u: " + +#: src/cryptsetup.c:3129 +msgid "Command requires device as argument." +msgstr "Для команды требуется в аргументе указать устройство." + +#: src/cryptsetup.c:3151 +msgid "Only LUKS2 format is currently supported. Please use cryptsetup-reencrypt tool for LUKS1." +msgstr "В настоящий момент поддерживается только формат LUKS2. Для LUKS1 используйте программу cryptsetup-reencrypt." + +#: src/cryptsetup.c:3163 +msgid "Legacy offline reencryption already in-progress. Use cryptsetup-reencrypt utility." +msgstr "Уже выполняется устаревшее внесистемное (offline) перешифрование. Используйте программу cryptsetup-reencrypt." + +#: src/cryptsetup.c:3173 src/cryptsetup_reencrypt.c:178 +msgid "Reencryption of device with integrity profile is not supported." +msgstr "Перешифрование устройства с профилем целостности не поддерживается." + +#: src/cryptsetup.c:3181 +msgid "LUKS2 reencryption already initialized. Aborting operation." +msgstr "Перешифрование LUKS2 уже инициализировано. Прекращение работы." + +#: src/cryptsetup.c:3185 +msgid "LUKS2 device is not in reencryption." +msgstr "Устройство LUKS2 не перешифровывается." + +#: src/cryptsetup.c:3212 +msgid " [--type ] []" +msgstr "<устройство> [--type <тип>] [<имя>]" + +#: src/cryptsetup.c:3212 src/veritysetup.c:358 src/integritysetup.c:470 +msgid "open device as " +msgstr "открыть устройство как <имя>" + +#: src/cryptsetup.c:3213 src/cryptsetup.c:3214 src/cryptsetup.c:3215 +#: src/veritysetup.c:359 src/veritysetup.c:360 src/integritysetup.c:471 +#: src/integritysetup.c:472 +msgid "" +msgstr "<имя>" + +#: src/cryptsetup.c:3213 src/veritysetup.c:359 src/integritysetup.c:471 +msgid "close device (remove mapping)" +msgstr "закрыть устройство (удалить отображение)" + +#: src/cryptsetup.c:3214 +msgid "resize active device" +msgstr "изменить размер активного устройства" + +#: src/cryptsetup.c:3215 +msgid "show device status" +msgstr "показать состояние устройства" + +#: src/cryptsetup.c:3216 +msgid "[--cipher ]" +msgstr "[--cipher <шифр>]" + +#: src/cryptsetup.c:3216 +msgid "benchmark cipher" +msgstr "оценка производительности шифра" + +#: src/cryptsetup.c:3217 src/cryptsetup.c:3218 src/cryptsetup.c:3219 +#: src/cryptsetup.c:3220 src/cryptsetup.c:3221 src/cryptsetup.c:3228 +#: src/cryptsetup.c:3229 src/cryptsetup.c:3230 src/cryptsetup.c:3231 +#: src/cryptsetup.c:3232 src/cryptsetup.c:3233 src/cryptsetup.c:3234 +#: src/cryptsetup.c:3235 +msgid "" +msgstr "<устройство>" + +#: src/cryptsetup.c:3217 +msgid "try to repair on-disk metadata" +msgstr "попытаться исправить метаданные на диске" + +#: src/cryptsetup.c:3218 +msgid "reencrypt LUKS2 device" +msgstr "перешифровать устройство LUKS2" + +#: src/cryptsetup.c:3219 +msgid "erase all keyslots (remove encryption key)" +msgstr "стереть все слоты ключей (удалить ключ шифрования)" + +#: src/cryptsetup.c:3220 +msgid "convert LUKS from/to LUKS2 format" +msgstr "преобразовать LUKS из/в формат LUKS2" + +#: src/cryptsetup.c:3221 +msgid "set permanent configuration options for LUKS2" +msgstr "задать постоянные параметры настройки LUKS2" + +#: src/cryptsetup.c:3222 src/cryptsetup.c:3223 +msgid " []" +msgstr "<устройство> [<новый файл ключа>]" + +#: src/cryptsetup.c:3222 +msgid "formats a LUKS device" +msgstr "форматировать устройство LUKS" + +#: src/cryptsetup.c:3223 +msgid "add key to LUKS device" +msgstr "добавить ключ к устройству LUKS" + +#: src/cryptsetup.c:3224 src/cryptsetup.c:3225 src/cryptsetup.c:3226 +msgid " []" +msgstr "<устройство> [<файл ключа>]" + +#: src/cryptsetup.c:3224 +msgid "removes supplied key or key file from LUKS device" +msgstr "удалить заданный ключ или файл ключа с устройства LUKS" + +#: src/cryptsetup.c:3225 +msgid "changes supplied key or key file of LUKS device" +msgstr "изменить заданный ключ или файл ключа устройства LUKS" + +#: src/cryptsetup.c:3226 +msgid "converts a key to new pbkdf parameters" +msgstr "преобразовать ключ в новые параметры pbkdf" + +#: src/cryptsetup.c:3227 +msgid " " +msgstr "<устройство> <слот ключа>" + +#: src/cryptsetup.c:3227 +msgid "wipes key with number from LUKS device" +msgstr "затереть ключ с номером <слот ключа> с устройства LUKS" + +#: src/cryptsetup.c:3228 +msgid "print UUID of LUKS device" +msgstr "напечатать UUID устройства LUKS" + +#: src/cryptsetup.c:3229 +msgid "tests for LUKS partition header" +msgstr "проверить <устройство> на наличие заголовка раздела LUKS" + +#: src/cryptsetup.c:3230 +msgid "dump LUKS partition information" +msgstr "выгрузить в дамп информацию о разделе LUKS" + +#: src/cryptsetup.c:3231 +msgid "dump TCRYPT device information" +msgstr "выгрузить в дамп информацию об устройстве TCRYPT" + +#: src/cryptsetup.c:3232 +msgid "Suspend LUKS device and wipe key (all IOs are frozen)" +msgstr "Приостановить устройство LUKS и затереть ключ (заморозка операций ввода-вывода)" + +#: src/cryptsetup.c:3233 +msgid "Resume suspended LUKS device" +msgstr "Возобновить работу приостановленного устройства LUKS" + +#: src/cryptsetup.c:3234 +msgid "Backup LUKS device header and keyslots" +msgstr "Сделать резервную копию заголовка и слотов ключей устройства LUKS" + +#: src/cryptsetup.c:3235 +msgid "Restore LUKS device header and keyslots" +msgstr "Восстановить заголовок и слоты ключей устройства LUKS" + +#: src/cryptsetup.c:3236 +msgid " " +msgstr " <устройство>" + +#: src/cryptsetup.c:3236 +msgid "Manipulate LUKS2 tokens" +msgstr "Управление токенами LUKS2" + +#: src/cryptsetup.c:3254 src/veritysetup.c:376 src/integritysetup.c:488 +msgid "" +"\n" +" is one of:\n" +msgstr "" +"\n" +"<действие> может быть:\n" + +#: src/cryptsetup.c:3260 +msgid "" +"\n" +"You can also use old syntax aliases:\n" +"\topen: create (plainOpen), luksOpen, loopaesOpen, tcryptOpen\n" +"\tclose: remove (plainClose), luksClose, loopaesClose, tcryptClose\n" +msgstr "" +"\n" +"Также можно использовать псевдонимы старого синтаксиса <действия>:\n" +"\topen: create (plainOpen), luksOpen, loopaesOpen, tcryptOpen\n" +"\tclose: remove (plainClose), luksClose, loopaesClose, tcryptClose\n" + +#: src/cryptsetup.c:3264 +#, c-format +msgid "" +"\n" +" is the device to create under %s\n" +" is the encrypted device\n" +" is the LUKS key slot number to modify\n" +" optional key file for the new key for luksAddKey action\n" +msgstr "" +"\n" +"<имя> - имя устройства для создания под %s\n" +"<устройство> - зашифрованное устройство\n" +"<слот ключа> - номер слота ключа LUKS для изменения\n" +"<файл ключа> - необязательный файл ключа для нового ключа для действия luksAddKey\n" + +#: src/cryptsetup.c:3271 +#, c-format +msgid "" +"\n" +"Default compiled-in metadata format is %s (for luksFormat action).\n" +msgstr "" +"\n" +"Встроенным форматом по умолчанию для метаданных является %s (для действия luksFormat).\n" + +#: src/cryptsetup.c:3276 +#, c-format +msgid "" +"\n" +"Default compiled-in key and passphrase parameters:\n" +"\tMaximum keyfile size: %dkB, Maximum interactive passphrase length %d (characters)\n" +"Default PBKDF for LUKS1: %s, iteration time: %d (ms)\n" +"Default PBKDF for LUKS2: %s\n" +"\tIteration time: %d, Memory required: %dkB, Parallel threads: %d\n" +msgstr "" +"\n" +"Встроенные параметры ключа и парольной фразы по умолчанию:\n" +"\tМаксимальный размер файла ключа: %dКБ, Максимальная длина парольной фразы при вводе вручную: %d (символов)\n" +"PBKDF по умолчанию для LUKS1: %s, Время итерации: %d (мс)\n" +"PBKDF по умолчанию для LUKS2: %s\n" +"\tВремя итерации: %d, Требуемая память: %dКБ, Кол-во параллельных нитей: %d\n" + +#: src/cryptsetup.c:3287 +#, c-format +msgid "" +"\n" +"Default compiled-in device cipher parameters:\n" +"\tloop-AES: %s, Key %d bits\n" +"\tplain: %s, Key: %d bits, Password hashing: %s\n" +"\tLUKS: %s, Key: %d bits, LUKS header hashing: %s, RNG: %s\n" +msgstr "" +"\n" +"Встроенные параметры шифра по умолчанию:\n" +"\tloop-AES: %s, Ключ: %d бит\n" +"\tplain: %s, Ключ: %d бит, хэширование пароля: %s\n" +"\tLUKS: %s, Ключ: %d бит, хэширование заголовка LUKS: %s, RNG: %s\n" + +#: src/cryptsetup.c:3296 +msgid "\tLUKS: Default keysize with XTS mode (two internal keys) will be doubled.\n" +msgstr "\tLUKS: Размер ключа по умолчанию в режиме XTS (два внутренних ключа) будет удвоен.\n" + +#: src/cryptsetup.c:3312 src/veritysetup.c:532 src/integritysetup.c:630 +#, c-format +msgid "%s: requires %s as arguments" +msgstr "%s: требуется %s в качестве аргументов" + +#: src/cryptsetup.c:3350 src/veritysetup.c:421 src/integritysetup.c:527 +#: src/cryptsetup_reencrypt.c:1591 +msgid "Show this help message" +msgstr "Показать это сообщение" + +#: src/cryptsetup.c:3351 src/veritysetup.c:422 src/integritysetup.c:528 +#: src/cryptsetup_reencrypt.c:1592 +msgid "Display brief usage" +msgstr "Показать краткие инструкции" + +#: src/cryptsetup.c:3352 src/veritysetup.c:423 src/integritysetup.c:529 +#: src/cryptsetup_reencrypt.c:1593 +msgid "Print package version" +msgstr "Показать версию пакета" + +#: src/cryptsetup.c:3356 src/veritysetup.c:427 src/integritysetup.c:533 +#: src/cryptsetup_reencrypt.c:1597 +msgid "Help options:" +msgstr "Параметры справки:" + +#: src/cryptsetup.c:3357 src/veritysetup.c:428 src/integritysetup.c:534 +#: src/cryptsetup_reencrypt.c:1598 +msgid "Shows more detailed error messages" +msgstr "Показывать подробные сообщения об ошибках" + +#: src/cryptsetup.c:3358 src/veritysetup.c:429 src/integritysetup.c:535 +#: src/cryptsetup_reencrypt.c:1599 +msgid "Show debug messages" +msgstr "Показывать отладочные сообщения" + +#: src/cryptsetup.c:3359 +msgid "Show debug messages including JSON metadata" +msgstr "Показывать отладочные сообщения включая метаданные JSON" + +#: src/cryptsetup.c:3360 src/cryptsetup_reencrypt.c:1601 +msgid "The cipher used to encrypt the disk (see /proc/crypto)" +msgstr "Шифр, используемый для шифрования диска (смотрите /proc/crypto)" + +#: src/cryptsetup.c:3361 src/cryptsetup_reencrypt.c:1603 +msgid "The hash used to create the encryption key from the passphrase" +msgstr "Хэш, используемый для создания ключа шифрования из парольной фразы" + +#: src/cryptsetup.c:3362 +msgid "Verifies the passphrase by asking for it twice" +msgstr "Проверить правильность парольной фразы, запрашивая её дважды" + +#: src/cryptsetup.c:3363 src/cryptsetup_reencrypt.c:1605 +msgid "Read the key from a file" +msgstr "Прочитать ключ из файла" + +#: src/cryptsetup.c:3364 +msgid "Read the volume (master) key from file." +msgstr "Прочитать (главный) ключ тома из файла." + +#: src/cryptsetup.c:3365 +msgid "Dump volume (master) key instead of keyslots info" +msgstr "Создать дамп (главного) ключа, а не информации слотов ключей" + +#: src/cryptsetup.c:3366 src/cryptsetup_reencrypt.c:1602 +msgid "The size of the encryption key" +msgstr "Размер ключа шифрования" + +#: src/cryptsetup.c:3366 src/cryptsetup.c:3425 src/integritysetup.c:553 +#: src/integritysetup.c:557 src/integritysetup.c:561 +#: src/cryptsetup_reencrypt.c:1602 +msgid "BITS" +msgstr "БИТ" + +#: src/cryptsetup.c:3367 src/cryptsetup_reencrypt.c:1618 +msgid "Limits the read from keyfile" +msgstr "Ограничить чтение из файла ключа" + +#: src/cryptsetup.c:3367 src/cryptsetup.c:3368 src/cryptsetup.c:3369 +#: src/cryptsetup.c:3370 src/cryptsetup.c:3373 src/cryptsetup.c:3422 +#: src/cryptsetup.c:3423 src/cryptsetup.c:3431 src/cryptsetup.c:3432 +#: src/veritysetup.c:432 src/veritysetup.c:433 src/veritysetup.c:434 +#: src/veritysetup.c:437 src/veritysetup.c:438 src/integritysetup.c:542 +#: src/integritysetup.c:548 src/integritysetup.c:549 +#: src/cryptsetup_reencrypt.c:1617 src/cryptsetup_reencrypt.c:1618 +#: src/cryptsetup_reencrypt.c:1619 src/cryptsetup_reencrypt.c:1620 +msgid "bytes" +msgstr "байт" + +#: src/cryptsetup.c:3368 src/cryptsetup_reencrypt.c:1617 +msgid "Number of bytes to skip in keyfile" +msgstr "Количество пропускаемых байтов в файле ключа" + +#: src/cryptsetup.c:3369 +msgid "Limits the read from newly added keyfile" +msgstr "Ограничить чтение из только что добавленного файла ключа" + +#: src/cryptsetup.c:3370 +msgid "Number of bytes to skip in newly added keyfile" +msgstr "Количество пропускаемых байтов в только что добавленном файле ключа" + +#: src/cryptsetup.c:3371 +msgid "Slot number for new key (default is first free)" +msgstr "Номер слота для нового ключа (по умолчанию первый свободный)" + +#: src/cryptsetup.c:3372 +msgid "The size of the device" +msgstr "Размер устройства" + +#: src/cryptsetup.c:3372 src/cryptsetup.c:3374 src/cryptsetup.c:3375 +#: src/cryptsetup.c:3381 src/integritysetup.c:543 src/integritysetup.c:550 +msgid "SECTORS" +msgstr "СЕКТОРОВ" + +#: src/cryptsetup.c:3373 src/cryptsetup_reencrypt.c:1620 +msgid "Use only specified device size (ignore rest of device). DANGEROUS!" +msgstr "Использовать только заданный размер устройства (игнорировать остаток устройства). ОПАСНО!" + +#: src/cryptsetup.c:3374 +msgid "The start offset in the backend device" +msgstr "Начальное смещение в нижележащем (backend) устройстве" + +#: src/cryptsetup.c:3375 +msgid "How many sectors of the encrypted data to skip at the beginning" +msgstr "Сколько секторов зашифрованных данных пропускать от начала" + +#: src/cryptsetup.c:3376 +msgid "Create a readonly mapping" +msgstr "Создать отображение в режиме только для чтения" + +#: src/cryptsetup.c:3377 src/integritysetup.c:536 +#: src/cryptsetup_reencrypt.c:1608 +msgid "Do not ask for confirmation" +msgstr "Не запрашивать подтверждение" + +#: src/cryptsetup.c:3378 +msgid "Timeout for interactive passphrase prompt (in seconds)" +msgstr "Время ожидания при ручном вводе парольной фразы (в секундах)" + +#: src/cryptsetup.c:3378 src/cryptsetup.c:3379 src/integritysetup.c:537 +#: src/cryptsetup_reencrypt.c:1609 +msgid "secs" +msgstr "сек" + +#: src/cryptsetup.c:3379 src/integritysetup.c:537 +#: src/cryptsetup_reencrypt.c:1609 +msgid "Progress line update (in seconds)" +msgstr "Обновление строки хода выполнения (в секундах)" + +#: src/cryptsetup.c:3380 src/cryptsetup_reencrypt.c:1610 +msgid "How often the input of the passphrase can be retried" +msgstr "Как часто можно повторять попытку ввода парольной фразы" + +#: src/cryptsetup.c:3381 +msgid "Align payload at sector boundaries - for luksFormat" +msgstr "Выравнивать полезные данные по границам секторов — для luksFormat" + +#: src/cryptsetup.c:3382 +msgid "File with LUKS header and keyslots backup" +msgstr "Файл резервной копии заголовка и слотов ключей LUKS" + +#: src/cryptsetup.c:3383 src/cryptsetup_reencrypt.c:1611 +msgid "Use /dev/random for generating volume key" +msgstr "Использовать /dev/random для генерации ключа тома" + +#: src/cryptsetup.c:3384 src/cryptsetup_reencrypt.c:1612 +msgid "Use /dev/urandom for generating volume key" +msgstr "Использовать /dev/urandom для генерации ключа тома" + +#: src/cryptsetup.c:3385 +msgid "Share device with another non-overlapping crypt segment" +msgstr "Совместно использовать устройство с другим неперекрывающимся шифрованным сегментом" + +#: src/cryptsetup.c:3386 src/veritysetup.c:441 +msgid "UUID for device to use" +msgstr "Используемый для устройства UUID" + +#: src/cryptsetup.c:3387 +msgid "Allow discards (aka TRIM) requests for device" +msgstr "Разрешить отбрасывать запросы (так называемые TRIM) к устройству" + +#: src/cryptsetup.c:3388 src/cryptsetup_reencrypt.c:1629 +msgid "Device or file with separated LUKS header" +msgstr "Устройство или файл с отдельным заголовком LUKS" + +#: src/cryptsetup.c:3389 +msgid "Do not activate device, just check passphrase" +msgstr "Не активировать устройство, только проверить парольную фразу" + +#: src/cryptsetup.c:3390 +msgid "Use hidden header (hidden TCRYPT device)" +msgstr "Использовать скрытый заголовок (спрятанное устройство TCRYPT)" + +#: src/cryptsetup.c:3391 +msgid "Device is system TCRYPT drive (with bootloader)" +msgstr "Устройство является системным диском TCRYPT (с загрузчиком)" + +#: src/cryptsetup.c:3392 +msgid "Use backup (secondary) TCRYPT header" +msgstr "Использовать резервный (вторичный) заголовок TCRYPT" + +#: src/cryptsetup.c:3393 +msgid "Scan also for VeraCrypt compatible device" +msgstr "Также искать устройство совместимое с VeraCrypt" + +#: src/cryptsetup.c:3394 +msgid "Personal Iteration Multiplier for VeraCrypt compatible device" +msgstr "Персональный умножитель итерации для устройства, совместимого с VeraCrypt" + +#: src/cryptsetup.c:3395 +msgid "Query Personal Iteration Multiplier for VeraCrypt compatible device" +msgstr "Запрос персонального умножителя итерации для устройства, совместимого с VeraCrypt" + +#: src/cryptsetup.c:3396 +msgid "Type of device metadata: luks, luks1, luks2, plain, loopaes, tcrypt" +msgstr "Тип метаданных устройства: luks, luks1, luks2, plain, loopaes, tcrypt" + +#: src/cryptsetup.c:3397 +msgid "Disable password quality check (if enabled)" +msgstr "Выключить проверку качество пароля (если включена)" + +#: src/cryptsetup.c:3398 +msgid "Use dm-crypt same_cpu_crypt performance compatibility option" +msgstr "Использовать параметр производительности same_cpu_crypt для dm-crypt" + +#: src/cryptsetup.c:3399 +msgid "Use dm-crypt submit_from_crypt_cpus performance compatibility option" +msgstr "Использовать параметр производительности submit_from_crypt_cpus для dm-crypt" + +#: src/cryptsetup.c:3400 +msgid "Device removal is deferred until the last user closes it" +msgstr "Удаление устройства отложено, пока его не закроет последний пользователь" + +#: src/cryptsetup.c:3401 +msgid "Use global lock to serialize memory hard PBKDF (OOM workaround)" +msgstr "Использовать глобальную блокировку для сериализации доступа на скорости памяти (memory-hard) PBKDF (для обхода OOM)" + +#: src/cryptsetup.c:3402 +msgid "PBKDF iteration time for LUKS (in ms)" +msgstr "Время итерации PBKDF для LUKS (в мс)" + +#: src/cryptsetup.c:3402 src/cryptsetup_reencrypt.c:1607 +msgid "msecs" +msgstr "мс" + +#: src/cryptsetup.c:3403 src/cryptsetup_reencrypt.c:1625 +msgid "PBKDF algorithm (for LUKS2): argon2i, argon2id, pbkdf2" +msgstr "Алгоритм PBKDF (для LUKS2): argon2i, argon2id, pbkdf2" + +#: src/cryptsetup.c:3404 src/cryptsetup_reencrypt.c:1626 +msgid "PBKDF memory cost limit" +msgstr "Ограничение стоимости памяти PBKDF" + +#: src/cryptsetup.c:3404 src/cryptsetup_reencrypt.c:1626 +msgid "kilobytes" +msgstr "килобайт" + +#: src/cryptsetup.c:3405 src/cryptsetup_reencrypt.c:1627 +msgid "PBKDF parallel cost" +msgstr "Стоимость параллельности PBKDF" + +#: src/cryptsetup.c:3405 src/cryptsetup_reencrypt.c:1627 +msgid "threads" +msgstr "нити" + +#: src/cryptsetup.c:3406 src/cryptsetup_reencrypt.c:1628 +msgid "PBKDF iterations cost (forced, disables benchmark)" +msgstr "Стоимость итераций PBKDF (принудительная, оценка производительности отключена)" + +#: src/cryptsetup.c:3407 +msgid "Keyslot priority: ignore, normal, prefer" +msgstr "Приоритет слота ключа: ignore, normal, prefer" + +#: src/cryptsetup.c:3408 +msgid "Disable locking of on-disk metadata" +msgstr "Выключить блокировку метаданных на диске" + +#: src/cryptsetup.c:3409 +msgid "Disable loading volume keys via kernel keyring" +msgstr "Выключить загрузку ключей томов через связку ключей ядра" + +#: src/cryptsetup.c:3410 +msgid "Data integrity algorithm (LUKS2 only)" +msgstr "Алгоритм целостности данных (только для LUKS2)" + +#: src/cryptsetup.c:3411 src/integritysetup.c:564 +msgid "Disable journal for integrity device" +msgstr "Выключить журналирование для устройства целостности" + +#: src/cryptsetup.c:3412 src/integritysetup.c:538 +msgid "Do not wipe device after format" +msgstr "Не затирать устройство после форматирования" + +#: src/cryptsetup.c:3413 +msgid "Do not ask for passphrase if activation by token fails" +msgstr "Не запрашивать парольную фразу, если активация токеном завершилась ошибкой" + +#: src/cryptsetup.c:3414 +msgid "Token number (default: any)" +msgstr "Номер токена (по умолчанию: любой)" + +#: src/cryptsetup.c:3415 +msgid "Key description" +msgstr "Описание ключа" + +#: src/cryptsetup.c:3416 +msgid "Encryption sector size (default: 512 bytes)" +msgstr "Размер сектора шифрования (по умолчанию: 512 байт)" + +#: src/cryptsetup.c:3417 +msgid "Set activation flags persistent for device" +msgstr "Задать набор постоянных флагов активации устройства" + +#: src/cryptsetup.c:3418 +msgid "Set label for the LUKS2 device" +msgstr "Задать метку устройства LUKS2" + +#: src/cryptsetup.c:3419 +msgid "Set subsystem label for the LUKS2 device" +msgstr "Задать метку подсистемы устройства LUKS2" + +#: src/cryptsetup.c:3420 +msgid "Create unbound (no assigned data segment) LUKS2 keyslot" +msgstr "Создать непривязанный (без назначенного сегмента данных) слот ключа LUKS2" + +#: src/cryptsetup.c:3421 +msgid "Read or write the json from or to a file" +msgstr "Прочитать или записать json в файл" + +#: src/cryptsetup.c:3422 +msgid "LUKS2 header metadata area size" +msgstr "Размер области метаданных заголовка LUKS2" + +#: src/cryptsetup.c:3423 +msgid "LUKS2 header keyslots area size" +msgstr "Размер области слотов ключей заголовка LUKS2" + +#: src/cryptsetup.c:3424 +msgid "Refresh (reactivate) device with new parameters" +msgstr "Обновить (реактивировать) устройство с новыми параметрами" + +#: src/cryptsetup.c:3425 +msgid "LUKS2 keyslot: The size of the encryption key" +msgstr "Слот ключа LUKS2: Размер ключа шифрования" + +#: src/cryptsetup.c:3426 +msgid "LUKS2 keyslot: The cipher used for keyslot encryption" +msgstr "Слот ключа LUKS2: Шифр, используемый для шифрования слота ключа" + +#: src/cryptsetup.c:3427 +msgid "Encrypt LUKS2 device (in-place encryption)." +msgstr "Зашифровать устройство LUKS2 (шифрование по месту (in-place))" + +#: src/cryptsetup.c:3428 +msgid "Decrypt LUKS2 device (remove encryption)." +msgstr "Расшифровать устройство LUKS2 (удалить шифрование)" + +#: src/cryptsetup.c:3429 +msgid "Initialize LUKS2 reencryption in metadata only." +msgstr "Инициализировать перешифрование LUKS2 только метаданных." + +#: src/cryptsetup.c:3430 +msgid "Resume initialized LUKS2 reencryption only." +msgstr "Возобновить только инициализированное перешифрование LUKS2." + +#: src/cryptsetup.c:3431 src/cryptsetup_reencrypt.c:1619 +msgid "Reduce data device size (move data offset). DANGEROUS!" +msgstr "Сократить размер данных устройства (переместить смещение данных). ОПАСНО!" + +#: src/cryptsetup.c:3432 +msgid "Maximal reencryption hotzone size." +msgstr "Максимальный размер hotzone перешифрования." + +#: src/cryptsetup.c:3433 +msgid "Reencryption hotzone resilience type (checksum,journal,none)" +msgstr "Тип устойчивости перешифрования hotzone (checksum,journal,none)" + +#: src/cryptsetup.c:3434 +msgid "Reencryption hotzone checksums hash" +msgstr "Контрольные хэш-суммы hotzone перешифрования" + +#: src/cryptsetup.c:3435 +msgid "Override device autodetection of dm device to be reencrypted" +msgstr "Заменить автоопределение устройства dm для перешифруемого устройства" + +#: src/cryptsetup.c:3451 src/veritysetup.c:462 src/integritysetup.c:583 +msgid "[OPTION...] " +msgstr "[ПАРАМЕТР…] <действие> <данные для действия>" + +#: src/cryptsetup.c:3502 src/veritysetup.c:496 src/integritysetup.c:594 +msgid "Argument missing." +msgstr "Не задан параметр <действие>." + +#: src/cryptsetup.c:3565 src/veritysetup.c:527 src/integritysetup.c:625 +msgid "Unknown action." +msgstr "Неизвестное действие." + +#: src/cryptsetup.c:3575 +msgid "Parameter --refresh is only allowed with open or refresh commands.\n" +msgstr "Параметр --refresh допускается только с командами open и refresh.\n" + +#: src/cryptsetup.c:3580 +msgid "Options --refresh and --test-passphrase are mutually exclusive.\n" +msgstr "Параметры --refresh и --test-passphrase взаимно исключают друг друга.\n" + +#: src/cryptsetup.c:3585 +msgid "Option --deferred is allowed only for close command.\n" +msgstr "Параметр --deferred допускается только для команды close.\n" + +#: src/cryptsetup.c:3590 +msgid "Option --shared is allowed only for open of plain device.\n" +msgstr "Параметр --shared допускается только для открытия устройства plain.\n" + +#: src/cryptsetup.c:3595 +msgid "Option --allow-discards is allowed only for open operation.\n" +msgstr "Параметр --allow-discards допускается только для операции открытия.\n" + +#: src/cryptsetup.c:3600 +msgid "Option --persistent is allowed only for open operation.\n" +msgstr "Параметр --persistent допускается только для операции открытия.\n" + +#: src/cryptsetup.c:3605 +msgid "Option --serialize-memory-hard-pbkdf is allowed only for open operation.\n" +msgstr "Параметр --serialize-memory-hard-pbkdf допускается только для операции открытия.\n" + +#: src/cryptsetup.c:3610 +msgid "Option --persistent is not allowed with --test-passphrase.\n" +msgstr "Параметр --persistent не допускается одновременно указывать с --test-passphrase.\n" + +#: src/cryptsetup.c:3620 +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 "" +"Параметр --key-size допускается только для luksFormat, luksAddKey,\n" +"действий open и benchmark. Для ограничения чтения из файла ключа используйте --keyfile-size=(байт)." + +#: src/cryptsetup.c:3626 +msgid "Option --integrity is allowed only for luksFormat (LUKS2).\n" +msgstr "Параметр --integrity допускается только для luksFormat (LUKS2).\n" + +#: src/cryptsetup.c:3631 +msgid "Option --integrity-no-wipe can be used only for format action with integrity extension.\n" +msgstr "Параметр --integrity-no-wipe можно использовать только для действия format с расширением целостности.\n" + +#: src/cryptsetup.c:3637 +msgid "Options --label and --subsystem are allowed only for luksFormat and config LUKS2 operations.\n" +msgstr "Параметры --label и --subsystem допускаются только для операций LUKS2 luksFormat и config.\n" + +#: src/cryptsetup.c:3643 +msgid "Option --test-passphrase is allowed only for open of LUKS and TCRYPT devices.\n" +msgstr "Параметр --test-passphrase допускается только для открытия устройств LUKS и TCRYPT.\n" + +#: src/cryptsetup.c:3648 src/cryptsetup_reencrypt.c:1692 +msgid "Key size must be a multiple of 8 bits" +msgstr "Размер ключа должен быть кратен 8-ми битам" + +#: src/cryptsetup.c:3654 src/cryptsetup_reencrypt.c:1378 +#: src/cryptsetup_reencrypt.c:1697 +msgid "Key slot is invalid." +msgstr "Некорректный слот ключа." + +#: src/cryptsetup.c:3661 +msgid "Option --key-file takes precedence over specified key file argument." +msgstr "Параметр --key-file имеет приоритет над указанным значением файла ключа." + +#: src/cryptsetup.c:3668 src/veritysetup.c:539 src/integritysetup.c:649 +#: src/cryptsetup_reencrypt.c:1671 +msgid "Negative number for option not permitted." +msgstr "В параметре нельзя использовать отрицательные числа." + +#: src/cryptsetup.c:3672 +msgid "Only one --key-file argument is allowed." +msgstr "Разрешено указывать только один параметр --key-file." + +#: src/cryptsetup.c:3676 src/cryptsetup_reencrypt.c:1663 +#: src/cryptsetup_reencrypt.c:1701 +msgid "Only one of --use-[u]random options is allowed." +msgstr "Разрешено использовать только один параметр --use-[u]random." + +#: src/cryptsetup.c:3680 +msgid "Option --use-[u]random is allowed only for luksFormat." +msgstr "Параметр --use-[u]random допускается только для luksFormat." + +#: src/cryptsetup.c:3684 +msgid "Option --uuid is allowed only for luksFormat and luksUUID." +msgstr "Параметр --uuid допускается только для luksFormat и luksUUID." + +#: src/cryptsetup.c:3688 +msgid "Option --align-payload is allowed only for luksFormat." +msgstr "Параметр --align-payload допускается только для luksFormat." + +#: src/cryptsetup.c:3692 +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:3697 +msgid "Invalid LUKS2 metadata size specification." +msgstr "Неправильно указан размер метаданных LUKS2." + +#: src/cryptsetup.c:3701 +msgid "Invalid LUKS2 keyslots size specification." +msgstr "Неправильно указан размер слота ключа LUKS2." + +#: src/cryptsetup.c:3705 +msgid "Options --align-payload and --offset cannot be combined." +msgstr "Параметры --align-payload и --offset не допускается указывать вместе." + +#: src/cryptsetup.c:3711 +msgid "Option --skip is supported only for open of plain and loopaes devices.\n" +msgstr "Параметр --skip поддерживается только для открытия устройств plain и loopaes.\n" + +#: src/cryptsetup.c:3718 +msgid "Option --offset is supported only for open of plain and loopaes devices, luksFormat and device reencryption.\n" +msgstr "Параметр --offset поддерживается только для открытия устройств plain и loopaes, luksFormat и перешифрования устройства.\n" + +#: src/cryptsetup.c:3724 +msgid "Option --tcrypt-hidden, --tcrypt-system or --tcrypt-backup is supported only for TCRYPT device.\n" +msgstr "Параметр --tcrypt-hidden, --tcrypt-system или --tcrypt-backup поддерживается только для устройства TCRYPT.\n" + +#: src/cryptsetup.c:3729 +msgid "Option --tcrypt-hidden cannot be combined with --allow-discards.\n" +msgstr "Параметр --tcrypt-hidden нельзя указывать вместе с --allow-discards.\n" + +#: src/cryptsetup.c:3734 +msgid "Option --veracrypt is supported only for TCRYPT device type.\n" +msgstr "Параметр --veracrypt поддерживается только для устройств TCRYPT.\n" + +#: src/cryptsetup.c:3740 +msgid "Invalid argument for parameter --veracrypt-pim supplied.\n" +msgstr "Указано некорректное значение параметра --veracrypt-pim.\n" + +#: src/cryptsetup.c:3744 +msgid "Option --veracrypt-pim is supported only for VeraCrypt compatible devices.\n" +msgstr "Параметр --veracrypt-pim поддерживается только для устройств, совместимых с VeraCrypt.\n" + +#: src/cryptsetup.c:3752 +msgid "Option --veracrypt-query-pim is supported only for VeraCrypt compatible devices.\n" +msgstr "Параметр --veracrypt-query-pim поддерживается только для устройств, совместимых с VeraCrypt.\n" + +#: src/cryptsetup.c:3756 +msgid "The options --veracrypt-pim and --veracrypt-query-pim are mutually exclusive.\n" +msgstr "Параметры --veracrypt-pim и --veracrypt-query-pim взаимно исключают друг друга.\n" + +#: src/cryptsetup.c:3763 +msgid "Option --priority can be only ignore/normal/prefer.\n" +msgstr "Значением параметра --priority может быть только ignore/normal/prefer.\n" + +#: src/cryptsetup.c:3768 +msgid "Keyslot specification is required.\n" +msgstr "Требуется указать слот ключа.\n" + +#: src/cryptsetup.c:3773 src/cryptsetup_reencrypt.c:1677 +msgid "Password-based key derivation function (PBKDF) can be only pbkdf2 or argon2i/argon2id.\n" +msgstr "Функцией отклонения на основе пароля для ключа (PBKDF) может быть только pbkdf2 или argon2i/argon2id.\n" + +#: src/cryptsetup.c:3778 src/cryptsetup_reencrypt.c:1682 +msgid "PBKDF forced iterations cannot be combined with iteration time option.\n" +msgstr "PBKDF принудительной итерации нельзя объединять вместе с параметром времени итерации.\n" + +#: src/cryptsetup.c:3784 +msgid "Sector size option is not supported for this command.\n" +msgstr "Параметр размера сектора не поддерживается этой командой.\n" + +#: src/cryptsetup.c:3790 +msgid "Unsupported encryption sector size.\n" +msgstr "Неподдерживаемый размер сектора шифрования.\n" + +#: src/cryptsetup.c:3795 +msgid "Key size is required with --unbound option.\n" +msgstr "С параметром --unbound требуется задать размер ключа.\n" + +#: src/cryptsetup.c:3800 +msgid "Option --unbound may be used only with luksAddKey action.\n" +msgstr "Параметр --unbound можно использовать только при действии luksAddKey.\n" + +#: src/cryptsetup.c:3805 +msgid "Option --refresh may be used only with open action.\n" +msgstr "Параметр --refresh можно использовать только при действии open.\n" + +#: src/cryptsetup.c:3816 +msgid "Cannot disable metadata locking.\n" +msgstr "Невозможно выключить блокировку метаданных.\n" + +#: src/cryptsetup.c:3826 +msgid "Invalid max reencryption hotzone size specification." +msgstr "Неправильный максимальный размер перешифрования hotzone." + +#: src/cryptsetup.c:3834 src/cryptsetup_reencrypt.c:1706 +#: src/cryptsetup_reencrypt.c:1711 +msgid "Invalid device size specification." +msgstr "Неправильно указан размер устройства." + +#: src/cryptsetup.c:3837 +msgid "Maximum device reduce size is 1 GiB." +msgstr "Максимальный размер сокращения устройства равен 1 ГиБ." + +#: src/cryptsetup.c:3840 src/cryptsetup_reencrypt.c:1717 +msgid "Reduce size must be multiple of 512 bytes sector." +msgstr "Размер сокращения должен быть кратен 512 байтовому сектору." + +#: src/cryptsetup.c:3845 +msgid "Invalid data size specification." +msgstr "Неправильный размер устройства данных." + +#: src/cryptsetup.c:3850 +msgid "Reduce size overflow." +msgstr "Переполнение размера сокращения." + +#: src/cryptsetup.c:3854 +msgid "LUKS2 decryption requires option --header." +msgstr "Для расшифровки LUKS2 требуется параметр --header." + +#: src/cryptsetup.c:3858 +msgid "Device size must be multiple of 512 bytes sector." +msgstr "Размер устройства должен быть кратен 512 байтовому сектору." + +#: src/cryptsetup.c:3862 +msgid "Options --reduce-device-size and --data-size cannot be combined." +msgstr "Параметры ---reduce-device-size и --data-size не допускается указывать вместе." + +#: src/cryptsetup.c:3866 +msgid "Options --device-size and --size cannot be combined." +msgstr "Параметры --device-size и --size не допускается указывать вместе." + +#: src/veritysetup.c:65 +msgid "Invalid salt string specified." +msgstr "Указана недопустимая строка соли." + +#: src/veritysetup.c:96 +#, c-format +msgid "Cannot create hash image %s for writing." +msgstr "Невозможно создать образ хэша %s для записи." + +#: src/veritysetup.c:106 +#, c-format +msgid "Cannot create FEC image %s for writing." +msgstr "Невозможно создать образ FEC %s для записи." + +#: src/veritysetup.c:176 +msgid "Invalid root hash string specified." +msgstr "Указана недопустимая строка корневого хэша." + +#: src/veritysetup.c:356 +msgid " " +msgstr "<устройство_данных> <устройство_хэша>" + +#: src/veritysetup.c:356 src/integritysetup.c:469 +msgid "format device" +msgstr "отформатировать устройство" + +#: src/veritysetup.c:357 +msgid " " +msgstr "<устройство_данных> <устройство_хэша> <корневой_хэш>" + +#: src/veritysetup.c:357 +msgid "verify device" +msgstr "проверить устройство" + +#: src/veritysetup.c:358 +msgid " " +msgstr "<устройство_данных> <имя> <устройство_хэша> <корневой_хэш>" + +#: src/veritysetup.c:360 src/integritysetup.c:472 +msgid "show active device status" +msgstr "показать состояние активного устройства" + +#: src/veritysetup.c:361 +msgid "" +msgstr "<устройство_хэша>" + +#: src/veritysetup.c:361 src/integritysetup.c:473 +msgid "show on-disk information" +msgstr "показать информацию на диске" + +#: src/veritysetup.c:380 +#, c-format +msgid "" +"\n" +" is the device to create under %s\n" +" is the data device\n" +" is the device containing verification data\n" +" hash of the root node on \n" +msgstr "" +"\n" +"<имя> — устройство, создаваемое на %s\n" +"<устройство_данных> — устройство данных\n" +"<устройство_хэша> — устройство, содержащее проверочные данные\n" +"<корневой_хэш> — хэш корневого узла на <устройстве_хэша>\n" + +#: src/veritysetup.c:387 +#, c-format +msgid "" +"\n" +"Default compiled-in dm-verity parameters:\n" +"\tHash: %s, Data block (bytes): %u, Hash block (bytes): %u, Salt size: %u, Hash format: %u\n" +msgstr "" +"\n" +"Встроенные параметры dm-verity по умолчанию:\n" +"\tХэш: %s, Блок данных (байт): %u, Блок хэша (байт): %u, Размер соли: %u, Формат хэша: %u\n" + +#: src/veritysetup.c:430 +msgid "Do not use verity superblock" +msgstr "Не использовать проверочный суперблок" + +#: src/veritysetup.c:431 +msgid "Format type (1 - normal, 0 - original Chrome OS)" +msgstr "Тип форматирования (1 - обычное, 0 - как в Chrome OS)" + +#: src/veritysetup.c:431 +msgid "number" +msgstr "число" + +#: src/veritysetup.c:432 +msgid "Block size on the data device" +msgstr "Размер блока устройства данных" + +#: src/veritysetup.c:433 +msgid "Block size on the hash device" +msgstr "Размер блока устройства хэша" + +#: src/veritysetup.c:434 +msgid "FEC parity bytes" +msgstr "байты чётности FEC" + +#: src/veritysetup.c:435 +msgid "The number of blocks in the data file" +msgstr "Количество блоков в файле данных" + +#: src/veritysetup.c:435 +msgid "blocks" +msgstr "блоков" + +#: src/veritysetup.c:436 +msgid "Path to device with error correction data" +msgstr "Путь к устройству с данными коррекции ошибок" + +#: src/veritysetup.c:436 src/integritysetup.c:540 +msgid "path" +msgstr "путь" + +#: src/veritysetup.c:437 +msgid "Starting offset on the hash device" +msgstr "Начальное смещение на устройстве хэша" + +#: src/veritysetup.c:438 +msgid "Starting offset on the FEC device" +msgstr "Начальное смещение на устройстве FEC" + +#: src/veritysetup.c:439 +msgid "Hash algorithm" +msgstr "Алгоритм хэширования" + +#: src/veritysetup.c:439 +msgid "string" +msgstr "строка" + +#: src/veritysetup.c:440 +msgid "Salt" +msgstr "Соль" + +#: src/veritysetup.c:440 +msgid "hex string" +msgstr "шестн. строка" + +#: src/veritysetup.c:442 +msgid "Restart kernel if corruption is detected" +msgstr "Перезапустить ядро, если обнаружится ошибка" + +#: src/veritysetup.c:443 +msgid "Ignore corruption, log it only" +msgstr "Игнорировать повреждение, только запротоколировать" + +#: src/veritysetup.c:444 +msgid "Do not verify zeroed blocks" +msgstr "Не проверять обнулённые блоки" + +#: src/veritysetup.c:445 +msgid "Verify data block only the first time it is read" +msgstr "Проверять блок данных только при первом чтении" + +#: src/veritysetup.c:545 +msgid "Option --ignore-corruption, --restart-on-corruption or --ignore-zero-blocks is allowed only for open operation.\n" +msgstr "Параметр --ignore-corruption, --restart-on-corruption или --ignore-zero-blocks допускается только для операции открытия.\n" + +#: src/veritysetup.c:550 +msgid "Option --ignore-corruption and --restart-on-corruption cannot be used together.\n" +msgstr "Параметры --ignore-corruption и --restart-on-corruption нельзя использовать вместе.\n" + +#: src/integritysetup.c:83 src/utils_password.c:305 +#, c-format +msgid "Cannot read keyfile %s." +msgstr "Невозможно прочитать файл ключа %s." + +#: src/integritysetup.c:87 src/utils_password.c:310 +#, c-format +msgid "Cannot read %d bytes from keyfile %s." +msgstr "Невозможно прочитать %d байт из файл ключа %s." + +#: src/integritysetup.c:250 +#, c-format +msgid "Formatted with tag size %u, internal integrity %s.\n" +msgstr "Отформатирован с размером тега %u, внутренняя целостность %s.\n" + +#: src/integritysetup.c:469 src/integritysetup.c:473 +msgid "" +msgstr "<устройство_целостности>" + +#: src/integritysetup.c:470 +msgid " " +msgstr "<устройство_целостности> <имя>" + +#: src/integritysetup.c:492 +#, c-format +msgid "" +"\n" +" is the device to create under %s\n" +" is the device containing data with integrity tags\n" +msgstr "" +"\n" +"<имя> — устройство, создаваемое на %s\n" +"<устройство_целостности> — устройство, содержащее данные с тегами целостности\n" + +#: src/integritysetup.c:497 +#, c-format +msgid "" +"\n" +"Default compiled-in dm-integrity parameters:\n" +"\tTag size: %u bytes, Checksum algorithm: %s\n" +msgstr "" +"\n" +"Встроенные параметры dm-integrity:\n" +"\tРазмер тега: %u байт, Алгоритм контрольной суммы: %s\n" + +#: src/integritysetup.c:540 +msgid "Path to data device (if separated)" +msgstr "Путь к устройству данных (при разделении устройств)" + +#: src/integritysetup.c:542 +msgid "Journal size" +msgstr "Размер журнала" + +#: src/integritysetup.c:543 +msgid "Interleave sectors" +msgstr "Чередующиеся секторы" + +#: src/integritysetup.c:544 +msgid "Journal watermark" +msgstr "Отметка журнала" + +#: src/integritysetup.c:544 +msgid "percent" +msgstr "процент" + +#: src/integritysetup.c:545 +msgid "Journal commit time" +msgstr "Время фиксации журнала" + +#: src/integritysetup.c:545 src/integritysetup.c:547 +msgid "ms" +msgstr "мс" + +#: src/integritysetup.c:546 +msgid "Number of 512-byte sectors per bit (bitmap mode)." +msgstr "Количество 512-байтовых секторов на бит (режим битовой карты)." + +#: src/integritysetup.c:547 +msgid "Bitmap mode flush time" +msgstr "Время стирания в режиме битовой карты" + +#: src/integritysetup.c:548 +msgid "Tag size (per-sector)" +msgstr "Размер тега (на сектор)" + +#: src/integritysetup.c:549 +msgid "Sector size" +msgstr "Размер сектора" + +#: src/integritysetup.c:550 +msgid "Buffers size" +msgstr "Размер буфера" + +#: src/integritysetup.c:552 +msgid "Data integrity algorithm" +msgstr "Алгоритм целостности данных" + +#: src/integritysetup.c:553 +msgid "The size of the data integrity key" +msgstr "Размер ключа целостности данных" + +#: src/integritysetup.c:554 +msgid "Read the integrity key from a file" +msgstr "Прочитать ключ целостности из файла" + +#: src/integritysetup.c:556 +msgid "Journal integrity algorithm" +msgstr "Алгоритм целостности журнала" + +#: src/integritysetup.c:557 +msgid "The size of the journal integrity key" +msgstr "Размер ключа целостности журнала" + +#: src/integritysetup.c:558 +msgid "Read the journal integrity key from a file" +msgstr "Прочитать ключ целостности журнала из файла" + +#: src/integritysetup.c:560 +msgid "Journal encryption algorithm" +msgstr "Алгоритм шифрования журнала" + +#: src/integritysetup.c:561 +msgid "The size of the journal encryption key" +msgstr "Размер ключа шифрования журнала" + +#: src/integritysetup.c:562 +msgid "Read the journal encryption key from a file" +msgstr "Прочитать ключ шифрования журнала из файла" + +#: src/integritysetup.c:565 +msgid "Recovery mode (no journal, no tag checking)" +msgstr "Режим восстановления (без проверки журнала и тегов)" + +#: src/integritysetup.c:566 +msgid "Use bitmap to track changes and disable journal for integrity device" +msgstr "Использовать битовую карту для отслеживания изменений и выключить журналирование для устройства целостности" + +#: src/integritysetup.c:567 +msgid "Recalculate initial tags automatically." +msgstr "Автоматически вычислять начальные теги повторно." + +#: src/integritysetup.c:640 +msgid "Option --integrity-recalculate can be used only for open action." +msgstr "Параметр --integrity-recalculate можно использовать только для действия open." + +#: src/integritysetup.c:655 +msgid "Options --journal-size, --interleave-sectors, --sector-size, --tag-size and --no-wipe can be used only for format action.\n" +msgstr "Параметры --journal-size, --interleave-sectors, --sector-size, --tag-size и --no-wipe можно использовать только для действия format.\n" + +#: src/integritysetup.c:661 +msgid "Invalid journal size specification." +msgstr "Неправильное задание размера журнала." + +#: src/integritysetup.c:666 +msgid "Both key file and key size options must be specified." +msgstr "Должны быть указаны параметры файла ключа и размер ключа одновременно." + +#: src/integritysetup.c:669 +msgid "Integrity algorithm must be specified if integrity key is used." +msgstr "Если используется ключ целостности, то должен быть указан алгоритм целостности." + +#: src/integritysetup.c:674 +msgid "Both journal integrity key file and key size options must be specified." +msgstr "Должны быть указаны параметры файла ключа целостности и размер ключа одновременно." + +#: src/integritysetup.c:677 +msgid "Journal integrity algorithm must be specified if journal integrity key is used." +msgstr "Если используется ключ целостности журнала, то должен быть указан алгоритм целостности журнала." + +#: src/integritysetup.c:682 +msgid "Both journal encryption key file and key size options must be specified." +msgstr "Должны быть указаны параметры файла ключа шифрования и размер ключа одновременно." + +#: src/integritysetup.c:685 +msgid "Journal encryption algorithm must be specified if journal encryption key is used." +msgstr "Если используется ключ шифрования журнала, то должен быть указан алгоритм шифрования журнала." + +#: src/integritysetup.c:689 +msgid "Recovery and bitmap mode options are mutually exclusive." +msgstr "Параметры восстановления и режима битовой карты взаимно исключают друг друга." + +#: src/integritysetup.c:693 +msgid "Journal options cannot be used in bitmap mode." +msgstr "Параметры журнала нельзя использовать в режиме битовой карты." + +#: src/integritysetup.c:697 +msgid "Bitmap options can be used only in bitmap mode." +msgstr "Параметр битовой карты можно использовать только в режиме битовой карты." + +#: src/cryptsetup_reencrypt.c:172 +msgid "Reencryption already in-progress." +msgstr "Уже выполняется перешифрование." + +#: src/cryptsetup_reencrypt.c:201 +#, c-format +msgid "Cannot exclusively open %s, device in use." +msgstr "Невозможно монопольно открыть устройство %s, оно уже используется." + +#: src/cryptsetup_reencrypt.c:215 src/cryptsetup_reencrypt.c:1127 +msgid "Allocation of aligned memory failed." +msgstr "Не удалось выделить выровненную память." + +#: src/cryptsetup_reencrypt.c:222 +#, c-format +msgid "Cannot read device %s." +msgstr "Невозможно прочитать с устройства %s." + +#: src/cryptsetup_reencrypt.c:233 +#, c-format +msgid "Marking LUKS1 device %s unusable." +msgstr "Отметка устройства LUKS1 %s бесполезна." + +#: src/cryptsetup_reencrypt.c:237 +#, c-format +msgid "Setting LUKS2 offline reencrypt flag on device %s." +msgstr "Установка внесистемного (offline) флага перешифрования LUKS2 на устройстве %s." + +#: src/cryptsetup_reencrypt.c:254 +#, c-format +msgid "Cannot write device %s." +msgstr "Невозможно записать на устройство %s." + +#: src/cryptsetup_reencrypt.c:302 +msgid "Cannot write reencryption log file." +msgstr "Невозможно записать в файл протокола перешифрования." + +#: src/cryptsetup_reencrypt.c:358 +msgid "Cannot read reencryption log file." +msgstr "Невозможно прочитать файл протокола перешифрования." + +#: src/cryptsetup_reencrypt.c:396 +#, c-format +msgid "Log file %s exists, resuming reencryption.\n" +msgstr "Файл протокола %s существует, подразумевается перешифрование.\n" + +#: src/cryptsetup_reencrypt.c:445 +msgid "Activating temporary device using old LUKS header." +msgstr "Активируется временное устройство, задействуется старый заголовок LUKS." + +#: src/cryptsetup_reencrypt.c:455 +msgid "Activating temporary device using new LUKS header." +msgstr "Активируется временное устройство, задействуется новый заголовок LUKS." + +#: src/cryptsetup_reencrypt.c:465 +msgid "Activation of temporary devices failed." +msgstr "Ошибка при активации временного устройства." + +#: src/cryptsetup_reencrypt.c:551 +msgid "Failed to set data offset." +msgstr "Не удалось задать смещение данных." + +#: src/cryptsetup_reencrypt.c:557 +msgid "Failed to set metadata size." +msgstr "Не удалось задать размер метаданных." + +#: src/cryptsetup_reencrypt.c:565 +#, c-format +msgid "New LUKS header for device %s created." +msgstr "Создан новый заголовок LUKS для устройства %s." + +#: src/cryptsetup_reencrypt.c:625 +#, c-format +msgid "This version of cryptsetup-reencrypt can't handle new internal token type %s." +msgstr "Эта версия cryptsetup-reencrypt не работает с новым типом внутреннего токена %s." + +#: src/cryptsetup_reencrypt.c:647 +msgid "Failed to read activation flags from backup header." +msgstr "Ошибка чтения флагов активации из резервной копии заголовка." + +#: src/cryptsetup_reencrypt.c:651 +msgid "Failed to write activation flags to new header." +msgstr "Ошибка записи флагов активации в новый заголовок." + +#: src/cryptsetup_reencrypt.c:655 src/cryptsetup_reencrypt.c:659 +msgid "Failed to read requirements from backup header." +msgstr "Ошибка чтения требований из резервной копии заголовка." + +#: src/cryptsetup_reencrypt.c:697 +#, c-format +msgid "%s header backup of device %s created." +msgstr "Создана резервная копия заголовка %s для устройства %s." + +#: src/cryptsetup_reencrypt.c:760 +msgid "Creation of LUKS backup headers failed." +msgstr "Ошибка при создании резервных копий заголовка LUKS." + +#: src/cryptsetup_reencrypt.c:893 +#, c-format +msgid "Cannot restore %s header on device %s." +msgstr "Невозможно восстановить заголовок %s устройства %s." + +#: src/cryptsetup_reencrypt.c:895 +#, c-format +msgid "%s header on device %s restored." +msgstr "Заголовок %s устройства %s восстановлен." + +#: src/cryptsetup_reencrypt.c:1099 src/cryptsetup_reencrypt.c:1105 +msgid "Cannot open temporary LUKS device." +msgstr "Невозможно открыть временное устройство LUKS." + +#: src/cryptsetup_reencrypt.c:1110 src/cryptsetup_reencrypt.c:1115 +msgid "Cannot get device size." +msgstr "Невозможно получить размер устройства." + +#: src/cryptsetup_reencrypt.c:1150 +msgid "IO error during reencryption." +msgstr "Ошибка ввода-вывода при перешифровании." + +#: src/cryptsetup_reencrypt.c:1181 +msgid "Provided UUID is invalid." +msgstr "Указан некорректный UUID." + +#: src/cryptsetup_reencrypt.c:1407 +msgid "Cannot open reencryption log file." +msgstr "Невозможно открыть файл протокола перешифрования." + +#: src/cryptsetup_reencrypt.c:1413 +msgid "No decryption in progress, provided UUID can be used only to resume suspended decryption process." +msgstr "Расшифровка не выполняется, указанный UUID можно использовать только для возобновления приостановленного процесса расшифровки." + +#: src/cryptsetup_reencrypt.c:1488 +#, c-format +msgid "Changed pbkdf parameters in keyslot %i." +msgstr "Изменённые параметры pbkdf в слоте ключа %i." + +#: src/cryptsetup_reencrypt.c:1600 +msgid "Reencryption block size" +msgstr "Размер блока перешифрования" + +#: src/cryptsetup_reencrypt.c:1600 +msgid "MiB" +msgstr "МиБ" + +#: src/cryptsetup_reencrypt.c:1604 +msgid "Do not change key, no data area reencryption" +msgstr "Не изменять ключ, нет области перешифрования данных" + +#: src/cryptsetup_reencrypt.c:1606 +msgid "Read new volume (master) key from file" +msgstr "Прочитать новый (главный) ключ тома из файла" + +#: src/cryptsetup_reencrypt.c:1607 +msgid "PBKDF2 iteration time for LUKS (in ms)" +msgstr "Время итерации PBKDF2 для LUKS (мс)" + +#: src/cryptsetup_reencrypt.c:1613 +msgid "Use direct-io when accessing devices" +msgstr "Использовать direct-io для доступа к устройствам" + +#: src/cryptsetup_reencrypt.c:1614 +msgid "Use fsync after each block" +msgstr "Вызывать fsync после каждого блока" + +#: src/cryptsetup_reencrypt.c:1615 +msgid "Update log file after every block" +msgstr "Обновлять файл протокола после каждого блока" + +#: src/cryptsetup_reencrypt.c:1616 +msgid "Use only this slot (others will be disabled)" +msgstr "Использовать только этот слот (остальные будут выключены)" + +#: src/cryptsetup_reencrypt.c:1621 +msgid "Create new header on not encrypted device" +msgstr "Создать новый заголовок на не шифрованном устройстве" + +#: src/cryptsetup_reencrypt.c:1622 +msgid "Permanently decrypt device (remove encryption)" +msgstr "Окончательно расшифровать устройство (удалить шифрование)" + +#: src/cryptsetup_reencrypt.c:1623 +msgid "The UUID used to resume decryption" +msgstr "Используемый для возобновления шифрования UUID" + +#: src/cryptsetup_reencrypt.c:1624 +msgid "Type of LUKS metadata: luks1, luks2" +msgstr "Тип метаданных LUKS: luks1, luks2" + +#: src/cryptsetup_reencrypt.c:1643 +msgid "[OPTION...] " +msgstr "[ПАРАМЕТР…] <устройство>" + +#: src/cryptsetup_reencrypt.c:1651 +#, c-format +msgid "Reencryption will change: %s%s%s%s%s%s." +msgstr "Перешифрование изменит: %s%s%s%s%s%s." + +#: src/cryptsetup_reencrypt.c:1652 +msgid "volume key" +msgstr "ключ тома" + +#: src/cryptsetup_reencrypt.c:1654 +msgid "set hash to " +msgstr "установить хэш равным" + +#: src/cryptsetup_reencrypt.c:1655 +msgid ", set cipher to " +msgstr ", установить шифр равным" + +#: src/cryptsetup_reencrypt.c:1659 +msgid "Argument required." +msgstr "Требуется аргумент." + +#: src/cryptsetup_reencrypt.c:1687 +msgid "Only values between 1 MiB and 64 MiB allowed for reencryption block size." +msgstr "Значение размера блока перешифрования должно быть в диапазоне от 1 МиБ до 64 МиБ." + +#: src/cryptsetup_reencrypt.c:1714 +msgid "Maximum device reduce size is 64 MiB." +msgstr "Максимальный размер сокращения устройства равен 64 МиБ." + +#: src/cryptsetup_reencrypt.c:1721 +msgid "Option --new must be used together with --reduce-device-size or --header." +msgstr "Параметр --new должен использоваться вместе с --reduce-device-size или --header." + +#: src/cryptsetup_reencrypt.c:1725 +msgid "Option --keep-key can be used only with --hash, --iter-time or --pbkdf-force-iterations." +msgstr "Параметр --keep-key можно использовать только с --hash, --iter-time или --pbkdf-force-iterations." + +#: src/cryptsetup_reencrypt.c:1729 +msgid "Option --new cannot be used together with --decrypt." +msgstr "Параметр --new нельзя использовать вместе с --decrypt." + +#: src/cryptsetup_reencrypt.c:1733 +msgid "Option --decrypt is incompatible with specified parameters." +msgstr "Параметр --decrypt несовместим с указанными параметрами." + +#: src/cryptsetup_reencrypt.c:1737 +msgid "Option --uuid is allowed only together with --decrypt." +msgstr "Параметр --uuid можно использовать только вместе с --decrypt." + +#: src/cryptsetup_reencrypt.c:1741 +msgid "Invalid luks type. Use one of these: 'luks', 'luks1' or 'luks2'." +msgstr "Некорректный тип luks. Возможные значения: «luks», «luks1» или «luks2»." + +#: src/utils_tools.c:151 +msgid "Error reading response from terminal." +msgstr "Ошибка чтения ответа с терминала." + +#: src/utils_tools.c:186 +msgid "Command successful.\n" +msgstr "Команда выполнена успешно.\n" + +#: src/utils_tools.c:194 +msgid "wrong or missing parameters" +msgstr "некорректные или отсутствующие параметры" + +#: src/utils_tools.c:196 +msgid "no permission or bad passphrase" +msgstr "нет прав или некорректная парольная фраза" + +#: src/utils_tools.c:198 +msgid "out of memory" +msgstr "недостаточно памяти" + +#: src/utils_tools.c:200 +msgid "wrong device or file specified" +msgstr "указано некорректное устройство или файл" + +#: src/utils_tools.c:202 +msgid "device already exists or device is busy" +msgstr "устройство уже существует или занято" + +#: src/utils_tools.c:204 +msgid "unknown error" +msgstr "неизвестная ошибка" + +#: src/utils_tools.c:206 +#, c-format +msgid "Command failed with code %i (%s).\n" +msgstr "Сбой команды, код %i (%s).\n" + +#: src/utils_tools.c:283 +#, c-format +msgid "Key slot %i created." +msgstr "Создан слот ключа %i." + +#: src/utils_tools.c:285 +#, c-format +msgid "Key slot %i unlocked." +msgstr "Слот ключа %i разблокирован." + +#: src/utils_tools.c:287 +#, c-format +msgid "Key slot %i removed." +msgstr "Слот ключа %i удалён." + +#: src/utils_tools.c:296 +#, c-format +msgid "Token %i created." +msgstr "Создан токен %i." + +#: src/utils_tools.c:298 +#, c-format +msgid "Token %i removed." +msgstr "Токен %i удалён." + +#: src/utils_tools.c:464 +msgid "" +"\n" +"Wipe interrupted." +msgstr "" +"\n" +"Затирание прервано." + +#: src/utils_tools.c:475 +#, c-format +msgid "WARNING: Device %s already contains a '%s' partition signature.\n" +msgstr "ПРЕДУПРЕЖДЕНИЕ: Устройство %s уже содержит подпись раздела «%s».\n" + +#: src/utils_tools.c:483 +#, c-format +msgid "WARNING: Device %s already contains a '%s' superblock signature.\n" +msgstr "ПРЕДУПРЕЖДЕНИЕ: Устройство %s уже содержит подпись суперблока «%s».\n" + +#: src/utils_tools.c:504 src/utils_tools.c:568 +msgid "Failed to initialize device signature probes." +msgstr "Ошибка при инициализации определения подписей устройства." + +#: src/utils_tools.c:548 +#, c-format +msgid "Failed to stat device %s." +msgstr "Ошибка выполнения stat для устройства %s." + +#: src/utils_tools.c:561 +#, c-format +msgid "Device %s is in use. Can not proceed with format operation." +msgstr "Устройство %s уже используется. Нельзя продолжать выполнение операции форматирования." + +#: src/utils_tools.c:563 +#, c-format +msgid "Failed to open file %s in read/write mode." +msgstr "Ошибка при открытии файла %s в режиме чтения-записи." + +#: src/utils_tools.c:577 +#, c-format +msgid "Existing '%s' partition signature (offset: % bytes) on device %s will be wiped." +msgstr "Существующая подпись раздела «%s» (смещение: % байт) на устройстве %s будет затёрта." + +#: src/utils_tools.c:580 +#, c-format +msgid "Existing '%s' superblock signature (offset: % bytes) on device %s will be wiped." +msgstr "Существующая подпись суперблока «%s» (смещение: % байт) на устройстве %s будет затёрта." + +#: src/utils_tools.c:583 +msgid "Failed to wipe device signature." +msgstr "Ошибка при затирании подписи устройства." + +#: src/utils_tools.c:590 +#, c-format +msgid "Failed to probe device %s for a signature." +msgstr "Ошибка при определении подписи устройства %s." + +#: src/utils_tools.c:629 +msgid "" +"\n" +"Reencryption interrupted." +msgstr "" +"\n" +"Перешифрование прервано." + +#: src/utils_password.c:43 src/utils_password.c:75 +#, c-format +msgid "Cannot check password quality: %s" +msgstr "Невозможно проверить стойкость пароля: %s" + +#: src/utils_password.c:51 +#, c-format +msgid "" +"Password quality check failed:\n" +" %s" +msgstr "" +"Ошибка при проверке стойкости пароля:\n" +" %s" + +#: src/utils_password.c:83 +#, c-format +msgid "Password quality check failed: Bad passphrase (%s)" +msgstr "Ошибка при проверке стойкости пароля: некорректная парольная фраза (%s)" + +#: src/utils_password.c:193 src/utils_password.c:208 +msgid "Error reading passphrase from terminal." +msgstr "Ошибка чтения парольной фразы с терминала." + +#: src/utils_password.c:206 +msgid "Verify passphrase: " +msgstr "Парольная фраза повторно: " + +#: src/utils_password.c:213 +msgid "Passphrases do not match." +msgstr "Парольные фразы не совпадают." + +#: src/utils_password.c:250 +msgid "Cannot use offset with terminal input." +msgstr "Невозможно использовать смещение при вводе с терминала." + +#: src/utils_password.c:253 +#, c-format +msgid "Enter passphrase: " +msgstr "Введите парольную фразу: " + +#: src/utils_password.c:256 +#, c-format +msgid "Enter passphrase for %s: " +msgstr "Введите парольную фразу для %s: " + +#: src/utils_password.c:287 +msgid "No key available with this passphrase." +msgstr "Ключ недоступен с этой парольной фразой." + +#: src/utils_password.c:289 +msgid "No usable keyslot is available." +msgstr "Не найдено подходящего слота ключа." + +#: src/utils_password.c:328 +#, c-format +msgid "Cannot open keyfile %s for write." +msgstr "Невозможно открыть файл ключа %s для записи." + +#: src/utils_password.c:335 +#, c-format +msgid "Cannot write to keyfile %s." +msgstr "Невозможно записать в файл ключа %s." + +#: src/utils_luks2.c:47 +#, c-format +msgid "Failed to open file %s in read-only mode." +msgstr "Ошибка при открытии файла %s в режиме только для чтения." + +#: src/utils_luks2.c:60 +msgid "Provide valid LUKS2 token JSON:\n" +msgstr "Укажите корректный токен LUKS2 в формате JSON:\n" + +#: src/utils_luks2.c:67 +msgid "Failed to read JSON file." +msgstr "Ошибка чтения файла JSON." + +#: src/utils_luks2.c:72 +msgid "" +"\n" +"Read interrupted." +msgstr "" +"\n" +"Чтение прервано." + +#: src/utils_luks2.c:113 +#, c-format +msgid "Failed to open file %s in write mode." +msgstr "Ошибка при открытии файла %s в режиме записи." + +#: src/utils_luks2.c:122 +msgid "" +"\n" +"Write interrupted." +msgstr "" +"\n" +"Запись прервана." + +#: src/utils_luks2.c:126 +msgid "Failed to write JSON file." +msgstr "Ошибка записи в файл JSON." + +#~ msgid "Interrupted by a signal." +#~ msgstr "Прервано сигналом." + +#~ msgid "Function not available in FIPS mode." +#~ msgstr "Функция не доступна в режиме FIPS." + +#~ msgid "Failed to write hash." +#~ msgstr "Ошибка записи хэша." + +#~ msgid "Failed to finalize hash." +#~ msgstr "Ошибка завершения хэша." + +#~ msgid "Invalid resilience parameters (internal error)." +#~ msgstr "Неправильные параметры устойчивости (внутренняя ошибка)." + +#~ msgid "Failed to assign new enc segments." +#~ msgstr "Ошибка при назначении новых сегментов enc." + +#~ msgid "Failed to assign digest %u to segment %u." +#~ msgstr "Ошибка при назначении дайджеста %u в сегмент %u." + +#~ msgid "Failed to set segments." +#~ msgstr "Ошибка при задании сегментов." + +#~ msgid "Failed to assign reencrypt previous backup segment." +#~ msgstr "Ошибка при назначении предыдущей резервной копии сегмента reencrypt." + +#~ msgid "Failed to assign reencrypt final backup segment." +#~ msgstr "Ошибка при назначении конечной резервной копии сегмента reencrypt." + +#~ msgid "Failed generate 2nd segment." +#~ msgstr "Ошибка при генерации 2-го сегмента." + +#~ msgid "Failed generate 1st segment." +#~ msgstr "Ошибка при генерации 1-го сегмента." + +#~ msgid "Failed to allocate device %s." +#~ msgstr "Ошибка при выделении устройства %s." + +#~ msgid "Failed to allocate dm segments." +#~ msgstr "Ошибка при выделении сегментов dm." + +#~ msgid "Failed to create dm segments." +#~ msgstr "Ошибка при создании сегментов dm." + +#~ msgid "Failed to allocate device for new backing device." +#~ msgstr "Ошибка при выделении устройства для нового опорного устройства." + +#~ msgid "Failed to reload overlay device %s." +#~ msgstr "Ошибка при перезагрузке оверлейного устройства %s." + +#~ msgid "Failed to refresh helper devices." +#~ msgstr "Не удалось обновить вспомогательное устройство %s." + +#~ msgid "Failed to create reencryption backup segments." +#~ msgstr "Ошибка при создании резервных сегментов перешифрования." + +#~ msgid "Failed to set online-reencryption requirement." +#~ msgstr "Ошибка при задании требований оперативного перешифрования." + +#~ msgid "Failed to hash sector at offset %zu." +#~ msgstr "Ошибка хэширования сектора по смещению %zu." + +#~ msgid "Failed to read sector hash." +#~ msgstr "Ошибка чтения хэша сектора." + +#~ msgid "Error: Calculated reencryption offset % is beyond device size %." +#~ msgstr "Ошибка: вычисленное смещение перешифрования % находится за границей размера устройства %." + +#~ msgid "Device is not in clean reencryption state." +#~ msgstr "Устройство не в начальном (clean) состояния перешифрования." + +#~ msgid "Failed to read device info from %s." +#~ msgstr "Ошибка чтения информации об устройстве из %s." + +#~ msgid "Failed to calculate new segments." +#~ msgstr "Ошибка при вычислении новых сегментов." + +#~ msgid "Failed to assign pre reenc segments." +#~ msgstr "Ошибка при назначении сегментов pre reenc." + +#~ msgid "Failed finalize hotzone resilience, retval = %d" +#~ msgstr "Ошибка завершения устойчивости hotzone, retval = %d" + +#~ msgid "Failed to write data." +#~ msgstr "Ошибка записи данных." + +#~ msgid "Failed to update metadata or reassign device segments." +#~ msgstr "Не удалось обновить метаданные или переназначить сегменты устройства." + +#~ msgid "Failed to reload %s device." +#~ msgstr "Ошибка при перезагрузке устройства %s." + +#~ msgid "Failed to erase backup segments" +#~ msgstr "Ошибка при стирании резервных копий сегментов." + +#~ msgid "Requested dmcrypt performance options are not supported." +#~ msgstr "Запрошенные параметры производительности dmcrypt не поддерживаются." + +#~ msgid "Cannot format device %s which is still in use." +#~ msgstr "Невозможно отформатировать устройство %s, которое всё ещё используется." + +#~ msgid "Key slot %d is not used." +#~ msgstr "Слот ключа %d не используется." + +#~ msgid "Key slot %d selected for deletion." +#~ msgstr "Для удаления выбрал слот ключа %d." + +#~ msgid "open device as mapping " +#~ msgstr "открыть устройство как отображение с <именем>" + +#~ msgid "close device (deactivate and remove mapping)" +#~ msgstr "закрыть устройство (деактивировать и удалить отображение)" + +#~ msgid "Failed to set PBKDF parameters." +#~ msgstr "Ошибка при задании параметров PBKDF." + +#~ msgid "Cannot seek to device offset.\n" +#~ msgstr "Невозможно перемещаться по устройству.\n" + +#~ msgid "Device %s is too small. (LUKS2 requires at least % bytes.)" +#~ msgstr "Устройство %s слишком маленькое (для LUKS2 требуется не менее % байт)." + +#~ msgid "memory allocation error in action_luksFormat" +#~ msgstr "Ошибка 'memory allocation error' при выполнении action_luksFormat" + +#~ msgid "Cannot get info about device %s.\n" +#~ msgstr "Невозможно получить информацию об устройстве %s.\n" + +#~ msgid "Device %s has zero size.\n" +#~ msgstr "Устройство %s имеет нулевой размер.\n" + +#~ msgid "Device %s is too small.\n" +#~ msgstr "Устройство %s слишком маленькое.\n" + +#~ msgid "Device %s already exists.\n" +#~ msgstr "Устройство %s уже существует.\n" + +#~ msgid "Volume %s is not active.\n" +#~ msgstr "Раздел %s не активен.\n" + +#~ msgid "Invalid key size.\n" +#~ msgstr "Неверный размер ключа.\n" + +#~ msgid "Key slot %d is not used.\n" +#~ msgstr "Ключевой слот %d не используется.\n" + +#~ msgid "Key slot %d is invalid.\n" +#~ msgstr "Неправильный ключевой слот %d.\n" + +#~ msgid "Invalid device %s.\n" +#~ msgstr "Неверное устройство %s.\n" + +#~ msgid "Volume key buffer too small.\n" +#~ msgstr "Буфер ключей раздела слишком мал.\n" + +#~ msgid "Cannot read device %s.\n" +#~ msgstr "Невозможно прочитать устройство %s.\n" + +#~ msgid "This operation is not supported for %s crypt device.\n" +#~ msgstr "Данная операция не поддерживается для устройства шифрования %s.\n" + +#~ msgid "Device %s doesn't exist or access denied.\n" +#~ msgstr "Устройство %s не существует или доступ к нему запрещён.\n" + +#~ msgid "Failed to open temporary keystore device.\n" +#~ msgstr "Не удалось открыть устройство временного хранения ключей.\n" + +#~ msgid "Failed to access temporary keystore device.\n" +#~ msgstr "Не удалось получить доступ к устройству временного хранения ключей.\n" + +#~ msgid "Cannot get process priority.\n" +#~ msgstr "Невозможно получить приоритет процесса.\n" + +#~ msgid "Data offset or key size differs on device and backup, restore failed.\n" +#~ msgstr "Смещение данных или размер ключа не совпадают на устройстве и в резервной копии, восстановление не удалось.\n" + +#~ msgid "Cannot open device %s.\n" +#~ msgstr "Невозможно открыть устройство %s.\n" + +#~ msgid "Key slot %d is invalid, please select keyslot between 0 and %d.\n" +#~ msgstr "Неверный ключевой слот %d, пожалуйста, выберите ключевой слот между 0 и %d.\n" + +#~ msgid "No key available with this passphrase.\n" +#~ msgstr "Нет доступных ключей для данного пароля.\n" + +#~ msgid "Key slot %d unlocked.\n" +#~ msgstr "Ключевой слот %d разблокирован.\n" + +#~ msgid "Key slot %d is full, please select another one.\n" +#~ msgstr "Ключевой слот %d полон, пожалуйста, выберите другой.\n" + +#~ msgid "All key slots full.\n" +#~ msgstr "Все ключевые слоты полны.\n" + +#~ msgid "Key slot %d is invalid, please select between 0 and %d.\n" +#~ msgstr "Неправильный ключевой слот %d, пожалуйста, выберите между 0 и %d.\n" + +#~ msgid "This operation is supported only for LUKS device.\n" +#~ msgstr "Данная операция поддерживается только для устройств LUKS.\n" + +#~ msgid "Cannot write header backup file %s.\n" +#~ msgstr "Невозможно записать файл резервной копии заголовка %s.\n" + +#~ msgid "Cannot read header backup file %s.\n" +#~ msgstr "Невозможно прочитать файл резервной копии заголовка %s.\n" + +#~ msgid "Cannot open header backup file %s.\n" +#~ msgstr "Невозможно открыть файл резервной копии заголовка %s.\n" + +#~ msgid "Unsupported LUKS version %d.\n" +#~ msgstr "Неподдерживаемая версия LUKS %d.\n" + +#~ msgid "Error during update of LUKS header on device %s.\n" +#~ msgstr "Ошибка обновления заголовка LUKS на устройстве %s.\n" + +#~ msgid "Error re-reading LUKS header after update on device %s.\n" +#~ msgstr "Ошибка перечитывания заголовка LUKS после обновления на устройстве %s.\n" + +#~ msgid "Cannot wipe device %s.\n" +#~ msgstr "Невозможно очистить устройство %s.\n" + +#~ msgid "Option --header-backup-file is required.\n" +#~ msgstr "Необходима опция --header-backup-file.\n" + +#~ msgid "File with LUKS header and keyslots backup." +#~ msgstr "Файл с резервной копией заголовка и ключевых слотов LUKS." + +#~ msgid "DM-UUID for device %s was truncated.\n" +#~ msgstr "DM-UUID для устройства %s был усечён.\n" + +#~ msgid "Key slot %d active, purge first.\n" +#~ msgstr "Ключевой слот %d активен, сначала очистите.\n" + +#~ msgid "Volume key does not match the volume.\n" +#~ msgstr "Ключ раздела не совпадает с разделом.\n" + +#~ msgid "Cannot initialize crypto backend.\n" +#~ msgstr "Невозможно инициализировать внутренний интерфейс crypto.\n" + +#~ msgid "Cannot initialize device-mapper. Is dm_mod kernel module loaded?\n" +#~ msgstr "Невозможно инициализировать device-mapper. Загружен ли модуль ядра dm_mod?\n" + +#~ msgid "Volume %s is not suspended.\n" +#~ msgstr "Том %s не в режим приостановки.\n" + +#~ msgid "Volume %s is already suspended.\n" +#~ msgstr "Том %s уже в режим приостановки.\n" + +#~ msgid "Error reading passphrase from terminal.\n" +#~ msgstr "Ошибка чтения кодовой фразы из терминала.\n" + +#~ msgid "Passphrases do not match.\n" +#~ msgstr "Кодовые фразы не совпадают.\n" + +#~ msgid "Key size in XTS mode must be 256 or 512 bits.\n" +#~ msgstr "Размер ключа в режиме XTS должен быть 256 или 512-разрядный.\n" + +#~ msgid "Error reading passphrase.\n" +#~ msgstr "Ошибка чтения кодовой фразы.\n" + +#~ msgid "Out of memory while reading passphrase.\n" +#~ msgstr "Недостаточно памяти для считывания кодовой фразы.\n" + +#~ msgid "Cannot format device %s which is still in use.\n" +#~ msgstr "Нельзя отформатировать устройство %s, которое ещё используется.\n" + +#~ msgid "This operation is not supported for this device type.\n" +#~ msgstr "Это действие не поддерживается для данного типа устройств.\n" + +#~ msgid "Fatal error during RNG initialisation.\n" +#~ msgstr "Критическая ошибка во время инициализации RNG.\n" + +#~ msgid "Option --key-file is required.\n" +#~ msgstr "Требуется параметр --key-file.\n" + +#~ msgid "Hash algorithm %s not supported.\n" +#~ msgstr "Алгоритм хэширования %s не поддерживается.\n" + +#~ msgid "Key processing error (using hash %s).\n" +#~ msgstr "Ошибка обработки ключа (используется хэш %s).\n" + +#~ msgid "Failed to open key file.\n" +#~ msgstr "Не удалось открыть ключевой файл.\n" + +#~ msgid "Cannot read requested amount of data.\n" +#~ msgstr "Не удалось считать запрошенное количество данных.\n" + +#~ msgid "Writing LUKS header to disk.\n" +#~ msgstr "Запись заголовка LUKS на диск.\n" + +#~ msgid "Key slot %d selected for deletion.\n" +#~ msgstr "Слот ключа %d выбран для удаления.\n" + +#~ msgid "Key slot %d changed.\n" +#~ msgstr "Слот ключа %d изменён.\n" + +#~ msgid "Read the key from a file." +#~ msgstr "Читать ключ из файла." + +#~ msgid "Use /dev/random for generating volume key." +#~ msgstr "Использовать /dev/random для генерации ключа тома." + +#~ msgid "Use /dev/urandom for generating volume key." +#~ msgstr "Использовать /dev/urandom для генерации ключа тома." + +#~ msgid "Device type is not properly initialised.\n" +#~ msgstr "Тип устройства некорректно инициализирован.\n" + +#~ msgid "Error during resuming device %s.\n" +#~ msgstr "Ошибка при возобновлении работы устройства %s.\n" + +#~ msgid "Device %s is still in use.\n" +#~ msgstr "Устройство %s всё ещё используется.\n" + +#~ msgid "Cannot unlock memory.\n" +#~ msgstr "Не удалось разблокировать память.\n" + +#~ msgid "Maximum keyfile size exceeded.\n" +#~ msgstr "Максимальный размер ключевого файла превышен.\n" + +#~ msgid "Running in FIPS mode.\n" +#~ msgstr "Выполняется в режиме FIPS.\n" + +#~ msgid "Error reading keyfile %s.\n" +#~ msgstr "Ошибка при чтении файла ключа %s.\n" + +#~ msgid "Maximum TCRYPT passphrase length (%d) exceeded.\n" +#~ msgstr "Максимальная длина кодовой фразы TCRYPT (%d) превышена.\n" + +#~ msgid "Unsupported VERITY version %d.\n" +#~ msgstr "Неподдерживаемая версия VERITY %d.\n" + +#~ msgid "VERITY header corrupted.\n" +#~ msgstr "Заголовок VERITY повреждён.\n" + +#~ msgid "Cannot format device %s, permission denied.\n" +#~ msgstr "Невозможно отформатировать устройство %s, отказано в доступе.\n" + +#~ msgid "Resume is not supported for device %s.\n" +#~ msgstr "Возобновление не поддерживается для устройства %s.\n" + +#~ msgid "Unsupported VERITY block size.\n" +#~ msgstr "Неподдерживаемый размер блока VERITY.\n" + +#~ msgid "Function not available in FIPS mode.\n" +#~ msgstr "Функция недоступна в режиме FIPS.\n" + +#~ msgid "Requested offset is beyond real size of device %s.\n" +#~ msgstr "Запрошенное смещение за пределами реального размера устройства %s.\n" + +#~ msgid "Cannot write to device %s, permission denied.\n" +#~ msgstr "Запись на устройство %s невозможна, отказано в доступе.\n" + +#~ msgid "Cannot seek to requested keyfile offset.\n" +#~ msgstr "Не удалось перейти к запрошенному смещению в ключевом файле.\n" + +#~ msgid "Non standard key size, manual repair required.\n" +#~ msgstr "Нестандартный размер ключа, требуется исправление вручную.\n" + +#~ msgid "Required kernel crypto interface not available.\n" +#~ msgstr "Запрошенный криптоинтерфейс ядра недоступен.\n" + +#~ msgid "Ensure you have algif_skcipher kernel module loaded.\n" +#~ msgstr "Убедитесь, что загружен модуль ядра algif_skcipher.\n" + +#~ msgid "Activation is not supported for %d sector size.\n" +#~ msgstr "Активация не поддерживается для размера сектора %d.\n" + +#~ msgid "WARNING: Kernel cannot activate device if data block size exceeds page size (%u).\n" +#~ msgstr "ПРЕДУПРЕЖДЕНИЕ: Ядро не может активировать устройство, если размер блока данных превышает размер страницы (%u).\n" + +#~ msgid "Cannot read keyfile %s.\n" +#~ msgstr "Не удалось прочитать ключевой файл %s.\n" + +#~ msgid "Cannot read %d bytes from keyfile %s.\n" +#~ msgstr "Не удалось прочитать %d байт из ключевого файла %s.\n" + +#~ msgid "UUID for device to use." +#~ msgstr "UUID используемого устройства." + +#~ msgid "Do not activate device, just check passphrase." +#~ msgstr "Не активировать устройство, просто проверить парольную фразу." + +#~ msgid "Cannot wipe header on device %s.\n" +#~ msgstr "Не удалось стереть заголовок на устройстве %s.\n" + +#~ msgid "Dump operation is not supported for this device type.\n" +#~ msgstr "Создание дампа не поддерживается для этого типа устройств.\n" + +#~ msgid "Cannot create header backup file %s.\n" +#~ msgstr "Не удалось создать файл резервной копии заголовка %s.\n" + +#~ msgid "Requested header backup file %s already exists.\n" +#~ msgstr "Запрошенный файл резервной копии заголовка %s уже существует.\n" + +#~ msgid "Disable password quality check (if enabled)." +#~ msgstr "Отключить проверку качества пароля (если включена)." + +#~ msgid "" +#~ "Option --key-size is allowed only for luksFormat, open and benchmark.\n" +#~ "To limit read from keyfile use --keyfile-size=(bytes)." +#~ msgstr "" +#~ "Опция --key-size разрешена только для luksFormat, open и benchmark.\n" +#~ "Чтобы ограничить чтение из ключевого файла, используйте --keyfile-size=(количество байтов)." + +#~ msgid "Cannot write device %s.\n" +#~ msgstr "Не удалось выполнить запись на устройство %s.\n" + +#~ msgid "New LUKS header for device %s created.\n" +#~ msgstr "Создан новый заголовок LUKS для устройства %s.\n" + +#~ msgid "Activated keyslot %i.\n" +#~ msgstr "Активирован слот ключей %i.\n" + +#~ msgid "Cannot get device size.\n" +#~ msgstr "Не удалось получить размер устройства.\n" + +#~ msgid "Option --new must be used together with --reduce-device-size." +#~ msgstr "Опция --new должна использоваться совместно с --reduce-device-size." + +#~ msgid "Cannot check password quality: %s\n" +#~ msgstr "Не удалось проверить качество пароля: %s\n" + +#~ msgid "Interrupted by a signal.\n" +#~ msgstr "Прервано по сигналу.\n" + +#~ msgid "Cannot determine device type. Incompatible activation of device?\n" +#~ msgstr "Невозможно определить тип устройства. Несовместимая активация устройства?\n" + +#~ msgid "Requested dm-crypt performance options are not supported.\n" +#~ msgstr "Запрошенные параметры производительности dm-crypt не поддерживаются.\n" + +#~ msgid "Requested dm-verity data corruption handling options are not supported.\n" +#~ msgstr "Запрошенные параметры обработки повреждённых данных dm-verity не поддерживаются.\n" + +#~ msgid "Cannot initialize crypto RNG backend.\n" +#~ msgstr "Невозможно инициализировать выходной буфер crypto RNG.\n" + +#~ msgid "Cannot initialize device-mapper, running as non-root user.\n" +#~ msgstr "Невозможно инициализировать device-mapper, выполнение не от имени администратора.\n" + +#~ msgid "Can't format LUKS without device.\n" +#~ msgstr "Невозможно отформатировать LUKS без устройства.\n" + +#~ msgid "Unsupported VERITY hash offset.\n" +#~ msgstr "Неподдерживаемое смещение хэша VERITY.\n" + +#~ msgid "Suspend is not supported for device %s.\n" +#~ msgstr "Приостановка не поддерживается для устройства %s.\n" + +#~ msgid "Error during suspending device %s.\n" +#~ msgstr "Ошибка во время приостановки устройства %s.\n" + +#~ msgid "Can't format LOOPAES without device.\n" +#~ msgstr "Невозможно отформатировать LOOPAES без устройства.\n" + +#~ msgid "Unsupported VERITY hash type %d.\n" +#~ msgstr "Неподдерживаемый тип хэша VERITY %d.\n" + +#~ msgid "Can't format VERITY without device.\n" +#~ msgstr "Невозможно отформатировать VERITY без устройства.\n" + +#~ msgid "UUID is not supported for this crypt type.\n" +#~ msgstr "UUID не поддерживается для этого типа шифрования.\n" + +#~ msgid "Cannot use device %s which is in use (already mapped or mounted).\n" +#~ msgstr "Невозможно использовать устройство %s, которое уже используется (уже внесено в схему или подключено).\n" diff --git a/po/sr.gmo b/po/sr.gmo new file mode 100644 index 0000000000000000000000000000000000000000..5dfe43c9bc9a766c193a42b65d726bb319513c86 GIT binary patch literal 21516 zcmd6tdyHIHeaCMhBxFkvs~9_(5y~X)tDX=kD&{*_mPP zj5iB`Ix!)E@^DN7P8@8^vq%-)B;I7@*c+*cw)|1)j!=OLRH+nH(UwP%08xS3&-ZuE zow+kRc5LV$UHSMs_uljPy??)R?)~RW&U-lE?^CqPXvfbBf^UGgUC4j@z57K$@NzH@ zJ_SyL3*g{IL2w`V6L1)eUmOHq182b-!QC%$^Bo2+=6W7{4fsv)jo^>K7lIe@@MYjD zz$M_7pw_z$d=)qfvP5tM4TAx6rCGD%`*kA0KW)AO7Lw^a{Vc&e!l}X?h1r-0k{Q}y}S)X z9*mrGw9ckQ$rzCzf^UNw|1(hf`W2}4U-t&L z?g*&)ZUfJMUJ!f`d=uCA!Tj6*2)Tl{gD+$7kGVgNaZiKWApSqVzXxmJafE&i_(q&s z_HZY7J-8n<{eZHY3v)rh62YaQ`mX||kN1M=|2a^0_FeEr;LpK#fxiPq=R4`F`9A@^ z5PS;EgU^C%z$FO(25=Naw83FecCY|SUcUs_fqeuESPM3TTDR`;ufQE#{}9{&zL`aZ z9|Ye5ejOAYFJ9^9T?6X*G$?yK2@Zq51|{!nVR9R|3zS^H2I4Zo55ZfItDGAb3^wsl z_E!MaKLNLcOCVnJH^AG#6CkVx7eKW5xDI?fI0L>HY=WY5JwkXs_z6&a9|Ug!zXEFh zpMw+N+Bds-zY1>U`d8q?;7u^|XW;ii^}GH?=U+#`4|07zOzs5l18d;-zz>02Rs}%` z{1*6WaLtIzXWs!e->%g`Fb2+pyTQxWIQ`xYijVJs?*y+|>-^&YD7v2kN5S)8`s3gP zI1c_2WUAnu>zzIy1K+{**TLJt%MhOIr~+OL-VMTf@Np0o1b++O1pYTD`qplAdVCDL z6#aY$)Ve>Xljz-kv(xXB;OlfBls+zoNX@evd=L0x@KNx;zy^F9(*y^ z-v#@?e*^R2FF;fn>_FKEzyqMJmtYjaUEtfmM?m8b6g?Ne)y2g(gRkIvGx$QV0ImS1 z!1sVhK}Bg5{h<0k0gA34g0iEZfv_BG#OSr|gP`Q}IEWf7=3<(` zJv3Ym*}G(qNmwlfSnQBr=R+y@vK)T7mXKn*QWZxP$$z z=KqHOEq^$l_8<-SwYYK>sJ}HdOvL`)%KsP9uB5H7JLGSVf;(wTXfw1OwDj+w|1ki5 zi1vEg^J(|dmeTZxJ6n7l2lKR>Xk)Yw(DZi=?QZ+!;^Kb)Tkt0T``zFh{O=Ur<$uU$ z^R>p_= zg1+H$ek!ti^~oqKM0<;4QCP2pW3?z>kHSW|5Y@t^ao=zuU(fG$&)eO(=g0I7Pv+yv zMIGFHW0i6}Uo02P6XD*dRva&mqT6A)Qh?HO*fIM# zk!=*TD2~cwwV7%?DzwPn6U~HisZwusxozjI+r#v3SZ+*>A^{{aRVft5XZnWqXuMcL zXqBqC$d|0QZiV9&xr$%w$tW+CqlplH$D>+Qu7^8!ZrT82`Eod#AKTNY zE(!YXs5HVcZsbdGC2YiKsZjZXsWU|3f<`Sy61=6@78#K`H3jpv~^&xFIXCD>Gw8@wJ1grA(F}0 zCK^)+CJvT`afBX=)k$Y1L8qg1*zK8~g&8-XpR?N5kI<~n%(Q*)&RniOQ;ou5{XeoR zywmyeu1t@%v3A^TnWxN{Cvv;gbptm`u(nj3C}WBWTq9Y^`dFp!c;Mqln2|7yfh1g!MaU5wg>CXrb2T(AA!6T=F0{7krs#qoHfgksmb7?+p*7fkt6*aoBq8(iE% z*-PW4aj>BnW3e;gC@ha-GuTG3p+az~V+?yt0))8nqI`>pkUo=Fc$bbF)u?8^n?AHa zI1|1vs#S>VdUL-aZ%PzuV z1%1<##j#03V5u@q#4x*)HrpwPIA3QN#;iFjje158gMB+Dnb}s1c}8$WMETNmeunjM zLX4(86H~VEmeJXiid(*D$^mxPnt9DCHuPs+a9hwEYjjV#j0FgzBL*l zF{Nx9Um34Q&gY8dDunteGHO;XfWlf-$4LsorU~SaPAj!q!_uU}^F&x=C{Z@pRNhN& zNVBkIsW7faW3Ad?Ft}BTS zGdASf;W$c{u9TyDKg7UsxO}02SX&*T*Rnccz&wl`ObTdB$z*Dg7a!`wUN+}RD2=H! ziK3kbb(E10Vb@(7ZZ57H4EQhDa`oC^OEiJuVJ^P9z-GLEX&>5*i|ElB1>2KAo1@0 zXthCB7>(-F2q;`3z6ntUFM@P-i!xae`uarzV`VcK7R5v+%DFTLwHI@lT2gB#o{nL- zT&_@z$MUs8mdN(F3UvisSO72uw$>~}R(LpjQhkP|Mlm^advBr`NxMeNEDW_6eXecv z#(FM?)ztCzT&0|ShQ}y_;4}!gfNCcq9Iu8owTMyNJxw=9P%h``%}^0fQsopfy6I+n zTya7br)9b9dKLhXGwG^Ysi{o1wCL;=LwD4?c&p)zI-EaE~yImO{hsJ@yaKqXyH*dUs>(1><(qSD*DVvhs zv|^Z&j%RV(=Wb~|RL%Mz?<)P+&4hMwCam25M4 zOCbs^hW!Pai zqFt!9%dWvbZ)~QrsfucC$h7h=R*6@S?xHAQe@cwi-fX%^=9-pakb8B*dii`7?bT)u z1Kfd?`OTaU%4wBlRFhNKe8*7~Ud}s>+%76_sj?zK?_(VpVu>i@*>{a*MvB!pc zkt)+`pQCEVEveef3K!94wnraL;4Ie$XK#0|=N?N3sRI1GikcB2tu>4E)+pN zsU05D0@VjVzdh5|aF7+~&Ogyq!ZT$K+Ogp~ZW}dSER{%e1b-bUv3*iL%~Mgr`8FUr<@(yAm=G|Zgqx*Y=PFaei`e}kwR^nG9Q6T z)J#mhSFF{dy_GR26-fj;S*GG0@ks&Hs<*ZVL#$z{S`QTn@%>7;n&nU1u4Tz|tji>}^G*ZD&bB-5ScbzAt zS&n^D>(EE$l*^gbwu%|4aWv9Aju>(iX8=|#aQx+qAk<`4V~Y*^rfXK;CFktYm2=%w zFEb{rKDTb(f?|%obi^VKJ5AZd#9Ewtco!XZ$Pvb!Tet1lv~>$fWLNv(!JkIu(v8JP zXE!I{k$|e-A{e0|6IX+LNwm!nitX?+b`PE94~9f=_F9sZ_XV@10=lbJG8=O53h`ht z3Nw>a`Pv>IUjo17x4J%XTYOi+l-NHRL6{rk-5vy=&k{GL)34M6`u)L}KfM?T3KdL5 z4(w@v4$`%CODRu%fWyAJpMNm0U8pVJ-m+$Py6$;LZG_!miBr_hYe)=~__k9AP%;9o<<lx9Mph)Aeifl{m>&0;^LB~ZSy#|m)1)(UNSv3#0zw#P z)2Y~|i&gY5)3Gw!XO{L6qRT;9cDL0k@1erTZ7Sr587jJTR-4voxfO%g4_@1c$+IWO zZH_03h1|NvM4a1E8Pc(}^;{F@iIIbasBhcW-0j3;&63-|A?r}Ma`}qubIY&IEx#^Y ze(li8l~*laxqNxwZRCpF4l;0D%5$JG6ef=)^UZz9Li3*FnPfJ3B1}G;%qJ(31uo~C zhr{8iVy!~wz2)MbN~t)uh7`Ofs&lqg8YH=lFk^Y5L4A|k5#^_b!tETn6|wDM&UA_Y z<%xlIm!UAO^=;m?d1IU56@$zB*5mAy0=XR=sSa5UakYiN8+AHWqas|jbH`1&8`}Lu zK8NJFjpZ@k50oc{!W%f3pg3vN@}=BO_yC7u<*HrAtFF0`XsRcx`pZjKEMK*1MR>&( zp?)r3vTDVOa5bk@bmw|x)ynkI@TzO|(?%>GUa>s9`))UcKFbFfvw|@z2X5?phiPR< zu?a;{2RqTC2Uo-qR4W!&JLIHO4|0yGpT1$lKbstHKAOyqgv~?Aoc)&^PfjJXA$m9- znr`N}GuJ$fQtq>NNP3(+jjo<>qnh_L@737-OgGm&n9Md0g*=~SG!LHOnq^pIE=-=a zS%0wa$kO-+`yPXU%$VKoDP8Yn{u3!pJ!iLh+C94_YTgGO51erV%nXL-#h@gxFL{cK z3;`#MTJA5vz?>K`MvxS1+4Q?*syvvJI1q&03^O+uk|)FF{R~qtgzHWKI`2rJL54 zzriicyGdk_c#GF=GB@)7;iY176oM8|uxQ2NOu+M8qdA0dN-Sj=wxH=k%tb3W)MDBCfhBKxQX1S2XFgYKL>4AT@A_&!Q6|L>NvKEOrlGr4T)fTV~kD?Oa4g zo=ufFbexrwJLOmyRk-6(kbFVHY98eBkWL-!WwXttvUgS`h}>MF&}{dDiZL=4{M#;= zHVrTjG!HY`qs{%MaAL0pwaOSq%Nq_7m}FG8Ja*9@ZUGr;nHk0y>*Z@fJe&F4^cLzm zY9Z9XSmi9OYq2j?k@X9bhombyXqB`M#EnAb3ma(6TAENXU;!)@L7H{4YEEWXBSS5P zkiDq5Xp2e9sH`LIn&hBt0m7v`Xf;!9-p`@P=_g^tT< z&{r&q#mcRxSYvLGLR-T$#Fh0aV-}SxtAs2=$*7W9(q~SE%CzD^Xp2bjdC(SQjB*-e zNfa7ogp-nvz=$J`;HF|+1=itYeu!)(C5omrZz2;oZ&gDntL$sLBq#Z318YK3v{87b zH5K8ZLQk0beu-Y;CrBP;5mkXiXKnh7KKp4cF@kWo zlysHuOh*dpZX-fI%j^_Mem(MPnz$J(*)w&UE3;Q=?I{V+G{L7F-U4QE1E?{Z$V{S= z$GFXsicCz|?WzdRfmqb3or+JfW`5lznk7`ft(Co;)fA#x9!DKTQ!-|n&eE@QUXmT1 zGUa54?4h$=xXX0XR5eezjvDM5e(+<9FfwFE0{?eetTeCiqB`Y}^o2PrQXF!TcbUa9 zfXfa&x|o&yP$gS6Dk5lkXE9h7oLL=#m$ps>oP#LonET1xTAGv8ly|k6!L?O6roO14 zcSw>l<(=NkocXq7szurX5zG0#CS0sliw_ySE?VayD0QiUZF5>0x7<#KDzlJax@&9{ z-u~!@!W=1dO(wO-(z~bgewhX~vz@MQa@>5!WG$+wsP&8x7&KEtR=%Wa9z>Gv!yF{& zG|qxfyd7GSg{yj3lx{@;^-Ie-jI6^hb-tDEEKQvz0V_AnKP{4o6E2R0ZI$!>4%Jue&nJ9uR z;*z)foj-5% z8PS(b?FD7E?u=KJO}CkyX*nwm;M8rBRAy-g-8~B;IzEf)A=k7H5_?`T^BABCNN-DK z6P;g8F;7p9yBAyLY^LKoDx+au&fW3QeNlDR;`%(r&gUp#k0zh*kV0>=c;%J(?y9}W zxf{XZIfZZ21OpP95A`hanhmtR@OjC!iaTI5L ziJhvoUs3BMX-m1sszSW(lqFY!C7UoxY-Z+}f)8yj?E31Ag$`gDM`#bz`@nAg`v^w! zmE^#4eTim;sO=N+Ygc@d3so0b#ZUYu_NmyX^7x9a&UP~0u_+=9w2BkksWtD1ctl{X z3{RZ#W{M2Wg&vMEpUXSMV;5#Sb^#;~206*4B|B&3E=y+*^OIDDok5Ayl4B474=GdK zslBtmTglNWe#N5JHD$VkY1c*jFD1)Ei$?JM3i3ag90_@A@UVU#MJLB7E{`l(ymdg$ zu0%}_sbKbOwh%1u4nY;yLw$#*y-QPNWzQYTITbK=8rs?-AqA<|YyxSuPXS#wUr;(Z z=-AHoW>()|KiX-aSjmzi-poq1hWd$PSqG21Hg(Q{W?fO=d75fP!daZADpUIxdHyu@ z2)^+!&hX{rkUPDUi)qISZT^N7o;;me3jVKcrz{ob#E0#(bm(Z?t|kuLb0CGF9Jw{# zUzlDGC-bKn^Q;w;`&y!IkJtJLNuty{T@i`RWa@t(EL!ozse~NiMSv0Oki^}Vz?~w* zlbv7d>jTvnw$DpW5onGYv+{N{?^K(ycuUTi3Iqn*XUE4d6~!l=*tm6YaBU9IwVj1f zaeHersamvyDIIIrz)T(5;y|o*o&Ip*0+mQYj_86R7xM^+zAnSVgq=;Wqj9c*Anmji zo{Yj1T96D*lrdFvRAsfQl#TJ4{?iDgRS>AkAitWM%I4JWRng9!sc}oWUAxAETG^%K zzvQW2K|?QmX>w7EH6a+62+RUnZ>g~_n@HM4=O__nF|k{noR<9}leC4}?Dg#FCYMs$ zvSsSjL8!DA?O`NBB6i1-O~&HVaN@SGCO{bVn}4@~#Qc50w?Nt>^kpna=6n!Av^HH* z;+g1s4iimXPQgQOS5KJ?&BQXR>eT9pWD=qnW!e)W9euHQ8u8?Y9hEbFq8FA#34iKh zLM0Y-mSnb%Y-cF9)xm^ArbqV73Q0Ps(zhqLnD^lf*W{5en7Nn@g)$UB4nf;_gjus$ zB!;f86w&?^6c?3^X}2yi{hJaIDV1TH*@aqC@H;{Y#8y*PE-PhI$C|d?A!fIT)z4H( z7G*^cV>?8w;?54=aoGP0evAPQ3{qNEMo5WB)@YVjN@qF`5Y?7oToGX+lKVd3Md=OH zBD^SXk?Jy#FX6NiPyJrmnfF&*>OJHkAF!0hkVS{LgsSF{9A|rGTadt5RdJv76h19! zNtbPAWG0XL&>(+xJ50tA|D{r8Oxsk;z;)4b7%i5OJCpXC2}&HQF!u4(r(aEM>v9~~ zIi^?ba*XQ5)hA-=V(=*6`YY|AQc94 z;nh}lw5?4RoDu?Ky@Vy_!t@#Avpk&2%$qKM5RM>Gs>5Q&sl&g|PIg^f*xKqtjFsnfp( zd+xEP+r3MOF6SvnKmZ1KdTUUO&k8kFVarBj119i+p!p$`zRzN@C?$$@aNO&8O95HY zNKujuuAiy8dz~80IaaXh9`Z=PF6g-iQs`vt4>nkpSe0=glh*#tIT-V%wL, 2014—2017. +msgid "" +msgstr "" +"Project-Id-Version: cryptsetup-1.7.4\n" +"Report-Msgid-Bugs-To: dm-crypt@saout.de\n" +"POT-Creation-Date: 2019-11-01 09:04+0100\n" +"PO-Revision-Date: 2017-04-06 04:22+0200\n" +"Last-Translator: Мирослав Николић \n" +"Language-Team: Serbian <(nothing)>\n" +"Language: sr\n" +"MIME-Version: 1.0\n" +"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-Bugs: Report translation errors to the Language-Team address.\n" + +#: lib/libdevmapper.c:384 +#, fuzzy +msgid "Cannot initialize device-mapper, running as non-root user." +msgstr "Не могу да покренем мапера уређаја, радим као обичан корисник.\n" + +#: lib/libdevmapper.c:387 +#, fuzzy +msgid "Cannot initialize device-mapper. Is dm_mod kernel module loaded?" +msgstr "Не могу да покренем мапера уређаја. Да ли је модул језгра „dm_mod“ учитан?\n" + +#: lib/libdevmapper.c:1082 +#, fuzzy +msgid "Requested deferred flag is not supported." +msgstr "Затражени ЛУКС хеш „%s“ није подржан.\n" + +#: lib/libdevmapper.c:1149 +#, fuzzy, c-format +msgid "DM-UUID for device %s was truncated." +msgstr "ДМ-УЈИБ за уређај „%s“ је скраћен.\n" + +#: lib/libdevmapper.c:1463 +msgid "Unknown dm target type." +msgstr "" + +#: lib/libdevmapper.c:1565 lib/libdevmapper.c:1617 +#, fuzzy +msgid "Requested dm-crypt performance options are not supported." +msgstr "Затражене опције перформанси дм-крипта нису подржане.\n" + +#: lib/libdevmapper.c:1572 +#, fuzzy +msgid "Requested dm-verity data corruption handling options are not supported." +msgstr "Затражене опције рада оштећених података дм-веритија нису подржане.\n" + +#: lib/libdevmapper.c:1576 +#, fuzzy +msgid "Requested dm-verity FEC options are not supported." +msgstr "Затражене опције перформанси дм-крипта нису подржане.\n" + +#: lib/libdevmapper.c:1580 +#, fuzzy +msgid "Requested data integrity options are not supported." +msgstr "Затражене опције перформанси дм-крипта нису подржане.\n" + +#: lib/libdevmapper.c:1582 +#, fuzzy +msgid "Requested sector_size option is not supported." +msgstr "Затражене опције перформанси дм-крипта нису подржане.\n" + +#: lib/libdevmapper.c:1587 +#, fuzzy +msgid "Requested automatic recalculation of integrity tags is not supported." +msgstr "Затражене опције рада оштећених података дм-веритија нису подржане.\n" + +#: lib/libdevmapper.c:1591 +#, fuzzy +msgid "Requested dm-integrity bitmap mode is not supported." +msgstr "Затражене опције рада оштећених података дм-веритија нису подржане.\n" + +#: lib/libdevmapper.c:1620 +#, fuzzy +msgid "Discard/TRIM is not supported." +msgstr "Хеш алгоритам „%s“ није подржан.\n" + +#: lib/libdevmapper.c:2511 +#, c-format +msgid "Failed to query dm-%s segment." +msgstr "" + +#: lib/random.c:80 +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" +msgstr "" +"Систем је ван ентропије приликом стварања кључа волумена.\n" +"Померите миша или откуцајте неки текст у другом прозору да прикупите неке насумичне догађаје.\n" + +#: lib/random.c:84 +#, c-format +msgid "Generating key (%d%% done).\n" +msgstr "Стварам кључ (%d %% је урађено).\n" + +#: lib/random.c:170 +#, fuzzy +msgid "Running in FIPS mode." +msgstr "Ради у ФИПС режиму.\n" + +#: lib/random.c:176 +#, fuzzy +msgid "Fatal error during RNG initialisation." +msgstr "Кобна грешка за време покретања РНГ-а.\n" + +#: lib/random.c:213 +#, fuzzy +msgid "Unknown RNG quality requested." +msgstr "Затражен је непознат квалитет РНГ-а.\n" + +#: lib/random.c:218 +#, fuzzy +msgid "Error reading from RNG." +msgstr "Грешка %d читања из РНГ-а: %s\n" + +#: lib/setup.c:223 +#, fuzzy +msgid "Cannot initialize crypto RNG backend." +msgstr "Не могу да покренем РНГ позадинца криптографије.\n" + +#: lib/setup.c:229 +#, fuzzy +msgid "Cannot initialize crypto backend." +msgstr "Не могу да покренем позадинца криптографије.\n" + +#: lib/setup.c:260 lib/setup.c:1990 lib/verity/verity.c:120 +#, fuzzy, c-format +msgid "Hash algorithm %s not supported." +msgstr "Хеш алгоритам „%s“ није подржан.\n" + +#: lib/setup.c:263 lib/loopaes/loopaes.c:90 +#, fuzzy, c-format +msgid "Key processing error (using hash %s)." +msgstr "Грешка обраде кључа (користим хеш %s).\n" + +#: lib/setup.c:324 lib/setup.c:351 +#, fuzzy +msgid "Cannot determine device type. Incompatible activation of device?" +msgstr "Не могу да одредим врсту уређаја. Несагласно покретање уређаја?\n" + +#: lib/setup.c:330 lib/setup.c:2985 +#, fuzzy +msgid "This operation is supported only for LUKS device." +msgstr "Ова радња је подржана само за ЛУКС уређај.\n" + +#: lib/setup.c:357 +#, fuzzy +msgid "This operation is supported only for LUKS2 device." +msgstr "Ова радња је подржана само за ЛУКС уређај.\n" + +#: lib/setup.c:412 lib/luks2/luks2_reencrypt.c:2345 +#, fuzzy +msgid "All key slots full." +msgstr "Сви исеци кључева су пуни.\n" + +#: lib/setup.c:423 +#, fuzzy, c-format +msgid "Key slot %d is invalid, please select between 0 and %d." +msgstr "Исек кључа %d није исправан, изаберите између 0 и %d.\n" + +#: lib/setup.c:429 +#, fuzzy, c-format +msgid "Key slot %d is full, please select another one." +msgstr "Исек кључа %d је пун, изаберите неки други.\n" + +#: lib/setup.c:514 lib/setup.c:2759 +#, fuzzy +msgid "Device size is not aligned to device logical block size." +msgstr "Уређај „%s“ није исправан ЛУКС уређај.\n" + +#: lib/setup.c:610 +#, fuzzy, c-format +msgid "Header detected but device %s is too small." +msgstr "Заглавље је откривено али уређај „%s“ је премали.\n" + +#: lib/setup.c:647 +#, fuzzy +msgid "This operation is not supported for this device type." +msgstr "Ова радња није подржана за ову врсту уређаја.\n" + +#: lib/setup.c:652 +msgid "Illegal operation with reencryption in-progress." +msgstr "" + +#: lib/setup.c:821 lib/luks1/keymanage.c:476 +#, fuzzy, c-format +msgid "Unsupported LUKS version %d." +msgstr "Неподржано ЛУКС издање %d.\n" + +#: lib/setup.c:838 lib/setup.c:1483 lib/setup.c:1903 +#, fuzzy +msgid "Detached metadata device is not supported for this crypt type." +msgstr "УЈИБ није подржан за ову врсту криптографије.\n" + +#: lib/setup.c:1373 lib/setup.c:2479 lib/setup.c:2551 lib/setup.c:2563 +#: lib/setup.c:2712 lib/setup.c:4310 +#, fuzzy, c-format +msgid "Device %s is not active." +msgstr "Уређај „%s“ није радан.\n" + +#: lib/setup.c:1390 +#, fuzzy, c-format +msgid "Underlying device for crypt device %s disappeared." +msgstr "Основни уређај за криптографски уређај „%s“ је нестао.\n" + +#: lib/setup.c:1468 +#, fuzzy +msgid "Invalid plain crypt parameters." +msgstr "Неисправни параметри обичне криптографије.\n" + +#: lib/setup.c:1473 lib/setup.c:1893 src/integritysetup.c:73 +#, fuzzy +msgid "Invalid key size." +msgstr "Неисправна величина кључа.\n" + +#: lib/setup.c:1478 lib/setup.c:1898 lib/setup.c:2100 +#, fuzzy +msgid "UUID is not supported for this crypt type." +msgstr "УЈИБ није подржан за ову врсту криптографије.\n" + +#: lib/setup.c:1493 lib/setup.c:1683 lib/luks2/luks2_reencrypt.c:2308 +#: src/cryptsetup.c:1169 +#, fuzzy +msgid "Unsupported encryption sector size." +msgstr "Не могу да прочитам датотеку дневника поновног шифровања.\n" + +#: lib/setup.c:1501 lib/setup.c:1808 lib/setup.c:2753 +#, fuzzy +msgid "Device size is not aligned to requested sector size." +msgstr "Уређај „%s“ није исправан ЛУКС уређај.\n" + +#: lib/setup.c:1552 lib/setup.c:1671 +#, fuzzy +msgid "Can't format LUKS without device." +msgstr "Не могу да обликујем „LUKS“ без уређаја.\n" + +#: lib/setup.c:1558 lib/setup.c:1677 +msgid "Requested data alignment is not compatible with data offset." +msgstr "" + +#: lib/setup.c:1626 lib/setup.c:1795 +msgid "WARNING: Data offset is outside of currently available data device.\n" +msgstr "" + +#: lib/setup.c:1636 lib/setup.c:1823 lib/setup.c:1844 lib/setup.c:2112 +#, fuzzy, c-format +msgid "Cannot wipe header on device %s." +msgstr "Не могу да очистим заглавље на уређају „%s“.\n" + +#: lib/setup.c:1688 +msgid "WARNING: The device activation will fail, dm-crypt is missing support for requested encryption sector size.\n" +msgstr "" + +#: lib/setup.c:1710 +msgid "Volume key is too small for encryption with integrity extensions." +msgstr "" + +#: lib/setup.c:1765 +#, fuzzy, c-format +msgid "Cipher %s-%s (key size %zd bits) is not available." +msgstr "Шифрер „%s“ није доступан.\n" + +#: lib/setup.c:1798 +#, c-format +msgid "WARNING: LUKS2 metadata size changed to % bytes.\n" +msgstr "" + +#: lib/setup.c:1802 +#, c-format +msgid "WARNING: LUKS2 keyslots area size changed to % bytes.\n" +msgstr "" + +#: lib/setup.c:1826 lib/utils_device.c:829 lib/luks1/keyencryption.c:256 +#: lib/luks2/luks2_reencrypt.c:2356 lib/luks2/luks2_reencrypt.c:3348 +#, fuzzy, c-format +msgid "Device %s is too small." +msgstr "Уређај „%s“ је премали.\n" + +#: lib/setup.c:1837 lib/setup.c:1863 +#, fuzzy, c-format +msgid "Cannot format device %s in use." +msgstr "Не могу да обликујем уређај „%s“ који је још увек у употреби.\n" + +#: lib/setup.c:1840 lib/setup.c:1866 +#, fuzzy, c-format +msgid "Cannot format device %s, permission denied." +msgstr "Не могу да обликујем уређај „%s“, овлашћење је одбијено.\n" + +#: lib/setup.c:1852 lib/setup.c:2164 +#, fuzzy, c-format +msgid "Cannot format integrity for device %s." +msgstr "Не могу да пишем на уређају „%s“.\n" + +#: lib/setup.c:1870 +#, fuzzy, c-format +msgid "Cannot format device %s." +msgstr "Не могу да читам уређај „%s“.\n" + +#: lib/setup.c:1888 +#, fuzzy +msgid "Can't format LOOPAES without device." +msgstr "Не могу да обликујем „LOOPAES“ без уређаја.\n" + +#: lib/setup.c:1933 +#, fuzzy +msgid "Can't format VERITY without device." +msgstr "Не могу да обликујем ТАЧНОСТ без уређаја.\n" + +#: lib/setup.c:1944 lib/verity/verity.c:103 +#, fuzzy, c-format +msgid "Unsupported VERITY hash type %d." +msgstr "Неподржана врста хеша ТАЧНОСТИ %d.\n" + +#: lib/setup.c:1950 lib/verity/verity.c:111 +#, fuzzy +msgid "Unsupported VERITY block size." +msgstr "Неподржана величина блока ТАЧНОСТИ.\n" + +#: lib/setup.c:1955 lib/verity/verity.c:75 +#, fuzzy +msgid "Unsupported VERITY hash offset." +msgstr "Неподржан померај хеша ТАЧНОСТИ.\n" + +#: lib/setup.c:1960 +#, fuzzy +msgid "Unsupported VERITY FEC offset." +msgstr "Неподржан померај хеша ТАЧНОСТИ.\n" + +#: lib/setup.c:1984 +#, fuzzy +msgid "Data area overlaps with hash area." +msgstr "Област података се преклапа са облашћу хеша.\n" + +#: lib/setup.c:2009 +#, fuzzy +msgid "Hash area overlaps with FEC area." +msgstr "Област података се преклапа са облашћу хеша.\n" + +#: lib/setup.c:2016 +#, fuzzy +msgid "Data area overlaps with FEC area." +msgstr "Област података се преклапа са облашћу хеша.\n" + +#: lib/setup.c:2221 +#, fuzzy, c-format +msgid "Unknown crypt device type %s requested." +msgstr "Затражена је непозната врста „%s“ криптографског уређаја.\n" + +#: lib/setup.c:2485 lib/setup.c:2557 lib/setup.c:2570 +#, fuzzy, c-format +msgid "Unsupported parameters on device %s." +msgstr "Не могу да очистим заглавље на уређају „%s“.\n" + +#: lib/setup.c:2491 lib/setup.c:2576 lib/luks2/luks2_reencrypt.c:2408 +#: lib/luks2/luks2_reencrypt.c:2718 +#, fuzzy, c-format +msgid "Mismatching parameters on device %s." +msgstr "Не могу да очистим заглавље на уређају „%s“.\n" + +#: lib/setup.c:2596 +msgid "Crypt devices mismatch." +msgstr "" + +#: lib/setup.c:2633 lib/setup.c:2638 lib/luks2/luks2_reencrypt.c:2054 +#: lib/luks2/luks2_reencrypt.c:3126 +#, fuzzy, c-format +msgid "Failed to reload device %s." +msgstr "Не могу да читам уређај „%s“.\n" + +#: lib/setup.c:2643 lib/setup.c:2648 lib/luks2/luks2_reencrypt.c:2025 +#: lib/luks2/luks2_reencrypt.c:2032 +#, fuzzy, c-format +msgid "Failed to suspend device %s." +msgstr "Нисам успео да отворим датотеку кључа.\n" + +#: lib/setup.c:2653 lib/luks2/luks2_reencrypt.c:2039 +#: lib/luks2/luks2_reencrypt.c:3061 lib/luks2/luks2_reencrypt.c:3130 +#, fuzzy, c-format +msgid "Failed to resume device %s." +msgstr "Не могу да читам уређај „%s“.\n" + +#: lib/setup.c:2667 +#, c-format +msgid "Fatal error while reloading device %s (on top of device %s)." +msgstr "" + +#: lib/setup.c:2670 lib/setup.c:2672 +#, c-format +msgid "Failed to switch device %s to dm-error." +msgstr "" + +#: lib/setup.c:2744 +#, fuzzy +msgid "Cannot resize loop device." +msgstr "Не могу да променим величину уређаја петље.\n" + +#: lib/setup.c:2817 +msgid "Do you really want to change UUID of device?" +msgstr "Да ли стварно желите да измените УЈИБ уређаја?" + +#: lib/setup.c:2893 +#, fuzzy +msgid "Header backup file does not contain compatible LUKS header." +msgstr "Датотека резерве не садржи исправно ЛУКС заглавље.\n" + +#: lib/setup.c:2993 +#, fuzzy, c-format +msgid "Volume %s is not active." +msgstr "Волумен „%s“ није радан.\n" + +#: lib/setup.c:3004 +#, fuzzy, c-format +msgid "Volume %s is already suspended." +msgstr "Волумен „%s“ је већ обустављен.\n" + +#: lib/setup.c:3017 +#, fuzzy, c-format +msgid "Suspend is not supported for device %s." +msgstr "Обустављање није подржано за уређај „%s“.\n" + +#: lib/setup.c:3019 +#, fuzzy, c-format +msgid "Error during suspending device %s." +msgstr "Грешка за време обустављања уређаја „%s“.\n" + +#: lib/setup.c:3052 lib/setup.c:3119 +#, fuzzy, c-format +msgid "Volume %s is not suspended." +msgstr "Волумен „%s“ није обустављен.\n" + +#: lib/setup.c:3081 +#, fuzzy, c-format +msgid "Resume is not supported for device %s." +msgstr "Настављање није подржано за уређај „%s“.\n" + +#: lib/setup.c:3083 lib/setup.c:3151 +#, fuzzy, c-format +msgid "Error during resuming device %s." +msgstr "Грешка за време настављања уређаја „%s“.\n" + +#: lib/setup.c:3219 lib/setup.c:3407 +#, fuzzy +msgid "Cannot add key slot, all slots disabled and no volume key provided." +msgstr "Не могу да додам исек кључа, сви исеци су искључени а није обезбеђен ниједан кључ волумена.\n" + +#: lib/setup.c:3359 +#, fuzzy +msgid "Failed to swap new key slot." +msgstr "Нисам успео да разменим нови исек кључа.\n" + +#: lib/setup.c:3524 lib/setup.c:4161 lib/setup.c:4174 lib/setup.c:4182 +#: lib/setup.c:4195 lib/setup.c:4480 lib/setup.c:5593 +#, fuzzy +msgid "Volume key does not match the volume." +msgstr "Кључ волумена не одговара волумену.\n" + +#: lib/setup.c:3545 +#, fuzzy, c-format +msgid "Key slot %d is invalid." +msgstr "Исек кључа „%d“ није исправан.\n" + +#: lib/setup.c:3551 src/cryptsetup.c:1511 src/cryptsetup.c:1856 +#, fuzzy, c-format +msgid "Keyslot %d is not active." +msgstr "Исек кључа „%d“ није у употреби.\n" + +#: lib/setup.c:3570 +#, fuzzy +msgid "Device header overlaps with data area." +msgstr "Област података се преклапа са облашћу хеша.\n" + +#: lib/setup.c:3836 +msgid "Reencryption in-progress. Cannot activate device." +msgstr "" + +#: lib/setup.c:3838 lib/luks2/luks2_json_metadata.c:2244 +#: lib/luks2/luks2_reencrypt.c:2817 +#, fuzzy +msgid "Failed to get reencryption lock." +msgstr "Не могу да прочитам датотеку дневника поновног шифровања.\n" + +#: lib/setup.c:3851 lib/luks2/luks2_reencrypt.c:2836 +#, fuzzy +msgid "LUKS2 reencryption recovery failed." +msgstr "Не могу да отворим датотеку дневника поновног шифровања.\n" + +#: lib/setup.c:3978 lib/setup.c:4248 +#, fuzzy +msgid "Device type is not properly initialised." +msgstr "Врста уређаја није исправно покренута.\n" + +#: lib/setup.c:4022 +#, fuzzy, c-format +msgid "Cannot use device %s, name is invalid or still in use." +msgstr "Не могу да обликујем уређај „%s“ који је још увек у употреби.\n" + +#: lib/setup.c:4025 +#, fuzzy, c-format +msgid "Device %s already exists." +msgstr "Уређај „%s“ већ постоји.\n" + +#: lib/setup.c:4148 +#, fuzzy +msgid "Incorrect volume key specified for plain device." +msgstr "Наведен је неисправан кључ волумена за обичан уређај.\n" + +#: lib/setup.c:4214 +#, fuzzy +msgid "Incorrect root hash specified for verity device." +msgstr "Наведен је неисправан хеш корена за уређај тачности.\n" + +#: lib/setup.c:4289 lib/setup.c:4305 lib/luks2/luks2_json_metadata.c:2297 +#: src/cryptsetup.c:2527 +#, fuzzy, c-format +msgid "Device %s is still in use." +msgstr "Уређај „%s“ је још увеку употреби.\n" + +#: lib/setup.c:4314 +#, fuzzy, c-format +msgid "Invalid device %s." +msgstr "Неисправан уређај „%s“.\n" + +#: lib/setup.c:4430 +#, fuzzy +msgid "Volume key buffer too small." +msgstr "Међумеморија кључа волумена је премала.\n" + +#: lib/setup.c:4438 +#, fuzzy +msgid "Cannot retrieve volume key for plain device." +msgstr "Не могу да довучем кључ волумена за обичан уређај.\n" + +#: lib/setup.c:4449 +#, fuzzy, c-format +msgid "This operation is not supported for %s crypt device." +msgstr "Ова радња није подржана за криптографски уређај „%s“.\n" + +#: lib/setup.c:4636 +#, fuzzy +msgid "Dump operation is not supported for this device type." +msgstr "Радња исписа није подржана за ову врсту уређаја.\n" + +#: lib/setup.c:4947 +#, c-format +msgid "Data offset is not multiple of %u bytes." +msgstr "" + +#: lib/setup.c:5229 +#, fuzzy, c-format +msgid "Cannot convert device %s which is still in use." +msgstr "Не могу да обликујем уређај „%s“ који је још увек у употреби.\n" + +#: lib/setup.c:5526 +#, c-format +msgid "Failed to assign keyslot %u as the new volume key." +msgstr "" + +#: lib/setup.c:5599 +msgid "Failed to initialise default LUKS2 keyslot parameters." +msgstr "" + +#: lib/setup.c:5605 +#, fuzzy, c-format +msgid "Failed to assign keyslot %d to digest." +msgstr "Нисам успео да разменим нови исек кључа.\n" + +#: lib/setup.c:5690 +#, fuzzy +msgid "Failed to load key in kernel keyring." +msgstr "Нисам успео да отворим датотеку кључа.\n" + +#: lib/setup.c:5757 +#, fuzzy +msgid "Kernel keyring is not supported by the kernel." +msgstr "Ова радња није подржана за ову врсту уређаја.\n" + +#: lib/setup.c:5767 lib/luks2/luks2_reencrypt.c:2933 +#, fuzzy, c-format +msgid "Failed to read passphrase from keyring (error %d)." +msgstr "Грешка читања пропусне речи из терминала.\n" + +#: lib/setup.c:5791 +msgid "Failed to acquire global memory-hard access serialization lock." +msgstr "" + +#: lib/utils.c:81 +#, fuzzy +msgid "Cannot get process priority." +msgstr "Не могу да добавим хитност процеса.\n" + +#: lib/utils.c:95 +#, fuzzy +msgid "Cannot unlock memory." +msgstr "Не могу да откључам меморију.\n" + +#: lib/utils.c:169 lib/tcrypt/tcrypt.c:498 +#, fuzzy +msgid "Failed to open key file." +msgstr "Нисам успео да отворим датотеку кључа.\n" + +#: lib/utils.c:174 +#, fuzzy +msgid "Cannot read keyfile from a terminal." +msgstr "Не могу да прочитам датотеку кључа „%s“.\n" + +#: lib/utils.c:191 +#, fuzzy +msgid "Failed to stat key file." +msgstr "Нисам успео да добавим податке датотеке кључа.\n" + +#: lib/utils.c:199 lib/utils.c:220 +#, fuzzy +msgid "Cannot seek to requested keyfile offset." +msgstr "Не могу да премотам на затражени померај датотеке кључа.\n" + +#: lib/utils.c:214 lib/utils.c:229 src/utils_password.c:188 +#: src/utils_password.c:201 +#, fuzzy +msgid "Out of memory while reading passphrase." +msgstr "Нестало је меморије приликом читања пропусне речи.\n" + +#: lib/utils.c:249 +#, fuzzy +msgid "Error reading passphrase." +msgstr "Грешка читања пропусне речи.\n" + +#: lib/utils.c:266 +msgid "Nothing to read on input." +msgstr "" + +#: lib/utils.c:273 +#, fuzzy +msgid "Maximum keyfile size exceeded." +msgstr "Премашена је највећа величина датотеке кључа.\n" + +#: lib/utils.c:278 +#, fuzzy +msgid "Cannot read requested amount of data." +msgstr "Не могу да прочитам затражену количину података.\n" + +#: lib/utils_device.c:188 lib/utils_storage_wrappers.c:111 +#: lib/luks1/keyencryption.c:92 +#, fuzzy, c-format +msgid "Device %s doesn't exist or access denied." +msgstr "Уређај „%s“ не постоји или је приступ одбијен.\n" + +#: lib/utils_device.c:198 +#, fuzzy, c-format +msgid "Device %s is not compatible." +msgstr "Уређај „%s“ није радан.\n" + +#: lib/utils_device.c:643 +#, fuzzy, c-format +msgid "Device %s is too small. Need at least % bytes." +msgstr "Уређај „%s“ је премали. (ЛУКС захтева барем % бајта.)\n" + +#: lib/utils_device.c:724 +#, fuzzy, c-format +msgid "Cannot use device %s which is in use (already mapped or mounted)." +msgstr "Не могу да користим уређај „%s“ који је у употреби (већ мапиран или прикачен).\n" + +#: lib/utils_device.c:728 +#, fuzzy, c-format +msgid "Cannot use device %s, permission denied." +msgstr "Не могу да пишем на уређај „%s“, овлашћење је одбијено.\n" + +#: lib/utils_device.c:731 +#, fuzzy, c-format +msgid "Cannot get info about device %s." +msgstr "Не могу да добавим податке о уређају „%s“.\n" + +#: lib/utils_device.c:754 +#, fuzzy +msgid "Cannot use a loopback device, running as non-root user." +msgstr "Не могу да користим уређај повратне петље, радим као обичан корисник.\n" + +#: lib/utils_device.c:764 +#, fuzzy +msgid "Attaching loopback device failed (loop device with autoclear flag is required)." +msgstr "Прикачињање уређаја повратне петље није успело (потребан је уређај петље са опцијом самочишћења).\n" + +#: lib/utils_device.c:810 +#, fuzzy, c-format +msgid "Requested offset is beyond real size of device %s." +msgstr "Захтевани померај је изван стварне величине уређаја „%s“.\n" + +#: lib/utils_device.c:818 +#, fuzzy, c-format +msgid "Device %s has zero size." +msgstr "Уређај „%s“ има нулту величину.\n" + +#: lib/utils_pbkdf.c:100 +msgid "Requested PBKDF target time cannot be zero." +msgstr "" + +#: lib/utils_pbkdf.c:106 +#, c-format +msgid "Unknown PBKDF type %s." +msgstr "" + +#: lib/utils_pbkdf.c:111 +#, fuzzy, c-format +msgid "Requested hash %s is not supported." +msgstr "Затражени ЛУКС хеш „%s“ није подржан.\n" + +#: lib/utils_pbkdf.c:122 +#, fuzzy +msgid "Requested PBKDF type is not supported for LUKS1." +msgstr "Затражени ЛУКС хеш „%s“ није подржан.\n" + +#: lib/utils_pbkdf.c:128 +msgid "PBKDF max memory or parallel threads must not be set with pbkdf2." +msgstr "" + +#: lib/utils_pbkdf.c:133 lib/utils_pbkdf.c:143 +#, c-format +msgid "Forced iteration count is too low for %s (minimum is %u)." +msgstr "" + +#: lib/utils_pbkdf.c:148 +#, c-format +msgid "Forced memory cost is too low for %s (minimum is %u kilobytes)." +msgstr "" + +#: lib/utils_pbkdf.c:155 +#, c-format +msgid "Requested maximum PBKDF memory cost is too high (maximum is %d kilobytes)." +msgstr "" + +#: lib/utils_pbkdf.c:160 +msgid "Requested maximum PBKDF memory cannot be zero." +msgstr "" + +#: lib/utils_pbkdf.c:164 +msgid "Requested PBKDF parallel threads cannot be zero." +msgstr "" + +#: lib/utils_pbkdf.c:184 +msgid "Only PBKDF2 is supported in FIPS mode." +msgstr "" + +#: lib/utils_benchmark.c:166 +msgid "PBKDF benchmark disabled but iterations not set." +msgstr "" + +#: lib/utils_benchmark.c:185 +#, fuzzy, c-format +msgid "Not compatible PBKDF2 options (using hash algorithm %s)." +msgstr "Нису сагласне ПБКДФ2 опције (користим хеш алгоритам %s).\n" + +#: lib/utils_benchmark.c:205 +#, fuzzy +msgid "Not compatible PBKDF options." +msgstr "Нису сагласне ПБКДФ2 опције (користим хеш алгоритам %s).\n" + +#: lib/utils_device_locking.c:103 +#, c-format +msgid "Locking aborted. The locking path %s/%s is unusable (not a directory or missing)." +msgstr "" + +#: lib/utils_device_locking.c:110 +#, c-format +msgid "WARNING: Locking directory %s/%s is missing!\n" +msgstr "" + +#: lib/utils_device_locking.c:120 +#, c-format +msgid "Locking aborted. The locking path %s/%s is unusable (%s is not a directory)." +msgstr "" + +#: lib/utils_wipe.c:185 src/cryptsetup_reencrypt.c:933 +#: src/cryptsetup_reencrypt.c:1017 +#, fuzzy +msgid "Cannot seek to device offset." +msgstr "Не могу да премотам на померај уређаја.\n" + +#: lib/utils_wipe.c:209 +#, c-format +msgid "Device wipe error, offset %." +msgstr "" + +#: lib/luks1/keyencryption.c:40 +#, fuzzy, c-format +msgid "" +"Failed to setup dm-crypt key mapping for device %s.\n" +"Check that kernel supports %s cipher (check syslog for more info)." +msgstr "" +"Нисам успео да подесим мапирање кључа „dm-crypt“ за уређај %s.\n" +"Проверите да ли језгро подржава „%s“ шифрера (проверите дневник система за више података).\n" + +#: lib/luks1/keyencryption.c:45 +#, fuzzy +msgid "Key size in XTS mode must be 256 or 512 bits." +msgstr "Величина кључа у „XTS“ режиму мора да буде 256 или 512 бита.\n" + +#: lib/luks1/keyencryption.c:47 +msgid "Cipher specification should be in [cipher]-[mode]-[iv] format." +msgstr "" + +#: lib/luks1/keyencryption.c:98 lib/luks1/keymanage.c:345 +#: lib/luks1/keymanage.c:636 lib/luks1/keymanage.c:1074 +#: lib/luks2/luks2_json_metadata.c:1253 lib/luks2/luks2_keyslot.c:739 +#, fuzzy, c-format +msgid "Cannot write to device %s, permission denied." +msgstr "Не могу да пишем на уређај „%s“, овлашћење је одбијено.\n" + +#: lib/luks1/keyencryption.c:121 +#, fuzzy +msgid "Failed to open temporary keystore device." +msgstr "Нисам успео да отворим привремени уређај смештаја кључа.\n" + +#: lib/luks1/keyencryption.c:128 +#, fuzzy +msgid "Failed to access temporary keystore device." +msgstr "Нисам успео да приступм привременом уређају смештаја кључа.\n" + +#: lib/luks1/keyencryption.c:201 lib/luks2/luks2_keyslot_luks2.c:60 +#: lib/luks2/luks2_keyslot_luks2.c:78 lib/luks2/luks2_keyslot_reenc.c:134 +#, fuzzy +msgid "IO error while encrypting keyslot." +msgstr "Грешка УИ приликом шифровања исека кључа.\n" + +#: lib/luks1/keyencryption.c:247 lib/luks1/keymanage.c:348 +#: lib/luks1/keymanage.c:589 lib/luks1/keymanage.c:639 lib/tcrypt/tcrypt.c:661 +#: lib/verity/verity.c:81 lib/verity/verity.c:179 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:1256 +#: src/cryptsetup_reencrypt.c:205 +#, fuzzy, c-format +msgid "Cannot open device %s." +msgstr "Не могу да отворим уређај „%s“.\n" + +#: lib/luks1/keyencryption.c:258 lib/luks2/luks2_keyslot_luks2.c:137 +#, fuzzy +msgid "IO error while decrypting keyslot." +msgstr "Грешка УИ приликом дешифровања исека кључа.\n" + +#: lib/luks1/keymanage.c:111 +#, fuzzy, c-format +msgid "Device %s is too small. (LUKS1 requires at least % bytes.)" +msgstr "Уређај „%s“ је премали. (ЛУКС захтева барем % бајта.)\n" + +#: 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 +#, fuzzy, c-format +msgid "LUKS keyslot %u is invalid." +msgstr "ЛУКС исек кључа „%u“ није исправан.\n" + +#: lib/luks1/keymanage.c:229 lib/luks1/keymanage.c:473 +#: lib/luks2/luks2_json_metadata.c:1084 src/cryptsetup.c:1372 +#: src/cryptsetup.c:1498 src/cryptsetup.c:1555 src/cryptsetup.c:1611 +#: src/cryptsetup.c:1678 src/cryptsetup.c:1781 src/cryptsetup.c:1845 +#: src/cryptsetup.c:2005 src/cryptsetup.c:2194 src/cryptsetup.c:2254 +#: src/cryptsetup.c:2320 src/cryptsetup.c:2484 src/cryptsetup.c:3137 +#: src/cryptsetup.c:3146 src/cryptsetup_reencrypt.c:1372 +#, fuzzy, c-format +msgid "Device %s is not a valid LUKS device." +msgstr "Уређај „%s“ није исправан ЛУКС уређај.\n" + +#: lib/luks1/keymanage.c:247 lib/luks2/luks2_json_metadata.c:1101 +#, fuzzy, c-format +msgid "Requested header backup file %s already exists." +msgstr "Затражена датотека резерве заглавља „%s“ већ постоји.\n" + +#: lib/luks1/keymanage.c:249 lib/luks2/luks2_json_metadata.c:1103 +#, fuzzy, c-format +msgid "Cannot create header backup file %s." +msgstr "Не могу да направим резервну датотеку заглавља „%s“.\n" + +#: lib/luks1/keymanage.c:256 lib/luks2/luks2_json_metadata.c:1110 +#, fuzzy, c-format +msgid "Cannot write header backup file %s." +msgstr "Не могу да запишем резервну датотеку заглавља „%s“.\n" + +#: lib/luks1/keymanage.c:287 lib/luks2/luks2_json_metadata.c:1162 +#, fuzzy +msgid "Backup file doesn't contain valid LUKS header." +msgstr "Датотека резерве не садржи исправно ЛУКС заглавље.\n" + +#: lib/luks1/keymanage.c:300 lib/luks1/keymanage.c:550 +#: lib/luks2/luks2_json_metadata.c:1183 +#, fuzzy, c-format +msgid "Cannot open header backup file %s." +msgstr "Не могу да отворим резервну датотеку заглавља „%s“.\n" + +#: lib/luks1/keymanage.c:308 lib/luks2/luks2_json_metadata.c:1191 +#, fuzzy, c-format +msgid "Cannot read header backup file %s." +msgstr "Не могу да прочитам резервну датотеку заглавља „%s“.\n" + +#: lib/luks1/keymanage.c:318 +#, fuzzy +msgid "Data offset or key size differs on device and backup, restore failed." +msgstr "Померај датума или величина кључа се разликују на уређају и резерви, враћање није успело.\n" + +#: lib/luks1/keymanage.c:326 +#, c-format +msgid "Device %s %s%s" +msgstr "Уређај %s %s%s" + +#: lib/luks1/keymanage.c:327 +msgid "does not contain LUKS header. Replacing header can destroy data on that device." +msgstr "не садржи ЛУКС заглавље. Замена заглавља може да уништи податке на том уређају." + +#: lib/luks1/keymanage.c:328 +msgid "already contains LUKS header. Replacing header will destroy existing keyslots." +msgstr "већ садржи „LUKS“ заглавље. Замена заглавља ће уништити постојеће исеке кључева." + +#: lib/luks1/keymanage.c:329 lib/luks2/luks2_json_metadata.c:1225 +msgid "" +"\n" +"WARNING: real device header has different UUID than backup!" +msgstr "" +"\n" +"УПОЗОРЕЊЕ: право заглавље уређаја има другачији УЈИБ од резерве!" + +#: lib/luks1/keymanage.c:376 +#, fuzzy +msgid "Non standard key size, manual repair required." +msgstr "Неуобичајена величина кључа, потребна је ручна поправка.\n" + +#: lib/luks1/keymanage.c:381 +#, fuzzy +msgid "Non standard keyslots alignment, manual repair required." +msgstr "Неуобичајено поравнање исека кључева, потребна је ручна поправка.\n" + +#: lib/luks1/keymanage.c:391 +#, fuzzy +msgid "Repairing keyslots." +msgstr "Поправљам исеке кључева.\n" + +#: lib/luks1/keymanage.c:410 +#, fuzzy, c-format +msgid "Keyslot %i: offset repaired (%u -> %u)." +msgstr "Исек кључа %i: померај је оправљен (%u —> %u).\n" + +#: lib/luks1/keymanage.c:418 +#, fuzzy, c-format +msgid "Keyslot %i: stripes repaired (%u -> %u)." +msgstr "Исек кључа %i: траке су оправљене (%u —> %u).\n" + +#: lib/luks1/keymanage.c:427 +#, fuzzy, c-format +msgid "Keyslot %i: bogus partition signature." +msgstr "Исек кључа %i: лажан потпис партиције.\n" + +#: lib/luks1/keymanage.c:432 +#, fuzzy, c-format +msgid "Keyslot %i: salt wiped." +msgstr "Исек кључа %i: присолак је обрисан.\n" + +#: lib/luks1/keymanage.c:449 +#, fuzzy +msgid "Writing LUKS header to disk." +msgstr "Записујем ЛУКС заглавље на диск.\n" + +#: lib/luks1/keymanage.c:454 +msgid "Repair failed." +msgstr "Поправканије успела." + +#: lib/luks1/keymanage.c:482 lib/luks1/keymanage.c:751 +#, fuzzy, c-format +msgid "Requested LUKS hash %s is not supported." +msgstr "Затражени ЛУКС хеш „%s“ није подржан.\n" + +#: lib/luks1/keymanage.c:510 src/cryptsetup.c:1081 +#, fuzzy +msgid "No known problems detected for LUKS header." +msgstr "Нису откривени познати проблеми за ЛУКС заглавље.\n" + +#: lib/luks1/keymanage.c:661 +#, fuzzy, c-format +msgid "Error during update of LUKS header on device %s." +msgstr "Грешка приликом освежавања ЛУКС заглавља на уређају „%s“.\n" + +#: lib/luks1/keymanage.c:669 +#, fuzzy, c-format +msgid "Error re-reading LUKS header after update on device %s." +msgstr "Грешка поновног читања ЛУКС заглавља након освежења на уређају „%s“.\n" + +#: lib/luks1/keymanage.c:745 +#, fuzzy +msgid "Data offset for LUKS header must be either 0 or higher than header size." +msgstr "Померај података за откачено ЛУКС заглавље мора бити или 0 или већи од величине заглавља (%d сектора).\n" + +#: lib/luks1/keymanage.c:756 lib/luks1/keymanage.c:821 +#: lib/luks2/luks2_json_format.c:283 lib/luks2/luks2_json_metadata.c:1002 +#: src/cryptsetup.c:2647 +#, fuzzy +msgid "Wrong LUKS UUID format provided." +msgstr "Достављен је погрешан запис ЛУКС УЈИБ-а.\n" + +#: lib/luks1/keymanage.c:779 +#, fuzzy +msgid "Cannot create LUKS header: reading random salt failed." +msgstr "Не могу да направим ЛУКС заглавље: није успело читање насумичног присолка.\n" + +#: lib/luks1/keymanage.c:800 +#, fuzzy, c-format +msgid "Cannot create LUKS header: header digest failed (using hash %s)." +msgstr "Не могу да направим ЛУКС заглавље: није успео преглед заглавља (користим хеш „%s“).\n" + +#: lib/luks1/keymanage.c:844 +#, fuzzy, c-format +msgid "Key slot %d active, purge first." +msgstr "Исек кључа „%d“ је радан, прво прочистите.\n" + +#: lib/luks1/keymanage.c:850 +#, fuzzy, c-format +msgid "Key slot %d material includes too few stripes. Header manipulation?" +msgstr "Материјал исека кључа „%d“ обухвата премало трака. Да управљам заглављем?\n" + +#: lib/luks1/keymanage.c:1060 +#, fuzzy, c-format +msgid "Key slot %d is invalid, please select keyslot between 0 and %d." +msgstr "Исек кључа %d није исправан, изаберите га између 0 и %d.\n" + +#: lib/luks1/keymanage.c:1078 lib/luks2/luks2_keyslot.c:743 +#, fuzzy, c-format +msgid "Cannot wipe device %s." +msgstr "Не могу да очистим уређај „%s“.\n" + +#: lib/loopaes/loopaes.c:146 +#, fuzzy +msgid "Detected not yet supported GPG encrypted keyfile." +msgstr "Откривена је још увек неподржана ГПГ-ом шифрована датотека кључа.\n" + +#: lib/loopaes/loopaes.c:147 +msgid "Please use gpg --decrypt | cryptsetup --keyfile=- ...\n" +msgstr "Користите gpg --decrypt <ДАТОТЕКА_КЉУЧА> | cryptsetup --keyfile=- ...\n" + +#: lib/loopaes/loopaes.c:168 lib/loopaes/loopaes.c:188 +#, fuzzy +msgid "Incompatible loop-AES keyfile detected." +msgstr "Откривена је несагласна датотека кључа АЕС петље.\n" + +#: lib/loopaes/loopaes.c:245 +#, fuzzy +msgid "Kernel doesn't support loop-AES compatible mapping." +msgstr "Језгро не подржава мапирање сагласно са АЕС петљом.\n" + +#: lib/tcrypt/tcrypt.c:505 +#, fuzzy, c-format +msgid "Error reading keyfile %s." +msgstr "Грешка читања датотеке кључа „%s“.\n" + +#: lib/tcrypt/tcrypt.c:545 +#, fuzzy, c-format +msgid "Maximum TCRYPT passphrase length (%d) exceeded." +msgstr "Премашена је највећа дужина „TCRYPT“ пропусне речи (%d).\n" + +#: lib/tcrypt/tcrypt.c:586 +#, fuzzy, c-format +msgid "PBKDF2 hash algorithm %s not available, skipping." +msgstr "ПБКДФ2 алгоритам хеша „%s“ није доступан, прескачем.\n" + +#: lib/tcrypt/tcrypt.c:602 src/cryptsetup.c:959 +#, fuzzy +msgid "Required kernel crypto interface not available." +msgstr "Није доступно затражено сучеље криптографије језгра.\n" + +#: lib/tcrypt/tcrypt.c:604 src/cryptsetup.c:961 +#, fuzzy +msgid "Ensure you have algif_skcipher kernel module loaded." +msgstr "Уверите се да је учитан модул језгра „algif_skcipher“.\n" + +#: lib/tcrypt/tcrypt.c:744 +#, fuzzy, c-format +msgid "Activation is not supported for %d sector size." +msgstr "Покретање није подржано за величину %d сектора.\n" + +#: lib/tcrypt/tcrypt.c:750 +#, fuzzy +msgid "Kernel doesn't support activation for this TCRYPT legacy mode." +msgstr "Језгро не подржава покретање за овај стари ТКРИПТ режим.\n" + +#: lib/tcrypt/tcrypt.c:784 +#, fuzzy, c-format +msgid "Activating TCRYPT system encryption for partition %s." +msgstr "Покрећем „TCRYPT“ систем шифровања за партицију „%s“.\n" + +#: lib/tcrypt/tcrypt.c:862 +#, fuzzy +msgid "Kernel doesn't support TCRYPT compatible mapping." +msgstr "Језгро не подржава мапирање сагласно са „TCRYPT“-ом.\n" + +#: lib/tcrypt/tcrypt.c:1084 +msgid "This function is not supported without TCRYPT header load." +msgstr "Ова функција није подржана без учитавања ТКРИПТ заглавља." + +#: lib/verity/verity.c:69 lib/verity/verity.c:172 +#, fuzzy, c-format +msgid "Verity device %s doesn't use on-disk header." +msgstr "Уређај тачности %s не користи заглавље на-диску.\n" + +#: lib/verity/verity.c:91 +#, fuzzy, c-format +msgid "Device %s is not a valid VERITY device." +msgstr "Уређај „%s“ није исправан уређај ТАЧНОСТИ.\n" + +#: lib/verity/verity.c:98 +#, fuzzy, c-format +msgid "Unsupported VERITY version %d." +msgstr "Неподржано издање ТАЧНОСТИ %d.\n" + +#: lib/verity/verity.c:129 +#, fuzzy +msgid "VERITY header corrupted." +msgstr "Заглавље ТАЧНОСТИ је оштећено.\n" + +#: lib/verity/verity.c:166 +#, fuzzy, c-format +msgid "Wrong VERITY UUID format provided on device %s." +msgstr "Достављен је погрешан УЈИБ запис ТАЧНОСТИ на уређају „%s“.\n" + +#: lib/verity/verity.c:199 +#, fuzzy, c-format +msgid "Error during update of verity header on device %s." +msgstr "Грешка приликом освежавања заглавља тачности на уређају „%s“.\n" + +#: lib/verity/verity.c:262 +msgid "Errors cannot be repaired with FEC device." +msgstr "" + +#: lib/verity/verity.c:264 +#, c-format +msgid "Found %u repairable errors with FEC device." +msgstr "" + +#: lib/verity/verity.c:302 +#, fuzzy +msgid "Kernel doesn't support dm-verity mapping." +msgstr "Језгро не подржава мапирање дм-тачности.\n" + +#: lib/verity/verity.c:313 +#, fuzzy +msgid "Verity device detected corruption after activation." +msgstr "Уређај тачности је открио оштећење након покретања.\n" + +#: lib/verity/verity_hash.c:59 +#, fuzzy, c-format +msgid "Spare area is not zeroed at position %." +msgstr "Сувишна област није нулирана на положају %.\n" + +#: lib/verity/verity_hash.c:160 lib/verity/verity_hash.c:287 +#: lib/verity/verity_hash.c:300 +#, fuzzy +msgid "Device offset overflow." +msgstr "Прекорачење помераја уређаја.\n" + +#: lib/verity/verity_hash.c:200 +#, fuzzy, c-format +msgid "Verification failed at position %." +msgstr "Провера није успела на положају %.\n" + +#: lib/verity/verity_hash.c:273 +#, fuzzy +msgid "Invalid size parameters for verity device." +msgstr "Неисправни параметри величине за уређај тачности.\n" + +#: lib/verity/verity_hash.c:293 +msgid "Hash area overflow." +msgstr "" + +#: lib/verity/verity_hash.c:370 +#, fuzzy +msgid "Verification of data area failed." +msgstr "Провера области података није успела.\n" + +#: lib/verity/verity_hash.c:375 +#, fuzzy +msgid "Verification of root hash failed." +msgstr "Провера хеша корена није успела.\n" + +#: lib/verity/verity_hash.c:381 +#, fuzzy +msgid "Input/output error while creating hash area." +msgstr "Улазно/излазна грешка приликом стварања области хеша.\n" + +#: lib/verity/verity_hash.c:383 +#, fuzzy +msgid "Creation of hash area failed." +msgstr "Стварање области хеша није успело.\n" + +#: lib/verity/verity_hash.c:430 +#, fuzzy, c-format +msgid "WARNING: Kernel cannot activate device if data block size exceeds page size (%u)." +msgstr "УПОЗОРЕЊЕ: Језгро не може да покрене уређајако величина блока података премашује величину странице (%u).\n" + +#: lib/verity/verity_fec.c:132 +msgid "Failed to allocate RS context." +msgstr "" + +#: lib/verity/verity_fec.c:147 +#, fuzzy +msgid "Failed to allocate buffer." +msgstr "Нисам успео да добавим податке датотеке кључа.\n" + +#: lib/verity/verity_fec.c:157 +#, c-format +msgid "Failed to read RS block % byte %d." +msgstr "" + +#: lib/verity/verity_fec.c:170 +#, c-format +msgid "Failed to read parity for RS block %." +msgstr "" + +#: lib/verity/verity_fec.c:178 +#, c-format +msgid "Failed to repair parity for block %." +msgstr "" + +#: lib/verity/verity_fec.c:189 +#, c-format +msgid "Failed to write parity for RS block %." +msgstr "" + +#: lib/verity/verity_fec.c:224 +msgid "Block sizes must match for FEC." +msgstr "" + +#: lib/verity/verity_fec.c:230 +msgid "Invalid number of parity bytes." +msgstr "" + +#: lib/verity/verity_fec.c:266 +#, fuzzy, c-format +msgid "Failed to determine size for device %s." +msgstr "Нисам успео да отворим привремени уређај смештаја кључа.\n" + +#: lib/integrity/integrity.c:241 lib/integrity/integrity.c:306 +#, fuzzy +msgid "Kernel doesn't support dm-integrity mapping." +msgstr "Језгро не подржава мапирање дм-тачности.\n" + +#: lib/luks2/luks2_disk_metadata.c:383 lib/luks2/luks2_json_metadata.c:959 +#: lib/luks2/luks2_json_metadata.c:1245 +#, fuzzy, c-format +msgid "Failed to acquire write lock on device %s." +msgstr "Нисам успео да приступм привременом уређају смештаја кључа.\n" + +#: lib/luks2/luks2_disk_metadata.c:392 +msgid "Detected attempt for concurrent LUKS2 metadata update. Aborting operation." +msgstr "" + +#: 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 "" + +#: lib/luks2/luks2_json_format.c:227 +#, fuzzy +msgid "Requested data offset is too small." +msgstr "Уређај „%s“ је премали.\n" + +#: 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 "" + +#: lib/luks2/luks2_json_metadata.c:946 lib/luks2/luks2_json_metadata.c:1075 +#: lib/luks2/luks2_json_metadata.c:1151 lib/luks2/luks2_keyslot_luks2.c:92 +#: lib/luks2/luks2_keyslot_luks2.c:114 +#, fuzzy, c-format +msgid "Failed to acquire read lock on device %s." +msgstr "Нисам успео да приступм привременом уређају смештаја кључа.\n" + +#: lib/luks2/luks2_json_metadata.c:1168 +#, c-format +msgid "Forbidden LUKS2 requirements detected in backup %s." +msgstr "" + +#: lib/luks2/luks2_json_metadata.c:1209 +#, fuzzy +msgid "Data offset differ on device and backup, restore failed." +msgstr "Померај датума или величина кључа се разликују на уређају и резерви, враћање није успело.\n" + +#: lib/luks2/luks2_json_metadata.c:1215 +#, fuzzy +msgid "Binary header with keyslot areas size differ on device and backup, restore failed." +msgstr "Померај датума или величина кључа се разликују на уређају и резерви, враћање није успело.\n" + +#: lib/luks2/luks2_json_metadata.c:1222 +#, fuzzy, c-format +msgid "Device %s %s%s%s%s" +msgstr "Уређај %s %s%s" + +#: lib/luks2/luks2_json_metadata.c:1223 +#, fuzzy +msgid "does not contain LUKS2 header. Replacing header can destroy data on that device." +msgstr "не садржи ЛУКС заглавље. Замена заглавља може да уништи податке на том уређају." + +#: lib/luks2/luks2_json_metadata.c:1224 +#, fuzzy +msgid "already contains LUKS2 header. Replacing header will destroy existing keyslots." +msgstr "већ садржи „LUKS“ заглавље. Замена заглавља ће уништити постојеће исеке кључева." + +#: lib/luks2/luks2_json_metadata.c:1226 +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:1228 +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:1324 +#, c-format +msgid "Ignored unknown flag %s." +msgstr "" + +#: lib/luks2/luks2_json_metadata.c:2011 lib/luks2/luks2_reencrypt.c:1746 +#, c-format +msgid "Missing key for dm-crypt segment %u" +msgstr "" + +#: lib/luks2/luks2_json_metadata.c:2023 lib/luks2/luks2_reencrypt.c:1764 +#, fuzzy +msgid "Failed to set dm-crypt segment." +msgstr "Нисам успео да добавим податке датотеке кључа.\n" + +#: lib/luks2/luks2_json_metadata.c:2029 lib/luks2/luks2_reencrypt.c:1770 +msgid "Failed to set dm-linear segment." +msgstr "" + +#: lib/luks2/luks2_json_metadata.c:2156 +msgid "Unsupported device integrity configuration." +msgstr "" + +#: lib/luks2/luks2_json_metadata.c:2242 +msgid "Reencryption in-progress. Cannot deactivate device." +msgstr "" + +#: lib/luks2/luks2_json_metadata.c:2253 lib/luks2/luks2_reencrypt.c:3171 +#, c-format +msgid "Failed to replace suspended device %s with dm-error target." +msgstr "" + +#: lib/luks2/luks2_json_metadata.c:2333 +msgid "Failed to read LUKS2 requirements." +msgstr "" + +#: lib/luks2/luks2_json_metadata.c:2340 +msgid "Unmet LUKS2 requirements detected." +msgstr "" + +#: lib/luks2/luks2_json_metadata.c:2348 +msgid "Offline reencryption in progress. Aborting." +msgstr "" + +#: lib/luks2/luks2_json_metadata.c:2350 +msgid "Online reencryption in progress. Aborting." +msgstr "" + +#: lib/luks2/luks2_keyslot.c:552 lib/luks2/luks2_keyslot.c:589 +msgid "Not enough available memory to open a keyslot." +msgstr "" + +#: lib/luks2/luks2_keyslot.c:554 lib/luks2/luks2_keyslot.c:591 +#, fuzzy +msgid "Keyslot open failed." +msgstr "Исек кључа није исправан." + +#: 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 "" + +#: lib/luks2/luks2_keyslot_luks2.c:480 +#, fuzzy +msgid "No space for new keyslot." +msgstr "Нисам успео да разменим нови исек кључа.\n" + +#: lib/luks2/luks2_luks1_convert.c:481 +#, fuzzy, c-format +msgid "Cannot check status of device with uuid: %s." +msgstr "Не могу да проверим квалитет лозинке: %s\n" + +#: lib/luks2/luks2_luks1_convert.c:507 +msgid "Unable to convert header with LUKSMETA additional metadata." +msgstr "" + +#: lib/luks2/luks2_luks1_convert.c:547 +msgid "Unable to move keyslot area. Not enough space." +msgstr "" + +#: lib/luks2/luks2_luks1_convert.c:590 lib/luks2/luks2_luks1_convert.c:872 +#, fuzzy +msgid "Unable to move keyslot area." +msgstr "Нисам успео да отворим датотеку кључа.\n" + +#: lib/luks2/luks2_luks1_convert.c:682 +msgid "Cannot convert to LUKS1 format - default segment encryption sector size is not 512 bytes." +msgstr "" + +#: lib/luks2/luks2_luks1_convert.c:690 +msgid "Cannot convert to LUKS1 format - key slot digests are not LUKS1 compatible." +msgstr "" + +#: lib/luks2/luks2_luks1_convert.c:702 +#, c-format +msgid "Cannot convert to LUKS1 format - device uses wrapped key cipher %s." +msgstr "" + +#: lib/luks2/luks2_luks1_convert.c:710 +#, c-format +msgid "Cannot convert to LUKS1 format - LUKS2 header contains %u token(s)." +msgstr "" + +#: lib/luks2/luks2_luks1_convert.c:724 +#, c-format +msgid "Cannot convert to LUKS1 format - keyslot %u is in invalid state." +msgstr "" + +#: lib/luks2/luks2_luks1_convert.c:729 +#, c-format +msgid "Cannot convert to LUKS1 format - slot %u (over maximum slots) is still active." +msgstr "" + +#: lib/luks2/luks2_luks1_convert.c:734 +#, c-format +msgid "Cannot convert to LUKS1 format - keyslot %u is not LUKS1 compatible." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:892 +#, c-format +msgid "Hotzone size must be multiple of calculated zone alignment (%zu bytes)." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:897 +#, fuzzy, c-format +msgid "Device size must be multiple of calculated zone alignment (%zu bytes)." +msgstr "Величина смањивања мора бити умножак одељка од 512 бајта." + +#: lib/luks2/luks2_reencrypt.c:941 +#, fuzzy, c-format +msgid "Unsupported resilience mode %s" +msgstr "Неподржано ЛУКС издање %d.\n" + +#: lib/luks2/luks2_reencrypt.c:1158 lib/luks2/luks2_reencrypt.c:1313 +#: lib/luks2/luks2_reencrypt.c:1396 lib/luks2/luks2_reencrypt.c:1430 +#: lib/luks2/luks2_reencrypt.c:3011 +msgid "Failed to initialize old segment storage wrapper." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:1172 lib/luks2/luks2_reencrypt.c:1291 +msgid "Failed to initialize new segment storage wrapper." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:1340 +msgid "Failed to read checksums for current hotzone." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:1347 lib/luks2/luks2_reencrypt.c:3019 +#, fuzzy, c-format +msgid "Failed to read hotzone area starting at %." +msgstr "Сувишна област није нулирана на положају %.\n" + +#: lib/luks2/luks2_reencrypt.c:1366 +#, c-format +msgid "Failed to decrypt sector %zu." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:1372 +#, c-format +msgid "Failed to recover sector %zu." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:1867 +#, c-format +msgid "Source and target device sizes don't match. Source %, target: %." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:1965 +#, fuzzy, c-format +msgid "Failed to activate hotzone device %s." +msgstr "Нисам успео да приступм привременом уређају смештаја кључа.\n" + +#: lib/luks2/luks2_reencrypt.c:1982 +#, c-format +msgid "Failed to activate overlay device %s with actual origin table." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:1989 +#, fuzzy, c-format +msgid "Failed to load new mapping for device %s." +msgstr "Нисам успео да отворим привремени уређај смештаја кључа.\n" + +#: lib/luks2/luks2_reencrypt.c:2060 +msgid "Failed to refresh reencryption devices stack." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:2216 +#, fuzzy +msgid "Failed to set new keyslots area size." +msgstr "Нисам успео да разменим нови исек кључа.\n" + +#: lib/luks2/luks2_reencrypt.c:2318 +#, c-format +msgid "Data shift is not aligned to requested encryption sector size (% bytes)." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:2339 +#, c-format +msgid "Data device is not aligned to requested encryption sector size (% bytes)." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:2360 +#, c-format +msgid "Data shift (% sectors) is less than future data offset (% sectors)." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:2366 lib/luks2/luks2_reencrypt.c:2760 +#: lib/luks2/luks2_reencrypt.c:2781 +#, fuzzy, c-format +msgid "Failed to open %s in exclusive mode (already mapped or mounted)." +msgstr "Не могу да користим уређај „%s“ који је у употреби (већ мапиран или прикачен).\n" + +#: lib/luks2/luks2_reencrypt.c:2534 +#, fuzzy +msgid "No LUKS2 reencryption in progress." +msgstr "Не могу да користим прослеђени УУИД док је дешифровање у току.\n" + +#: lib/luks2/luks2_reencrypt.c:2540 lib/luks2/luks2_reencrypt.c:3276 +msgid "Failed to load LUKS2 reencryption context." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:2600 +#, fuzzy +msgid "Failed to get reencryption state." +msgstr "Величина кључа шифровања" + +#: lib/luks2/luks2_reencrypt.c:2604 +#, fuzzy +msgid "Device is not in reencryption." +msgstr "Уређај „%s“ није радан.\n" + +#: lib/luks2/luks2_reencrypt.c:2611 +msgid "Reencryption process is already running." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:2613 +#, fuzzy +msgid "Failed to acquire reencryption lock." +msgstr "Не могу да прочитам датотеку дневника поновног шифровања.\n" + +#: lib/luks2/luks2_reencrypt.c:2631 +msgid "Cannot proceed with reencryption. Run reencryption recovery first." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:2731 +msgid "Active device size and requested reencryption size don't match." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:2745 +msgid "Illegal device size requested in reencryption parameters." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:2815 +msgid "Reencryption in-progress. Cannot perform recovery." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:2887 +msgid "LUKS2 reencryption already initialized in metadata." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:2894 +msgid "Failed to initialize LUKS2 reencryption in metadata." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:2985 +msgid "Failed to set device segments for next reencryption hotzone." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:3027 +#, fuzzy +msgid "Failed to write reencryption resilience metadata." +msgstr "Не могу да запишем датотеку дневника поновног шифровања.\n" + +#: lib/luks2/luks2_reencrypt.c:3034 +#, fuzzy +msgid "Decryption failed." +msgstr "Поправканије успела." + +#: lib/luks2/luks2_reencrypt.c:3039 +#, c-format +msgid "Failed to write hotzone area starting at %." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:3044 +#, fuzzy +msgid "Failed to sync data." +msgstr "Нисам успео да добавим податке датотеке кључа.\n" + +#: lib/luks2/luks2_reencrypt.c:3052 +msgid "Failed to update metadata after current reencryption hotzone completed." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:3119 +msgid "Failed to write LUKS2 metadata." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:3142 +msgid "Failed to wipe backup segment data." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:3155 +msgid "Failed to disable reencryption requirement flag." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:3163 +#, c-format +msgid "Fatal error while reencrypting chunk starting at %, % sectors long." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:3172 +msgid "Do not resume the device unless replaced with error target manually." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:3221 +msgid "Cannot proceed with reencryption. Unexpected reencryption status." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:3227 +msgid "Missing or invalid reencrypt context." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:3234 +#, fuzzy +msgid "Failed to initialize reencryption device stack." +msgstr "Не могу да покренем позадинца криптографије.\n" + +#: lib/luks2/luks2_reencrypt.c:3253 lib/luks2/luks2_reencrypt.c:3289 +#, fuzzy +msgid "Failed to update reencryption context." +msgstr "Не могу да отворим датотеку дневника поновног шифровања.\n" + +#: lib/luks2/luks2_token.c:262 +msgid "No free token slot." +msgstr "" + +#: lib/luks2/luks2_token.c:269 +#, fuzzy, c-format +msgid "Failed to create builtin token %s." +msgstr "Нисам успео да добавим податке датотеке кључа.\n" + +#: src/cryptsetup.c:162 +#, fuzzy +msgid "Can't do passphrase verification on non-tty inputs." +msgstr "Не могу да одрадим проверу пропусне речи на не-конзолним улазима.\n" + +#: src/cryptsetup.c:215 +#, fuzzy +msgid "Keyslot encryption parameters can be set only for LUKS2 device." +msgstr "Ова радња је подржана само за ЛУКС уређај.\n" + +#: src/cryptsetup.c:245 src/cryptsetup.c:893 src/cryptsetup.c:1212 +#: src/cryptsetup.c:3011 src/cryptsetup_reencrypt.c:715 +#: src/cryptsetup_reencrypt.c:785 +#, fuzzy +msgid "No known cipher specification pattern detected." +msgstr "Није откривен познат образац одреднице шифрера.\n" + +#: src/cryptsetup.c:253 +msgid "WARNING: The --hash parameter is being ignored in plain mode with keyfile specified.\n" +msgstr "УПОЗОРЕЊЕ: Параметар „--hash“ је занемарен у обичном режиму са наведеном кључном датотеком.\n" + +#: src/cryptsetup.c:261 +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:301 +#, c-format +msgid "Detected device signature(s) on %s. Proceeding further may damage existing data." +msgstr "" + +#: src/cryptsetup.c:307 src/cryptsetup.c:1038 src/cryptsetup.c:1090 +#: src/cryptsetup.c:1189 src/cryptsetup.c:1262 src/cryptsetup.c:1913 +#: src/cryptsetup.c:2545 src/cryptsetup.c:2668 src/integritysetup.c:232 +msgid "Operation aborted.\n" +msgstr "" + +#: src/cryptsetup.c:375 +#, fuzzy +msgid "Option --key-file is required." +msgstr "Захтевана је опција „--key-file“.\n" + +#: src/cryptsetup.c:428 +msgid "Enter VeraCrypt PIM: " +msgstr "" + +#: src/cryptsetup.c:437 +msgid "Invalid PIM value: parse error." +msgstr "" + +#: src/cryptsetup.c:440 +#, fuzzy +msgid "Invalid PIM value: 0." +msgstr "Неисправан уређај „%s“.\n" + +#: src/cryptsetup.c:443 +msgid "Invalid PIM value: outside of range." +msgstr "" + +#: src/cryptsetup.c:466 +#, fuzzy +msgid "No device header detected with this passphrase." +msgstr "Није откривено заглавље уређаја са овом пропусном речи.\n" + +#: src/cryptsetup.c:528 src/cryptsetup.c:1940 +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 "" +"Избачај заглавља са кључем волумена је осетљив податак\n" +"који омогућава приступ шифрованој партицији без лозинке.\n" +"Овај избачај треба увек бити смештен шифрован на безбедном месту." + +#: src/cryptsetup.c:607 +#, c-format +msgid "Device %s is still active and scheduled for deferred removal.\n" +msgstr "" + +#: src/cryptsetup.c:635 +msgid "Resize of active device requires volume key in keyring but --disable-keyring option is set." +msgstr "" + +#: src/cryptsetup.c:771 +#, fuzzy +msgid "Benchmark interrupted." +msgstr "шифрер оцењивања" + +#: src/cryptsetup.c:792 +#, c-format +msgid "PBKDF2-%-9s N/A\n" +msgstr "" + +#: src/cryptsetup.c:794 +#, c-format +msgid "PBKDF2-%-9s %7u iterations per second for %zu-bit key\n" +msgstr "" + +#: src/cryptsetup.c:808 +#, c-format +msgid "%-10s N/A\n" +msgstr "" + +#: src/cryptsetup.c:810 +#, 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:834 +#, fuzzy +msgid "Result of benchmark is not reliable." +msgstr "Резултат тестирања није поуздан.\n" + +#: src/cryptsetup.c:885 +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:919 +#, fuzzy, c-format +msgid "#%*s Algorithm | Key | Encryption | Decryption\n" +msgstr "# Алгоритам | Кључ | Шифровање | Дешифровање\n" + +#: src/cryptsetup.c:923 +#, fuzzy, c-format +msgid "Cipher %s is not available." +msgstr "Шифрер „%s“ није доступан.\n" + +#. TRANSLATORS: The string is header of a table and must be exactly (right side) aligned. +#: src/cryptsetup.c:943 +#, fuzzy +msgid "# Algorithm | Key | Encryption | Decryption\n" +msgstr "# Алгоритам | Кључ | Шифровање | Дешифровање\n" + +#: src/cryptsetup.c:952 +msgid "N/A" +msgstr "Недоступно" + +#: src/cryptsetup.c:1031 +msgid "" +"Seems device does not require reencryption recovery.\n" +"Do you want to proceed anyway?" +msgstr "" + +#: src/cryptsetup.c:1037 +msgid "Really proceed with LUKS2 reencryption recovery?" +msgstr "" + +#: src/cryptsetup.c:1046 +#, fuzzy +msgid "Enter passphrase for reencryption recovery: " +msgstr "Унесите пропусну реч за исек кључа %u: " + +#: src/cryptsetup.c:1089 +msgid "Really try to repair LUKS device header?" +msgstr "Стварно да покушам да поправим заглавље ЛУКС уређаја?" + +#: src/cryptsetup.c:1108 src/integritysetup.c:145 +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:1130 src/integritysetup.c:167 +#, fuzzy, c-format +msgid "Cannot deactivate temporary device %s." +msgstr "Не могу да отворим привремени ЛУКС уређај.\n" + +#: src/cryptsetup.c:1174 +msgid "Integrity option can be used only for LUKS2 format." +msgstr "" + +#: src/cryptsetup.c:1179 src/cryptsetup.c:1239 +#, fuzzy +msgid "Unsupported LUKS2 metadata size options." +msgstr "Неподржано ЛУКС издање %d.\n" + +#: src/cryptsetup.c:1196 +#, fuzzy, c-format +msgid "Cannot create header file %s." +msgstr "Не могу да направим резервну датотеку заглавља „%s“.\n" + +#: src/cryptsetup.c:1219 src/integritysetup.c:194 src/integritysetup.c:203 +#: src/integritysetup.c:212 src/integritysetup.c:279 src/integritysetup.c:288 +#: src/integritysetup.c:298 +#, fuzzy +msgid "No known integrity specification pattern detected." +msgstr "Није откривен познат образац одреднице шифрера.\n" + +#: src/cryptsetup.c:1232 +#, fuzzy, c-format +msgid "Cannot use %s as on-disk header." +msgstr "Не могу да користим „%s“ као заглавље на-диску.\n" + +#: src/cryptsetup.c:1256 src/integritysetup.c:226 +#, c-format +msgid "This will overwrite data on %s irrevocably." +msgstr "Ово ће неповратно да препише податке на „%s“." + +#: src/cryptsetup.c:1297 src/cryptsetup.c:1627 src/cryptsetup.c:1694 +#: src/cryptsetup.c:1796 src/cryptsetup.c:1862 src/cryptsetup_reencrypt.c:545 +#, fuzzy +msgid "Failed to set pbkdf parameters." +msgstr "Нисам успео да добавим податке датотеке кључа.\n" + +#: src/cryptsetup.c:1378 +#, fuzzy +msgid "Reduced data offset is allowed only for detached LUKS header." +msgstr "Смањени померај података је допуштен само за откачена ЛУКС заглавља.\n" + +#: src/cryptsetup.c:1389 src/cryptsetup.c:1700 +msgid "Cannot determine volume key size for LUKS without keyslots, please use --key-size option." +msgstr "" + +#: src/cryptsetup.c:1427 +msgid "Device activated but cannot make flags persistent." +msgstr "" + +#: src/cryptsetup.c:1508 src/cryptsetup.c:1578 +#, fuzzy, c-format +msgid "Keyslot %d is selected for deletion." +msgstr "Исек кључа „%d“ је изабран за брисање.\n" + +#: src/cryptsetup.c:1520 src/cryptsetup.c:1581 +msgid "This is the last keyslot. Device will become unusable after purging this key." +msgstr "Ово је последњи исек кључа. Уређај ће постати неупотребљив након чишћења овог кључа." + +#: src/cryptsetup.c:1521 +msgid "Enter any remaining passphrase: " +msgstr "Унесите неку преосталу пропусну реч: " + +#: src/cryptsetup.c:1522 src/cryptsetup.c:1583 +msgid "Operation aborted, the keyslot was NOT wiped.\n" +msgstr "" + +#: src/cryptsetup.c:1560 +msgid "Enter passphrase to be deleted: " +msgstr "Унесите пропусну реч за брисање: " + +#: src/cryptsetup.c:1641 src/cryptsetup.c:1715 src/cryptsetup.c:1749 +msgid "Enter new passphrase for key slot: " +msgstr "Унесите нову пропусну реч за исек кључа: " + +#: src/cryptsetup.c:1732 src/cryptsetup_reencrypt.c:1327 +#, c-format +msgid "Enter any existing passphrase: " +msgstr "Унесите неку постојећу пропусну реч: " + +#: src/cryptsetup.c:1800 +msgid "Enter passphrase to be changed: " +msgstr "Унесите пропусну реч за мењање: " + +#: src/cryptsetup.c:1816 src/cryptsetup_reencrypt.c:1313 +msgid "Enter new passphrase: " +msgstr "Унесите нову пропусну реч: " + +#: src/cryptsetup.c:1866 +#, fuzzy +msgid "Enter passphrase for keyslot to be converted: " +msgstr "Унесите пропусну реч за исек кључа %u: " + +#: src/cryptsetup.c:1890 +#, fuzzy +msgid "Only one device argument for isLuks operation is supported." +msgstr "Подржан је само један аргумент уређаја за радњу „isLuks“.\n" + +#: src/cryptsetup.c:2074 src/cryptsetup.c:2095 +#, fuzzy +msgid "Option --header-backup-file is required." +msgstr "Захтевана је опција „--header-backup-file“.\n" + +#: src/cryptsetup.c:2125 +#, c-format +msgid "%s is not cryptsetup managed device." +msgstr "" + +#: src/cryptsetup.c:2136 +#, fuzzy, c-format +msgid "Refresh is not supported for device type %s" +msgstr "Настављање није подржано за уређај „%s“.\n" + +#: src/cryptsetup.c:2174 +#, fuzzy, c-format +msgid "Unrecognized metadata device type %s." +msgstr "Непозната врста уређаја метаподатака „%s“.\n" + +#: src/cryptsetup.c:2177 +#, fuzzy +msgid "Command requires device and mapped name as arguments." +msgstr "Наредба захтева уређај и мапирани назив као аргумент.\n" + +#: src/cryptsetup.c:2199 +#, c-format +msgid "" +"This operation will erase all keyslots on device %s.\n" +"Device will become unusable after this operation." +msgstr "" +"Ова радња ће обрисати све исеке кључева на уређају „%s“.\n" +"Уређај ће постати неупотребљив након ове радње." + +#: src/cryptsetup.c:2206 +msgid "Operation aborted, keyslots were NOT wiped.\n" +msgstr "" + +#: src/cryptsetup.c:2243 +msgid "Invalid LUKS type, only luks1 and luks2 are supported." +msgstr "" + +#: src/cryptsetup.c:2261 +#, fuzzy, c-format +msgid "Device is already %s type." +msgstr "Уређај „%s“ већ постоји.\n" + +#: src/cryptsetup.c:2266 +#, fuzzy, c-format +msgid "This operation will convert %s to %s format.\n" +msgstr "Ова радња није подржана за криптографски уређај „%s“.\n" + +#: src/cryptsetup.c:2272 +msgid "Operation aborted, device was NOT converted.\n" +msgstr "" + +#: src/cryptsetup.c:2312 +msgid "Option --priority, --label or --subsystem is missing." +msgstr "" + +#: src/cryptsetup.c:2346 src/cryptsetup.c:2379 src/cryptsetup.c:2402 +#, fuzzy, c-format +msgid "Token %d is invalid." +msgstr "Исек кључа „%d“ није исправан.\n" + +#: src/cryptsetup.c:2349 src/cryptsetup.c:2405 +#, c-format +msgid "Token %d in use." +msgstr "" + +#: src/cryptsetup.c:2356 +#, c-format +msgid "Failed to add luks2-keyring token %d." +msgstr "" + +#: src/cryptsetup.c:2365 src/cryptsetup.c:2427 +#, fuzzy, c-format +msgid "Failed to assign token %d to keyslot %d." +msgstr "Нисам успео да разменим нови исек кључа.\n" + +#: src/cryptsetup.c:2382 +#, fuzzy, c-format +msgid "Token %d is not in use." +msgstr "Исек кључа „%d“ није у употреби.\n" + +#: src/cryptsetup.c:2417 +#, fuzzy +msgid "Failed to import token from file." +msgstr "Нисам успео да отворим датотеку кључа.\n" + +#: src/cryptsetup.c:2442 +#, fuzzy, c-format +msgid "Failed to get token %d for export." +msgstr "Нисам успео да отворим датотеку кључа.\n" + +#: src/cryptsetup.c:2457 +msgid "--key-description parameter is mandatory for token add action." +msgstr "" + +#: src/cryptsetup.c:2463 src/cryptsetup.c:2471 +msgid "Action requires specific token. Use --token-id parameter." +msgstr "" + +#: src/cryptsetup.c:2476 +#, fuzzy, c-format +msgid "Invalid token operation %s." +msgstr "Неисправан уређај „%s“.\n" + +#: src/cryptsetup.c:2531 +#, c-format +msgid "Auto-detected active dm device '%s' for data device %s.\n" +msgstr "" + +#: src/cryptsetup.c:2535 +#, fuzzy, c-format +msgid "Device %s is not a block device.\n" +msgstr "Уређај „%s“ није исправан ЛУКС уређај.\n" + +#: src/cryptsetup.c:2537 +#, c-format +msgid "Failed to auto-detect device %s holders." +msgstr "" + +#: src/cryptsetup.c:2539 +#, 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 "" + +#: src/cryptsetup.c:2619 +#, fuzzy +msgid "Invalid LUKS device type." +msgstr "Неисправан уређај „%s“.\n" + +#: src/cryptsetup.c:2624 +msgid "Encryption without detached header (--header) is not possible without data device size reduction (--reduce-device-size)." +msgstr "" + +#: src/cryptsetup.c:2629 +msgid "Requested data offset must be less than or equal to half of --reduce-device-size parameter." +msgstr "" + +#: src/cryptsetup.c:2638 +#, c-format +msgid "Adjusting --reduce-device-size value to twice the --offset % (sectors).\n" +msgstr "" + +#: src/cryptsetup.c:2642 +#, fuzzy +msgid "Encryption is supported only for LUKS2 format." +msgstr "Ова радња је подржана само за ЛУКС уређај.\n" + +#: src/cryptsetup.c:2664 +#, c-format +msgid "Detected LUKS device on %s. Do you want to encrypt that LUKS device again?" +msgstr "" + +#: src/cryptsetup.c:2679 +#, fuzzy, c-format +msgid "Temporary header file %s already exists. Aborting." +msgstr "Затражена датотека резерве заглавља „%s“ већ постоји.\n" + +#: src/cryptsetup.c:2681 src/cryptsetup.c:2688 +#, fuzzy, c-format +msgid "Cannot create temporary header file %s." +msgstr "Не могу да направим резервну датотеку заглавља „%s“.\n" + +#: src/cryptsetup.c:2752 +#, c-format +msgid "%s/%s is now active and ready for online encryption." +msgstr "" + +#: src/cryptsetup.c:2919 src/cryptsetup.c:2925 +#, fuzzy +msgid "Not enough free keyslots for reencryption." +msgstr "Не мења кључ, нема поновног шифровања области података." + +#: src/cryptsetup.c:2945 src/cryptsetup_reencrypt.c:1284 +#, fuzzy +msgid "Key file can be used only with --key-slot or with exactly one key slot active." +msgstr "Датотека кључа може бити коришћена само са „--key-slot“ или са тачно једним радним исеком кључа.\n" + +#: src/cryptsetup.c:2954 src/cryptsetup_reencrypt.c:1325 +#: src/cryptsetup_reencrypt.c:1336 +#, fuzzy, c-format +msgid "Enter passphrase for key slot %d: " +msgstr "Унесите пропусну реч за исек кључа %u: " + +#: src/cryptsetup.c:2962 +#, c-format +msgid "Enter passphrase for key slot %u: " +msgstr "Унесите пропусну реч за исек кључа %u: " + +#: src/cryptsetup.c:3129 +#, fuzzy +msgid "Command requires device as argument." +msgstr "Наредба захтева уређај и мапирани назив као аргумент.\n" + +#: src/cryptsetup.c:3151 +msgid "Only LUKS2 format is currently supported. Please use cryptsetup-reencrypt tool for LUKS1." +msgstr "" + +#: src/cryptsetup.c:3163 +msgid "Legacy offline reencryption already in-progress. Use cryptsetup-reencrypt utility." +msgstr "" + +#: src/cryptsetup.c:3173 src/cryptsetup_reencrypt.c:178 +msgid "Reencryption of device with integrity profile is not supported." +msgstr "" + +#: src/cryptsetup.c:3181 +msgid "LUKS2 reencryption already initialized. Aborting operation." +msgstr "" + +#: src/cryptsetup.c:3185 +#, fuzzy +msgid "LUKS2 device is not in reencryption." +msgstr "Датотека дневника „%s“ постоји, настављам поновно шифровање.\n" + +#: src/cryptsetup.c:3212 +msgid " [--type ] []" +msgstr "<уређај> [--type <врста>] [<назив>]" + +#: src/cryptsetup.c:3212 src/veritysetup.c:358 src/integritysetup.c:470 +#, fuzzy +msgid "open device as " +msgstr "отвара уређај као <назив> мапирања" + +#: src/cryptsetup.c:3213 src/cryptsetup.c:3214 src/cryptsetup.c:3215 +#: src/veritysetup.c:359 src/veritysetup.c:360 src/integritysetup.c:471 +#: src/integritysetup.c:472 +msgid "" +msgstr "<назив>" + +#: src/cryptsetup.c:3213 src/veritysetup.c:359 src/integritysetup.c:471 +msgid "close device (remove mapping)" +msgstr "затвара уређај (уклања мапирање)" + +#: src/cryptsetup.c:3214 +msgid "resize active device" +msgstr "мења величину радног уређаја" + +#: src/cryptsetup.c:3215 +msgid "show device status" +msgstr "показује стање уређаја" + +#: src/cryptsetup.c:3216 +msgid "[--cipher ]" +msgstr "[--cipher <шифрер>]" + +#: src/cryptsetup.c:3216 +msgid "benchmark cipher" +msgstr "шифрер оцењивања" + +#: src/cryptsetup.c:3217 src/cryptsetup.c:3218 src/cryptsetup.c:3219 +#: src/cryptsetup.c:3220 src/cryptsetup.c:3221 src/cryptsetup.c:3228 +#: src/cryptsetup.c:3229 src/cryptsetup.c:3230 src/cryptsetup.c:3231 +#: src/cryptsetup.c:3232 src/cryptsetup.c:3233 src/cryptsetup.c:3234 +#: src/cryptsetup.c:3235 +msgid "" +msgstr "<уређај>" + +#: src/cryptsetup.c:3217 +msgid "try to repair on-disk metadata" +msgstr "покушава да поправи метаподатке на-диску" + +#: src/cryptsetup.c:3218 +#, fuzzy +msgid "reencrypt LUKS2 device" +msgstr "додаје кључ у ЛУКС уређај" + +#: src/cryptsetup.c:3219 +msgid "erase all keyslots (remove encryption key)" +msgstr "брише све исеке кључева (уклања кључ шифровања)" + +#: src/cryptsetup.c:3220 +msgid "convert LUKS from/to LUKS2 format" +msgstr "" + +#: src/cryptsetup.c:3221 +msgid "set permanent configuration options for LUKS2" +msgstr "" + +#: src/cryptsetup.c:3222 src/cryptsetup.c:3223 +msgid " []" +msgstr "<уређај> [<нова датотека кључа>]" + +#: src/cryptsetup.c:3222 +msgid "formats a LUKS device" +msgstr "форматира ЛУКС уређај" + +#: src/cryptsetup.c:3223 +msgid "add key to LUKS device" +msgstr "додаје кључ у ЛУКС уређај" + +#: src/cryptsetup.c:3224 src/cryptsetup.c:3225 src/cryptsetup.c:3226 +msgid " []" +msgstr "<уређај> [<датотека кључа>]" + +#: src/cryptsetup.c:3224 +msgid "removes supplied key or key file from LUKS device" +msgstr "уклања достављени кључ или датотеку кључа из ЛУКС уређаја" + +#: src/cryptsetup.c:3225 +msgid "changes supplied key or key file of LUKS device" +msgstr "мења достављени кључ или датотеку кључа ЛУКС уређаја" + +#: src/cryptsetup.c:3226 +msgid "converts a key to new pbkdf parameters" +msgstr "" + +#: src/cryptsetup.c:3227 +msgid " " +msgstr "<уређај> <исек кључа>" + +#: src/cryptsetup.c:3227 +msgid "wipes key with number from LUKS device" +msgstr "брише кључ са бројем <исека кључа> са ЛУКС уређаја" + +#: src/cryptsetup.c:3228 +msgid "print UUID of LUKS device" +msgstr "исписује УЈИБ ЛУКС уређаја" + +#: src/cryptsetup.c:3229 +msgid "tests for LUKS partition header" +msgstr "испробава <уређај> за заглављем ЛУКС партиције" + +#: src/cryptsetup.c:3230 +msgid "dump LUKS partition information" +msgstr "исписује податке ЛУКС партиције" + +#: src/cryptsetup.c:3231 +msgid "dump TCRYPT device information" +msgstr "исписује податке ТКРИПТ уређаја" + +#: src/cryptsetup.c:3232 +#, fuzzy +msgid "Suspend LUKS device and wipe key (all IOs are frozen)" +msgstr "Обуставља ЛУКС уређај и брише кључ (сви УИ су замрзнути)." + +#: src/cryptsetup.c:3233 +#, fuzzy +msgid "Resume suspended LUKS device" +msgstr "Наставља са обустављеним ЛУКС уређајем." + +#: src/cryptsetup.c:3234 +msgid "Backup LUKS device header and keyslots" +msgstr "Прави резерву заглавља „LUKS“ уређаја и исека кључева" + +#: src/cryptsetup.c:3235 +msgid "Restore LUKS device header and keyslots" +msgstr "Враћа заглавље „LUKS“ уређаја и исеке кључева" + +#: src/cryptsetup.c:3236 +msgid " " +msgstr "" + +#: src/cryptsetup.c:3236 +msgid "Manipulate LUKS2 tokens" +msgstr "" + +#: src/cryptsetup.c:3254 src/veritysetup.c:376 src/integritysetup.c:488 +msgid "" +"\n" +" is one of:\n" +msgstr "" +"\n" +"<радња> је једна од следећих:\n" + +#: src/cryptsetup.c:3260 +msgid "" +"\n" +"You can also use old syntax aliases:\n" +"\topen: create (plainOpen), luksOpen, loopaesOpen, tcryptOpen\n" +"\tclose: remove (plainClose), luksClose, loopaesClose, tcryptClose\n" +msgstr "" +"\n" +"Можете такође да користите старе надимке синтаксе <радње>:\n" +"\topen: create (plainOpen), luksOpen, loopaesOpen, tcryptOpen\n" +"\tclose: remove (plainClose), luksClose, loopaesClose, tcryptClose\n" + +#: src/cryptsetup.c:3264 +#, c-format +msgid "" +"\n" +" is the device to create under %s\n" +" is the encrypted device\n" +" is the LUKS key slot number to modify\n" +" optional key file for the new key for luksAddKey action\n" +msgstr "" +"\n" +"<назив> је уређај за стварање под „%s“\n" +"<уређај> је шифровани уређај\n" +"<исек кључа> је број „LUKS“ исека кључа за мењање\n" +"<датотека кључа> изборна датотека кључа за нови кључ за радњу „luksAddKey“\n" + +#: src/cryptsetup.c:3271 +#, c-format +msgid "" +"\n" +"Default compiled-in metadata format is %s (for luksFormat action).\n" +msgstr "" + +#: src/cryptsetup.c:3276 +#, fuzzy, c-format +msgid "" +"\n" +"Default compiled-in key and passphrase parameters:\n" +"\tMaximum keyfile size: %dkB, Maximum interactive passphrase length %d (characters)\n" +"Default PBKDF for LUKS1: %s, iteration time: %d (ms)\n" +"Default PBKDF for LUKS2: %s\n" +"\tIteration time: %d, Memory required: %dkB, Parallel threads: %d\n" +msgstr "" +"\n" +"Основни:\n" +"\tНајвећа величина датотеке кључа: %d kB, Највећа дужина међудејствене лозинке %d (знакова)\n" +"Основно време ПБКДФ2 понављања за ЛУКС: %d (ms)\n" + +#: src/cryptsetup.c:3287 +#, fuzzy, c-format +msgid "" +"\n" +"Default compiled-in device cipher parameters:\n" +"\tloop-AES: %s, Key %d bits\n" +"\tplain: %s, Key: %d bits, Password hashing: %s\n" +"\tLUKS: %s, Key: %d bits, LUKS header hashing: %s, RNG: %s\n" +msgstr "" +"\n" +"Основни преведени параметри шифрера уређаја:\n" +"\tпетља-АЕС: %s, Кључ %d бита\n" +"\tобично: %s, Кључ: %d бита, Хеширање лозинке: %s\n" +"\tЛУКС1: %s, Кључ: %d бита, Хеширање ЛУКС заглавља: %s, РНГ: %s\n" + +#: src/cryptsetup.c:3296 +msgid "\tLUKS: Default keysize with XTS mode (two internal keys) will be doubled.\n" +msgstr "" + +#: src/cryptsetup.c:3312 src/veritysetup.c:532 src/integritysetup.c:630 +#, c-format +msgid "%s: requires %s as arguments" +msgstr "%s: захтева „%s“ као аргумент" + +#: src/cryptsetup.c:3350 src/veritysetup.c:421 src/integritysetup.c:527 +#: src/cryptsetup_reencrypt.c:1591 +msgid "Show this help message" +msgstr "Приказује ову поруку помоћи" + +#: src/cryptsetup.c:3351 src/veritysetup.c:422 src/integritysetup.c:528 +#: src/cryptsetup_reencrypt.c:1592 +msgid "Display brief usage" +msgstr "Прикажите кратку поруку о коришћењу" + +#: src/cryptsetup.c:3352 src/veritysetup.c:423 src/integritysetup.c:529 +#: src/cryptsetup_reencrypt.c:1593 +msgid "Print package version" +msgstr "Исписује издање пакета" + +#: src/cryptsetup.c:3356 src/veritysetup.c:427 src/integritysetup.c:533 +#: src/cryptsetup_reencrypt.c:1597 +msgid "Help options:" +msgstr "Опције помоћи:" + +#: src/cryptsetup.c:3357 src/veritysetup.c:428 src/integritysetup.c:534 +#: src/cryptsetup_reencrypt.c:1598 +msgid "Shows more detailed error messages" +msgstr "Приказује опширније поруке о грешкама" + +#: src/cryptsetup.c:3358 src/veritysetup.c:429 src/integritysetup.c:535 +#: src/cryptsetup_reencrypt.c:1599 +msgid "Show debug messages" +msgstr "Приказује поруке прочишћавања" + +#: src/cryptsetup.c:3359 +#, fuzzy +msgid "Show debug messages including JSON metadata" +msgstr "Приказује поруке прочишћавања" + +#: src/cryptsetup.c:3360 src/cryptsetup_reencrypt.c:1601 +msgid "The cipher used to encrypt the disk (see /proc/crypto)" +msgstr "Шифрер коришћен за шифровање диска (видите „/proc/crypto“)" + +#: src/cryptsetup.c:3361 src/cryptsetup_reencrypt.c:1603 +msgid "The hash used to create the encryption key from the passphrase" +msgstr "Хеш коришћен за стварање кључа шифровања из лозинке" + +#: src/cryptsetup.c:3362 +msgid "Verifies the passphrase by asking for it twice" +msgstr "Проверава лозинку тражећи је два пута" + +#: src/cryptsetup.c:3363 src/cryptsetup_reencrypt.c:1605 +#, fuzzy +msgid "Read the key from a file" +msgstr "Чита кључ из датотеке." + +#: src/cryptsetup.c:3364 +msgid "Read the volume (master) key from file." +msgstr "Чита (главни) кључ вочумена из датотеке." + +#: src/cryptsetup.c:3365 +#, fuzzy +msgid "Dump volume (master) key instead of keyslots info" +msgstr "Даје (главни) кључ волумена уместо података исека кључева." + +#: src/cryptsetup.c:3366 src/cryptsetup_reencrypt.c:1602 +msgid "The size of the encryption key" +msgstr "Величина кључа шифровања" + +#: src/cryptsetup.c:3366 src/cryptsetup.c:3425 src/integritysetup.c:553 +#: src/integritysetup.c:557 src/integritysetup.c:561 +#: src/cryptsetup_reencrypt.c:1602 +msgid "BITS" +msgstr "БИТА" + +#: src/cryptsetup.c:3367 src/cryptsetup_reencrypt.c:1618 +msgid "Limits the read from keyfile" +msgstr "Ограничава читање из датотеке кључа" + +#: src/cryptsetup.c:3367 src/cryptsetup.c:3368 src/cryptsetup.c:3369 +#: src/cryptsetup.c:3370 src/cryptsetup.c:3373 src/cryptsetup.c:3422 +#: src/cryptsetup.c:3423 src/cryptsetup.c:3431 src/cryptsetup.c:3432 +#: src/veritysetup.c:432 src/veritysetup.c:433 src/veritysetup.c:434 +#: src/veritysetup.c:437 src/veritysetup.c:438 src/integritysetup.c:542 +#: src/integritysetup.c:548 src/integritysetup.c:549 +#: src/cryptsetup_reencrypt.c:1617 src/cryptsetup_reencrypt.c:1618 +#: src/cryptsetup_reencrypt.c:1619 src/cryptsetup_reencrypt.c:1620 +msgid "bytes" +msgstr "бајта" + +#: src/cryptsetup.c:3368 src/cryptsetup_reencrypt.c:1617 +msgid "Number of bytes to skip in keyfile" +msgstr "Број бајтова за прескакање у датотеци кључа" + +#: src/cryptsetup.c:3369 +msgid "Limits the read from newly added keyfile" +msgstr "Ограничава читање из новододате датотеке кључа" + +#: src/cryptsetup.c:3370 +msgid "Number of bytes to skip in newly added keyfile" +msgstr "Број бајтова за прескакање у новододатој датотеци кључа" + +#: src/cryptsetup.c:3371 +msgid "Slot number for new key (default is first free)" +msgstr "Број исека за нови кључ (основно је први слободан)" + +#: src/cryptsetup.c:3372 +msgid "The size of the device" +msgstr "Величина уређаја" + +#: src/cryptsetup.c:3372 src/cryptsetup.c:3374 src/cryptsetup.c:3375 +#: src/cryptsetup.c:3381 src/integritysetup.c:543 src/integritysetup.c:550 +msgid "SECTORS" +msgstr "ОДЕЉЦИ" + +#: src/cryptsetup.c:3373 src/cryptsetup_reencrypt.c:1620 +msgid "Use only specified device size (ignore rest of device). DANGEROUS!" +msgstr "Користи само наведену величину уређаја (занемарује остатак уређаја). ОВО ЈЕ ОПСАНО!" + +#: src/cryptsetup.c:3374 +msgid "The start offset in the backend device" +msgstr "Почетни померај у позадинском уређају" + +#: src/cryptsetup.c:3375 +msgid "How many sectors of the encrypted data to skip at the beginning" +msgstr "Број одељака шифрованих података за прескакање на почетку" + +#: src/cryptsetup.c:3376 +msgid "Create a readonly mapping" +msgstr "Прави мапирање само за читање" + +#: src/cryptsetup.c:3377 src/integritysetup.c:536 +#: src/cryptsetup_reencrypt.c:1608 +msgid "Do not ask for confirmation" +msgstr "Не тражи потврђивање" + +#: src/cryptsetup.c:3378 +msgid "Timeout for interactive passphrase prompt (in seconds)" +msgstr "Време за упит међудејствене лозинке (у секундама)" + +#: src/cryptsetup.c:3378 src/cryptsetup.c:3379 src/integritysetup.c:537 +#: src/cryptsetup_reencrypt.c:1609 +msgid "secs" +msgstr "секунде" + +#: src/cryptsetup.c:3379 src/integritysetup.c:537 +#: src/cryptsetup_reencrypt.c:1609 +msgid "Progress line update (in seconds)" +msgstr "" + +#: src/cryptsetup.c:3380 src/cryptsetup_reencrypt.c:1610 +msgid "How often the input of the passphrase can be retried" +msgstr "Колико често унос лозинке може бити покушан" + +#: src/cryptsetup.c:3381 +msgid "Align payload at sector boundaries - for luksFormat" +msgstr "Поравнава утовар на границе одељка — за „luksFormat“" + +#: src/cryptsetup.c:3382 +#, fuzzy +msgid "File with LUKS header and keyslots backup" +msgstr "Датотека са резервом „LUKS“ заглавља и исецима кључева." + +#: src/cryptsetup.c:3383 src/cryptsetup_reencrypt.c:1611 +#, fuzzy +msgid "Use /dev/random for generating volume key" +msgstr "Користи „/dev/random“ за стварање кључа волумена." + +#: src/cryptsetup.c:3384 src/cryptsetup_reencrypt.c:1612 +#, fuzzy +msgid "Use /dev/urandom for generating volume key" +msgstr "Користи „/dev/urandom“ за стварање кључа волумена." + +#: src/cryptsetup.c:3385 +#, fuzzy +msgid "Share device with another non-overlapping crypt segment" +msgstr "Дели уређај са другим не-преклапајућим подеоком шифрера." + +#: src/cryptsetup.c:3386 src/veritysetup.c:441 +#, fuzzy +msgid "UUID for device to use" +msgstr "УЈИБ уређаја за коришћење." + +#: src/cryptsetup.c:3387 +#, fuzzy +msgid "Allow discards (aka TRIM) requests for device" +msgstr "Допушта одбацивања (тј. СКРАЋЕЊЕ) захтева за уређај." + +#: src/cryptsetup.c:3388 src/cryptsetup_reencrypt.c:1629 +#, fuzzy +msgid "Device or file with separated LUKS header" +msgstr "Уређај или датотека са одвојеним ЛУКС заглављем." + +#: src/cryptsetup.c:3389 +#, fuzzy +msgid "Do not activate device, just check passphrase" +msgstr "Не покреће уређај, само проверава лозинку." + +#: src/cryptsetup.c:3390 +#, fuzzy +msgid "Use hidden header (hidden TCRYPT device)" +msgstr "Користи скривено заглавље (скривени ТКРИПТ уређај)." + +#: src/cryptsetup.c:3391 +#, fuzzy +msgid "Device is system TCRYPT drive (with bootloader)" +msgstr "Уређај је ТКРИПТ диск система (са подизачем система)." + +#: src/cryptsetup.c:3392 +#, fuzzy +msgid "Use backup (secondary) TCRYPT header" +msgstr "Користи резервно (другоразредно) ТКРИПТ заглавље." + +#: src/cryptsetup.c:3393 +#, fuzzy +msgid "Scan also for VeraCrypt compatible device" +msgstr "Такође обавља преглед за уређајима сагласним са Веракриптом." + +#: src/cryptsetup.c:3394 +#, fuzzy +msgid "Personal Iteration Multiplier for VeraCrypt compatible device" +msgstr "Такође обавља преглед за уређајима сагласним са Веракриптом." + +#: src/cryptsetup.c:3395 +#, fuzzy +msgid "Query Personal Iteration Multiplier for VeraCrypt compatible device" +msgstr "Такође обавља преглед за уређајима сагласним са Веракриптом." + +#: src/cryptsetup.c:3396 +#, fuzzy +msgid "Type of device metadata: luks, luks1, luks2, plain, loopaes, tcrypt" +msgstr "Врста метаподатака уређаја: luks, plain, loopaes, tcrypt." + +#: src/cryptsetup.c:3397 +#, fuzzy +msgid "Disable password quality check (if enabled)" +msgstr "Искључује проверу квалитета лозинке (ако је укључена)." + +#: src/cryptsetup.c:3398 +#, fuzzy +msgid "Use dm-crypt same_cpu_crypt performance compatibility option" +msgstr "Користи опцију сагласности перформансе „same_cpu_crypt“ дм-крипта." + +#: src/cryptsetup.c:3399 +#, fuzzy +msgid "Use dm-crypt submit_from_crypt_cpus performance compatibility option" +msgstr "Користи опцију сагласности перформансе „submit_from_crypt_cpus“ дм-крипта." + +#: src/cryptsetup.c:3400 +msgid "Device removal is deferred until the last user closes it" +msgstr "" + +#: src/cryptsetup.c:3401 +msgid "Use global lock to serialize memory hard PBKDF (OOM workaround)" +msgstr "" + +#: src/cryptsetup.c:3402 +#, fuzzy +msgid "PBKDF iteration time for LUKS (in ms)" +msgstr "Време ПБКДФ2 понављања за ЛУКС (у милисекундама)" + +#: src/cryptsetup.c:3402 src/cryptsetup_reencrypt.c:1607 +msgid "msecs" +msgstr "милисекунде" + +#: src/cryptsetup.c:3403 src/cryptsetup_reencrypt.c:1625 +msgid "PBKDF algorithm (for LUKS2): argon2i, argon2id, pbkdf2" +msgstr "" + +#: src/cryptsetup.c:3404 src/cryptsetup_reencrypt.c:1626 +msgid "PBKDF memory cost limit" +msgstr "" + +#: src/cryptsetup.c:3404 src/cryptsetup_reencrypt.c:1626 +#, fuzzy +msgid "kilobytes" +msgstr "бајта" + +#: src/cryptsetup.c:3405 src/cryptsetup_reencrypt.c:1627 +msgid "PBKDF parallel cost" +msgstr "" + +#: src/cryptsetup.c:3405 src/cryptsetup_reencrypt.c:1627 +msgid "threads" +msgstr "" + +#: src/cryptsetup.c:3406 src/cryptsetup_reencrypt.c:1628 +msgid "PBKDF iterations cost (forced, disables benchmark)" +msgstr "" + +#: src/cryptsetup.c:3407 +msgid "Keyslot priority: ignore, normal, prefer" +msgstr "" + +#: src/cryptsetup.c:3408 +#, fuzzy +msgid "Disable locking of on-disk metadata" +msgstr "покушава да поправи метаподатке на-диску" + +#: src/cryptsetup.c:3409 +msgid "Disable loading volume keys via kernel keyring" +msgstr "" + +#: src/cryptsetup.c:3410 +msgid "Data integrity algorithm (LUKS2 only)" +msgstr "" + +#: src/cryptsetup.c:3411 src/integritysetup.c:564 +msgid "Disable journal for integrity device" +msgstr "" + +#: src/cryptsetup.c:3412 src/integritysetup.c:538 +msgid "Do not wipe device after format" +msgstr "" + +#: src/cryptsetup.c:3413 +msgid "Do not ask for passphrase if activation by token fails" +msgstr "" + +#: src/cryptsetup.c:3414 +msgid "Token number (default: any)" +msgstr "" + +#: src/cryptsetup.c:3415 +msgid "Key description" +msgstr "" + +#: src/cryptsetup.c:3416 +msgid "Encryption sector size (default: 512 bytes)" +msgstr "" + +#: src/cryptsetup.c:3417 +msgid "Set activation flags persistent for device" +msgstr "" + +#: src/cryptsetup.c:3418 +#, fuzzy +msgid "Set label for the LUKS2 device" +msgstr "форматира ЛУКС уређај" + +#: src/cryptsetup.c:3419 +msgid "Set subsystem label for the LUKS2 device" +msgstr "" + +#: src/cryptsetup.c:3420 +msgid "Create unbound (no assigned data segment) LUKS2 keyslot" +msgstr "" + +#: src/cryptsetup.c:3421 +#, fuzzy +msgid "Read or write the json from or to a file" +msgstr "Чита кључ из датотеке." + +#: src/cryptsetup.c:3422 +msgid "LUKS2 header metadata area size" +msgstr "" + +#: src/cryptsetup.c:3423 +#, fuzzy +msgid "LUKS2 header keyslots area size" +msgstr "Датотека са резервом „LUKS“ заглавља и исецима кључева." + +#: src/cryptsetup.c:3424 +msgid "Refresh (reactivate) device with new parameters" +msgstr "" + +#: src/cryptsetup.c:3425 +#, fuzzy +msgid "LUKS2 keyslot: The size of the encryption key" +msgstr "Величина кључа шифровања" + +#: src/cryptsetup.c:3426 +msgid "LUKS2 keyslot: The cipher used for keyslot encryption" +msgstr "" + +#: src/cryptsetup.c:3427 +#, fuzzy +msgid "Encrypt LUKS2 device (in-place encryption)." +msgstr "Трајно дешифрује уређај (уклања шифровање)." + +#: src/cryptsetup.c:3428 +#, fuzzy +msgid "Decrypt LUKS2 device (remove encryption)." +msgstr "Трајно дешифрује уређај (уклања шифровање)." + +#: src/cryptsetup.c:3429 +msgid "Initialize LUKS2 reencryption in metadata only." +msgstr "" + +#: src/cryptsetup.c:3430 +msgid "Resume initialized LUKS2 reencryption only." +msgstr "" + +#: src/cryptsetup.c:3431 src/cryptsetup_reencrypt.c:1619 +msgid "Reduce data device size (move data offset). DANGEROUS!" +msgstr "Смањује величину уређаја података (премешта померај података). ОВО ЈЕ ОПАСНО!" + +#: src/cryptsetup.c:3432 +#, fuzzy +msgid "Maximal reencryption hotzone size." +msgstr "Величина блока поновног шифровања" + +#: src/cryptsetup.c:3433 +msgid "Reencryption hotzone resilience type (checksum,journal,none)" +msgstr "" + +#: src/cryptsetup.c:3434 +#, fuzzy +msgid "Reencryption hotzone checksums hash" +msgstr "Величина блока поновног шифровања" + +#: src/cryptsetup.c:3435 +msgid "Override device autodetection of dm device to be reencrypted" +msgstr "" + +#: src/cryptsetup.c:3451 src/veritysetup.c:462 src/integritysetup.c:583 +msgid "[OPTION...] " +msgstr "[ОПЦИЈА...] <радња> <посебност-радње>" + +#: src/cryptsetup.c:3502 src/veritysetup.c:496 src/integritysetup.c:594 +msgid "Argument missing." +msgstr "Недостаје аргумент <радња>." + +#: src/cryptsetup.c:3565 src/veritysetup.c:527 src/integritysetup.c:625 +msgid "Unknown action." +msgstr "Непозната радња." + +#: src/cryptsetup.c:3575 +msgid "Parameter --refresh is only allowed with open or refresh commands.\n" +msgstr "" + +#: src/cryptsetup.c:3580 +msgid "Options --refresh and --test-passphrase are mutually exclusive.\n" +msgstr "" + +#: src/cryptsetup.c:3585 +#, fuzzy +msgid "Option --deferred is allowed only for close command.\n" +msgstr "Опција „--shared“ је допуштена само за отварање обичног уређаја.\n" + +#: src/cryptsetup.c:3590 +msgid "Option --shared is allowed only for open of plain device.\n" +msgstr "Опција „--shared“ је допуштена само за отварање обичног уређаја.\n" + +#: src/cryptsetup.c:3595 +msgid "Option --allow-discards is allowed only for open operation.\n" +msgstr "Опција „--allow-discards“ је допуштена само за радњу отварања.\n" + +#: src/cryptsetup.c:3600 +#, fuzzy +msgid "Option --persistent is allowed only for open operation.\n" +msgstr "Опција „--allow-discards“ је допуштена само за радњу отварања.\n" + +#: src/cryptsetup.c:3605 +#, fuzzy +msgid "Option --serialize-memory-hard-pbkdf is allowed only for open operation.\n" +msgstr "Опција „--allow-discards“ је допуштена само за радњу отварања.\n" + +#: src/cryptsetup.c:3610 +msgid "Option --persistent is not allowed with --test-passphrase.\n" +msgstr "" + +#: src/cryptsetup.c:3620 +#, fuzzy +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 "" +"Опција „--key-size“ је допуштена само за „luksFormat“, отварање и оцењивање.\n" +"Да ограничите читање из датотеке кључа користите „--keyfile-size=(бајтова)." + +#: src/cryptsetup.c:3626 +#, fuzzy +msgid "Option --integrity is allowed only for luksFormat (LUKS2).\n" +msgstr "Опција „--align-payload“ је допуштена само за „luksFormat“." + +#: src/cryptsetup.c:3631 +msgid "Option --integrity-no-wipe can be used only for format action with integrity extension.\n" +msgstr "" + +#: src/cryptsetup.c:3637 +#, fuzzy +msgid "Options --label and --subsystem are allowed only for luksFormat and config LUKS2 operations.\n" +msgstr "Опција „--uuid“ је допуштена само за „luksFormat“ и „luksUUID“." + +#: src/cryptsetup.c:3643 +msgid "Option --test-passphrase is allowed only for open of LUKS and TCRYPT devices.\n" +msgstr "Опција „--test-passphrase“ је допуштена само за отварање ЛУКС и ТКРИПТ уређаје.\n" + +#: src/cryptsetup.c:3648 src/cryptsetup_reencrypt.c:1692 +msgid "Key size must be a multiple of 8 bits" +msgstr "Величина кључа мора бити умножак од 8 бита" + +#: src/cryptsetup.c:3654 src/cryptsetup_reencrypt.c:1378 +#: src/cryptsetup_reencrypt.c:1697 +msgid "Key slot is invalid." +msgstr "Исек кључа није исправан." + +#: src/cryptsetup.c:3661 +#, fuzzy +msgid "Option --key-file takes precedence over specified key file argument." +msgstr "Опција „--key-file“ има првенство над наведеним аргументом датотеке кључа.\n" + +#: src/cryptsetup.c:3668 src/veritysetup.c:539 src/integritysetup.c:649 +#: src/cryptsetup_reencrypt.c:1671 +msgid "Negative number for option not permitted." +msgstr "Негативан број за опцију није допуштен." + +#: src/cryptsetup.c:3672 +msgid "Only one --key-file argument is allowed." +msgstr "Дозвољен је само један аргумент „--key-file“." + +#: src/cryptsetup.c:3676 src/cryptsetup_reencrypt.c:1663 +#: src/cryptsetup_reencrypt.c:1701 +msgid "Only one of --use-[u]random options is allowed." +msgstr "Дозвољена је само једна опција „--use-[u]random“." + +#: src/cryptsetup.c:3680 +msgid "Option --use-[u]random is allowed only for luksFormat." +msgstr "Опција „--use-[u]random“ је допуштена само за „luksFormat“." + +#: src/cryptsetup.c:3684 +msgid "Option --uuid is allowed only for luksFormat and luksUUID." +msgstr "Опција „--uuid“ је допуштена само за „luksFormat“ и „luksUUID“." + +#: src/cryptsetup.c:3688 +msgid "Option --align-payload is allowed only for luksFormat." +msgstr "Опција „--align-payload“ је допуштена само за „luksFormat“." + +#: src/cryptsetup.c:3692 +msgid "Options --luks2-metadata-size and --opt-luks2-keyslots-size are allowed only for luksFormat with LUKS2." +msgstr "" + +#: src/cryptsetup.c:3697 +#, fuzzy +msgid "Invalid LUKS2 metadata size specification." +msgstr "Неисправна одредба величине уређаја." + +#: src/cryptsetup.c:3701 +#, fuzzy +msgid "Invalid LUKS2 keyslots size specification." +msgstr "Неисправна одредба величине уређаја." + +#: src/cryptsetup.c:3705 +#, fuzzy +msgid "Options --align-payload and --offset cannot be combined." +msgstr "Опција „--align-payload“ је допуштена само за „luksFormat“." + +#: src/cryptsetup.c:3711 +msgid "Option --skip is supported only for open of plain and loopaes devices.\n" +msgstr "Опција „--skip“ је подржана само за отварање обичних и упетљаних уређаја.\n" + +#: src/cryptsetup.c:3718 +#, fuzzy +msgid "Option --offset is supported only for open of plain and loopaes devices, luksFormat and device reencryption.\n" +msgstr "Опција „--offset“ је подржана само за отварање обичних и упетљаних уређаја.\n" + +#: src/cryptsetup.c:3724 +msgid "Option --tcrypt-hidden, --tcrypt-system or --tcrypt-backup is supported only for TCRYPT device.\n" +msgstr "Опција „--tcrypt-hidden“, „--tcrypt-system“ или „--tcrypt-backup“ је подржана само за ТКРИПТ уређај.\n" + +#: src/cryptsetup.c:3729 +msgid "Option --tcrypt-hidden cannot be combined with --allow-discards.\n" +msgstr "Опција „--tcrypt-hidden“ не може бити обједињена са „--allow-discards“.\n" + +#: src/cryptsetup.c:3734 +msgid "Option --veracrypt is supported only for TCRYPT device type.\n" +msgstr "Опција „--veracrypt“ је подржана само за ТКРИПТ уређај.\n" + +#: src/cryptsetup.c:3740 +msgid "Invalid argument for parameter --veracrypt-pim supplied.\n" +msgstr "" + +#: src/cryptsetup.c:3744 +#, fuzzy +msgid "Option --veracrypt-pim is supported only for VeraCrypt compatible devices.\n" +msgstr "Опција „--veracrypt“ је подржана само за ТКРИПТ уређај.\n" + +#: src/cryptsetup.c:3752 +#, fuzzy +msgid "Option --veracrypt-query-pim is supported only for VeraCrypt compatible devices.\n" +msgstr "Опција „--veracrypt“ је подржана само за ТКРИПТ уређај.\n" + +#: src/cryptsetup.c:3756 +msgid "The options --veracrypt-pim and --veracrypt-query-pim are mutually exclusive.\n" +msgstr "" + +#: src/cryptsetup.c:3763 +msgid "Option --priority can be only ignore/normal/prefer.\n" +msgstr "" + +#: src/cryptsetup.c:3768 +msgid "Keyslot specification is required.\n" +msgstr "" + +#: src/cryptsetup.c:3773 src/cryptsetup_reencrypt.c:1677 +msgid "Password-based key derivation function (PBKDF) can be only pbkdf2 or argon2i/argon2id.\n" +msgstr "" + +#: src/cryptsetup.c:3778 src/cryptsetup_reencrypt.c:1682 +msgid "PBKDF forced iterations cannot be combined with iteration time option.\n" +msgstr "" + +#: src/cryptsetup.c:3784 +#, fuzzy +msgid "Sector size option is not supported for this command.\n" +msgstr "Ова радња није подржана за ову врсту уређаја.\n" + +#: src/cryptsetup.c:3790 +#, fuzzy +msgid "Unsupported encryption sector size.\n" +msgstr "Не могу да прочитам датотеку дневника поновног шифровања.\n" + +#: src/cryptsetup.c:3795 +msgid "Key size is required with --unbound option.\n" +msgstr "" + +#: src/cryptsetup.c:3800 +#, fuzzy +msgid "Option --unbound may be used only with luksAddKey action.\n" +msgstr "Опција „--new“ не може да се користи са „--decrypt“." + +#: src/cryptsetup.c:3805 +#, fuzzy +msgid "Option --refresh may be used only with open action.\n" +msgstr "Опција „--keep-key“ може да се користи само са „--hash“ или „--iter-time“." + +#: src/cryptsetup.c:3816 +msgid "Cannot disable metadata locking.\n" +msgstr "" + +#: src/cryptsetup.c:3826 +#, fuzzy +msgid "Invalid max reencryption hotzone size specification." +msgstr "Неисправна одредба величине уређаја." + +#: src/cryptsetup.c:3834 src/cryptsetup_reencrypt.c:1706 +#: src/cryptsetup_reencrypt.c:1711 +msgid "Invalid device size specification." +msgstr "Неисправна одредба величине уређаја." + +#: src/cryptsetup.c:3837 +#, fuzzy +msgid "Maximum device reduce size is 1 GiB." +msgstr "Највећа величина смањења уређаја је 64 MiB." + +#: src/cryptsetup.c:3840 src/cryptsetup_reencrypt.c:1717 +msgid "Reduce size must be multiple of 512 bytes sector." +msgstr "Величина смањивања мора бити умножак одељка од 512 бајта." + +#: src/cryptsetup.c:3845 +#, fuzzy +msgid "Invalid data size specification." +msgstr "Неисправна одредба величине уређаја." + +#: src/cryptsetup.c:3850 +#, fuzzy +msgid "Reduce size overflow." +msgstr "Прекорачење помераја уређаја.\n" + +#: src/cryptsetup.c:3854 +msgid "LUKS2 decryption requires option --header." +msgstr "" + +#: src/cryptsetup.c:3858 +#, fuzzy +msgid "Device size must be multiple of 512 bytes sector." +msgstr "Величина смањивања мора бити умножак одељка од 512 бајта." + +#: src/cryptsetup.c:3862 +msgid "Options --reduce-device-size and --data-size cannot be combined." +msgstr "" + +#: src/cryptsetup.c:3866 +msgid "Options --device-size and --size cannot be combined." +msgstr "" + +#: src/veritysetup.c:65 +#, fuzzy +msgid "Invalid salt string specified." +msgstr "Наведена је неисправна ниска присолка.\n" + +#: src/veritysetup.c:96 +#, fuzzy, c-format +msgid "Cannot create hash image %s for writing." +msgstr "Не могу да направим хеш слику „%s“ ради уписа.\n" + +#: src/veritysetup.c:106 +#, fuzzy, c-format +msgid "Cannot create FEC image %s for writing." +msgstr "Не могу да направим хеш слику „%s“ ради уписа.\n" + +#: src/veritysetup.c:176 +#, fuzzy +msgid "Invalid root hash string specified." +msgstr "Наведена је неисправна ниска хеша корена.\n" + +#: src/veritysetup.c:356 +msgid " " +msgstr "<уређај_података> <уређај_хеша>" + +#: src/veritysetup.c:356 src/integritysetup.c:469 +msgid "format device" +msgstr "форматира уређај" + +#: src/veritysetup.c:357 +msgid " " +msgstr "<уређај_података> <уређај_хеша> <хеш_корена>" + +#: src/veritysetup.c:357 +msgid "verify device" +msgstr "проверава уређај" + +#: src/veritysetup.c:358 +#, fuzzy +msgid " " +msgstr "<уређај_података> <уређај_хеша> <хеш_корена>" + +#: src/veritysetup.c:360 src/integritysetup.c:472 +msgid "show active device status" +msgstr "показује стање радног уређаја" + +#: src/veritysetup.c:361 +msgid "" +msgstr "<уређај_хеша>" + +#: src/veritysetup.c:361 src/integritysetup.c:473 +msgid "show on-disk information" +msgstr "приказује податке на-диску" + +#: src/veritysetup.c:380 +#, c-format +msgid "" +"\n" +" is the device to create under %s\n" +" is the data device\n" +" is the device containing verification data\n" +" hash of the root node on \n" +msgstr "" +"\n" +"<назив> јесте уређај за стварање под „%s“\n" +"<уређај_података> јесте уређај података\n" +"<уређај_хеша> јесте уређај који садржи податке проверавања\n" +"<хеш_корена> хеш кореног чвора на <уређају_хеша>\n" + +#: src/veritysetup.c:387 +#, c-format +msgid "" +"\n" +"Default compiled-in dm-verity parameters:\n" +"\tHash: %s, Data block (bytes): %u, Hash block (bytes): %u, Salt size: %u, Hash format: %u\n" +msgstr "" +"\n" +"Основни преведени параметри дм-тачности:\n" +"\tХеш: %s, Блок података (бајта): %u, Блок хеша (бајта): %u, Величина присолка: %u, Запис хеша: %u\n" + +#: src/veritysetup.c:430 +msgid "Do not use verity superblock" +msgstr "Не користи суперблок тачности" + +#: src/veritysetup.c:431 +msgid "Format type (1 - normal, 0 - original Chrome OS)" +msgstr "Врста записа (1 — обично, 0 — изворни Хром ОС)" + +#: src/veritysetup.c:431 +msgid "number" +msgstr "број" + +#: src/veritysetup.c:432 +msgid "Block size on the data device" +msgstr "Величина блока на уређају података" + +#: src/veritysetup.c:433 +msgid "Block size on the hash device" +msgstr "Величина блока на уређају хеша" + +#: src/veritysetup.c:434 +msgid "FEC parity bytes" +msgstr "" + +#: src/veritysetup.c:435 +msgid "The number of blocks in the data file" +msgstr "Број блокова у датотеци података" + +#: src/veritysetup.c:435 +msgid "blocks" +msgstr "блокови" + +#: src/veritysetup.c:436 +msgid "Path to device with error correction data" +msgstr "" + +#: src/veritysetup.c:436 src/integritysetup.c:540 +msgid "path" +msgstr "" + +#: src/veritysetup.c:437 +msgid "Starting offset on the hash device" +msgstr "Почетни померај на уређају хеша" + +#: src/veritysetup.c:438 +#, fuzzy +msgid "Starting offset on the FEC device" +msgstr "Почетни померај на уређају хеша" + +#: src/veritysetup.c:439 +msgid "Hash algorithm" +msgstr "Алгоритам хеша" + +#: src/veritysetup.c:439 +msgid "string" +msgstr "ниска" + +#: src/veritysetup.c:440 +msgid "Salt" +msgstr "Присолак" + +#: src/veritysetup.c:440 +msgid "hex string" +msgstr "ниска хеша" + +#: src/veritysetup.c:442 +msgid "Restart kernel if corruption is detected" +msgstr "Поново покреће језгро ако је откривено оштећење" + +#: src/veritysetup.c:443 +msgid "Ignore corruption, log it only" +msgstr "Занемарује оштећење, само га бележи у дневник" + +#: src/veritysetup.c:444 +msgid "Do not verify zeroed blocks" +msgstr "Не проверава нулиране блокове" + +#: src/veritysetup.c:445 +msgid "Verify data block only the first time it is read" +msgstr "" + +#: src/veritysetup.c:545 +#, fuzzy +msgid "Option --ignore-corruption, --restart-on-corruption or --ignore-zero-blocks is allowed only for open operation.\n" +msgstr "Опција „--ignore-corruption“, „--restart-on-corruption“ или „--ignore-zero-blocks“ су дозвољене само за радње стварања.\n" + +#: src/veritysetup.c:550 +msgid "Option --ignore-corruption and --restart-on-corruption cannot be used together.\n" +msgstr "Опције „--ignore-corruption“ и „--restart-on-corruption“ се не могу користити заједно.\n" + +#: src/integritysetup.c:83 src/utils_password.c:305 +#, fuzzy, c-format +msgid "Cannot read keyfile %s." +msgstr "Не могу да прочитам датотеку кључа „%s“.\n" + +#: src/integritysetup.c:87 src/utils_password.c:310 +#, fuzzy, c-format +msgid "Cannot read %d bytes from keyfile %s." +msgstr "Не могу да прочитам %d бајта из датотеке кључа „%s“.\n" + +#: src/integritysetup.c:250 +#, c-format +msgid "Formatted with tag size %u, internal integrity %s.\n" +msgstr "" + +#: src/integritysetup.c:469 src/integritysetup.c:473 +#, fuzzy +msgid "" +msgstr "проверава уређај" + +#: src/integritysetup.c:470 +msgid " " +msgstr "" + +#: src/integritysetup.c:492 +#, fuzzy, c-format +msgid "" +"\n" +" is the device to create under %s\n" +" is the device containing data with integrity tags\n" +msgstr "" +"\n" +"<назив> јесте уређај за стварање под „%s“\n" +"<уређај_података> јесте уређај података\n" +"<уређај_хеша> јесте уређај који садржи податке проверавања\n" +"<хеш_корена> хеш кореног чвора на <уређају_хеша>\n" + +#: src/integritysetup.c:497 +#, fuzzy, c-format +msgid "" +"\n" +"Default compiled-in dm-integrity parameters:\n" +"\tTag size: %u bytes, Checksum algorithm: %s\n" +msgstr "" +"\n" +"Основни преведени параметри дм-тачности:\n" +"\tХеш: %s, Блок података (бајта): %u, Блок хеша (бајта): %u, Величина присолка: %u, Запис хеша: %u\n" + +#: src/integritysetup.c:540 +msgid "Path to data device (if separated)" +msgstr "" + +#: src/integritysetup.c:542 +msgid "Journal size" +msgstr "" + +#: src/integritysetup.c:543 +msgid "Interleave sectors" +msgstr "" + +#: src/integritysetup.c:544 +msgid "Journal watermark" +msgstr "" + +#: src/integritysetup.c:544 +msgid "percent" +msgstr "" + +#: src/integritysetup.c:545 +msgid "Journal commit time" +msgstr "" + +#: src/integritysetup.c:545 src/integritysetup.c:547 +msgid "ms" +msgstr "" + +#: src/integritysetup.c:546 +msgid "Number of 512-byte sectors per bit (bitmap mode)." +msgstr "" + +#: src/integritysetup.c:547 +msgid "Bitmap mode flush time" +msgstr "" + +#: src/integritysetup.c:548 +msgid "Tag size (per-sector)" +msgstr "" + +#: src/integritysetup.c:549 +msgid "Sector size" +msgstr "" + +#: src/integritysetup.c:550 +msgid "Buffers size" +msgstr "" + +#: src/integritysetup.c:552 +msgid "Data integrity algorithm" +msgstr "" + +#: src/integritysetup.c:553 +#, fuzzy +msgid "The size of the data integrity key" +msgstr "Величина кључа шифровања" + +#: src/integritysetup.c:554 +#, fuzzy +msgid "Read the integrity key from a file" +msgstr "Чита кључ из датотеке." + +#: src/integritysetup.c:556 +msgid "Journal integrity algorithm" +msgstr "" + +#: src/integritysetup.c:557 +#, fuzzy +msgid "The size of the journal integrity key" +msgstr "Величина кључа шифровања" + +#: src/integritysetup.c:558 +#, fuzzy +msgid "Read the journal integrity key from a file" +msgstr "Чита кључ из датотеке." + +#: src/integritysetup.c:560 +msgid "Journal encryption algorithm" +msgstr "" + +#: src/integritysetup.c:561 +#, fuzzy +msgid "The size of the journal encryption key" +msgstr "Величина кључа шифровања" + +#: src/integritysetup.c:562 +#, fuzzy +msgid "Read the journal encryption key from a file" +msgstr "Чита кључ из датотеке." + +#: src/integritysetup.c:565 +msgid "Recovery mode (no journal, no tag checking)" +msgstr "" + +#: src/integritysetup.c:566 +msgid "Use bitmap to track changes and disable journal for integrity device" +msgstr "" + +#: src/integritysetup.c:567 +msgid "Recalculate initial tags automatically." +msgstr "" + +#: src/integritysetup.c:640 +#, fuzzy +msgid "Option --integrity-recalculate can be used only for open action." +msgstr "Опција „--allow-discards“ је допуштена само за радњу отварања.\n" + +#: src/integritysetup.c:655 +msgid "Options --journal-size, --interleave-sectors, --sector-size, --tag-size and --no-wipe can be used only for format action.\n" +msgstr "" + +#: src/integritysetup.c:661 +#, fuzzy +msgid "Invalid journal size specification." +msgstr "Неисправна одредба величине уређаја." + +#: src/integritysetup.c:666 +msgid "Both key file and key size options must be specified." +msgstr "" + +#: src/integritysetup.c:669 +msgid "Integrity algorithm must be specified if integrity key is used." +msgstr "" + +#: src/integritysetup.c:674 +msgid "Both journal integrity key file and key size options must be specified." +msgstr "" + +#: src/integritysetup.c:677 +msgid "Journal integrity algorithm must be specified if journal integrity key is used." +msgstr "" + +#: src/integritysetup.c:682 +msgid "Both journal encryption key file and key size options must be specified." +msgstr "" + +#: src/integritysetup.c:685 +msgid "Journal encryption algorithm must be specified if journal encryption key is used." +msgstr "" + +#: src/integritysetup.c:689 +msgid "Recovery and bitmap mode options are mutually exclusive." +msgstr "" + +#: src/integritysetup.c:693 +msgid "Journal options cannot be used in bitmap mode." +msgstr "" + +#: src/integritysetup.c:697 +msgid "Bitmap options can be used only in bitmap mode." +msgstr "" + +#: src/cryptsetup_reencrypt.c:172 +#, fuzzy +msgid "Reencryption already in-progress." +msgstr "Величина блока поновног шифровања" + +#: src/cryptsetup_reencrypt.c:201 +#, fuzzy, c-format +msgid "Cannot exclusively open %s, device in use." +msgstr "Не могу изричито да отворим „%s“, уређај је у употреби.\n" + +#: src/cryptsetup_reencrypt.c:215 src/cryptsetup_reencrypt.c:1127 +#, fuzzy +msgid "Allocation of aligned memory failed." +msgstr "Додела поређане меморије није успела.\n" + +#: src/cryptsetup_reencrypt.c:222 +#, fuzzy, c-format +msgid "Cannot read device %s." +msgstr "Не могу да читам уређај „%s“.\n" + +#: src/cryptsetup_reencrypt.c:233 +#, fuzzy, c-format +msgid "Marking LUKS1 device %s unusable." +msgstr "Означавам ЛУКС уређај „%s“ неупотребљивим.\n" + +#: src/cryptsetup_reencrypt.c:237 +#, c-format +msgid "Setting LUKS2 offline reencrypt flag on device %s." +msgstr "" + +#: src/cryptsetup_reencrypt.c:254 +#, fuzzy, c-format +msgid "Cannot write device %s." +msgstr "Не могу да пишем на уређају „%s“.\n" + +#: src/cryptsetup_reencrypt.c:302 +#, fuzzy +msgid "Cannot write reencryption log file." +msgstr "Не могу да запишем датотеку дневника поновног шифровања.\n" + +#: src/cryptsetup_reencrypt.c:358 +#, fuzzy +msgid "Cannot read reencryption log file." +msgstr "Не могу да прочитам датотеку дневника поновног шифровања.\n" + +#: src/cryptsetup_reencrypt.c:396 +#, c-format +msgid "Log file %s exists, resuming reencryption.\n" +msgstr "Датотека дневника „%s“ постоји, настављам поновно шифровање.\n" + +#: src/cryptsetup_reencrypt.c:445 +#, fuzzy +msgid "Activating temporary device using old LUKS header." +msgstr "Покрећем привремени уређај користећи старо ЛУКС заглавље.\n" + +#: src/cryptsetup_reencrypt.c:455 +#, fuzzy +msgid "Activating temporary device using new LUKS header." +msgstr "Покрећем привремени уређај користећи ново ЛУКС заглавље.\n" + +#: src/cryptsetup_reencrypt.c:465 +#, fuzzy +msgid "Activation of temporary devices failed." +msgstr "Покретање привременог уређаја није успело.\n" + +#: src/cryptsetup_reencrypt.c:551 +#, fuzzy +msgid "Failed to set data offset." +msgstr "Нисам успео да добавим податке датотеке кључа.\n" + +#: src/cryptsetup_reencrypt.c:557 +#, fuzzy +msgid "Failed to set metadata size." +msgstr "Нисам успео да добавим податке датотеке кључа.\n" + +#: src/cryptsetup_reencrypt.c:565 +#, fuzzy, c-format +msgid "New LUKS header for device %s created." +msgstr "Направљено је ново ЛУКС заглавље за уређај „%s“.\n" + +#: src/cryptsetup_reencrypt.c:625 +#, c-format +msgid "This version of cryptsetup-reencrypt can't handle new internal token type %s." +msgstr "" + +#: src/cryptsetup_reencrypt.c:647 +msgid "Failed to read activation flags from backup header." +msgstr "" + +#: src/cryptsetup_reencrypt.c:651 +msgid "Failed to write activation flags to new header." +msgstr "" + +#: src/cryptsetup_reencrypt.c:655 src/cryptsetup_reencrypt.c:659 +msgid "Failed to read requirements from backup header." +msgstr "" + +#: src/cryptsetup_reencrypt.c:697 +#, fuzzy, c-format +msgid "%s header backup of device %s created." +msgstr "Направљена је резерва ЛУКС заглавља за уређај „%s“.\n" + +#: src/cryptsetup_reencrypt.c:760 +#, fuzzy +msgid "Creation of LUKS backup headers failed." +msgstr "Није успело прављење резерве ЛУКС заглавља.\n" + +#: src/cryptsetup_reencrypt.c:893 +#, fuzzy, c-format +msgid "Cannot restore %s header on device %s." +msgstr "Не могу да повратим ЛУКС заглавље на уређају „%s“.\n" + +#: src/cryptsetup_reencrypt.c:895 +#, fuzzy, c-format +msgid "%s header on device %s restored." +msgstr "Повраћено је ЛУКС заглавље на уређају „%s“.\n" + +#: src/cryptsetup_reencrypt.c:1099 src/cryptsetup_reencrypt.c:1105 +#, fuzzy +msgid "Cannot open temporary LUKS device." +msgstr "Не могу да отворим привремени ЛУКС уређај.\n" + +#: src/cryptsetup_reencrypt.c:1110 src/cryptsetup_reencrypt.c:1115 +#, fuzzy +msgid "Cannot get device size." +msgstr "Не могу да добавим величину уређаја.\n" + +#: src/cryptsetup_reencrypt.c:1150 +#, fuzzy +msgid "IO error during reencryption." +msgstr "УИ грешка за време поновног шифровања.\n" + +#: src/cryptsetup_reencrypt.c:1181 +#, fuzzy +msgid "Provided UUID is invalid." +msgstr "Достављени УУИД није исправан.\n" + +#: src/cryptsetup_reencrypt.c:1407 +#, fuzzy +msgid "Cannot open reencryption log file." +msgstr "Не могу да отворим датотеку дневника поновног шифровања.\n" + +#: src/cryptsetup_reencrypt.c:1413 +#, fuzzy +msgid "No decryption in progress, provided UUID can be used only to resume suspended decryption process." +msgstr "Нема описа у напретку, достављени УУИД се може користити само за настављање заустављеног процеса дешифровања.\n" + +#: src/cryptsetup_reencrypt.c:1488 +#, c-format +msgid "Changed pbkdf parameters in keyslot %i." +msgstr "" + +#: src/cryptsetup_reencrypt.c:1600 +msgid "Reencryption block size" +msgstr "Величина блока поновног шифровања" + +#: src/cryptsetup_reencrypt.c:1600 +msgid "MiB" +msgstr "MiB" + +#: src/cryptsetup_reencrypt.c:1604 +#, fuzzy +msgid "Do not change key, no data area reencryption" +msgstr "Не мења кључ, нема поновног шифровања области података." + +#: src/cryptsetup_reencrypt.c:1606 +#, fuzzy +msgid "Read new volume (master) key from file" +msgstr "Чита (главни) кључ вочумена из датотеке." + +#: src/cryptsetup_reencrypt.c:1607 +msgid "PBKDF2 iteration time for LUKS (in ms)" +msgstr "Време ПБКДФ2 понављања за ЛУКС (у милисекундама)" + +#: src/cryptsetup_reencrypt.c:1613 +#, fuzzy +msgid "Use direct-io when accessing devices" +msgstr "Користи непосредни-уи приликом приступа уређајима." + +#: src/cryptsetup_reencrypt.c:1614 +#, fuzzy +msgid "Use fsync after each block" +msgstr "Користи ф-усаглашавање након сваког блока." + +#: src/cryptsetup_reencrypt.c:1615 +#, fuzzy +msgid "Update log file after every block" +msgstr "Освежава датотеку дневника након сваког блока." + +#: src/cryptsetup_reencrypt.c:1616 +#, fuzzy +msgid "Use only this slot (others will be disabled)" +msgstr "Користи само овај исек (остали ће бити искључени)." + +#: src/cryptsetup_reencrypt.c:1621 +#, fuzzy +msgid "Create new header on not encrypted device" +msgstr "Прави ново заглавље на нешифрованом уређају." + +#: src/cryptsetup_reencrypt.c:1622 +#, fuzzy +msgid "Permanently decrypt device (remove encryption)" +msgstr "Трајно дешифрује уређај (уклања шифровање)." + +#: src/cryptsetup_reencrypt.c:1623 +#, fuzzy +msgid "The UUID used to resume decryption" +msgstr "ууид коришћен за настављање дешифровања." + +#: src/cryptsetup_reencrypt.c:1624 +#, fuzzy +msgid "Type of LUKS metadata: luks1, luks2" +msgstr "Врста метаподатака уређаја: luks, plain, loopaes, tcrypt." + +#: src/cryptsetup_reencrypt.c:1643 +msgid "[OPTION...] " +msgstr "[ОПЦИЈА...] <уређај>" + +#: src/cryptsetup_reencrypt.c:1651 +#, fuzzy, c-format +msgid "Reencryption will change: %s%s%s%s%s%s." +msgstr "Поновно шифровање ће изменити: кључ волумена%s%s%s%s.\n" + +#: src/cryptsetup_reencrypt.c:1652 +msgid "volume key" +msgstr "" + +#: src/cryptsetup_reencrypt.c:1654 +#, fuzzy +msgid "set hash to " +msgstr ", поставља хеш на " + +#: src/cryptsetup_reencrypt.c:1655 +msgid ", set cipher to " +msgstr ", поставља шифрера на " + +#: src/cryptsetup_reencrypt.c:1659 +msgid "Argument required." +msgstr "Потребан је аргумент." + +#: src/cryptsetup_reencrypt.c:1687 +msgid "Only values between 1 MiB and 64 MiB allowed for reencryption block size." +msgstr "Само вредности између 1 MiB и 64 MiB су допуштене завеличину блока поновног шифровања." + +#: src/cryptsetup_reencrypt.c:1714 +msgid "Maximum device reduce size is 64 MiB." +msgstr "Највећа величина смањења уређаја је 64 MiB." + +#: src/cryptsetup_reencrypt.c:1721 +#, fuzzy +msgid "Option --new must be used together with --reduce-device-size or --header." +msgstr "Опција „--new“ мора да се користи са „--reduce-device-size“." + +#: src/cryptsetup_reencrypt.c:1725 +#, fuzzy +msgid "Option --keep-key can be used only with --hash, --iter-time or --pbkdf-force-iterations." +msgstr "Опција „--keep-key“ може да се користи само са „--hash“ или „--iter-time“." + +#: src/cryptsetup_reencrypt.c:1729 +msgid "Option --new cannot be used together with --decrypt." +msgstr "Опција „--new“ не може да се користи са „--decrypt“." + +#: src/cryptsetup_reencrypt.c:1733 +msgid "Option --decrypt is incompatible with specified parameters." +msgstr "Опција „--decrypt“ није сагласна са наведеним параметрима." + +#: src/cryptsetup_reencrypt.c:1737 +msgid "Option --uuid is allowed only together with --decrypt." +msgstr "Опција „--uuid“ је дозвољена само заједно са „--decrypt“." + +#: src/cryptsetup_reencrypt.c:1741 +msgid "Invalid luks type. Use one of these: 'luks', 'luks1' or 'luks2'." +msgstr "" + +#: src/utils_tools.c:151 +#, fuzzy +msgid "Error reading response from terminal." +msgstr "Грешка читања одговора из терминала.\n" + +#: src/utils_tools.c:186 +msgid "Command successful.\n" +msgstr "Наредба је успела.\n" + +#: src/utils_tools.c:194 +msgid "wrong or missing parameters" +msgstr "" + +#: src/utils_tools.c:196 +#, fuzzy +msgid "no permission or bad passphrase" +msgstr "Унесите неку пропусну реч: " + +#: src/utils_tools.c:198 +#, fuzzy +msgid "out of memory" +msgstr "Не могу да откључам меморију.\n" + +#: src/utils_tools.c:200 +msgid "wrong device or file specified" +msgstr "" + +#: src/utils_tools.c:202 +#, fuzzy +msgid "device already exists or device is busy" +msgstr "Уређај „%s“ већ постоји.\n" + +#: src/utils_tools.c:204 +msgid "unknown error" +msgstr "" + +#: src/utils_tools.c:206 +#, fuzzy, c-format +msgid "Command failed with code %i (%s).\n" +msgstr "Наредба није успела са кодом %i" + +#: src/utils_tools.c:283 +#, fuzzy, c-format +msgid "Key slot %i created." +msgstr "Исек кључа „%d“ је измењен.\n" + +#: src/utils_tools.c:285 +#, fuzzy, c-format +msgid "Key slot %i unlocked." +msgstr "Исек кључа „%d“ је откључан.\n" + +#: src/utils_tools.c:287 +#, fuzzy, c-format +msgid "Key slot %i removed." +msgstr "Исек кључа „%d“ је откључан.\n" + +#: src/utils_tools.c:296 +#, c-format +msgid "Token %i created." +msgstr "" + +#: src/utils_tools.c:298 +#, c-format +msgid "Token %i removed." +msgstr "" + +#: src/utils_tools.c:464 +msgid "" +"\n" +"Wipe interrupted." +msgstr "" + +#: src/utils_tools.c:475 +#, c-format +msgid "WARNING: Device %s already contains a '%s' partition signature.\n" +msgstr "" + +#: src/utils_tools.c:483 +#, c-format +msgid "WARNING: Device %s already contains a '%s' superblock signature.\n" +msgstr "" + +#: src/utils_tools.c:504 src/utils_tools.c:568 +msgid "Failed to initialize device signature probes." +msgstr "" + +#: src/utils_tools.c:548 +#, fuzzy, c-format +msgid "Failed to stat device %s." +msgstr "Нисам успео да добавим податке датотеке кључа.\n" + +#: src/utils_tools.c:561 +#, c-format +msgid "Device %s is in use. Can not proceed with format operation." +msgstr "" + +#: src/utils_tools.c:563 +#, c-format +msgid "Failed to open file %s in read/write mode." +msgstr "" + +#: src/utils_tools.c:577 +#, c-format +msgid "Existing '%s' partition signature (offset: % bytes) on device %s will be wiped." +msgstr "" + +#: src/utils_tools.c:580 +#, c-format +msgid "Existing '%s' superblock signature (offset: % bytes) on device %s will be wiped." +msgstr "" + +#: src/utils_tools.c:583 +#, fuzzy +msgid "Failed to wipe device signature." +msgstr "Нисам успео да отворим датотеку кључа.\n" + +#: src/utils_tools.c:590 +#, c-format +msgid "Failed to probe device %s for a signature." +msgstr "" + +#: src/utils_tools.c:629 +#, fuzzy +msgid "" +"\n" +"Reencryption interrupted." +msgstr "Величина блока поновног шифровања" + +#: src/utils_password.c:43 src/utils_password.c:75 +#, fuzzy, c-format +msgid "Cannot check password quality: %s" +msgstr "Не могу да проверим квалитет лозинке: %s\n" + +#: src/utils_password.c:51 +#, fuzzy, c-format +msgid "" +"Password quality check failed:\n" +" %s" +msgstr "" +"Провера квалитета лозинке није успела:\n" +" %s\n" + +#: src/utils_password.c:83 +#, fuzzy, c-format +msgid "Password quality check failed: Bad passphrase (%s)" +msgstr "Провера квалитета лозинке није успела: Лоша шифра (%s)\n" + +#: src/utils_password.c:193 src/utils_password.c:208 +#, fuzzy +msgid "Error reading passphrase from terminal." +msgstr "Грешка читања пропусне речи из терминала.\n" + +#: src/utils_password.c:206 +msgid "Verify passphrase: " +msgstr "Провери пропусну реч: " + +#: src/utils_password.c:213 +#, fuzzy +msgid "Passphrases do not match." +msgstr "Пропусне речи се не подударају.\n" + +#: src/utils_password.c:250 +#, fuzzy +msgid "Cannot use offset with terminal input." +msgstr "Не могу да користим померај са улазом терминала.\n" + +#: src/utils_password.c:253 +#, c-format +msgid "Enter passphrase: " +msgstr "Унесите пропусну реч: " + +#: src/utils_password.c:256 +#, c-format +msgid "Enter passphrase for %s: " +msgstr "Унесите пропусну реч за „%s“: " + +#: src/utils_password.c:287 +#, fuzzy +msgid "No key available with this passphrase." +msgstr "Нема доступног кључа са овом пропусном речју.\n" + +#: src/utils_password.c:289 +msgid "No usable keyslot is available." +msgstr "" + +#: src/utils_password.c:328 +#, fuzzy, c-format +msgid "Cannot open keyfile %s for write." +msgstr "Не могу да прочитам датотеку кључа „%s“.\n" + +#: src/utils_password.c:335 +#, fuzzy, c-format +msgid "Cannot write to keyfile %s." +msgstr "Не могу да прочитам датотеку кључа „%s“.\n" + +#: src/utils_luks2.c:47 +#, fuzzy, c-format +msgid "Failed to open file %s in read-only mode." +msgstr "Нисам успео да отворим датотеку кључа.\n" + +#: src/utils_luks2.c:60 +msgid "Provide valid LUKS2 token JSON:\n" +msgstr "" + +#: src/utils_luks2.c:67 +#, fuzzy +msgid "Failed to read JSON file." +msgstr "Нисам успео да отворим датотеку кључа.\n" + +#: src/utils_luks2.c:72 +#, fuzzy +msgid "" +"\n" +"Read interrupted." +msgstr "Заглавље ТАЧНОСТИ је оштећено.\n" + +#: src/utils_luks2.c:113 +#, fuzzy, c-format +msgid "Failed to open file %s in write mode." +msgstr "Нисам успео да отворим датотеку кључа.\n" + +#: src/utils_luks2.c:122 +msgid "" +"\n" +"Write interrupted." +msgstr "" + +#: src/utils_luks2.c:126 +#, fuzzy +msgid "Failed to write JSON file." +msgstr "Нисам успео да отворим датотеку кључа.\n" + +#~ msgid "Replaced with key slot %d.\n" +#~ msgstr "Замењен је исеком кључа „%d“.\n" + +#~ msgid "Function not available in FIPS mode.\n" +#~ msgstr "Функција није доступна у ФИПС режиму.\n" + +#~ msgid "Too many tree levels for verity volume.\n" +#~ msgstr "Превише нивоа стабла за волумен тачности.\n" + +#~ msgid "memory allocation error in action_luksFormat" +#~ msgstr "грешка доделе меморије у „action_luksFormat“" + +#~ msgid "Key %d not active. Can't wipe.\n" +#~ msgstr "Кључ „%d“ није радан. Не могу да очистим.\n" + +#~ msgid " " +#~ msgstr "<назив> <уређај_података> <уређај_хеша> <хеш_корена>" + +#~ msgid "create active device" +#~ msgstr "прави радни уређај" + +#~ msgid "remove (deactivate) device" +#~ msgstr "уклања (искључује) уређај" + +#~ msgid "Activated keyslot %i.\n" +#~ msgstr "Покренути исек кључа %i.\n" + +#~ msgid "Progress: %5.1f%%, ETA %02llu:%02llu, %4llu MiB written, speed %5.1f MiB/s%s" +#~ msgstr "Напредовање: %5.1f%%, ЕТА %02llu:%02llu, %4llu MiB је записано, брзина %5.1f MiB/s%s" + +#~ msgid "Interrupted by a signal.\n" +#~ msgstr "Прекинуто сигналом.\n" + +#~ msgid "Cannot find a free loopback device.\n" +#~ msgstr "Не могу да пронађем слободан уређај повратне петље.\n" + +#~ msgid "Cannot open device %s\n" +#~ msgstr "Не могу да отворим уређај „%s“\n" + +#~ msgid "Marking LUKS device %s usable.\n" +#~ msgstr "Означавам ЛУКС уређај „%s“ употребљивим.\n" + +#~ msgid "WARNING: this is experimental code, it can completely break your data.\n" +#~ msgstr "УПОЗОРЕЊЕ: ово је пробни код, може потпуно да оштети ваше податке.\n" + +#~ msgid "FIPS checksum verification failed.\n" +#~ msgstr "Није успела провера ФИПС провере суме.\n" diff --git a/po/stamp-po b/po/stamp-po new file mode 100644 index 0000000..9788f70 --- /dev/null +++ b/po/stamp-po @@ -0,0 +1 @@ +timestamp diff --git a/po/sv.gmo b/po/sv.gmo new file mode 100644 index 0000000000000000000000000000000000000000..ac87704b8578bc7fea94844ebb637e932cb35300 GIT binary patch literal 78537 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 literal 0 HcmV?d00001 diff --git a/po/sv.po b/po/sv.po new file mode 100644 index 0000000..77d90ae --- /dev/null +++ b/po/sv.po @@ -0,0 +1,3886 @@ +# Swedish translation for cryptsetup. +# Copyright © 2009 - 2017 Free Software Foundation, Inc. +# This file is distributed under the same license as the cryptsetup package. +# Daniel Nylander , 2009. +# Josef Andersson , 2016, 2017, 2019. +# +msgid "" +msgstr "" +"Project-Id-Version: cryptsetup 2.1.0\n" +"Report-Msgid-Bugs-To: dm-crypt@saout.de\n" +"POT-Creation-Date: 2019-11-01 09:04+0100\n" +"PO-Revision-Date: 2019-05-17 16:51+0200\n" +"Last-Translator: Josef Andersson \n" +"Language-Team: Swedish \n" +"Language: sv\n" +"MIME-Version: 1.0\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" + +#: lib/libdevmapper.c:384 +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:387 +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:1082 +msgid "Requested deferred flag is not supported." +msgstr "Begärd flagga deferred stöds inte." + +#: lib/libdevmapper.c:1149 +#, c-format +msgid "DM-UUID for device %s was truncated." +msgstr "DM-UUID för enheten %s förkortades." + +#: lib/libdevmapper.c:1463 +#, fuzzy +msgid "Unknown dm target type." +msgstr "Okänd PBKDF-typ %s." + +#: lib/libdevmapper.c:1565 lib/libdevmapper.c:1617 +msgid "Requested dm-crypt performance options are not supported." +msgstr "Begärd flagga för dm-crypt-prestanda stöds inte." + +#: lib/libdevmapper.c:1572 +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:1576 +msgid "Requested dm-verity FEC options are not supported." +msgstr "Begärd flagga dm-verity FEC stöds inte." + +#: lib/libdevmapper.c:1580 +msgid "Requested data integrity options are not supported." +msgstr "Begärd flagga för dataintegritet stöds inte." + +#: lib/libdevmapper.c:1582 +msgid "Requested sector_size option is not supported." +msgstr "Begärd flagga sector_size stöds inte." + +#: lib/libdevmapper.c:1587 +msgid "Requested automatic recalculation of integrity tags is not supported." +msgstr "Begärd automatisk beräkning av integritetstaggar stöds inte." + +#: lib/libdevmapper.c:1591 +#, fuzzy +msgid "Requested dm-integrity bitmap mode is not supported." +msgstr "Begärd flagga för dataintegritet stöds inte." + +#: lib/libdevmapper.c:1620 +msgid "Discard/TRIM is not supported." +msgstr "Discard/TRIM stöds inte." + +#: lib/libdevmapper.c:2511 +#, c-format +msgid "Failed to query dm-%s segment." +msgstr "Misslyckades med att läsa dm-%s-segment." + +#: lib/random.c:80 +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" +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 +#, c-format +msgid "Generating key (%d%% done).\n" +msgstr "Genererar nyckel (%d%% done).\n" + +#: lib/random.c:170 +msgid "Running in FIPS mode." +msgstr "Kör i FIPS-läge." + +#: lib/random.c:176 +msgid "Fatal error during RNG initialisation." +msgstr "Ödesdigert fel under RNG-initiering." + +#: lib/random.c:213 +msgid "Unknown RNG quality requested." +msgstr "Okänd RNG-kvalitet begärd." + +#: lib/random.c:218 +msgid "Error reading from RNG." +msgstr "Fel vid läsning från RNG." + +#: lib/setup.c:223 +msgid "Cannot initialize crypto RNG backend." +msgstr "Det går inte att initiera RNG-krypteringsbakände." + +#: lib/setup.c:229 +msgid "Cannot initialize crypto backend." +msgstr "Det går inte att initiera krypteringsbakände." + +#: lib/setup.c:260 lib/setup.c:1990 lib/verity/verity.c:120 +#, c-format +msgid "Hash algorithm %s not supported." +msgstr "Hashalgoritmen %s stöds inte." + +#: lib/setup.c:263 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:324 lib/setup.c:351 +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:330 lib/setup.c:2985 +msgid "This operation is supported only for LUKS device." +msgstr "Denna åtgärd stöds endast av LUKS-enheter." + +#: lib/setup.c:357 +msgid "This operation is supported only for LUKS2 device." +msgstr "Denna åtgärd stöds endast av LUKS2-enheter." + +#: lib/setup.c:412 lib/luks2/luks2_reencrypt.c:2345 +msgid "All key slots full." +msgstr "Alla nyckelplatser är upptagna." + +#: lib/setup.c:423 +#, 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:429 +#, c-format +msgid "Key slot %d is full, please select another one." +msgstr "Nyckelplats %d är full. Välj en annan." + +#: lib/setup.c:514 lib/setup.c:2759 +#, fuzzy +msgid "Device size is not aligned to device logical block size." +msgstr "Storlek på enhet är inte justerad till begärd sektorstorlek." + +#: lib/setup.c:610 +#, c-format +msgid "Header detected but device %s is too small." +msgstr "Huvud identifierat men enheten %s är för liten." + +#: lib/setup.c:647 +msgid "This operation is not supported for this device type." +msgstr "Denna åtgärd stöds inte för denna enhetstyp." + +#: lib/setup.c:652 +#, fuzzy +msgid "Illegal operation with reencryption in-progress." +msgstr "Frånkopplad kryptering pågår. Avbryter." + +#: lib/setup.c:821 lib/luks1/keymanage.c:476 +#, c-format +msgid "Unsupported LUKS version %d." +msgstr "LUKS-versionen %d stöds inte." + +#: lib/setup.c:838 lib/setup.c:1483 lib/setup.c:1903 +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:1373 lib/setup.c:2479 lib/setup.c:2551 lib/setup.c:2563 +#: lib/setup.c:2712 lib/setup.c:4310 +#, c-format +msgid "Device %s is not active." +msgstr "Enheten %s är inte aktiv." + +#: lib/setup.c:1390 +#, c-format +msgid "Underlying device for crypt device %s disappeared." +msgstr "Underliggande enhet för krypteringsenhet %s försvann." + +#: lib/setup.c:1468 +msgid "Invalid plain crypt parameters." +msgstr "Ogiltiga parametrar för vanlig kryptering." + +#: lib/setup.c:1473 lib/setup.c:1893 src/integritysetup.c:73 +msgid "Invalid key size." +msgstr "Ogiltig nyckelstorlek." + +#: lib/setup.c:1478 lib/setup.c:1898 lib/setup.c:2100 +msgid "UUID is not supported for this crypt type." +msgstr "UUID stöds inte för denna krypteringstyp." + +#: lib/setup.c:1493 lib/setup.c:1683 lib/luks2/luks2_reencrypt.c:2308 +#: src/cryptsetup.c:1169 +msgid "Unsupported encryption sector size." +msgstr "Stöder inte sektorstorleken för kryptering." + +#: lib/setup.c:1501 lib/setup.c:1808 lib/setup.c:2753 +msgid "Device size is not aligned to requested sector size." +msgstr "Storlek på enhet är inte justerad till begärd sektorstorlek." + +#: lib/setup.c:1552 lib/setup.c:1671 +msgid "Can't format LUKS without device." +msgstr "Det går inte att formatera LUKS utan enhet." + +#: lib/setup.c:1558 lib/setup.c:1677 +msgid "Requested data alignment is not compatible with data offset." +msgstr "Begärd datajustering är inte kompatibel med dataoffset." + +#: lib/setup.c:1626 lib/setup.c:1795 +msgid "WARNING: Data offset is outside of currently available data device.\n" +msgstr "VARNING: Dataoffset ligger utanför aktuell dataenhet.\n" + +#: lib/setup.c:1636 lib/setup.c:1823 lib/setup.c:1844 lib/setup.c:2112 +#, c-format +msgid "Cannot wipe header on device %s." +msgstr "Det går inte att rensa huvudet på enheten %s." + +#: lib/setup.c:1688 +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:1710 +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:1765 +#, 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:1798 +#, c-format +msgid "WARNING: LUKS2 metadata size changed to % bytes.\n" +msgstr "" + +#: lib/setup.c:1802 +#, c-format +msgid "WARNING: LUKS2 keyslots area size changed to % bytes.\n" +msgstr "" + +#: lib/setup.c:1826 lib/utils_device.c:829 lib/luks1/keyencryption.c:256 +#: lib/luks2/luks2_reencrypt.c:2356 lib/luks2/luks2_reencrypt.c:3348 +#, c-format +msgid "Device %s is too small." +msgstr "Enheten %s är för liten." + +#: lib/setup.c:1837 lib/setup.c:1863 +#, 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:1840 lib/setup.c:1866 +#, c-format +msgid "Cannot format device %s, permission denied." +msgstr "Det går inte att formatera enheten %s, behörighet nekad." + +#: lib/setup.c:1852 lib/setup.c:2164 +#, c-format +msgid "Cannot format integrity for device %s." +msgstr "Det går inte att formatera integritet för enheten %s." + +#: lib/setup.c:1870 +#, c-format +msgid "Cannot format device %s." +msgstr "Det går inte att formatera enheten %s." + +#: lib/setup.c:1888 +msgid "Can't format LOOPAES without device." +msgstr "Kan inte formatera LOOPAES utan enhet." + +#: lib/setup.c:1933 +msgid "Can't format VERITY without device." +msgstr "Det går inte att formatera VERITY utan enhet." + +#: lib/setup.c:1944 lib/verity/verity.c:103 +#, c-format +msgid "Unsupported VERITY hash type %d." +msgstr "VERITY-hashtyp %d stöds inte." + +#: lib/setup.c:1950 lib/verity/verity.c:111 +msgid "Unsupported VERITY block size." +msgstr "VERITY-blockstorlek som inte stöds." + +#: lib/setup.c:1955 lib/verity/verity.c:75 +msgid "Unsupported VERITY hash offset." +msgstr "VERITY-hashoffset som inte stöds." + +#: lib/setup.c:1960 +msgid "Unsupported VERITY FEC offset." +msgstr "VERITY-FEC-offset som inte stöds." + +#: lib/setup.c:1984 +msgid "Data area overlaps with hash area." +msgstr "Dataområde spiller över på hashområdet." + +#: lib/setup.c:2009 +msgid "Hash area overlaps with FEC area." +msgstr "Hashområde spiller över på FEC-mrådet." + +#: lib/setup.c:2016 +msgid "Data area overlaps with FEC area." +msgstr "Dataområde spiller över på FEC-mrådet." + +#: lib/setup.c:2221 +#, c-format +msgid "Unknown crypt device type %s requested." +msgstr "Okänd typ av krypteringsenhet %s begärd." + +#: lib/setup.c:2485 lib/setup.c:2557 lib/setup.c:2570 +#, c-format +msgid "Unsupported parameters on device %s." +msgstr "Parametrar som inte stöds på enheten %s." + +#: lib/setup.c:2491 lib/setup.c:2576 lib/luks2/luks2_reencrypt.c:2408 +#: lib/luks2/luks2_reencrypt.c:2718 +#, c-format +msgid "Mismatching parameters on device %s." +msgstr "Kan inte rensa huvudet på enheten %s." + +#: lib/setup.c:2596 +msgid "Crypt devices mismatch." +msgstr "" + +#: lib/setup.c:2633 lib/setup.c:2638 lib/luks2/luks2_reencrypt.c:2054 +#: lib/luks2/luks2_reencrypt.c:3126 +#, fuzzy, c-format +msgid "Failed to reload device %s." +msgstr "Misslyckades med att ta status på enhet %s." + +#: lib/setup.c:2643 lib/setup.c:2648 lib/luks2/luks2_reencrypt.c:2025 +#: lib/luks2/luks2_reencrypt.c:2032 +#, fuzzy, c-format +msgid "Failed to suspend device %s." +msgstr "Misslyckades med att ta status på enhet %s." + +#: lib/setup.c:2653 lib/luks2/luks2_reencrypt.c:2039 +#: lib/luks2/luks2_reencrypt.c:3061 lib/luks2/luks2_reencrypt.c:3130 +#, fuzzy, c-format +msgid "Failed to resume device %s." +msgstr "Misslyckades med att ta status på enhet %s." + +#: lib/setup.c:2667 +#, c-format +msgid "Fatal error while reloading device %s (on top of device %s)." +msgstr "" + +#: lib/setup.c:2670 lib/setup.c:2672 +#, fuzzy, c-format +msgid "Failed to switch device %s to dm-error." +msgstr "Misslyckades med att ta status på enhet %s." + +#: lib/setup.c:2744 +msgid "Cannot resize loop device." +msgstr "Det går inte att ändra storlek på loop-enhet." + +#: lib/setup.c:2817 +msgid "Do you really want to change UUID of device?" +msgstr "Vill du verkligen ändra UUID för en enhet?" + +#: lib/setup.c:2893 +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:2993 +#, c-format +msgid "Volume %s is not active." +msgstr "Volymen %s är inte aktiv." + +#: lib/setup.c:3004 +#, c-format +msgid "Volume %s is already suspended." +msgstr "Volymen %s är redan i vänteläge." + +#: lib/setup.c:3017 +#, c-format +msgid "Suspend is not supported for device %s." +msgstr "Vänteläge stöds inte för enhet %s." + +#: lib/setup.c:3019 +#, c-format +msgid "Error during suspending device %s." +msgstr "Fel då enheten %s försattes i vänteläge." + +#: lib/setup.c:3052 lib/setup.c:3119 +#, c-format +msgid "Volume %s is not suspended." +msgstr "Volymen %s är inte i vänteläge." + +#: lib/setup.c:3081 +#, c-format +msgid "Resume is not supported for device %s." +msgstr "Att återuppta stöds inte för enhet %s." + +#: lib/setup.c:3083 lib/setup.c:3151 +#, c-format +msgid "Error during resuming device %s." +msgstr "Fel då enheten %s återupptogs." + +#: lib/setup.c:3219 lib/setup.c:3407 +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:3359 +msgid "Failed to swap new key slot." +msgstr "Misslyckades med att byta ny nyckelplats." + +#: lib/setup.c:3524 lib/setup.c:4161 lib/setup.c:4174 lib/setup.c:4182 +#: lib/setup.c:4195 lib/setup.c:4480 lib/setup.c:5593 +msgid "Volume key does not match the volume." +msgstr "Volymnyckeln stämmer inte överens med volymen." + +#: lib/setup.c:3545 +#, c-format +msgid "Key slot %d is invalid." +msgstr "Nyckelplats %d är ogiltig." + +#: lib/setup.c:3551 src/cryptsetup.c:1511 src/cryptsetup.c:1856 +#, c-format +msgid "Keyslot %d is not active." +msgstr "Nyckelplats %d är inte aktiv." + +#: lib/setup.c:3570 +msgid "Device header overlaps with data area." +msgstr "Dataområde spiller över på hashområdet." + +#: lib/setup.c:3836 +#, fuzzy +msgid "Reencryption in-progress. Cannot activate device." +msgstr "Omkryptering pågår redan." + +#: lib/setup.c:3838 lib/luks2/luks2_json_metadata.c:2244 +#: lib/luks2/luks2_reencrypt.c:2817 +#, fuzzy +msgid "Failed to get reencryption lock." +msgstr "Misslyckades med att erhålla skrivlås för enhet." + +#: lib/setup.c:3851 lib/luks2/luks2_reencrypt.c:2836 +#, fuzzy +msgid "LUKS2 reencryption recovery failed." +msgstr "Stöder inte sektorstorleken för kryptering." + +#: lib/setup.c:3978 lib/setup.c:4248 +msgid "Device type is not properly initialised." +msgstr "Enhetstypen är inte korrekt initierad." + +#: lib/setup.c:4022 +#, 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:4025 +#, c-format +msgid "Device %s already exists." +msgstr "Enheten %s finns redan." + +#: lib/setup.c:4148 +msgid "Incorrect volume key specified for plain device." +msgstr "Felaktig volymnyckel för vanlig enhet." + +#: lib/setup.c:4214 +msgid "Incorrect root hash specified for verity device." +msgstr "Felaktig rothash angiven för verity-enhet." + +#: lib/setup.c:4289 lib/setup.c:4305 lib/luks2/luks2_json_metadata.c:2297 +#: src/cryptsetup.c:2527 +#, c-format +msgid "Device %s is still in use." +msgstr "Enheten %s används fortfarande." + +#: lib/setup.c:4314 +#, c-format +msgid "Invalid device %s." +msgstr "Ogiltig enhet %s." + +#: lib/setup.c:4430 +msgid "Volume key buffer too small." +msgstr "Buffert för volymnyckelen är för liten." + +#: lib/setup.c:4438 +msgid "Cannot retrieve volume key for plain device." +msgstr "Kan inte hämta volymnyckel för vanlig enhet." + +#: lib/setup.c:4449 +#, 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:4636 +msgid "Dump operation is not supported for this device type." +msgstr "Utskriftsåtgärden stöds inte för denna enhetstyp." + +#: lib/setup.c:4947 +#, c-format +msgid "Data offset is not multiple of %u bytes." +msgstr "" + +#: lib/setup.c:5229 +#, 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:5526 +#, 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:5599 +msgid "Failed to initialise default LUKS2 keyslot parameters." +msgstr "Misslyckades med att sätta standardnyckelplats för LUKS2-parametrar." + +#: lib/setup.c:5605 +#, c-format +msgid "Failed to assign keyslot %d to digest." +msgstr "Misslyckades med att tilldela nyckelplats %d till kontrollsummor." + +#: lib/setup.c:5690 +msgid "Failed to load key in kernel keyring." +msgstr "Misslyckades med att öppna nyckelringen för kärnan." + +#: lib/setup.c:5757 +msgid "Kernel keyring is not supported by the kernel." +msgstr "Kärnans nyckelring stöds inte av kärnan." + +#: lib/setup.c:5767 lib/luks2/luks2_reencrypt.c:2933 +#, 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:5791 +msgid "Failed to acquire global memory-hard access serialization lock." +msgstr "" + +#: lib/utils.c:81 +msgid "Cannot get process priority." +msgstr "Det går inte att få processprioritet." + +#: lib/utils.c:95 +msgid "Cannot unlock memory." +msgstr "Det går inte att låsa upp minne." + +#: lib/utils.c:169 lib/tcrypt/tcrypt.c:498 +msgid "Failed to open key file." +msgstr "Misslyckades med att öppna nyckelfilen." + +#: lib/utils.c:174 +msgid "Cannot read keyfile from a terminal." +msgstr "Det går inte läsa nyckelfilen från en terminal." + +#: lib/utils.c:191 +msgid "Failed to stat key file." +msgstr "Misslyckades med att ta stat på nyckelfilen." + +#: lib/utils.c:199 lib/utils.c:220 +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 +#: 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 +msgid "Error reading passphrase." +msgstr "Fel vid läsning av lösenfras." + +#: lib/utils.c:266 +msgid "Nothing to read on input." +msgstr "Ingenting att läsa vid inmating." + +#: lib/utils.c:273 +msgid "Maximum keyfile size exceeded." +msgstr "Högsta nyckelfilsstorlek överskriden." + +#: lib/utils.c:278 +msgid "Cannot read requested amount of data." +msgstr "Det går inte läsa begärd mängd data." + +#: lib/utils_device.c:188 lib/utils_storage_wrappers.c:111 +#: lib/luks1/keyencryption.c:92 +#, c-format +msgid "Device %s doesn't exist or access denied." +msgstr "Enheten %s finns inte eller åtkomst nekas." + +#: lib/utils_device.c:198 +#, c-format +msgid "Device %s is not compatible." +msgstr "Enheten %s är inte aktiv." + +#: lib/utils_device.c:643 +#, 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:724 +#, 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:728 +#, 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:731 +#, c-format +msgid "Cannot get info about device %s." +msgstr "Kan inte hämta information om enheten %s." + +#: lib/utils_device.c:754 +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:764 +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:810 +#, 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:818 +#, c-format +msgid "Device %s has zero size." +msgstr "Enheten %s har noll storlek." + +#: 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." + +#: lib/utils_pbkdf.c:106 +#, c-format +msgid "Unknown PBKDF type %s." +msgstr "Okänd PBKDF-typ %s." + +#: lib/utils_pbkdf.c:111 +#, c-format +msgid "Requested hash %s is not supported." +msgstr "Begärd hash %s stöds inte." + +#: lib/utils_pbkdf.c:122 +msgid "Requested PBKDF type is not supported for LUKS1." +msgstr "Begärd PBKDF-typ stöds inte för LUKS1." + +#: lib/utils_pbkdf.c:128 +msgid "PBKDF max memory or parallel threads must not be set with pbkdf2." +msgstr "Högsta minne för PBKDF eller parallella trådar får inte sättas med pbkdf2." + +#: lib/utils_pbkdf.c:133 lib/utils_pbkdf.c:143 +#, c-format +msgid "Forced iteration count is too low for %s (minimum is %u)." +msgstr "Tvingad iterationsuppräkning är för liten för %s (minsta är %u)." + +#: lib/utils_pbkdf.c:148 +#, c-format +msgid "Forced memory cost is too low for %s (minimum is %u kilobytes)." +msgstr "Tvingad minneskostnad är för låg för %s (minimum är %u kilobyte)." + +#: lib/utils_pbkdf.c:155 +#, c-format +msgid "Requested maximum PBKDF memory cost is too high (maximum is %d kilobytes)." +msgstr "Kostnaden för det begärda högsta minnet för PBKDF är för högt (maximum är %d kilobyte)." + +#: lib/utils_pbkdf.c:160 +msgid "Requested maximum PBKDF memory cannot be zero." +msgstr "Högst begärt minne för PBKDF kan inte vara noll." + +#: lib/utils_pbkdf.c:164 +msgid "Requested PBKDF parallel threads cannot be zero." +msgstr "Begärda parallella trådar för PBKDF kan inte vara noll." + +#: lib/utils_pbkdf.c:184 +msgid "Only PBKDF2 is supported in FIPS mode." +msgstr "" + +#: lib/utils_benchmark.c:166 +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:185 +#, 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:205 +msgid "Not compatible PBKDF options." +msgstr "Ej kompatibla PBKDF2-flaggor." + +#: lib/utils_device_locking.c:103 +#, 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:110 +#, c-format +msgid "WARNING: Locking directory %s/%s is missing!\n" +msgstr "VARNING:Låskatalog %s/%s saknas!\n" + +#: lib/utils_device_locking.c:120 +#, c-format +msgid "Locking aborted. The locking path %s/%s is unusable (%s is not a directory)." +msgstr "Låsningen avbruten. Låsningsökvägen %s/%s oanvändbar (%s är inte en katalog)." + +#: lib/utils_wipe.c:185 src/cryptsetup_reencrypt.c:933 +#: src/cryptsetup_reencrypt.c:1017 +msgid "Cannot seek to device offset." +msgstr "Det går inte att söka till enhetsoffset." + +#: lib/utils_wipe.c:209 +#, c-format +msgid "Device wipe error, offset %." +msgstr "" + +#: lib/luks1/keyencryption.c:40 +#, c-format +msgid "" +"Failed to setup dm-crypt key mapping for device %s.\n" +"Check that kernel supports %s cipher (check syslog for more info)." +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 +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 +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:636 lib/luks1/keymanage.c:1074 +#: lib/luks2/luks2_json_metadata.c:1253 lib/luks2/luks2_keyslot.c:739 +#, c-format +msgid "Cannot write to device %s, permission denied." +msgstr "Kan inte skriva till enhet %s, behörighet nekad." + +#: lib/luks1/keyencryption.c:121 +msgid "Failed to open temporary keystore device." +msgstr "Misslyckades med att öppna temporär nyckellagringsenhet." + +#: lib/luks1/keyencryption.c:128 +msgid "Failed to access temporary keystore device." +msgstr "Misslyckades med att komma åt temporär nyckellagringsenhet." + +#: lib/luks1/keyencryption.c:201 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:247 lib/luks1/keymanage.c:348 +#: lib/luks1/keymanage.c:589 lib/luks1/keymanage.c:639 lib/tcrypt/tcrypt.c:661 +#: lib/verity/verity.c:81 lib/verity/verity.c:179 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:1256 +#: src/cryptsetup_reencrypt.c:205 +#, c-format +msgid "Cannot open device %s." +msgstr "Det går inte att öppna enheten %s." + +#: lib/luks1/keyencryption.c:258 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 +#, 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 +#, c-format +msgid "LUKS keyslot %u is invalid." +msgstr "LUKS-nyckelplats %u är ogiltig." + +#: lib/luks1/keymanage.c:229 lib/luks1/keymanage.c:473 +#: lib/luks2/luks2_json_metadata.c:1084 src/cryptsetup.c:1372 +#: src/cryptsetup.c:1498 src/cryptsetup.c:1555 src/cryptsetup.c:1611 +#: src/cryptsetup.c:1678 src/cryptsetup.c:1781 src/cryptsetup.c:1845 +#: src/cryptsetup.c:2005 src/cryptsetup.c:2194 src/cryptsetup.c:2254 +#: src/cryptsetup.c:2320 src/cryptsetup.c:2484 src/cryptsetup.c:3137 +#: src/cryptsetup.c:3146 src/cryptsetup_reencrypt.c:1372 +#, 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:1101 +#, 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:1103 +#, 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:256 lib/luks2/luks2_json_metadata.c:1110 +#, 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:1162 +msgid "Backup file doesn't contain valid LUKS header." +msgstr "Säkerhetskopian innehåller inte något giltigt LUKS-huvud." + +#: lib/luks1/keymanage.c:300 lib/luks1/keymanage.c:550 +#: lib/luks2/luks2_json_metadata.c:1183 +#, 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:308 lib/luks2/luks2_json_metadata.c:1191 +#, 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 +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 +#, c-format +msgid "Device %s %s%s" +msgstr "Enhet %s %s%s" + +#: lib/luks1/keymanage.c:327 +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 +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:1225 +msgid "" +"\n" +"WARNING: real device header has different UUID than backup!" +msgstr "" +"\n" +"VARNING: verkligt enhetshuvud har annat UUID än säkerhetskopian!" + +#: lib/luks1/keymanage.c:376 +msgid "Non standard key size, manual repair required." +msgstr "Ej standardstorlek på nyckel, manuell reparation krävs." + +#: lib/luks1/keymanage.c:381 +msgid "Non standard keyslots alignment, manual repair required." +msgstr "Ej standardjustering på nyckelplatser, manuell reparation krävs." + +#: lib/luks1/keymanage.c:391 +msgid "Repairing keyslots." +msgstr "Reparerar nyckelplatser." + +#: lib/luks1/keymanage.c:410 +#, c-format +msgid "Keyslot %i: offset repaired (%u -> %u)." +msgstr "Nyckelplats %i: reparerad offset (%u -> %u)." + +#: lib/luks1/keymanage.c:418 +#, c-format +msgid "Keyslot %i: stripes repaired (%u -> %u)." +msgstr "Nyckelplats %i: reparerade remsor (%u -> %u)." + +#: lib/luks1/keymanage.c:427 +#, c-format +msgid "Keyslot %i: bogus partition signature." +msgstr "Nyckelplats %i: fejkpartitionssignatur." + +#: lib/luks1/keymanage.c:432 +#, c-format +msgid "Keyslot %i: salt wiped." +msgstr "Nyckelplats %i: salt borttaget." + +#: lib/luks1/keymanage.c:449 +msgid "Writing LUKS header to disk." +msgstr "Skriver LUKS-huvud till disk." + +#: lib/luks1/keymanage.c:454 +msgid "Repair failed." +msgstr "Reparation misslyckades." + +#: lib/luks1/keymanage.c:482 lib/luks1/keymanage.c:751 +#, c-format +msgid "Requested LUKS hash %s is not supported." +msgstr "Begärd LUKS-hash %s stöds inte." + +#: lib/luks1/keymanage.c:510 src/cryptsetup.c:1081 +msgid "No known problems detected for LUKS header." +msgstr "Inga kända problem identifierade för LUKS-huvud." + +#: lib/luks1/keymanage.c:661 +#, 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:669 +#, 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:745 +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:756 lib/luks1/keymanage.c:821 +#: lib/luks2/luks2_json_format.c:283 lib/luks2/luks2_json_metadata.c:1002 +#: src/cryptsetup.c:2647 +msgid "Wrong LUKS UUID format provided." +msgstr "Felaktigt LUKS-UUID-format angavs." + +#: lib/luks1/keymanage.c:779 +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:800 +#, 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:844 +#, c-format +msgid "Key slot %d active, purge first." +msgstr "Nyckelplats %d är aktiv, rensa först." + +#: lib/luks1/keymanage.c:850 +#, 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:1060 +#, 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:1078 lib/luks2/luks2_keyslot.c:743 +#, c-format +msgid "Cannot wipe device %s." +msgstr "Kan inte rensa enheten %s." + +#: lib/loopaes/loopaes.c:146 +msgid "Detected not yet supported GPG encrypted keyfile." +msgstr "Identifierade en GPG-krypterad nyckelfil som ännu inte stöds." + +#: lib/loopaes/loopaes.c:147 +msgid "Please use gpg --decrypt | cryptsetup --keyfile=- ...\n" +msgstr "Använd gpg --decrypt | cryptsetup --keyfile=- …\n" + +#: lib/loopaes/loopaes.c:168 lib/loopaes/loopaes.c:188 +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." +msgstr "Kärnan stöder inte loop-AES-kompatibel mappning." + +#: lib/tcrypt/tcrypt.c:505 +#, c-format +msgid "Error reading keyfile %s." +msgstr "Fel vid läsning av nyckelfil %s." + +#: lib/tcrypt/tcrypt.c:545 +#, c-format +msgid "Maximum TCRYPT passphrase length (%d) exceeded." +msgstr "Högsta TCRYPT-lösenfraslängd (%d) överskriden." + +#: lib/tcrypt/tcrypt.c:586 +#, c-format +msgid "PBKDF2 hash algorithm %s not available, skipping." +msgstr "PBKDF2-hashalgoritm %s ej tillgänglig, hoppar över." + +#: lib/tcrypt/tcrypt.c:602 src/cryptsetup.c:959 +msgid "Required kernel crypto interface not available." +msgstr "Begärt kryptogränssnitt för kärnan inte tillgängligt." + +#: lib/tcrypt/tcrypt.c:604 src/cryptsetup.c:961 +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:744 +#, c-format +msgid "Activation is not supported for %d sector size." +msgstr "Aktivering stöds inte för sektorstorlek %d." + +#: lib/tcrypt/tcrypt.c:750 +msgid "Kernel doesn't 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:784 +#, c-format +msgid "Activating TCRYPT system encryption for partition %s." +msgstr "Aktiverar TCRYPT-systemkryptering för partition %s." + +#: lib/tcrypt/tcrypt.c:862 +msgid "Kernel doesn't support TCRYPT compatible mapping." +msgstr "Kärnan stöder inte TCRYPT-kompatibel mappning." + +#: lib/tcrypt/tcrypt.c:1084 +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:172 +#, c-format +msgid "Verity device %s doesn't use on-disk header." +msgstr "Verity-enhet %s använder inte huvud på disk." + +#: lib/verity/verity.c:91 +#, c-format +msgid "Device %s is not a valid VERITY device." +msgstr "Enheten %s är inte en giltig VERITY-enhet." + +#: lib/verity/verity.c:98 +#, c-format +msgid "Unsupported VERITY version %d." +msgstr "VERITY-versionen %d stöds inte." + +#: lib/verity/verity.c:129 +msgid "VERITY header corrupted." +msgstr "VERITY-huvud är skadat." + +#: lib/verity/verity.c:166 +#, c-format +msgid "Wrong VERITY UUID format provided on device %s." +msgstr "Felaktigt VERITY-UUID-format angivet på enhet %s." + +#: lib/verity/verity.c:199 +#, 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:262 +msgid "Errors cannot be repaired with FEC device." +msgstr "Det går inte reparera fel med FEC-enhet." + +#: lib/verity/verity.c:264 +#, c-format +msgid "Found %u repairable errors with FEC device." +msgstr "Fann %u reparerbara fel med FEC-enhet." + +#: lib/verity/verity.c:302 +msgid "Kernel doesn't support dm-verity mapping." +msgstr "Kärnan stöder inte dm-verity-mappning." + +#: lib/verity/verity.c:313 +msgid "Verity device detected corruption after activation." +msgstr "Verity-enhet identifierades som skadad efter aktivering." + +#: lib/verity/verity_hash.c:59 +#, c-format +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 +msgid "Device offset overflow." +msgstr "Enhets-offset spillde över." + +#: lib/verity/verity_hash.c:200 +#, c-format +msgid "Verification failed at position %." +msgstr "Verifiering misslyckades vid %." + +#: lib/verity/verity_hash.c:273 +msgid "Invalid size parameters for verity device." +msgstr "Ogiltig storlek på parametrar för verity-enhet." + +#: lib/verity/verity_hash.c:293 +msgid "Hash area overflow." +msgstr "Hash-området spillde över." + +#: lib/verity/verity_hash.c:370 +msgid "Verification of data area failed." +msgstr "Misslyckades med verifiering av dataområde." + +#: lib/verity/verity_hash.c:375 +msgid "Verification of root hash failed." +msgstr "Misslyckades med verifiering av rot-hash." + +#: lib/verity/verity_hash.c:381 +msgid "Input/output error while creating hash area." +msgstr "In-/utdatafel vid skapandet av hashområde." + +#: lib/verity/verity_hash.c:383 +msgid "Creation of hash area failed." +msgstr "Misslyckades med skapandet av hashområde." + +#: lib/verity/verity_hash.c:430 +#, 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 +msgid "Failed to allocate RS context." +msgstr "Misslyckades med att öppna RS-kontext." + +#: lib/verity/verity_fec.c:147 +msgid "Failed to allocate buffer." +msgstr "Misslyckades med att allokera buffert." + +#: lib/verity/verity_fec.c:157 +#, 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 +#, 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 +#, 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 +#, 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 +msgid "Block sizes must match for FEC." +msgstr "Blockstorlekar måste matcha för FEC." + +#: lib/verity/verity_fec.c:230 +msgid "Invalid number of parity bytes." +msgstr "Ogiltigt antal paritet-byte." + +#: lib/verity/verity_fec.c:266 +#, 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:241 lib/integrity/integrity.c:306 +msgid "Kernel doesn't support dm-integrity mapping." +msgstr "Kärnan stöder inte dm-integrity-mappning." + +#: lib/luks2/luks2_disk_metadata.c:383 lib/luks2/luks2_json_metadata.c:959 +#: lib/luks2/luks2_json_metadata.c:1245 +#, 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 "" + +#: 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" +"Kör ”cryptsetup repair” för återhämtning." + +#: lib/luks2/luks2_json_format.c:227 +msgid "Requested data offset is too small." +msgstr "Begärd dataoff för liten." + +#: lib/luks2/luks2_json_format.c:271 +#, 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:946 lib/luks2/luks2_json_metadata.c:1075 +#: lib/luks2/luks2_json_metadata.c:1151 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:1168 +#, 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:1209 +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:1215 +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:1222 +#, c-format +msgid "Device %s %s%s%s%s" +msgstr "Enhet %s %s%s%s%s" + +#: lib/luks2/luks2_json_metadata.c:1223 +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:1224 +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:1226 +msgid "" +"\n" +"WARNING: unknown LUKS2 requirements detected in real device header!\n" +"Replacing header with backup may corrupt the data on that device!" +msgstr "" +"\n" +"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:1228 +msgid "" +"\n" +"WARNING: Unfinished offline reencryption detected on the device!\n" +"Replacing header with backup may corrupt data." +msgstr "" +"\n" +"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:1324 +#, c-format +msgid "Ignored unknown flag %s." +msgstr "Ignorerade okänd flagga %s." + +#: lib/luks2/luks2_json_metadata.c:2011 lib/luks2/luks2_reencrypt.c:1746 +#, c-format +msgid "Missing key for dm-crypt segment %u" +msgstr "" + +#: lib/luks2/luks2_json_metadata.c:2023 lib/luks2/luks2_reencrypt.c:1764 +#, fuzzy +msgid "Failed to set dm-crypt segment." +msgstr "Misslyckades med att läsa dm-%s-segment." + +#: lib/luks2/luks2_json_metadata.c:2029 lib/luks2/luks2_reencrypt.c:1770 +#, fuzzy +msgid "Failed to set dm-linear segment." +msgstr "Misslyckades med att läsa dm-%s-segment." + +#: lib/luks2/luks2_json_metadata.c:2156 +msgid "Unsupported device integrity configuration." +msgstr "" + +#: lib/luks2/luks2_json_metadata.c:2242 +msgid "Reencryption in-progress. Cannot deactivate device." +msgstr "" + +#: lib/luks2/luks2_json_metadata.c:2253 lib/luks2/luks2_reencrypt.c:3171 +#, c-format +msgid "Failed to replace suspended device %s with dm-error target." +msgstr "" + +#: lib/luks2/luks2_json_metadata.c:2333 +msgid "Failed to read LUKS2 requirements." +msgstr "Misslyckades med att läsa LUKS2-krav." + +#: lib/luks2/luks2_json_metadata.c:2340 +msgid "Unmet LUKS2 requirements detected." +msgstr "Ej uppfyllt LUKS2-krav identifierat." + +#: lib/luks2/luks2_json_metadata.c:2348 +msgid "Offline reencryption in progress. Aborting." +msgstr "Frånkopplad kryptering pågår. Avbryter." + +#: lib/luks2/luks2_json_metadata.c:2350 +#, fuzzy +msgid "Online reencryption in progress. Aborting." +msgstr "Frånkopplad kryptering pågår. Avbryter." + +#: lib/luks2/luks2_keyslot.c:552 lib/luks2/luks2_keyslot.c:589 +msgid "Not enough available memory to open a keyslot." +msgstr "" + +#: lib/luks2/luks2_keyslot.c:554 lib/luks2/luks2_keyslot.c:591 +#, fuzzy +msgid "Keyslot open failed." +msgstr "Nyckelplats %d har verifierats.\n" + +#: lib/luks2/luks2_keyslot_luks2.c:53 lib/luks2/luks2_keyslot_luks2.c:108 +#, fuzzy, c-format +msgid "Cannot use %s-%s cipher for keyslot encryption." +msgstr "LUKS2-nyckelplats: Chiffret används krypering av nyckelplats" + +#: 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:481 +#, fuzzy, c-format +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:507 +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:547 +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:590 lib/luks2/luks2_luks1_convert.c:872 +msgid "Unable to move keyslot area." +msgstr "Kunde inte flytta nyckelplatsområde." + +#: lib/luks2/luks2_luks1_convert.c:682 +#, fuzzy +msgid "Cannot convert to LUKS1 format - default segment encryption sector size is not 512 bytes." +msgstr "Det går inte att konvertera till LUKS1-format - nyckelplats %u är inte LUKS1-kompatibel." + +#: lib/luks2/luks2_luks1_convert.c:690 +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:702 +#, 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." + +#: lib/luks2/luks2_luks1_convert.c:710 +#, 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:724 +#, 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:729 +#, 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:734 +#, 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 "" + +#: lib/luks2/luks2_reencrypt.c:897 +#, fuzzy, c-format +msgid "Device size must be multiple of calculated zone alignment (%zu bytes)." +msgstr "Storlek på enhet %s är inte justerad till begärd sektorstorlek (%u byte)." + +#: lib/luks2/luks2_reencrypt.c:941 +#, fuzzy, c-format +msgid "Unsupported resilience mode %s" +msgstr "Parametrar som inte stöds på enheten %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:3011 +#, fuzzy +msgid "Failed to initialize old segment storage wrapper." +msgstr "Misslyckades med att initiera identifiering av enhetssignatur." + +#: lib/luks2/luks2_reencrypt.c:1172 lib/luks2/luks2_reencrypt.c:1291 +#, fuzzy +msgid "Failed to initialize new segment storage wrapper." +msgstr "Misslyckades med att initiera identifiering av enhetssignatur." + +#: lib/luks2/luks2_reencrypt.c:1340 +#, fuzzy +msgid "Failed to read checksums for current hotzone." +msgstr "Misslyckades med att läsa krav från säkerhetskopiehuvud." + +#: lib/luks2/luks2_reencrypt.c:1347 lib/luks2/luks2_reencrypt.c:3019 +#, fuzzy, c-format +msgid "Failed to read hotzone area starting at %." +msgstr "Misslyckades med att skriva paritet för RS block %." + +#: lib/luks2/luks2_reencrypt.c:1366 +#, fuzzy, c-format +msgid "Failed to decrypt sector %zu." +msgstr "Misslyckades med att ta status på enhet %s." + +#: lib/luks2/luks2_reencrypt.c:1372 +#, fuzzy, c-format +msgid "Failed to recover sector %zu." +msgstr "Misslyckades med att ta bort token %d.\n" + +#: lib/luks2/luks2_reencrypt.c:1867 +#, c-format +msgid "Source and target device sizes don't match. Source %, target: %." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:1965 +#, fuzzy, c-format +msgid "Failed to activate hotzone device %s." +msgstr "Misslyckades med att ta status på enhet %s." + +#: lib/luks2/luks2_reencrypt.c:1982 +#, fuzzy, c-format +msgid "Failed to activate overlay device %s with actual origin table." +msgstr "Misslyckades med söka av enheten %s efter en signatur." + +#: lib/luks2/luks2_reencrypt.c:1989 +#, fuzzy, c-format +msgid "Failed to load new mapping for device %s." +msgstr "Misslyckades med att bestämma storlek för enhet %s." + +#: lib/luks2/luks2_reencrypt.c:2060 +#, fuzzy +msgid "Failed to refresh reencryption devices stack." +msgstr "Misslyckades med att erhålla läslås på enheten %s." + +#: lib/luks2/luks2_reencrypt.c:2216 +#, fuzzy +msgid "Failed to set new keyslots area size." +msgstr "Misslyckades med att byta ny nyckelplats." + +#: lib/luks2/luks2_reencrypt.c:2318 +#, fuzzy, c-format +msgid "Data shift is not aligned to requested encryption sector size (% bytes)." +msgstr "Storlek på enhet %s är inte justerad till begärd sektorstorlek (%u byte)." + +#: lib/luks2/luks2_reencrypt.c:2339 +#, fuzzy, c-format +msgid "Data device is not aligned to requested encryption sector size (% bytes)." +msgstr "Storlek på enhet %s är inte justerad till begärd sektorstorlek (%u byte)." + +#: lib/luks2/luks2_reencrypt.c:2360 +#, c-format +msgid "Data shift (% sectors) is less than future data offset (% sectors)." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:2366 lib/luks2/luks2_reencrypt.c:2760 +#: lib/luks2/luks2_reencrypt.c:2781 +#, fuzzy, c-format +msgid "Failed to open %s in exclusive mode (already mapped or mounted)." +msgstr "Det går inte att använda enheten %s som redan används (redan mappad eller monterad)." + +#: lib/luks2/luks2_reencrypt.c:2534 +#, fuzzy +msgid "No LUKS2 reencryption in progress." +msgstr "Omkryptering pågår redan." + +#: lib/luks2/luks2_reencrypt.c:2540 lib/luks2/luks2_reencrypt.c:3276 +#, fuzzy +msgid "Failed to load LUKS2 reencryption context." +msgstr "Misslyckades med att öppna RS-kontext." + +#: lib/luks2/luks2_reencrypt.c:2600 +#, fuzzy +msgid "Failed to get reencryption state." +msgstr "Misslyckades med att hämta token %d för export." + +#: lib/luks2/luks2_reencrypt.c:2604 +#, fuzzy +msgid "Device is not in reencryption." +msgstr "Enheten %s är inte aktiv." + +#: lib/luks2/luks2_reencrypt.c:2611 +#, fuzzy +msgid "Reencryption process is already running." +msgstr "Omkryptering pågår redan." + +#: lib/luks2/luks2_reencrypt.c:2613 +#, fuzzy +msgid "Failed to acquire reencryption lock." +msgstr "Misslyckades med att erhålla skrivlås för enhet." + +#: lib/luks2/luks2_reencrypt.c:2631 +msgid "Cannot proceed with reencryption. Run reencryption recovery first." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:2731 +#, fuzzy +msgid "Active device size and requested reencryption size don't match." +msgstr "Storlek på enhet är inte justerad till begärd sektorstorlek." + +#: lib/luks2/luks2_reencrypt.c:2745 +msgid "Illegal device size requested in reencryption parameters." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:2815 +#, fuzzy +msgid "Reencryption in-progress. Cannot perform recovery." +msgstr "Omkryptering pågår redan." + +#: lib/luks2/luks2_reencrypt.c:2887 +msgid "LUKS2 reencryption already initialized in metadata." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:2894 +#, fuzzy +msgid "Failed to initialize LUKS2 reencryption in metadata." +msgstr "Misslyckades med att sätta standardnyckelplats för LUKS2-parametrar." + +#: lib/luks2/luks2_reencrypt.c:2985 +#, fuzzy +msgid "Failed to set device segments for next reencryption hotzone." +msgstr "Misslyckades med söka av enheten %s efter en signatur." + +#: lib/luks2/luks2_reencrypt.c:3027 +#, fuzzy +msgid "Failed to write reencryption resilience metadata." +msgstr "Misslyckades med att skriva aktiveringsflaggor till nya huvuden.:" + +#: lib/luks2/luks2_reencrypt.c:3034 +#, fuzzy +msgid "Decryption failed." +msgstr "Reparation misslyckades." + +#: lib/luks2/luks2_reencrypt.c:3039 +#, fuzzy, c-format +msgid "Failed to write hotzone area starting at %." +msgstr "Misslyckades med att skriva paritet för RS block %." + +#: lib/luks2/luks2_reencrypt.c:3044 +#, fuzzy +msgid "Failed to sync data." +msgstr "Misslyckades med att sätta dataoffset." + +#: lib/luks2/luks2_reencrypt.c:3052 +msgid "Failed to update metadata after current reencryption hotzone completed." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:3119 +#, fuzzy +msgid "Failed to write LUKS2 metadata." +msgstr "Misslyckades med att läsa LUKS2-krav." + +#: lib/luks2/luks2_reencrypt.c:3142 +#, fuzzy +msgid "Failed to wipe backup segment data." +msgstr "Misslyckades med att radera enhetssignatur." + +#: lib/luks2/luks2_reencrypt.c:3155 +#, fuzzy +msgid "Failed to disable reencryption requirement flag." +msgstr "Misslyckades med att läsa LUKS2-krav." + +#: lib/luks2/luks2_reencrypt.c:3163 +#, c-format +msgid "Fatal error while reencrypting chunk starting at %, % sectors long." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:3172 +msgid "Do not resume the device unless replaced with error target manually." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:3221 +msgid "Cannot proceed with reencryption. Unexpected reencryption status." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:3227 +msgid "Missing or invalid reencrypt context." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:3234 +#, fuzzy +msgid "Failed to initialize reencryption device stack." +msgstr "Misslyckades med att initiera identifiering av enhetssignatur." + +#: lib/luks2/luks2_reencrypt.c:3253 lib/luks2/luks2_reencrypt.c:3289 +#, fuzzy +msgid "Failed to update reencryption context." +msgstr "Misslyckades med att öppna RS-kontext." + +#: lib/luks2/luks2_token.c:262 +msgid "No free token slot." +msgstr "Ingen fri plats för token." + +#: lib/luks2/luks2_token.c:269 +#, c-format +msgid "Failed to create builtin token %s." +msgstr "Misslyckades med att skapa inbyggd token %s." + +#: src/cryptsetup.c:162 +msgid "Can't do passphrase verification on non-tty inputs." +msgstr "Kan inte verifiera lösenfras på icke-tty-ingångar." + +#: src/cryptsetup.c:215 +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:245 src/cryptsetup.c:893 src/cryptsetup.c:1212 +#: src/cryptsetup.c:3011 src/cryptsetup_reencrypt.c:715 +#: src/cryptsetup_reencrypt.c:785 +msgid "No known cipher specification pattern detected." +msgstr "Inget känt chifferspecifikationsmönster kunde identifieras." + +#: src/cryptsetup.c:253 +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:261 +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:301 +#, 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:307 src/cryptsetup.c:1038 src/cryptsetup.c:1090 +#: src/cryptsetup.c:1189 src/cryptsetup.c:1262 src/cryptsetup.c:1913 +#: src/cryptsetup.c:2545 src/cryptsetup.c:2668 src/integritysetup.c:232 +msgid "Operation aborted.\n" +msgstr "Åtgärd avbruten.\n" + +#: src/cryptsetup.c:375 +msgid "Option --key-file is required." +msgstr "Flaggan --key-file krävs." + +#: src/cryptsetup.c:428 +msgid "Enter VeraCrypt PIM: " +msgstr "Ange VeraCrypt PIM: " + +#: src/cryptsetup.c:437 +msgid "Invalid PIM value: parse error." +msgstr "Ogiltigt PIM-värde:tolkningsfel." + +#: src/cryptsetup.c:440 +msgid "Invalid PIM value: 0." +msgstr "Ogiltigt PIM-värde: 0." + +#: src/cryptsetup.c:443 +msgid "Invalid PIM value: outside of range." +msgstr "Ogiltigt PIM-värde:utanför intervallet." + +#: src/cryptsetup.c:466 +msgid "No device header detected with this passphrase." +msgstr "Inget enhetshuvud finns tillgängligt med denna lösenfras." + +#: src/cryptsetup.c:528 src/cryptsetup.c:1940 +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 "" +"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:607 +#, 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:635 +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:771 +msgid "Benchmark interrupted." +msgstr "Prestandamätning avbruten." + +#: src/cryptsetup.c:792 +#, c-format +msgid "PBKDF2-%-9s N/A\n" +msgstr "PBKDF2-%-9s N/A\n" + +#: src/cryptsetup.c:794 +#, 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:808 +#, c-format +msgid "%-10s N/A\n" +msgstr "%-10s N/A\n" + +#: src/cryptsetup.c:810 +#, 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:834 +msgid "Result of benchmark is not reliable." +msgstr "Resultat från prestandamätningen är inte pålitligt." + +#: src/cryptsetup.c:885 +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:919 +#, c-format +msgid "#%*s Algorithm | Key | Encryption | Decryption\n" +msgstr "#%*s Algoritm | Nyckel | Kryptering | Avkryptering\n" + +#: src/cryptsetup.c:923 +#, c-format +msgid "Cipher %s is not available." +msgstr "Chiffret %s är inte tillgängligt." + +#. TRANSLATORS: The string is header of a table and must be exactly (right side) aligned. +#: src/cryptsetup.c:943 +msgid "# Algorithm | Key | Encryption | Decryption\n" +msgstr "# Algoritm | Nyckel | Kryptering | AVkryptering\n" + +#: src/cryptsetup.c:952 +msgid "N/A" +msgstr "N/A" + +#: src/cryptsetup.c:1031 +msgid "" +"Seems device does not require reencryption recovery.\n" +"Do you want to proceed anyway?" +msgstr "" + +#: src/cryptsetup.c:1037 +msgid "Really proceed with LUKS2 reencryption recovery?" +msgstr "" + +#: src/cryptsetup.c:1046 +#, fuzzy +msgid "Enter passphrase for reencryption recovery: " +msgstr "Ange lösenfras för nyckelplats att konvertera: " + +#: src/cryptsetup.c:1089 +msgid "Really try to repair LUKS device header?" +msgstr "Vill du verkligen försöka att reparera LUKS-enhetshuvud?" + +#: src/cryptsetup.c:1108 src/integritysetup.c:145 +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 "" +"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:1130 src/integritysetup.c:167 +#, c-format +msgid "Cannot deactivate temporary device %s." +msgstr "Det går inte att inaktivera temporär enhet %s." + +#: src/cryptsetup.c:1174 +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:1179 src/cryptsetup.c:1239 +msgid "Unsupported LUKS2 metadata size options." +msgstr "Flaggorna för storlekar på LUKS2-metadata stöds inte." + +#: src/cryptsetup.c:1196 +#, c-format +msgid "Cannot create header file %s." +msgstr "Det går inte att skapa huvudfil %s." + +#: src/cryptsetup.c:1219 src/integritysetup.c:194 src/integritysetup.c:203 +#: src/integritysetup.c:212 src/integritysetup.c:279 src/integritysetup.c:288 +#: src/integritysetup.c:298 +msgid "No known integrity specification pattern detected." +msgstr "Inga kända integritetspecifikationsmönster identifierat." + +#: src/cryptsetup.c:1232 +#, c-format +msgid "Cannot use %s as on-disk header." +msgstr "Det går inte att använda %s som diskhuvud." + +#: src/cryptsetup.c:1256 src/integritysetup.c:226 +#, 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:1297 src/cryptsetup.c:1627 src/cryptsetup.c:1694 +#: src/cryptsetup.c:1796 src/cryptsetup.c:1862 src/cryptsetup_reencrypt.c:545 +msgid "Failed to set pbkdf parameters." +msgstr "Misslyckades med att sätta pbkdf-parametrar." + +#: src/cryptsetup.c:1378 +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:1389 src/cryptsetup.c:1700 +msgid "Cannot determine volume key size for LUKS without keyslots, please use --key-size option." +msgstr "" + +#: src/cryptsetup.c:1427 +msgid "Device activated but cannot make flags persistent." +msgstr "Enheten aktiverad men kan inte spara undan flaggorna." + +#: src/cryptsetup.c:1508 src/cryptsetup.c:1578 +#, c-format +msgid "Keyslot %d is selected for deletion." +msgstr "Nyckelplats %d markerad för borttagning." + +#: src/cryptsetup.c:1520 src/cryptsetup.c:1581 +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:1521 +msgid "Enter any remaining passphrase: " +msgstr "Ange eventuell återstående lösenfras: " + +#: src/cryptsetup.c:1522 src/cryptsetup.c:1583 +msgid "Operation aborted, the keyslot was NOT wiped.\n" +msgstr "Åtgärden avbröts, nyckelplatsen raderades INTE.\n" + +#: src/cryptsetup.c:1560 +msgid "Enter passphrase to be deleted: " +msgstr "Ange lösenfras att ta bort: " + +#: src/cryptsetup.c:1641 src/cryptsetup.c:1715 src/cryptsetup.c:1749 +msgid "Enter new passphrase for key slot: " +msgstr "Ange ny lösenfras för nyckelplats: " + +#: src/cryptsetup.c:1732 src/cryptsetup_reencrypt.c:1327 +#, c-format +msgid "Enter any existing passphrase: " +msgstr "Ange valfri existerande lösenfras: " + +#: src/cryptsetup.c:1800 +msgid "Enter passphrase to be changed: " +msgstr "Ange lösenfras att ändra: " + +#: src/cryptsetup.c:1816 src/cryptsetup_reencrypt.c:1313 +msgid "Enter new passphrase: " +msgstr "Ange ny lösenfras: " + +#: src/cryptsetup.c:1866 +msgid "Enter passphrase for keyslot to be converted: " +msgstr "Ange lösenfras för nyckelplats att konvertera: " + +#: src/cryptsetup.c:1890 +msgid "Only one device argument for isLuks operation is supported." +msgstr "Endast ett enhetsargument för operationen isLuks stöds." + +#: src/cryptsetup.c:2074 src/cryptsetup.c:2095 +msgid "Option --header-backup-file is required." +msgstr "Flaggan --header-backup-file krävs." + +#: src/cryptsetup.c:2125 +#, c-format +msgid "%s is not cryptsetup managed device." +msgstr "%s är inte en cryptsetup-hanterad enhet." + +#: src/cryptsetup.c:2136 +#, c-format +msgid "Refresh is not supported for device type %s" +msgstr "Att uppdatera stöds inte för enhetstypen %s" + +#: src/cryptsetup.c:2174 +#, c-format +msgid "Unrecognized metadata device type %s." +msgstr "Okänd metadata för enhetstypen %s." + +#: src/cryptsetup.c:2177 +msgid "Command requires device and mapped name as arguments." +msgstr "Kommandot kräver enhet och mappat namn som argument." + +#: src/cryptsetup.c:2199 +#, c-format +msgid "" +"This operation will erase all keyslots on device %s.\n" +"Device will become unusable after this operation." +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:2206 +msgid "Operation aborted, keyslots were NOT wiped.\n" +msgstr "Åtgärden avbryten, nyckelplatser raderades EJ.\n" + +#: src/cryptsetup.c:2243 +msgid "Invalid LUKS type, only luks1 and luks2 are supported." +msgstr "Ogiltig LUKS-typ, endast luks1 och luks2 stöds." + +#: src/cryptsetup.c:2261 +#, c-format +msgid "Device is already %s type." +msgstr "Enheten är redan av %s-typ." + +#: src/cryptsetup.c:2266 +#, 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:2272 +msgid "Operation aborted, device was NOT converted.\n" +msgstr "Åtgärden avbröts, enheten konverterades INTE.\n" + +#: src/cryptsetup.c:2312 +msgid "Option --priority, --label or --subsystem is missing." +msgstr "Saknar flaggan --priority, --label eller --subsystem." + +#: src/cryptsetup.c:2346 src/cryptsetup.c:2379 src/cryptsetup.c:2402 +#, c-format +msgid "Token %d is invalid." +msgstr "Token %d är ogiltig." + +#: src/cryptsetup.c:2349 src/cryptsetup.c:2405 +#, c-format +msgid "Token %d in use." +msgstr "Token %d används." + +#: src/cryptsetup.c:2356 +#, c-format +msgid "Failed to add luks2-keyring token %d." +msgstr "Misslyckades med att lägga till luks2-nyckelringsstoken %d." + +#: src/cryptsetup.c:2365 src/cryptsetup.c:2427 +#, c-format +msgid "Failed to assign token %d to keyslot %d." +msgstr "Misslyckades med att tilldela token %d till nyckelplats %d." + +#: src/cryptsetup.c:2382 +#, c-format +msgid "Token %d is not in use." +msgstr "Token %d används ej." + +#: src/cryptsetup.c:2417 +msgid "Failed to import token from file." +msgstr "Misslyckades med att importera token från fil." + +#: src/cryptsetup.c:2442 +#, c-format +msgid "Failed to get token %d for export." +msgstr "Misslyckades med att hämta token %d för export." + +#: src/cryptsetup.c:2457 +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:2463 src/cryptsetup.c:2471 +msgid "Action requires specific token. Use --token-id parameter." +msgstr "Åtgärden kräver specifik token. Använd parametern --token-id." + +#: src/cryptsetup.c:2476 +#, c-format +msgid "Invalid token operation %s." +msgstr "Ogiltig tokenåtgärd %s." + +#: src/cryptsetup.c:2531 +#, c-format +msgid "Auto-detected active dm device '%s' for data device %s.\n" +msgstr "" + +#: src/cryptsetup.c:2535 +#, fuzzy, c-format +msgid "Device %s is not a block device.\n" +msgstr "Enheten %s är inte en giltig LUKS-enhet." + +#: src/cryptsetup.c:2537 +#, fuzzy, c-format +msgid "Failed to auto-detect device %s holders." +msgstr "Misslyckades med att ta status på enhet %s." + +#: src/cryptsetup.c:2539 +#, 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 "" + +#: src/cryptsetup.c:2619 +#, fuzzy +msgid "Invalid LUKS device type." +msgstr "Ogiltig enhet %s." + +#: src/cryptsetup.c:2624 +msgid "Encryption without detached header (--header) is not possible without data device size reduction (--reduce-device-size)." +msgstr "" + +#: src/cryptsetup.c:2629 +msgid "Requested data offset must be less than or equal to half of --reduce-device-size parameter." +msgstr "" + +#: src/cryptsetup.c:2638 +#, c-format +msgid "Adjusting --reduce-device-size value to twice the --offset % (sectors).\n" +msgstr "" + +#: src/cryptsetup.c:2642 +#, fuzzy +msgid "Encryption is supported only for LUKS2 format." +msgstr "Flaggan för integritet kan endast användas för formatet LUKS2." + +#: src/cryptsetup.c:2664 +#, c-format +msgid "Detected LUKS device on %s. Do you want to encrypt that LUKS device again?" +msgstr "" + +#: src/cryptsetup.c:2679 +#, fuzzy, c-format +msgid "Temporary header file %s already exists. Aborting." +msgstr "Begärd säkerhetskopia %s av huvud finns redan." + +#: src/cryptsetup.c:2681 src/cryptsetup.c:2688 +#, fuzzy, c-format +msgid "Cannot create temporary header file %s." +msgstr "Det går inte att skapa huvudfil %s." + +#: src/cryptsetup.c:2752 +#, c-format +msgid "%s/%s is now active and ready for online encryption." +msgstr "" + +#: src/cryptsetup.c:2919 src/cryptsetup.c:2925 +#, fuzzy +msgid "Not enough free keyslots for reencryption." +msgstr "Ändra inte nyckel, ingen omkryptering av dataområde" + +#: src/cryptsetup.c:2945 src/cryptsetup_reencrypt.c:1284 +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.c:2954 src/cryptsetup_reencrypt.c:1325 +#: src/cryptsetup_reencrypt.c:1336 +#, fuzzy, c-format +msgid "Enter passphrase for key slot %d: " +msgstr "Ange lösenfras för nyckelplats %u: " + +#: src/cryptsetup.c:2962 +#, c-format +msgid "Enter passphrase for key slot %u: " +msgstr "Ange lösenfras för nyckelplats %u: " + +#: src/cryptsetup.c:3129 +#, fuzzy +msgid "Command requires device as argument." +msgstr "Kommandot kräver enhet och mappat namn som argument." + +#: src/cryptsetup.c:3151 +msgid "Only LUKS2 format is currently supported. Please use cryptsetup-reencrypt tool for LUKS1." +msgstr "" + +#: src/cryptsetup.c:3163 +msgid "Legacy offline reencryption already in-progress. Use cryptsetup-reencrypt utility." +msgstr "" + +#: src/cryptsetup.c:3173 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:3181 +msgid "LUKS2 reencryption already initialized. Aborting operation." +msgstr "" + +#: src/cryptsetup.c:3185 +#, fuzzy +msgid "LUKS2 device is not in reencryption." +msgstr "Loggfilen %s existerar, återupptar kryptering.\n" + +#: src/cryptsetup.c:3212 +msgid " [--type ] []" +msgstr " [--type ] []" + +#: src/cryptsetup.c:3212 src/veritysetup.c:358 src/integritysetup.c:470 +msgid "open device as " +msgstr "öppna enhet som " + +#: src/cryptsetup.c:3213 src/cryptsetup.c:3214 src/cryptsetup.c:3215 +#: src/veritysetup.c:359 src/veritysetup.c:360 src/integritysetup.c:471 +#: src/integritysetup.c:472 +msgid "" +msgstr "" + +#: src/cryptsetup.c:3213 src/veritysetup.c:359 src/integritysetup.c:471 +msgid "close device (remove mapping)" +msgstr "stäng enhet (ta bort mappning)" + +#: src/cryptsetup.c:3214 +msgid "resize active device" +msgstr "ändra storlek på aktiv enhet" + +#: src/cryptsetup.c:3215 +msgid "show device status" +msgstr "visa enhetsstatus" + +#: src/cryptsetup.c:3216 +msgid "[--cipher ]" +msgstr "[--cipher ]" + +#: src/cryptsetup.c:3216 +msgid "benchmark cipher" +msgstr "prestandamät chiffer" + +#: src/cryptsetup.c:3217 src/cryptsetup.c:3218 src/cryptsetup.c:3219 +#: src/cryptsetup.c:3220 src/cryptsetup.c:3221 src/cryptsetup.c:3228 +#: src/cryptsetup.c:3229 src/cryptsetup.c:3230 src/cryptsetup.c:3231 +#: src/cryptsetup.c:3232 src/cryptsetup.c:3233 src/cryptsetup.c:3234 +#: src/cryptsetup.c:3235 +msgid "" +msgstr "" + +#: src/cryptsetup.c:3217 +msgid "try to repair on-disk metadata" +msgstr "försök att reparera metadata på disken" + +#: src/cryptsetup.c:3218 +#, fuzzy +msgid "reencrypt LUKS2 device" +msgstr "lägg till nyckel till LUKS-enhet" + +#: src/cryptsetup.c:3219 +msgid "erase all keyslots (remove encryption key)" +msgstr "ta bort alla nyckelplatser (ta bort krypteringsnyckeln)" + +#: src/cryptsetup.c:3220 +msgid "convert LUKS from/to LUKS2 format" +msgstr "konvertera LUKS från/till LUKS2-format" + +#: src/cryptsetup.c:3221 +msgid "set permanent configuration options for LUKS2" +msgstr "ange permanenta konfigurationsflaggor för LUKS2" + +#: src/cryptsetup.c:3222 src/cryptsetup.c:3223 +msgid " []" +msgstr " []" + +#: src/cryptsetup.c:3222 +msgid "formats a LUKS device" +msgstr "formaterar en LUKS-enhet" + +#: src/cryptsetup.c:3223 +msgid "add key to LUKS device" +msgstr "lägg till nyckel till LUKS-enhet" + +#: src/cryptsetup.c:3224 src/cryptsetup.c:3225 src/cryptsetup.c:3226 +msgid " []" +msgstr " []" + +#: src/cryptsetup.c:3224 +msgid "removes supplied key or key file from LUKS device" +msgstr "tar bort angiven nyckel eller nyckelfil från LUKS-enhet" + +#: src/cryptsetup.c:3225 +msgid "changes supplied key or key file of LUKS device" +msgstr "ändrar angiven nyckel eller nyckelfil för LUKS-enhet" + +#: src/cryptsetup.c:3226 +msgid "converts a key to new pbkdf parameters" +msgstr "konverterar en nyckel till nya pbkdf-parametrar" + +#: src/cryptsetup.c:3227 +msgid " " +msgstr " " + +#: src/cryptsetup.c:3227 +msgid "wipes key with number from LUKS device" +msgstr "rensar nyckeln med nummer från LUKS-enhet" + +#: src/cryptsetup.c:3228 +msgid "print UUID of LUKS device" +msgstr "skriv ut UUID för LUKS-enhet" + +#: src/cryptsetup.c:3229 +msgid "tests for LUKS partition header" +msgstr "testar för LUKS-partitionshuvud" + +#: src/cryptsetup.c:3230 +msgid "dump LUKS partition information" +msgstr "skriver ut information om LUKS-partition" + +#: src/cryptsetup.c:3231 +msgid "dump TCRYPT device information" +msgstr "skriver ut information om TCRYPT-partition" + +#: src/cryptsetup.c:3232 +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:3233 +msgid "Resume suspended LUKS device" +msgstr "Återuppta LUKS-enhet i vänteläge" + +#: src/cryptsetup.c:3234 +msgid "Backup LUKS device header and keyslots" +msgstr "Säkerhetskopiera huvud och nyckelplatser från LUKS-enhet" + +#: src/cryptsetup.c:3235 +msgid "Restore LUKS device header and keyslots" +msgstr "Återställ huvud och nyckelplatser för LUKS-enhet" + +#: src/cryptsetup.c:3236 +msgid " " +msgstr " " + +#: src/cryptsetup.c:3236 +msgid "Manipulate LUKS2 tokens" +msgstr "Manipulera LUKS2-token" + +#: src/cryptsetup.c:3254 src/veritysetup.c:376 src/integritysetup.c:488 +msgid "" +"\n" +" is one of:\n" +msgstr "" +"\n" +"<åtgärd> är en av:\n" + +#: src/cryptsetup.c:3260 +msgid "" +"\n" +"You can also use old syntax aliases:\n" +"\topen: create (plainOpen), luksOpen, loopaesOpen, tcryptOpen\n" +"\tclose: remove (plainClose), luksClose, loopaesClose, tcryptClose\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" + +#: src/cryptsetup.c:3264 +#, c-format +msgid "" +"\n" +" is the device to create under %s\n" +" is the encrypted device\n" +" is the LUKS key slot number to modify\n" +" optional key file for the new key for luksAddKey action\n" +msgstr "" +"\n" +" är enheten att skapa under %s\n" +" är den krypterade enheten\n" +" ä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:3271 +#, c-format +msgid "" +"\n" +"Default compiled-in metadata format is %s (for luksFormat action).\n" +msgstr "" +"\n" +"Inkompilerat standardmetadataformat är %s (för luksFormat-åtgärd).\n" + +#: src/cryptsetup.c:3276 +#, c-format +msgid "" +"\n" +"Default compiled-in key and passphrase parameters:\n" +"\tMaximum keyfile size: %dkB, Maximum interactive passphrase length %d (characters)\n" +"Default PBKDF for LUKS1: %s, iteration time: %d (ms)\n" +"Default PBKDF for LUKS2: %s\n" +"\tIteration time: %d, Memory required: %dkB, Parallel threads: %d\n" +msgstr "" +"\n" +"Inkompilerade standardnyckel- och standardlösenfrasparametrar:\n" +"\tStörsta nyckelfilstorlek: %dkB, Största interaktiv lösenfraslängd %d (tecken)\n" +"Standard-PBKDF för LUKS1: %s, iterationstid: %d (ms)\n" +"Standard-PBKDF för LUKS2: %s\n" +"\tIterationstid: %d, Minne: %dkB, Parallella trådar: %d\n" + +#: src/cryptsetup.c:3287 +#, c-format +msgid "" +"\n" +"Default compiled-in device cipher parameters:\n" +"\tloop-AES: %s, Key %d bits\n" +"\tplain: %s, Key: %d bits, Password hashing: %s\n" +"\tLUKS: %s, Key: %d bits, LUKS header hashing: %s, RNG: %s\n" +msgstr "" +"\n" +"Inkompilerade standardchifferparametrar för enheter:\n" +"\tloop-AES: %s, Nyckel %d bitar\n" +"\tplain: %s, Nyckel: %d bitar, Lösenordshashning: %s\n" +"\tLUKS1: %s, Nyckel: %d bitar, LUKS-huvudhashning %s, RNG: %s\n" + +#: src/cryptsetup.c:3296 +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:3312 src/veritysetup.c:532 src/integritysetup.c:630 +#, c-format +msgid "%s: requires %s as arguments" +msgstr "%s: kräver %s som argument" + +#: src/cryptsetup.c:3350 src/veritysetup.c:421 src/integritysetup.c:527 +#: src/cryptsetup_reencrypt.c:1591 +msgid "Show this help message" +msgstr "Visa detta hjälpmeddelande" + +#: src/cryptsetup.c:3351 src/veritysetup.c:422 src/integritysetup.c:528 +#: src/cryptsetup_reencrypt.c:1592 +msgid "Display brief usage" +msgstr "Visa kort information om användning" + +#: src/cryptsetup.c:3352 src/veritysetup.c:423 src/integritysetup.c:529 +#: src/cryptsetup_reencrypt.c:1593 +msgid "Print package version" +msgstr "Skriv ut paketversion" + +#: src/cryptsetup.c:3356 src/veritysetup.c:427 src/integritysetup.c:533 +#: src/cryptsetup_reencrypt.c:1597 +msgid "Help options:" +msgstr "Hjälpflaggor:" + +#: src/cryptsetup.c:3357 src/veritysetup.c:428 src/integritysetup.c:534 +#: src/cryptsetup_reencrypt.c:1598 +msgid "Shows more detailed error messages" +msgstr "Visar mer detaljerade felmeddelanden" + +#: src/cryptsetup.c:3358 src/veritysetup.c:429 src/integritysetup.c:535 +#: src/cryptsetup_reencrypt.c:1599 +msgid "Show debug messages" +msgstr "Visa felsökningsmeddelanden" + +#: src/cryptsetup.c:3359 +msgid "Show debug messages including JSON metadata" +msgstr "Visa felsökningsmeddelanden inklusive JSON-metadata" + +#: src/cryptsetup.c:3360 src/cryptsetup_reencrypt.c:1601 +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:3361 src/cryptsetup_reencrypt.c:1603 +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:3362 +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:3363 src/cryptsetup_reencrypt.c:1605 +msgid "Read the key from a file" +msgstr "Läs nyckeln från en fil" + +#: src/cryptsetup.c:3364 +msgid "Read the volume (master) key from file." +msgstr "Läs volymnyckeln (master) från fil." + +#: src/cryptsetup.c:3365 +msgid "Dump volume (master) key instead of keyslots info" +msgstr "Skriv ut volymnyckel (master) istället för nyckelplatsinfo" + +#: src/cryptsetup.c:3366 src/cryptsetup_reencrypt.c:1602 +msgid "The size of the encryption key" +msgstr "Storleken för krypteringsnyckeln" + +#: src/cryptsetup.c:3366 src/cryptsetup.c:3425 src/integritysetup.c:553 +#: src/integritysetup.c:557 src/integritysetup.c:561 +#: src/cryptsetup_reencrypt.c:1602 +msgid "BITS" +msgstr "BITAR" + +#: src/cryptsetup.c:3367 src/cryptsetup_reencrypt.c:1618 +msgid "Limits the read from keyfile" +msgstr "Begränsa läsningen från nyckelfil" + +#: src/cryptsetup.c:3367 src/cryptsetup.c:3368 src/cryptsetup.c:3369 +#: src/cryptsetup.c:3370 src/cryptsetup.c:3373 src/cryptsetup.c:3422 +#: src/cryptsetup.c:3423 src/cryptsetup.c:3431 src/cryptsetup.c:3432 +#: src/veritysetup.c:432 src/veritysetup.c:433 src/veritysetup.c:434 +#: src/veritysetup.c:437 src/veritysetup.c:438 src/integritysetup.c:542 +#: src/integritysetup.c:548 src/integritysetup.c:549 +#: src/cryptsetup_reencrypt.c:1617 src/cryptsetup_reencrypt.c:1618 +#: src/cryptsetup_reencrypt.c:1619 src/cryptsetup_reencrypt.c:1620 +msgid "bytes" +msgstr "byte" + +#: src/cryptsetup.c:3368 src/cryptsetup_reencrypt.c:1617 +msgid "Number of bytes to skip in keyfile" +msgstr "Antal byte att hoppa över i nyckelfil" + +#: src/cryptsetup.c:3369 +msgid "Limits the read from newly added keyfile" +msgstr "Begränsa läsningen från nyligen tillagd nyckelfil" + +#: src/cryptsetup.c:3370 +msgid "Number of bytes to skip in newly added keyfile" +msgstr "Antal byte att hoppa över i nyligen tillagd nyckelfil" + +#: src/cryptsetup.c:3371 +msgid "Slot number for new key (default is first free)" +msgstr "Platsnummer för ny nyckel (standard är första lediga)" + +#: src/cryptsetup.c:3372 +msgid "The size of the device" +msgstr "Storleken för enheten" + +#: src/cryptsetup.c:3372 src/cryptsetup.c:3374 src/cryptsetup.c:3375 +#: src/cryptsetup.c:3381 src/integritysetup.c:543 src/integritysetup.c:550 +msgid "SECTORS" +msgstr "SEKTORER" + +#: src/cryptsetup.c:3373 src/cryptsetup_reencrypt.c:1620 +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:3374 +msgid "The start offset in the backend device" +msgstr "Startoffset i bakändesenheten" + +#: src/cryptsetup.c:3375 +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:3376 +msgid "Create a readonly mapping" +msgstr "Skapa en skrivskyddad mappning" + +#: src/cryptsetup.c:3377 src/integritysetup.c:536 +#: src/cryptsetup_reencrypt.c:1608 +msgid "Do not ask for confirmation" +msgstr "Fråga inte efter bekräftelse" + +#: src/cryptsetup.c:3378 +msgid "Timeout for interactive passphrase prompt (in seconds)" +msgstr "Tidsgräns för interaktiv lösenfrasprompt (i sekunder)" + +#: src/cryptsetup.c:3378 src/cryptsetup.c:3379 src/integritysetup.c:537 +#: src/cryptsetup_reencrypt.c:1609 +msgid "secs" +msgstr "sek" + +#: src/cryptsetup.c:3379 src/integritysetup.c:537 +#: src/cryptsetup_reencrypt.c:1609 +msgid "Progress line update (in seconds)" +msgstr "Uppdatering av förloppslinje (i sekunder)" + +#: src/cryptsetup.c:3380 src/cryptsetup_reencrypt.c:1610 +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:3381 +msgid "Align payload at sector boundaries - for luksFormat" +msgstr "Justera nyttolast i sektorgränser - för luksFormat" + +#: src/cryptsetup.c:3382 +msgid "File with LUKS header and keyslots backup" +msgstr "Fil med säkerhetskopior av LUKS-huvud och nyckelplatser" + +#: src/cryptsetup.c:3383 src/cryptsetup_reencrypt.c:1611 +msgid "Use /dev/random for generating volume key" +msgstr "Använd /dev/random för att generera volymnyckel" + +#: src/cryptsetup.c:3384 src/cryptsetup_reencrypt.c:1612 +msgid "Use /dev/urandom for generating volume key" +msgstr "Använd /dev/urandom för att generera volymnyckel" + +#: src/cryptsetup.c:3385 +msgid "Share device with another non-overlapping crypt segment" +msgstr "Dela enhet med ett annat ej överlappande krypteringssegment" + +#: src/cryptsetup.c:3386 src/veritysetup.c:441 +msgid "UUID for device to use" +msgstr "UUID för enheten att använda" + +#: src/cryptsetup.c:3387 +msgid "Allow discards (aka TRIM) requests for device" +msgstr "Tillåt avvisningsbegäran (TRIM) för enhet" + +#: src/cryptsetup.c:3388 src/cryptsetup_reencrypt.c:1629 +msgid "Device or file with separated LUKS header" +msgstr "Enhet eller fil med separerat LUKS-huvud" + +#: src/cryptsetup.c:3389 +msgid "Do not activate device, just check passphrase" +msgstr "Aktivera inte enhet, kontrollera endast lösenfrasen" + +#: src/cryptsetup.c:3390 +msgid "Use hidden header (hidden TCRYPT device)" +msgstr "Använd dolt huvud (gömd TCRYPT-enhet)" + +#: src/cryptsetup.c:3391 +msgid "Device is system TCRYPT drive (with bootloader)" +msgstr "Enheten är system-TCRYPT-disk (med starthanterare)" + +#: src/cryptsetup.c:3392 +msgid "Use backup (secondary) TCRYPT header" +msgstr "Använd säkerhetskopia (sekundär) för TCRYPT-huvud" + +#: src/cryptsetup.c:3393 +msgid "Scan also for VeraCrypt compatible device" +msgstr "Sök också efter VeraCrypt-kompatibel enhet" + +#: src/cryptsetup.c:3394 +msgid "Personal Iteration Multiplier for VeraCrypt compatible device" +msgstr "Personlig iteration för VeraCrypt-kompatibel enhet" + +#: src/cryptsetup.c:3395 +msgid "Query Personal Iteration Multiplier for VeraCrypt compatible device" +msgstr "Query Personal Iteration Multiplier för VeraCrypt-kompatibel enhet" + +#: src/cryptsetup.c:3396 +#, fuzzy +msgid "Type of device metadata: luks, luks1, luks2, plain, loopaes, tcrypt" +msgstr "Typer av enhetsmetadata: luks, plain, loopaes, tcrypt" + +#: src/cryptsetup.c:3397 +msgid "Disable password quality check (if enabled)" +msgstr "Inaktivera kvalitetskontroll av lösenord (om aktiverat)" + +#: src/cryptsetup.c:3398 +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:3399 +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:3400 +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:3401 +msgid "Use global lock to serialize memory hard PBKDF (OOM workaround)" +msgstr "" + +#: src/cryptsetup.c:3402 +msgid "PBKDF iteration time for LUKS (in ms)" +msgstr "PBKDF-iterationstid för LUKS (i ms)" + +#: src/cryptsetup.c:3402 src/cryptsetup_reencrypt.c:1607 +msgid "msecs" +msgstr "ms" + +#: src/cryptsetup.c:3403 src/cryptsetup_reencrypt.c:1625 +msgid "PBKDF algorithm (for LUKS2): argon2i, argon2id, pbkdf2" +msgstr "PBKDF-algoritm (för LUKS2) (argon2i/argon2id/pbkdf2)" + +#: src/cryptsetup.c:3404 src/cryptsetup_reencrypt.c:1626 +msgid "PBKDF memory cost limit" +msgstr "Minneskostnadsgräns för PBKDF" + +#: src/cryptsetup.c:3404 src/cryptsetup_reencrypt.c:1626 +msgid "kilobytes" +msgstr "kilobyte" + +#: src/cryptsetup.c:3405 src/cryptsetup_reencrypt.c:1627 +msgid "PBKDF parallel cost" +msgstr "Parallellkostnad för PBKDF" + +#: src/cryptsetup.c:3405 src/cryptsetup_reencrypt.c:1627 +msgid "threads" +msgstr "trådar" + +#: src/cryptsetup.c:3406 src/cryptsetup_reencrypt.c:1628 +msgid "PBKDF iterations cost (forced, disables benchmark)" +msgstr "Iterationskostnad för PBKDF (tvingad, inaktiverar prestandamätning)" + +#: src/cryptsetup.c:3407 +msgid "Keyslot priority: ignore, normal, prefer" +msgstr "Nyckelplats-prioritet: ignore,normal,prefer" + +#: src/cryptsetup.c:3408 +msgid "Disable locking of on-disk metadata" +msgstr "Inaktivera låsning av metadata på disk" + +#: src/cryptsetup.c:3409 +msgid "Disable loading volume keys via kernel keyring" +msgstr "Inaktivera att läsa in volymnycklar via kärnans nyckelring" + +#: src/cryptsetup.c:3410 +msgid "Data integrity algorithm (LUKS2 only)" +msgstr "Algoritm för dataintegritet (endast LUKS2)" + +#: src/cryptsetup.c:3411 src/integritysetup.c:564 +msgid "Disable journal for integrity device" +msgstr "Inaktivera journal för integritetsenhet" + +#: src/cryptsetup.c:3412 src/integritysetup.c:538 +msgid "Do not wipe device after format" +msgstr "Rensa inte enhet efter formatering" + +#: src/cryptsetup.c:3413 +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:3414 +msgid "Token number (default: any)" +msgstr "Tokenantal (standardvärde: any)" + +#: src/cryptsetup.c:3415 +msgid "Key description" +msgstr "Nyckelbeskrivning" + +#: src/cryptsetup.c:3416 +msgid "Encryption sector size (default: 512 bytes)" +msgstr "Sektorstorlek för kryptering (standardvärde 512 byte)" + +#: src/cryptsetup.c:3417 +msgid "Set activation flags persistent for device" +msgstr "Sätt och spara undan aktiveringsflaggorna för enheten" + +#: src/cryptsetup.c:3418 +msgid "Set label for the LUKS2 device" +msgstr "Ange etikett för LUKS2-enhet" + +#: src/cryptsetup.c:3419 +msgid "Set subsystem label for the LUKS2 device" +msgstr "Ange undersystemsetikett för LUKS2-enheten" + +#: src/cryptsetup.c:3420 +msgid "Create unbound (no assigned data segment) LUKS2 keyslot" +msgstr "Skapa obunden (inget tilldelat datasegment) LUKS2-nyckelplats" + +#: src/cryptsetup.c:3421 +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:3422 +msgid "LUKS2 header metadata area size" +msgstr "Områdesstorlek för metadata på LUKS2-huvudet" + +#: src/cryptsetup.c:3423 +msgid "LUKS2 header keyslots area size" +msgstr "Storlek på nyckelplatsområdet för LUKS2-huvud" + +#: src/cryptsetup.c:3424 +msgid "Refresh (reactivate) device with new parameters" +msgstr "Uppdatera (återaktivera) enhet med nya parametrar" + +#: src/cryptsetup.c:3425 +msgid "LUKS2 keyslot: The size of the encryption key" +msgstr "LUKS2-nyckelplats: Storleken för krypteringsnyckeln" + +#: src/cryptsetup.c:3426 +msgid "LUKS2 keyslot: The cipher used for keyslot encryption" +msgstr "LUKS2-nyckelplats: Chiffret används krypering av nyckelplats" + +#: src/cryptsetup.c:3427 +#, fuzzy +msgid "Encrypt LUKS2 device (in-place encryption)." +msgstr "Dekryptera enheten permanent (ta bort kryptering)" + +#: src/cryptsetup.c:3428 +#, fuzzy +msgid "Decrypt LUKS2 device (remove encryption)." +msgstr "Dekryptera enheten permanent (ta bort kryptering)" + +#: src/cryptsetup.c:3429 +msgid "Initialize LUKS2 reencryption in metadata only." +msgstr "" + +#: src/cryptsetup.c:3430 +msgid "Resume initialized LUKS2 reencryption only." +msgstr "" + +#: src/cryptsetup.c:3431 src/cryptsetup_reencrypt.c:1619 +msgid "Reduce data device size (move data offset). DANGEROUS!" +msgstr "Förminska dataenhetsstorleken (flytta dataoffset). FARLIGT!" + +#: src/cryptsetup.c:3432 +#, fuzzy +msgid "Maximal reencryption hotzone size." +msgstr "Blockstorlek för omkryptering" + +#: src/cryptsetup.c:3433 +msgid "Reencryption hotzone resilience type (checksum,journal,none)" +msgstr "" + +#: src/cryptsetup.c:3434 +#, fuzzy +msgid "Reencryption hotzone checksums hash" +msgstr "Blockstorlek för omkryptering" + +#: src/cryptsetup.c:3435 +msgid "Override device autodetection of dm device to be reencrypted" +msgstr "" + +#: src/cryptsetup.c:3451 src/veritysetup.c:462 src/integritysetup.c:583 +msgid "[OPTION...] " +msgstr "[FLAGGA…] <åtgärd> <åtgärdsspecifik>" + +#: src/cryptsetup.c:3502 src/veritysetup.c:496 src/integritysetup.c:594 +msgid "Argument missing." +msgstr "Argumentet <åtgärd> saknas." + +#: src/cryptsetup.c:3565 src/veritysetup.c:527 src/integritysetup.c:625 +msgid "Unknown action." +msgstr "Okänd åtgärd." + +#: src/cryptsetup.c:3575 +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:3580 +msgid "Options --refresh and --test-passphrase are mutually exclusive.\n" +msgstr "Flaggorna --refresh och --test-passphrase är ömsesidigt uteslutande.\n" + +#: src/cryptsetup.c:3585 +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:3590 +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:3595 +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:3600 +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:3605 +#, fuzzy +msgid "Option --serialize-memory-hard-pbkdf is allowed only for open operation.\n" +msgstr "Flaggan --allow-discards är endast tillåten för operationen open.\n" + +#: src/cryptsetup.c:3610 +msgid "Option --persistent is not allowed with --test-passphrase.\n" +msgstr "Flaggan --persistent är ej tillåtet med --test-passphrase.\n" + +#: src/cryptsetup.c:3620 +#, fuzzy +msgid "" +"Option --key-size is allowed only for luksFormat, luksAddKey,\n" +"open and benchmark actions. To limit read from keyfile use --keyfile-size=(bytes)." +msgstr "" +"Flaggan --key-size är endast tillåten för luksFormat, luksAddKey (with --unbound),\n" +"open och benchmark. För att begränsa läsning från nyckelfil, använd --keyfile-size=(byte)." + +#: src/cryptsetup.c:3626 +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:3631 +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:3637 +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:3643 +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:3648 src/cryptsetup_reencrypt.c:1692 +msgid "Key size must be a multiple of 8 bits" +msgstr "Nyckelstorlek måste vara en multipel av 8 bitar" + +#: src/cryptsetup.c:3654 src/cryptsetup_reencrypt.c:1378 +#: src/cryptsetup_reencrypt.c:1697 +msgid "Key slot is invalid." +msgstr "Nyckelplatsen är ogiltig." + +#: src/cryptsetup.c:3661 +msgid "Option --key-file takes precedence over specified key file argument." +msgstr "Flaggan --key-file åsidosätter specificerade nyckelfilsargument." + +#: src/cryptsetup.c:3668 src/veritysetup.c:539 src/integritysetup.c:649 +#: src/cryptsetup_reencrypt.c:1671 +msgid "Negative number for option not permitted." +msgstr "Negativt tal för flagga ej tillåtet." + +#: src/cryptsetup.c:3672 +msgid "Only one --key-file argument is allowed." +msgstr "Endast ett argument för --key-file är tillåtet." + +#: src/cryptsetup.c:3676 src/cryptsetup_reencrypt.c:1663 +#: src/cryptsetup_reencrypt.c:1701 +msgid "Only one of --use-[u]random options is allowed." +msgstr "Endast en av flaggorna --use-[u]random är tillåten." + +#: src/cryptsetup.c:3680 +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:3684 +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:3688 +msgid "Option --align-payload is allowed only for luksFormat." +msgstr "Flaggan --align-payload är endast tillåten för luksFormat." + +#: src/cryptsetup.c:3692 +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:3697 +msgid "Invalid LUKS2 metadata size specification." +msgstr "Ogiltig storlekspecifikation för LUKS2-metadata på enhet." + +#: src/cryptsetup.c:3701 +msgid "Invalid LUKS2 keyslots size specification." +msgstr "Ogiltig storlekspecifikation för LUKS2-nyckelplats på enhet." + +#: src/cryptsetup.c:3705 +#, fuzzy +msgid "Options --align-payload and --offset cannot be combined." +msgstr "Flaggan --align-payload och --offset kan inte kombineras." + +#: src/cryptsetup.c:3711 +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:3718 +#, fuzzy +msgid "Option --offset is supported only for open of plain and loopaes devices, luksFormat and device reencryption.\n" +msgstr "Flaggan --offset stöds endast för öppning av vanliga och loopaes-enheter och för luksFormat.\n" + +#: src/cryptsetup.c:3724 +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:3729 +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:3734 +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:3740 +msgid "Invalid argument for parameter --veracrypt-pim supplied.\n" +msgstr "Angav ett ogiltigt argument för parametern --veracrypt-pim.\n" + +#: src/cryptsetup.c:3744 +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:3752 +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:3756 +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:3763 +msgid "Option --priority can be only ignore/normal/prefer.\n" +msgstr "Flaggan --priority kan endast vara ignore/normal/prefer.\n" + +#: src/cryptsetup.c:3768 +msgid "Keyslot specification is required.\n" +msgstr "Specifikation för nyckelplats krävs.\n" + +#: src/cryptsetup.c:3773 src/cryptsetup_reencrypt.c:1677 +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:3778 src/cryptsetup_reencrypt.c:1682 +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:3784 +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:3790 +msgid "Unsupported encryption sector size.\n" +msgstr "Stöder inte sektorstorlek för kryptering.\n" + +#: src/cryptsetup.c:3795 +msgid "Key size is required with --unbound option.\n" +msgstr "Nyckelstorlek krävs med flaggan --unbound.\n" + +#: src/cryptsetup.c:3800 +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:3805 +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:3816 +msgid "Cannot disable metadata locking.\n" +msgstr "Det går inte att inaktivera metadatalås.\n" + +#: src/cryptsetup.c:3826 +#, fuzzy +msgid "Invalid max reencryption hotzone size specification." +msgstr "Ogiltig storlekspecifikation på enhet." + +#: src/cryptsetup.c:3834 src/cryptsetup_reencrypt.c:1706 +#: src/cryptsetup_reencrypt.c:1711 +msgid "Invalid device size specification." +msgstr "Ogiltig storlekspecifikation på enhet." + +#: src/cryptsetup.c:3837 +#, fuzzy +msgid "Maximum device reduce size is 1 GiB." +msgstr "Högsta förminskningsstorlek för enhet är 64 MiB." + +#: src/cryptsetup.c:3840 src/cryptsetup_reencrypt.c:1717 +msgid "Reduce size must be multiple of 512 bytes sector." +msgstr "Minskningsstorlek måste vara en multipel av 512-bytesektor." + +#: src/cryptsetup.c:3845 +#, fuzzy +msgid "Invalid data size specification." +msgstr "Ogiltig storlekspecifikation på enhet." + +#: src/cryptsetup.c:3850 +#, fuzzy +msgid "Reduce size overflow." +msgstr "Enhets-offset spillde över." + +#: src/cryptsetup.c:3854 +msgid "LUKS2 decryption requires option --header." +msgstr "" + +#: src/cryptsetup.c:3858 +#, fuzzy +msgid "Device size must be multiple of 512 bytes sector." +msgstr "Minskningsstorlek måste vara en multipel av 512-bytesektor." + +#: src/cryptsetup.c:3862 +#, fuzzy +msgid "Options --reduce-device-size and --data-size cannot be combined." +msgstr "Flaggan --align-payload och --offset kan inte kombineras." + +#: src/cryptsetup.c:3866 +#, fuzzy +msgid "Options --device-size and --size cannot be combined." +msgstr "Flaggan --align-payload och --offset kan inte kombineras." + +#: src/veritysetup.c:65 +msgid "Invalid salt string specified." +msgstr "Angav ogiltig saltsträng." + +#: src/veritysetup.c:96 +#, c-format +msgid "Cannot create hash image %s for writing." +msgstr "Kan inte skapa hashavbild %s för skrivning." + +#: src/veritysetup.c:106 +#, 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:176 +msgid "Invalid root hash string specified." +msgstr "Angav ogiltig rothashsträng." + +#: src/veritysetup.c:356 +msgid " " +msgstr " " + +#: src/veritysetup.c:356 src/integritysetup.c:469 +msgid "format device" +msgstr "formatera enhet" + +#: src/veritysetup.c:357 +msgid " " +msgstr " " + +#: src/veritysetup.c:357 +msgid "verify device" +msgstr "verifiera enhet" + +#: src/veritysetup.c:358 +msgid " " +msgstr " " + +#: src/veritysetup.c:360 src/integritysetup.c:472 +msgid "show active device status" +msgstr "visa statistik för aktiv enhet" + +#: src/veritysetup.c:361 +msgid "" +msgstr "" + +#: src/veritysetup.c:361 src/integritysetup.c:473 +msgid "show on-disk information" +msgstr "visa information från disk" + +#: src/veritysetup.c:380 +#, c-format +msgid "" +"\n" +" is the device to create under %s\n" +" is the data device\n" +" is the device containing verification data\n" +" hash of the root node on \n" +msgstr "" +"\n" +" är enheten att skapa under %s\n" +" är dataenheten\n" +" är enheten som innehåller verifieringsdata\n" +" hash för rotnoden på \n" + +#: src/veritysetup.c:387 +#, c-format +msgid "" +"\n" +"Default compiled-in dm-verity parameters:\n" +"\tHash: %s, Data block (bytes): %u, Hash block (bytes): %u, Salt size: %u, Hash format: %u\n" +msgstr "" +"\n" +"Inkompilerade standardparametrar för dm-verity:\n" +"\tHash: %s, Datablock (byte): %u, Hashblock (byte): %u, Saltstorlek: %u, Hashformat: %u\n" + +#: src/veritysetup.c:430 +msgid "Do not use verity superblock" +msgstr "Använd inte verity superblock" + +#: src/veritysetup.c:431 +msgid "Format type (1 - normal, 0 - original Chrome OS)" +msgstr "Formattyp (1 - normal, 0 - ursprungliga Chrome OS)" + +#: src/veritysetup.c:431 +msgid "number" +msgstr "antal" + +#: src/veritysetup.c:432 +msgid "Block size on the data device" +msgstr "Blockstorlek på dataenheten" + +#: src/veritysetup.c:433 +msgid "Block size on the hash device" +msgstr "Blockstorlek på hashenheten" + +#: src/veritysetup.c:434 +msgid "FEC parity bytes" +msgstr "FEC paritetsbyte" + +#: src/veritysetup.c:435 +msgid "The number of blocks in the data file" +msgstr "Antalet block i datafilen" + +#: src/veritysetup.c:435 +msgid "blocks" +msgstr "block" + +#: src/veritysetup.c:436 +msgid "Path to device with error correction data" +msgstr "Sökväg till enhet med felkorrigeringsdata" + +#: src/veritysetup.c:436 src/integritysetup.c:540 +msgid "path" +msgstr "sökväg" + +#: src/veritysetup.c:437 +msgid "Starting offset on the hash device" +msgstr "Startoffset på hashenheten" + +#: src/veritysetup.c:438 +msgid "Starting offset on the FEC device" +msgstr "Startoffset på FEC-enheten" + +#: src/veritysetup.c:439 +msgid "Hash algorithm" +msgstr "Hashalgoritm" + +#: src/veritysetup.c:439 +msgid "string" +msgstr "sträng" + +#: src/veritysetup.c:440 +msgid "Salt" +msgstr "Salt" + +#: src/veritysetup.c:440 +msgid "hex string" +msgstr "hexsträng" + +#: src/veritysetup.c:442 +msgid "Restart kernel if corruption is detected" +msgstr "Starta om kärna om något skadat identifieras" + +#: src/veritysetup.c:443 +msgid "Ignore corruption, log it only" +msgstr "Ignorera om något är skadat, logga endast" + +#: src/veritysetup.c:444 +msgid "Do not verify zeroed blocks" +msgstr "Verifiera inte nollställda block" + +#: src/veritysetup.c:445 +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:545 +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:550 +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/integritysetup.c:83 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:87 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:250 +#, c-format +msgid "Formatted with tag size %u, internal integrity %s.\n" +msgstr "Formaterad med taggstorlek %u, intern integritet %s.\n" + +#: src/integritysetup.c:469 src/integritysetup.c:473 +msgid "" +msgstr "" + +#: src/integritysetup.c:470 +msgid " " +msgstr " " + +#: src/integritysetup.c:492 +#, c-format +msgid "" +"\n" +" is the device to create under %s\n" +" is the device containing data with integrity tags\n" +msgstr "" +"\n" +" är enheten att skapa under %s\n" +" är enheten som innehåller data med integritetstaggar\n" + +#: src/integritysetup.c:497 +#, c-format +msgid "" +"\n" +"Default compiled-in dm-integrity parameters:\n" +"\tTag size: %u bytes, Checksum algorithm: %s\n" +msgstr "" +"\n" +"Inkompilerade standardparametrar för dm-integrity:\n" +"\tTaggstorlek: %u byte, Kontrollsummealgoritm: %s\n" +"\n" + +#: src/integritysetup.c:540 +msgid "Path to data device (if separated)" +msgstr "Sökvägen till dataenhet (om separat)" + +#: src/integritysetup.c:542 +msgid "Journal size" +msgstr "Journalstorlek" + +#: src/integritysetup.c:543 +msgid "Interleave sectors" +msgstr "Infoga sektorer" + +#: src/integritysetup.c:544 +msgid "Journal watermark" +msgstr "Journalvattenmärke" + +#: src/integritysetup.c:544 +msgid "percent" +msgstr "procent" + +#: src/integritysetup.c:545 +msgid "Journal commit time" +msgstr "Journalincheckningstid" + +#: src/integritysetup.c:545 src/integritysetup.c:547 +msgid "ms" +msgstr "ms" + +#: src/integritysetup.c:546 +msgid "Number of 512-byte sectors per bit (bitmap mode)." +msgstr "" + +#: src/integritysetup.c:547 +msgid "Bitmap mode flush time" +msgstr "" + +#: src/integritysetup.c:548 +msgid "Tag size (per-sector)" +msgstr "Taggstorlek (per sektor)" + +#: src/integritysetup.c:549 +msgid "Sector size" +msgstr "Sektorstorlek" + +#: src/integritysetup.c:550 +msgid "Buffers size" +msgstr "Bufferstorlek" + +#: src/integritysetup.c:552 +msgid "Data integrity algorithm" +msgstr "Dataintegritetsalgoritm" + +#: src/integritysetup.c:553 +msgid "The size of the data integrity key" +msgstr "Storleken för dataintegritetsnyckeln" + +#: src/integritysetup.c:554 +msgid "Read the integrity key from a file" +msgstr "Läs integritetsnyckeln från en fil" + +#: src/integritysetup.c:556 +msgid "Journal integrity algorithm" +msgstr "Integritetsalgoritm för journal" + +#: src/integritysetup.c:557 +msgid "The size of the journal integrity key" +msgstr "Storleken för journalens integritetssnyckel" + +#: src/integritysetup.c:558 +msgid "Read the journal integrity key from a file" +msgstr "Läs journalens integritetsnyckel från en fil" + +#: src/integritysetup.c:560 +msgid "Journal encryption algorithm" +msgstr "Krypteringsalgoritm för journal" + +#: src/integritysetup.c:561 +msgid "The size of the journal encryption key" +msgstr "Storleken för journalens krypteringsnyckel" + +#: src/integritysetup.c:562 +msgid "Read the journal encryption key from a file" +msgstr "Läs journalens krypteringsnyckel från en fil" + +#: src/integritysetup.c:565 +msgid "Recovery mode (no journal, no tag checking)" +msgstr "Återhämtningsläge (ingen journal, ingen taggkontroll)" + +#: src/integritysetup.c:566 +#, fuzzy +msgid "Use bitmap to track changes and disable journal for integrity device" +msgstr "Inaktivera journal för integritetsenhet" + +#: src/integritysetup.c:567 +msgid "Recalculate initial tags automatically." +msgstr "Räkna automatiskt initiala taggar." + +#: src/integritysetup.c:640 +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:655 +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:661 +msgid "Invalid journal size specification." +msgstr "Ogiltig storlekspecifikation på journal." + +#: src/integritysetup.c:666 +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:669 +msgid "Integrity algorithm must be specified if integrity key is used." +msgstr "Integritetsalgoritm måste specificieras om integritetsnyckel används." + +#: src/integritysetup.c:674 +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:677 +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:682 +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:685 +msgid "Journal encryption algorithm must be specified if journal encryption key is used." +msgstr "Krypteringsalgoritm för journal måste anges om integritetsnyckel för journal används." + +#: src/integritysetup.c:689 +#, fuzzy +msgid "Recovery and bitmap mode options are mutually exclusive." +msgstr "Flaggorna --refresh och --test-passphrase är ömsesidigt uteslutande.\n" + +#: src/integritysetup.c:693 +msgid "Journal options cannot be used in bitmap mode." +msgstr "" + +#: src/integritysetup.c:697 +#, fuzzy +msgid "Bitmap options can be used only in bitmap mode." +msgstr "Flaggan för integritet kan endast användas för formatet LUKS2." + +#: src/cryptsetup_reencrypt.c:172 +msgid "Reencryption already in-progress." +msgstr "Omkryptering pågår redan." + +#: src/cryptsetup_reencrypt.c:201 +#, c-format +msgid "Cannot exclusively open %s, device in use." +msgstr "Kan inte öppna %s exklusivt, enheten används." + +#: src/cryptsetup_reencrypt.c:215 src/cryptsetup_reencrypt.c:1127 +msgid "Allocation of aligned memory failed." +msgstr "Misslyckades med allokering av justerat minne." + +#: src/cryptsetup_reencrypt.c:222 +#, c-format +msgid "Cannot read device %s." +msgstr "Det går inte att läsa enheten %s." + +#: src/cryptsetup_reencrypt.c:233 +#, c-format +msgid "Marking LUKS1 device %s unusable." +msgstr "Markerar LUKS1-enhet %s som oanvändbar." + +#: src/cryptsetup_reencrypt.c:237 +#, 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:254 +#, c-format +msgid "Cannot write device %s." +msgstr "Det går inte att skriva till enheten %s." + +#: src/cryptsetup_reencrypt.c:302 +msgid "Cannot write reencryption log file." +msgstr "Det går inte att skriva loggfil för omkryptering." + +#: src/cryptsetup_reencrypt.c:358 +msgid "Cannot read reencryption log file." +msgstr "Det går inte att läsa loggfil för omkryptering." + +#: src/cryptsetup_reencrypt.c:396 +#, c-format +msgid "Log file %s exists, resuming reencryption.\n" +msgstr "Loggfilen %s existerar, återupptar kryptering.\n" + +#: src/cryptsetup_reencrypt.c:445 +msgid "Activating temporary device using old LUKS header." +msgstr "Aktiverar temporär enhet användandes gammalt LUKS-huvud." + +#: src/cryptsetup_reencrypt.c:455 +msgid "Activating temporary device using new LUKS header." +msgstr "Aktiverar temporär enhet användandes nytt LUKS-huvud." + +#: src/cryptsetup_reencrypt.c:465 +msgid "Activation of temporary devices failed." +msgstr "Aktivering av temporära enheter misslyckades." + +#: src/cryptsetup_reencrypt.c:551 +msgid "Failed to set data offset." +msgstr "Misslyckades med att sätta dataoffset." + +#: src/cryptsetup_reencrypt.c:557 +#, fuzzy +msgid "Failed to set metadata size." +msgstr "Misslyckades med att sätta dataoffset." + +#: src/cryptsetup_reencrypt.c:565 +#, c-format +msgid "New LUKS header for device %s created." +msgstr "Skapade nytt LUKS-huvud för enhet %s." + +#: src/cryptsetup_reencrypt.c:625 +#, 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:647 +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:651 +msgid "Failed to write activation flags to new header." +msgstr "Misslyckades med att skriva aktiveringsflaggor till nya huvuden.:" + +#: src/cryptsetup_reencrypt.c:655 src/cryptsetup_reencrypt.c:659 +msgid "Failed to read requirements from backup header." +msgstr "Misslyckades med att läsa krav från säkerhetskopiehuvud." + +#: src/cryptsetup_reencrypt.c:697 +#, c-format +msgid "%s header backup of device %s created." +msgstr "Skapade säkerhetskopia av %s-huvud på enhet %s." + +#: src/cryptsetup_reencrypt.c:760 +msgid "Creation of LUKS backup headers failed." +msgstr "Misslyckades med att skapa en säkerhetskopia av LUKS-huvuden." + +#: src/cryptsetup_reencrypt.c:893 +#, 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:895 +#, c-format +msgid "%s header on device %s restored." +msgstr "Återställde %s-huvudet på enheten %s." + +#: src/cryptsetup_reencrypt.c:1099 src/cryptsetup_reencrypt.c:1105 +msgid "Cannot open temporary LUKS device." +msgstr "Misslyckades med att öppna temporär LUKS-enhet." + +#: src/cryptsetup_reencrypt.c:1110 src/cryptsetup_reencrypt.c:1115 +msgid "Cannot get device size." +msgstr "Det går inte att hämta enhetsstorlek." + +#: src/cryptsetup_reencrypt.c:1150 +msgid "IO error during reencryption." +msgstr "In-/utfel under återkryptering." + +#: src/cryptsetup_reencrypt.c:1181 +msgid "Provided UUID is invalid." +msgstr "Angivet UUID är ogiltigt." + +#: src/cryptsetup_reencrypt.c:1407 +msgid "Cannot open reencryption log file." +msgstr "Det går inte att öppna loggfilen för omkryptering." + +#: src/cryptsetup_reencrypt.c:1413 +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:1488 +#, c-format +msgid "Changed pbkdf parameters in keyslot %i." +msgstr "Ändrade pbkdf-parametrarna i nyckelplatsen %i.:1" + +#: src/cryptsetup_reencrypt.c:1600 +msgid "Reencryption block size" +msgstr "Blockstorlek för omkryptering" + +#: src/cryptsetup_reencrypt.c:1600 +msgid "MiB" +msgstr "MiB" + +#: src/cryptsetup_reencrypt.c:1604 +msgid "Do not change key, no data area reencryption" +msgstr "Ändra inte nyckel, ingen omkryptering av dataområde" + +#: src/cryptsetup_reencrypt.c:1606 +msgid "Read new volume (master) key from file" +msgstr "Läs volymnyckeln (master) från fil" + +#: src/cryptsetup_reencrypt.c:1607 +msgid "PBKDF2 iteration time for LUKS (in ms)" +msgstr "PBKDF2-iterationstid för LUKS (i ms)" + +#: src/cryptsetup_reencrypt.c:1613 +msgid "Use direct-io when accessing devices" +msgstr "Använd direct-io vid enhetsåtkomst" + +#: src/cryptsetup_reencrypt.c:1614 +msgid "Use fsync after each block" +msgstr "Använd fsync efter varje block" + +#: src/cryptsetup_reencrypt.c:1615 +msgid "Update log file after every block" +msgstr "Uppdatera loggfilen efter varje block" + +#: src/cryptsetup_reencrypt.c:1616 +msgid "Use only this slot (others will be disabled)" +msgstr "Använd endast denna plats (andra kommer att inaktiveras)" + +#: src/cryptsetup_reencrypt.c:1621 +msgid "Create new header on not encrypted device" +msgstr "Skapa nytt huvud på icke-krypterad enhet" + +#: src/cryptsetup_reencrypt.c:1622 +msgid "Permanently decrypt device (remove encryption)" +msgstr "Dekryptera enheten permanent (ta bort kryptering)" + +#: src/cryptsetup_reencrypt.c:1623 +msgid "The UUID used to resume decryption" +msgstr "Det UUID som används för att återuppta kryptering" + +#: src/cryptsetup_reencrypt.c:1624 +msgid "Type of LUKS metadata: luks1, luks2" +msgstr "Typ av LUKS-metadata: luks1, luks2" + +#: src/cryptsetup_reencrypt.c:1643 +msgid "[OPTION...] " +msgstr "[FLAGGA…] " + +#: src/cryptsetup_reencrypt.c:1651 +#, 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:1652 +msgid "volume key" +msgstr "volymnyckeln" + +#: src/cryptsetup_reencrypt.c:1654 +msgid "set hash to " +msgstr "sätt hash till " + +#: src/cryptsetup_reencrypt.c:1655 +msgid ", set cipher to " +msgstr ", sätt chiffer till " + +#: src/cryptsetup_reencrypt.c:1659 +msgid "Argument required." +msgstr "Kräver argument." + +#: src/cryptsetup_reencrypt.c:1687 +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:1714 +msgid "Maximum device reduce size is 64 MiB." +msgstr "Högsta förminskningsstorlek för enhet är 64 MiB." + +#: src/cryptsetup_reencrypt.c:1721 +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:1725 +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:1729 +msgid "Option --new cannot be used together with --decrypt." +msgstr "Flaggan --new kan inte användas tillsammans med --decrypt." + +#: src/cryptsetup_reencrypt.c:1733 +msgid "Option --decrypt is incompatible with specified parameters." +msgstr "Flaggan --decrypt är inkompatibel med specificerade parametrar." + +#: src/cryptsetup_reencrypt.c:1737 +msgid "Option --uuid is allowed only together with --decrypt." +msgstr "Flaggan --uuid är endast tillåten tillsammans med --decrypt." + +#: src/cryptsetup_reencrypt.c:1741 +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:151 +msgid "Error reading response from terminal." +msgstr "Fel vid läsning av svar från terminal." + +#: src/utils_tools.c:186 +msgid "Command successful.\n" +msgstr "Kommandot lyckades.\n" + +#: src/utils_tools.c:194 +msgid "wrong or missing parameters" +msgstr "fel eller saknar parametrar" + +#: src/utils_tools.c:196 +msgid "no permission or bad passphrase" +msgstr "ingen behörighet eller dålig lösenfras" + +#: src/utils_tools.c:198 +msgid "out of memory" +msgstr "slut på minne" + +#: src/utils_tools.c:200 +msgid "wrong device or file specified" +msgstr "angav fel enhet eller fil" + +#: 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:204 +msgid "unknown error" +msgstr "okänt fel" + +#: 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:283 +#, c-format +msgid "Key slot %i created." +msgstr "Nyckelplats %i är ändrad." + +#: src/utils_tools.c:285 +#, c-format +msgid "Key slot %i unlocked." +msgstr "Nyckelplats %i är upplåst." + +#: src/utils_tools.c:287 +#, c-format +msgid "Key slot %i removed." +msgstr "Nyckelplats %i är upplåst." + +#: src/utils_tools.c:296 +#, c-format +msgid "Token %i created." +msgstr "Token %i används." + +#: src/utils_tools.c:298 +#, c-format +msgid "Token %i removed." +msgstr "Token %i används." + +#: src/utils_tools.c:464 +#, fuzzy +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: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: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:548 +#, c-format +msgid "Failed to stat device %s." +msgstr "Misslyckades med att ta status på enhet %s." + +#: 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: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:577 +#, c-format +msgid "Existing '%s' partition signature (offset: % bytes) on device %s will be wiped." +msgstr "" + +#: src/utils_tools.c:580 +#, c-format +msgid "Existing '%s' superblock signature (offset: % bytes) on device %s will be wiped." +msgstr "" + +#: src/utils_tools.c:583 +msgid "Failed to wipe device signature." +msgstr "Misslyckades med att radera enhetssignatur." + +#: 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 +#, fuzzy +msgid "" +"\n" +"Reencryption interrupted." +msgstr "" +"\n" +"Läsning avbryten." + +#: src/utils_password.c:43 src/utils_password.c:75 +#, c-format +msgid "Cannot check password quality: %s" +msgstr "Det går inte att kontrollera lösenordskvalitet: %s" + +#: src/utils_password.c:51 +#, c-format +msgid "" +"Password quality check failed:\n" +" %s" +msgstr "" +"Misslyckades med kvalitetskontroll av lösenord:\n" +"%s" + +#: src/utils_password.c:83 +#, c-format +msgid "Password quality check failed: Bad passphrase (%s)" +msgstr "Misslyckades med kvalitetskontroll av lösenord: Dålig lösenfras (%s)" + +#: src/utils_password.c:193 src/utils_password.c:208 +msgid "Error reading passphrase from terminal." +msgstr "Fel vid läsning av lösenfras från terminal." + +#: src/utils_password.c:206 +msgid "Verify passphrase: " +msgstr "Verifiera lösenfras: " + +#: src/utils_password.c:213 +msgid "Passphrases do not match." +msgstr "Lösenfraserna stämmer inte överens." + +#: src/utils_password.c:250 +msgid "Cannot use offset with terminal input." +msgstr "Det går inte att använda offset med terminalinmatning." + +#: src/utils_password.c:253 +#, c-format +msgid "Enter passphrase: " +msgstr "Ange lösenfras: " + +#: src/utils_password.c:256 +#, c-format +msgid "Enter passphrase for %s: " +msgstr "Ange lösenfras för %s: " + +#: 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:289 +msgid "No usable keyslot is available." +msgstr "" + +#: 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:335 +#, c-format +msgid "Cannot write to keyfile %s." +msgstr "Det går inte att skriva till nyckelfilen %s." + +#: src/utils_luks2.c:47 +#, c-format +msgid "Failed to open file %s in read-only mode." +msgstr "Misslyckades med att öppna filen %s i skrivskyddat läge." + +#: src/utils_luks2.c:60 +msgid "Provide valid LUKS2 token JSON:\n" +msgstr "Tillhandahåll giltig JSON för LUKS2-token:\n" + +#: src/utils_luks2.c:67 +msgid "Failed to read JSON file." +msgstr "Misslyckades med att läsa in JSON-filen." + +#: src/utils_luks2.c:72 +msgid "" +"\n" +"Read interrupted." +msgstr "" +"\n" +"Läsning avbryten." + +#: src/utils_luks2.c:113 +#, c-format +msgid "Failed to open file %s in write mode." +msgstr "Misslyckades med att öppna filen %s in skrivläge." + +#: src/utils_luks2.c:122 +msgid "" +"\n" +"Write interrupted." +msgstr "" +"\n" +"Skrivning avbruten." + +#: src/utils_luks2.c:126 +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 "Key slot %d selected for deletion." +#~ msgstr "Nyckelplats %d markerad för borttagning." + +#~ msgid "open device as mapping " +#~ msgstr "öppna enhet som mappning " + +#~ 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" + +#~ msgid "Device %s is too small. (LUKS2 requires at least % bytes.)\n" +#~ msgstr "Enhet %s är för liten. (LUKS2 kräver minst % bytes.)\n" + +#~ msgid "memory allocation error in action_luksFormat" +#~ msgstr "minnesallokeringsfel i action_luksFormat" + +#~ msgid "Missing LUKS target type, option --type is required.\n" +#~ msgstr "Saknar måltyp för LUKS, flaggan -type krävs.\n" + +#~ msgid "Missing --token option specifying token for removal.\n" +#~ msgstr "" +#~ "Saknad flagga --token för att ange token att ta bort.\n" +#~ " \n" + +#~ msgid "Add or remove keyring token" +#~ msgstr "Lägg till eller ta bort token för nyckelring" + +#~ msgid "Activated keyslot %i.\n" +#~ msgstr "Aktiverade nyckelplats %i.\n" + +#~ msgid "Using default pbkdf parameters for new LUKS2 header.\n" +#~ msgstr "Använder pbkdf-standardparametrar för nya LUKS2-huvuden.\n" + +#~ msgid "Too many tree levels for verity volume.\n" +#~ msgstr "För många trädnivåer för verity-volym.\n" + +#~ msgid "Key %d not active. Can't wipe.\n" +#~ msgstr "Nyckel %d är inte aktiv. Kan inte rensa.\n" + +#~ msgid " " +#~ msgstr " " + +#~ msgid "create active device" +#~ msgstr "skapa aktiv enhet" + +#~ msgid "remove (deactivate) device" +#~ msgstr "ta bort (inaktivera) enhet" + +#~ msgid "Progress: %5.1f%%, ETA %02llu:%02llu, %4llu MiB written, speed %5.1f MiB/s%s" +#~ msgstr "Förlopp: %5.1f%%, ETA %02llu:%02llu, %4llu MiB skrivna, hastighet %5.1f MiB/s%s" + +#~ msgid "Cannot find a free loopback device.\n" +#~ msgstr "Kan inte hitta en ledig loopback-enhet.\n" + +#~ msgid "Cannot open device %s\n" +#~ msgstr "Kan inte öppna enheten %s\n" + +#~ 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 "Enter LUKS passphrase: " +#~ msgstr "Ange LUKS-lösenfras: " + +#~ msgid "Warning: exhausting read requested, but key file %s is not a regular file, function might never return.\n" +#~ msgstr "Varning: utförlig läsning begärd men nyckelfilen %s är inte en vanlig fil, funktionen kanske aldrig avslutas.\n" + +#~ msgid "exclusive " +#~ msgstr "exklusiv" + +#~ msgid "writable" +#~ msgstr "skrivbar" + +#~ msgid "read-only" +#~ msgstr "skrivskyddad" + +#~ msgid "Cannot open device: %s\n" +#~ msgstr "Kan inte öppna enheten: %s\n" + +#~ msgid "BLKROGET failed on device %s.\n" +#~ msgstr "BLKROGET misslyckades på enheten %s.\n" + +#~ msgid "BLKGETSIZE failed on device %s.\n" +#~ msgstr "BLKGETSIZE misslyckades på enheten %s.\n" + +#~ msgid "WARNING!!! Possibly insecure memory. Are you root?\n" +#~ msgstr "VARNING!!! Potentiellt osäkert minne. Är du root?\n" + +#~ msgid "Unable to obtain sector size for %s" +#~ msgstr "Kunde inte läsa av sektorstorlek för %s" + +#~ msgid "Backup file %s doesn't exist.\n" +#~ msgstr "Säkerhetskopian %s finns inte.\n" + +#~ msgid "remove LUKS mapping" +#~ msgstr "ta bort LUKS-mappning" + +#~ msgid "identical to luksKillSlot - DEPRECATED - see man page" +#~ msgstr "identisk med luksKillSlot - FÖRÅLDRAD - se manualsida" + +#~ msgid "modify active device - DEPRECATED - see man page" +#~ msgstr "ändra aktiv enhet - FÖRÅLDRAD - se manualsida" + +#~ msgid "" +#~ "The reload action is deprecated. Please use \"dmsetup reload\" in case you really need this functionality.\n" +#~ "WARNING: do not use reload to touch LUKS devices. If that is the case, hit Ctrl-C now.\n" +#~ msgstr "" +#~ "Omläsningsåtgärden är föråldrad. Använd ”dmsetup reload” om du verkligen behöver denna funktion.\n" +#~ "VARNING: använd inte omläsning för ”touch” på LUKS-enheter. Om så är fallet, tryck Ctrl-C nu.\n" + +#~ msgid "Obsolete option --non-exclusive is ignored.\n" +#~ msgstr "Föråldrad flagga --non-exclusive ignoreras.\n" + +#~ msgid "Read the key from a file (can be /dev/random)" +#~ msgstr "Läs nyckeln från en fil (kan vara /dev/random)" + +#~ msgid "(Obsoleted, see man page.)" +#~ msgstr "(Föråldrad, se manualsida)" diff --git a/po/uk.gmo b/po/uk.gmo new file mode 100644 index 0000000000000000000000000000000000000000..9e2c1bac5a5791ace88e5bfdb244c68ca876ee32 GIT binary patch literal 135952 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, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019. +msgid "" +msgstr "" +"Project-Id-Version: cryptsetup 2.2.2-rc0\n" +"Report-Msgid-Bugs-To: dm-crypt@saout.de\n" +"POT-Creation-Date: 2019-11-01 09:04+0100\n" +"PO-Revision-Date: 2019-10-18 14:07+0300\n" +"Last-Translator: Yuri Chornoivan \n" +"Language-Team: Ukrainian \n" +"Language: uk\n" +"MIME-Version: 1.0\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" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Lokalize 19.04.0\n" + +#: lib/libdevmapper.c:384 +msgid "Cannot initialize device-mapper, running as non-root user." +msgstr "Не можна ініціалізувати device-mapper, якщо програму запущено не від імені адміністратора (root)." + +#: lib/libdevmapper.c:387 +msgid "Cannot initialize device-mapper. Is dm_mod kernel module loaded?" +msgstr "Не вдалося ініціалізувати device-mapper. Чи завантажено модуль ядра dm_mod?" + +#: lib/libdevmapper.c:1082 +msgid "Requested deferred flag is not supported." +msgstr "Підтримки бажаного прапорця відкладення, %s, не передбачено." + +#: lib/libdevmapper.c:1149 +#, c-format +msgid "DM-UUID for device %s was truncated." +msgstr "DM-UUID для пристрою %s було обрізано." + +#: lib/libdevmapper.c:1463 +msgid "Unknown dm target type." +msgstr "Невідомий тип призначення dm." + +#: lib/libdevmapper.c:1565 lib/libdevmapper.c:1617 +msgid "Requested dm-crypt performance options are not supported." +msgstr "Підтримки вказаних параметрів швидкодії dm-crypt не передбачено." + +#: lib/libdevmapper.c:1572 +msgid "Requested dm-verity data corruption handling options are not supported." +msgstr "Підтримки вказаних параметрів обробки пошкоджених даних за допомогою dm-verity не передбачено." + +#: lib/libdevmapper.c:1576 +msgid "Requested dm-verity FEC options are not supported." +msgstr "Підтримки вказаних параметрів FEC за допомогою dm-verity не передбачено." + +#: lib/libdevmapper.c:1580 +msgid "Requested data integrity options are not supported." +msgstr "Підтримки вказаних параметрів цілісності даних не передбачено." + +#: lib/libdevmapper.c:1582 +msgid "Requested sector_size option is not supported." +msgstr "Підтримки вказаного параметра sector_size не передбачено." + +#: lib/libdevmapper.c:1587 +msgid "Requested automatic recalculation of integrity tags is not supported." +msgstr "Підтримки потрібного вам автоматичного повторного обчислення міток цілісності не передбачено." + +#: lib/libdevmapper.c:1591 +msgid "Requested dm-integrity bitmap mode is not supported." +msgstr "Підтримки вказаного режиму бітової карти цілісності dm не передбачено." + +#: lib/libdevmapper.c:1620 +msgid "Discard/TRIM is not supported." +msgstr "Підтримки відкидання або обрізання не передбачено." + +#: lib/libdevmapper.c:2511 +#, c-format +msgid "Failed to query dm-%s segment." +msgstr "Не вдалося опитати сегмент dm-%s." + +#: lib/random.c:80 +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" +msgstr "" +"Під час створення ключа тому було вичерпано буфер ентропії системи.\n" +"Будь ласка, пересуньте вказівник миші або наберіть якийсь текст у іншому вікні, щоб зібрати додаткові дані на основі випадкових подій.\n" + +#: lib/random.c:84 +#, c-format +msgid "Generating key (%d%% done).\n" +msgstr "Створення ключа (виконано %d%%).\n" + +#: lib/random.c:170 +msgid "Running in FIPS mode." +msgstr "Працюємо у режимі FIPS." + +#: lib/random.c:176 +msgid "Fatal error during RNG initialisation." +msgstr "Критична помилка під час ініціалізації генератора псевдовипадкових чисел." + +#: lib/random.c:213 +msgid "Unknown RNG quality requested." +msgstr "Надійшов запит щодо невідомої якості псевдовипадкових чисел." + +#: lib/random.c:218 +msgid "Error reading from RNG." +msgstr "Помилка читання з генератора псевдовипадкових чисел." + +#: lib/setup.c:223 +msgid "Cannot initialize crypto RNG backend." +msgstr "Не вдалося ініціалізувати допоміжну програму шифрування генератора псевдовипадкових чисел." + +#: lib/setup.c:229 +msgid "Cannot initialize crypto backend." +msgstr "Не вдалося ініціалізувати допоміжну програму шифрування." + +#: lib/setup.c:260 lib/setup.c:1990 lib/verity/verity.c:120 +#, c-format +msgid "Hash algorithm %s not supported." +msgstr "Підтримки алгоритму хешування %s не передбачено." + +#: lib/setup.c:263 lib/loopaes/loopaes.c:90 +#, c-format +msgid "Key processing error (using hash %s)." +msgstr "Помилка під час обробки ключа (на основі хешу %s)." + +#: lib/setup.c:324 lib/setup.c:351 +msgid "Cannot determine device type. Incompatible activation of device?" +msgstr "Не вдалося визначити тип пристрою. Несумісна дія з активації пристрою?" + +#: lib/setup.c:330 lib/setup.c:2985 +msgid "This operation is supported only for LUKS device." +msgstr "Підтримку цієї дії передбачено лише для пристроїв LUKS." + +#: lib/setup.c:357 +msgid "This operation is supported only for LUKS2 device." +msgstr "Підтримку цієї дії передбачено лише для пристроїв LUKS2." + +#: lib/setup.c:412 lib/luks2/luks2_reencrypt.c:2345 +msgid "All key slots full." +msgstr "Заповнено всі слоти ключів." + +#: lib/setup.c:423 +#, c-format +msgid "Key slot %d is invalid, please select between 0 and %d." +msgstr "Слот ключа %d є некоректним, будь ласка, виберіть число від 0 до %d." + +#: lib/setup.c:429 +#, c-format +msgid "Key slot %d is full, please select another one." +msgstr "Слот ключа %d заповнено, будь ласка, виберіть інший." + +#: lib/setup.c:514 lib/setup.c:2759 +msgid "Device size is not aligned to device logical block size." +msgstr "Розмір пристрою не вирівняно за розміром логічного блоку пристрою." + +#: lib/setup.c:610 +#, c-format +msgid "Header detected but device %s is too small." +msgstr "Виявлено заголовок, але об’єм пристрою %s є надто малим." + +#: lib/setup.c:647 +msgid "This operation is not supported for this device type." +msgstr "Підтримки цієї дії для цього типу пристроїв не передбачено." + +#: lib/setup.c:652 +msgid "Illegal operation with reencryption in-progress." +msgstr "Виконуємо заборонену дію із повторного шифрування." + +#: lib/setup.c:821 lib/luks1/keymanage.c:476 +#, c-format +msgid "Unsupported LUKS version %d." +msgstr "Непідтримувана версія LUKS, %d." + +#: lib/setup.c:838 lib/setup.c:1483 lib/setup.c:1903 +msgid "Detached metadata device is not supported for this crypt type." +msgstr "Підтримки пристрою від'єднаних метаданих для цього типу шифрування не передбачено." + +#: lib/setup.c:1373 lib/setup.c:2479 lib/setup.c:2551 lib/setup.c:2563 +#: lib/setup.c:2712 lib/setup.c:4310 +#, c-format +msgid "Device %s is not active." +msgstr "Пристрій %s є неактивним." + +#: lib/setup.c:1390 +#, c-format +msgid "Underlying device for crypt device %s disappeared." +msgstr "Зник основний пристрій для пристрою для шифрування %s." + +#: lib/setup.c:1468 +msgid "Invalid plain crypt parameters." +msgstr "Некоректні параметри звичайного шифрування." + +#: lib/setup.c:1473 lib/setup.c:1893 src/integritysetup.c:73 +msgid "Invalid key size." +msgstr "Некоректний розмір ключа." + +#: lib/setup.c:1478 lib/setup.c:1898 lib/setup.c:2100 +msgid "UUID is not supported for this crypt type." +msgstr "Підтримки UUID для цього типу шифрування не передбачено." + +#: lib/setup.c:1493 lib/setup.c:1683 lib/luks2/luks2_reencrypt.c:2308 +#: src/cryptsetup.c:1169 +msgid "Unsupported encryption sector size." +msgstr "Непідтримуваний розмір сектора шифрування." + +#: lib/setup.c:1501 lib/setup.c:1808 lib/setup.c:2753 +msgid "Device size is not aligned to requested sector size." +msgstr "Розмір пристрою не вирівняно за вказаним розміром сектора." + +#: lib/setup.c:1552 lib/setup.c:1671 +msgid "Can't format LUKS without device." +msgstr "Форматування LUKS без пристрою неможливе." + +#: lib/setup.c:1558 lib/setup.c:1677 +msgid "Requested data alignment is not compatible with data offset." +msgstr "Потрібне вам вирівнювання даних є несумісним із відступом у даних." + +#: lib/setup.c:1626 lib/setup.c:1795 +msgid "WARNING: Data offset is outside of currently available data device.\n" +msgstr "Увага: відступ у даних виходить за межі поточного доступного пристрою для зберігання даних.\n" + +#: lib/setup.c:1636 lib/setup.c:1823 lib/setup.c:1844 lib/setup.c:2112 +#, c-format +msgid "Cannot wipe header on device %s." +msgstr "Не можна витирати заголовок на пристрої %s." + +#: lib/setup.c:1688 +msgid "WARNING: The device activation will fail, dm-crypt is missing support for requested encryption sector size.\n" +msgstr "Увага: спроба активувати пристрій завершиться невдало, у dm-crypt не передбачено підтримки для вказаного розміру сектора шифрування.\n" + +#: lib/setup.c:1710 +msgid "Volume key is too small for encryption with integrity extensions." +msgstr "Ключ тому є надто малим для шифрування із розширеннями цілісності." + +#: lib/setup.c:1765 +#, c-format +msgid "Cipher %s-%s (key size %zd bits) is not available." +msgstr "Шифрування %s-%s (розмір ключа — %zd бітів) є недоступним." + +#: lib/setup.c:1798 +#, c-format +msgid "WARNING: LUKS2 metadata size changed to % bytes.\n" +msgstr "Увага: розмір метаданих LUKS2 змінено до % байтів.\n" + +#: lib/setup.c:1802 +#, c-format +msgid "WARNING: LUKS2 keyslots area size changed to % bytes.\n" +msgstr "Увага: розмір області слотів ключів LUKS2 змінено до % байтів.\n" + +#: lib/setup.c:1826 lib/utils_device.c:829 lib/luks1/keyencryption.c:256 +#: lib/luks2/luks2_reencrypt.c:2356 lib/luks2/luks2_reencrypt.c:3348 +#, c-format +msgid "Device %s is too small." +msgstr "Об’єм пристрою %s є надто малим." + +#: lib/setup.c:1837 lib/setup.c:1863 +#, c-format +msgid "Cannot format device %s in use." +msgstr "Не можна форматувати пристрій %s, який перебуває у користуванні." + +#: lib/setup.c:1840 lib/setup.c:1866 +#, c-format +msgid "Cannot format device %s, permission denied." +msgstr "Не можна форматувати пристрій %s, недостатні права доступу." + +#: lib/setup.c:1852 lib/setup.c:2164 +#, c-format +msgid "Cannot format integrity for device %s." +msgstr "Не вдалося форматувати цілісність для пристрою %s." + +#: lib/setup.c:1870 +#, c-format +msgid "Cannot format device %s." +msgstr "Не вдалося форматувати пристрій %s." + +#: lib/setup.c:1888 +msgid "Can't format LOOPAES without device." +msgstr "Не можна форматувати LOOPAES без пристрою." + +#: lib/setup.c:1933 +msgid "Can't format VERITY without device." +msgstr "Форматування VERITY без пристрою неможливе." + +#: lib/setup.c:1944 lib/verity/verity.c:103 +#, c-format +msgid "Unsupported VERITY hash type %d." +msgstr "Непідтримуваний тип хешування VERITY, %d." + +#: lib/setup.c:1950 lib/verity/verity.c:111 +msgid "Unsupported VERITY block size." +msgstr "Непідтримуваний розмір блоку VERITY." + +#: lib/setup.c:1955 lib/verity/verity.c:75 +msgid "Unsupported VERITY hash offset." +msgstr "Непідтримуваний відступ хешу VERITY." + +#: lib/setup.c:1960 +msgid "Unsupported VERITY FEC offset." +msgstr "Непідтримуваний зсув FEC VERITY." + +#: lib/setup.c:1984 +msgid "Data area overlaps with hash area." +msgstr "Область даних перекривається із областю хешу." + +#: lib/setup.c:2009 +msgid "Hash area overlaps with FEC area." +msgstr "Область хешування перекриваються з областю FEC." + +#: lib/setup.c:2016 +msgid "Data area overlaps with FEC area." +msgstr "Область даних перекривається із областю FEC." + +#: lib/setup.c:2221 +#, c-format +msgid "Unknown crypt device type %s requested." +msgstr "Надіслано запит щодо невідомого типу пристрою шифрування, %s." + +#: lib/setup.c:2485 lib/setup.c:2557 lib/setup.c:2570 +#, c-format +msgid "Unsupported parameters on device %s." +msgstr "Непідтримувані параметри на пристрої %s." + +#: lib/setup.c:2491 lib/setup.c:2576 lib/luks2/luks2_reencrypt.c:2408 +#: lib/luks2/luks2_reencrypt.c:2718 +#, c-format +msgid "Mismatching parameters on device %s." +msgstr "Невідповідність параметрів на пристрої %s." + +#: lib/setup.c:2596 +msgid "Crypt devices mismatch." +msgstr "Невідповідність пристроїв шифрування." + +#: lib/setup.c:2633 lib/setup.c:2638 lib/luks2/luks2_reencrypt.c:2054 +#: lib/luks2/luks2_reencrypt.c:3126 +#, c-format +msgid "Failed to reload device %s." +msgstr "Не вдалося перезавантажити пристрій %s." + +#: lib/setup.c:2643 lib/setup.c:2648 lib/luks2/luks2_reencrypt.c:2025 +#: lib/luks2/luks2_reencrypt.c:2032 +#, c-format +msgid "Failed to suspend device %s." +msgstr "Не вдалося приспати пристрій %s." + +#: lib/setup.c:2653 lib/luks2/luks2_reencrypt.c:2039 +#: lib/luks2/luks2_reencrypt.c:3061 lib/luks2/luks2_reencrypt.c:3130 +#, c-format +msgid "Failed to resume device %s." +msgstr "Не вдалося відновити роботу пристрою %s." + +#: lib/setup.c:2667 +#, c-format +msgid "Fatal error while reloading device %s (on top of device %s)." +msgstr "Критична помилка під час перезавантаження пристрої %s (над пристроєм %s)." + +#: lib/setup.c:2670 lib/setup.c:2672 +#, c-format +msgid "Failed to switch device %s to dm-error." +msgstr "Не вдалося перемкнути пристрій %s у режим dm-error." + +#: lib/setup.c:2744 +msgid "Cannot resize loop device." +msgstr "Неможливо змінити розмір петльового пристрою." + +#: lib/setup.c:2817 +msgid "Do you really want to change UUID of device?" +msgstr "Ви справді хочете змінити UUID пристрою?" + +#: lib/setup.c:2893 +msgid "Header backup file does not contain compatible LUKS header." +msgstr "Файл резервної копії заголовка не містить сумісного із LUKS заголовка." + +#: lib/setup.c:2993 +#, c-format +msgid "Volume %s is not active." +msgstr "Том %s не є активним." + +#: lib/setup.c:3004 +#, c-format +msgid "Volume %s is already suspended." +msgstr "Том %s вже приспано." + +#: lib/setup.c:3017 +#, c-format +msgid "Suspend is not supported for device %s." +msgstr "Підтримки присипляння для пристрою %s не передбачено." + +#: lib/setup.c:3019 +#, c-format +msgid "Error during suspending device %s." +msgstr "Помилка під час спроби приспати пристрій %s." + +#: lib/setup.c:3052 lib/setup.c:3119 +#, c-format +msgid "Volume %s is not suspended." +msgstr "Том %s не приспано." + +#: lib/setup.c:3081 +#, c-format +msgid "Resume is not supported for device %s." +msgstr "Підтримки дії з пробудження для пристрою %s не передбачено." + +#: lib/setup.c:3083 lib/setup.c:3151 +#, c-format +msgid "Error during resuming device %s." +msgstr "Помилка під час спроби пробудити пристрій %s." + +#: lib/setup.c:3219 lib/setup.c:3407 +msgid "Cannot add key slot, all slots disabled and no volume key provided." +msgstr "Не вдалося додати слот ключа, всі слоти вимкнено і не вказано ключа тому." + +#: lib/setup.c:3359 +msgid "Failed to swap new key slot." +msgstr "Не вдалося зарезервувати новий слот ключа." + +#: lib/setup.c:3524 lib/setup.c:4161 lib/setup.c:4174 lib/setup.c:4182 +#: lib/setup.c:4195 lib/setup.c:4480 lib/setup.c:5593 +msgid "Volume key does not match the volume." +msgstr "Ключ тому не відповідає тому." + +#: lib/setup.c:3545 +#, c-format +msgid "Key slot %d is invalid." +msgstr "Слот ключа %d є некоректним." + +#: lib/setup.c:3551 src/cryptsetup.c:1511 src/cryptsetup.c:1856 +#, c-format +msgid "Keyslot %d is not active." +msgstr "Слот ключа %d не є активним." + +#: lib/setup.c:3570 +msgid "Device header overlaps with data area." +msgstr "Заголовок пристрою перекривається із областю даних." + +#: lib/setup.c:3836 +msgid "Reencryption in-progress. Cannot activate device." +msgstr "Виконуємо повторне шифрування. Не можна активувати пристрій." + +#: lib/setup.c:3838 lib/luks2/luks2_json_metadata.c:2244 +#: lib/luks2/luks2_reencrypt.c:2817 +msgid "Failed to get reencryption lock." +msgstr "Не вдалося отримати стан блокування для повторного шифрування." + +#: lib/setup.c:3851 lib/luks2/luks2_reencrypt.c:2836 +msgid "LUKS2 reencryption recovery failed." +msgstr "Не вдалося виконати відновлення даних повторного шифрування LUKS2." + +#: lib/setup.c:3978 lib/setup.c:4248 +msgid "Device type is not properly initialised." +msgstr "Тип пристрою не ініціалізовано належним чином." + +#: lib/setup.c:4022 +#, c-format +msgid "Cannot use device %s, name is invalid or still in use." +msgstr "Неможливо скористатися пристроєм %s, некоректна назва або пристрій усе ще використовується." + +#: lib/setup.c:4025 +#, c-format +msgid "Device %s already exists." +msgstr "Пристрій %s вже існує." + +#: lib/setup.c:4148 +msgid "Incorrect volume key specified for plain device." +msgstr "Для пристрою зі звичайним шифруванням вказано помилковий ключ тому." + +#: lib/setup.c:4214 +msgid "Incorrect root hash specified for verity device." +msgstr "Для пристрою перевірки вказано помилковий кореневий хеш." + +#: lib/setup.c:4289 lib/setup.c:4305 lib/luks2/luks2_json_metadata.c:2297 +#: src/cryptsetup.c:2527 +#, c-format +msgid "Device %s is still in use." +msgstr "Пристрій %s все ще використовується." + +#: lib/setup.c:4314 +#, c-format +msgid "Invalid device %s." +msgstr "Некоректний пристрій %s." + +#: lib/setup.c:4430 +msgid "Volume key buffer too small." +msgstr "Буфер ключів тому є занадто малим." + +#: lib/setup.c:4438 +msgid "Cannot retrieve volume key for plain device." +msgstr "Неможливо отримати ключ тому для пристрою зі звичайним шифруванням." + +#: lib/setup.c:4449 +#, c-format +msgid "This operation is not supported for %s crypt device." +msgstr "Підтримки цієї дії для шифрованого пристрою %s не передбачено." + +#: lib/setup.c:4636 +msgid "Dump operation is not supported for this device type." +msgstr "Підтримки дії зі створення дампу для цього типу пристроїв не передбачено." + +#: lib/setup.c:4947 +#, c-format +msgid "Data offset is not multiple of %u bytes." +msgstr "Зсув у даних не є кратним до %u байтів." + +#: lib/setup.c:5229 +#, c-format +msgid "Cannot convert device %s which is still in use." +msgstr "Не можна перетворити пристрій %s, який перебуває у користуванні." + +#: lib/setup.c:5526 +#, c-format +msgid "Failed to assign keyslot %u as the new volume key." +msgstr "Не вдалося прив'язати слот ключа %u як новий ключ тому." + +#: lib/setup.c:5599 +msgid "Failed to initialise default LUKS2 keyslot parameters." +msgstr "Не вдалося ініціалізувати типові параметри слоту ключів LUKS2." + +#: lib/setup.c:5605 +#, c-format +msgid "Failed to assign keyslot %d to digest." +msgstr "Не вдалося прив'язати слот ключа %d до контрольної суми." + +#: lib/setup.c:5690 +msgid "Failed to load key in kernel keyring." +msgstr "Не вдалося завантажити ключ до сховища ключів ядра." + +#: lib/setup.c:5757 +msgid "Kernel keyring is not supported by the kernel." +msgstr "У ядрі не передбачено підтримки сховища ключів ядра." + +#: lib/setup.c:5767 lib/luks2/luks2_reencrypt.c:2933 +#, c-format +msgid "Failed to read passphrase from keyring (error %d)." +msgstr "Не вдалося прочитати пароль із ключа зі сховища ключів (помилка %d)." + +#: lib/setup.c:5791 +msgid "Failed to acquire global memory-hard access serialization lock." +msgstr "Не вдалося створити загальне блокування серіалізації доступу до пам'яті." + +#: lib/utils.c:81 +msgid "Cannot get process priority." +msgstr "Не вдалося отримати значення пріоритетності процесу." + +#: lib/utils.c:95 +msgid "Cannot unlock memory." +msgstr "Не вдалося розблокувати пам’ять." + +#: lib/utils.c:169 lib/tcrypt/tcrypt.c:498 +msgid "Failed to open key file." +msgstr "Не вдалося відкрити файл ключа." + +#: lib/utils.c:174 +msgid "Cannot read keyfile from a terminal." +msgstr "Не вдалося прочитати файл ключа з термінала." + +#: lib/utils.c:191 +msgid "Failed to stat key file." +msgstr "Не вдалося отримати статистичні дані щодо файла ключа." + +#: lib/utils.c:199 lib/utils.c:220 +msgid "Cannot seek to requested keyfile offset." +msgstr "Не вдалося встановити потрібну позицію у файлі ключа." + +#: lib/utils.c:214 lib/utils.c:229 src/utils_password.c:188 +#: src/utils_password.c:201 +msgid "Out of memory while reading passphrase." +msgstr "Під час читання пароля вичерпано пам’ять." + +#: lib/utils.c:249 +msgid "Error reading passphrase." +msgstr "Помилка під час читання пароля." + +#: lib/utils.c:266 +msgid "Nothing to read on input." +msgstr "Нічого читати з вхідних даних." + +#: lib/utils.c:273 +msgid "Maximum keyfile size exceeded." +msgstr "Перевищено максимальний розмір файла ключа." + +#: lib/utils.c:278 +msgid "Cannot read requested amount of data." +msgstr "Не вдалося прочитати бажаний об’єм даних." + +#: lib/utils_device.c:188 lib/utils_storage_wrappers.c:111 +#: lib/luks1/keyencryption.c:92 +#, c-format +msgid "Device %s doesn't exist or access denied." +msgstr "Пристрою %s не існує або доступ до цього пристрою заборонено." + +#: lib/utils_device.c:198 +#, c-format +msgid "Device %s is not compatible." +msgstr "Пристрій %s є сумісним." + +#: lib/utils_device.c:643 +#, c-format +msgid "Device %s is too small. Need at least % bytes." +msgstr "Обсяг пристрою %s є надто малим. Потрібно принаймні % байтів." + +#: lib/utils_device.c:724 +#, c-format +msgid "Cannot use device %s which is in use (already mapped or mounted)." +msgstr "Не можна використовувати пристрій %s, оскільки його вже використано (призначено або змонтовано)." + +#: lib/utils_device.c:728 +#, c-format +msgid "Cannot use device %s, permission denied." +msgstr "Не можна скористатися пристроєм %s, недостатні права доступу." + +#: lib/utils_device.c:731 +#, c-format +msgid "Cannot get info about device %s." +msgstr "Не вдалося отримати дані щодо пристрою %s." + +#: lib/utils_device.c:754 +msgid "Cannot use a loopback device, running as non-root user." +msgstr "Не можна використовувати петльовий пристрій, програму запущено не від імені адміністративного користувача (root)." + +#: lib/utils_device.c:764 +msgid "Attaching loopback device failed (loop device with autoclear flag is required)." +msgstr "Спроба долучення петльового пристрою зазнала невдачі (потрібен петльовий пристрій з встановленим прапорцем автоматичного спорожнення)." + +#: lib/utils_device.c:810 +#, c-format +msgid "Requested offset is beyond real size of device %s." +msgstr "Бажана точка відступу перебуває за межами об’єму пристрою %s." + +#: lib/utils_device.c:818 +#, c-format +msgid "Device %s has zero size." +msgstr "Об’єм пристрою %s є нульовим." + +#: lib/utils_pbkdf.c:100 +msgid "Requested PBKDF target time cannot be zero." +msgstr "Вказаний час PBKDF не може бути нульовим." + +#: lib/utils_pbkdf.c:106 +#, c-format +msgid "Unknown PBKDF type %s." +msgstr "Невідомий тип PBKDF, %s." + +#: lib/utils_pbkdf.c:111 +#, c-format +msgid "Requested hash %s is not supported." +msgstr "Підтримки бажаного хешування, %s, не передбачено." + +#: lib/utils_pbkdf.c:122 +msgid "Requested PBKDF type is not supported for LUKS1." +msgstr "Підтримки бажаного типу PBKDF для LUKS1 не передбачено." + +#: lib/utils_pbkdf.c:128 +msgid "PBKDF max memory or parallel threads must not be set with pbkdf2." +msgstr "Максимальний об'єм пам'яті PBKDF або кількість паралельних потоків обробки не можна встановлювати разом із pbkdf2." + +#: lib/utils_pbkdf.c:133 lib/utils_pbkdf.c:143 +#, c-format +msgid "Forced iteration count is too low for %s (minimum is %u)." +msgstr "Задане значення кількості ітерацій для %s є надто низьким (мінімальним є %u)." + +#: lib/utils_pbkdf.c:148 +#, c-format +msgid "Forced memory cost is too low for %s (minimum is %u kilobytes)." +msgstr "Задане значення об'єму пам'яті для %s є надто низьким (мінімальним є %u кілобайтів)." + +#: lib/utils_pbkdf.c:155 +#, c-format +msgid "Requested maximum PBKDF memory cost is too high (maximum is %d kilobytes)." +msgstr "Бажана максимальна вартість пам'яті PBKDF є надто високою (максимальною є %d кілобайтів)." + +#: lib/utils_pbkdf.c:160 +msgid "Requested maximum PBKDF memory cannot be zero." +msgstr "Бажаний максимальний обсяг пам'яті PBKDF не може бути нульовим." + +#: lib/utils_pbkdf.c:164 +msgid "Requested PBKDF parallel threads cannot be zero." +msgstr "Вказана кількість паралельних потоків обробки PBKDF не може бути нульовою." + +#: lib/utils_pbkdf.c:184 +msgid "Only PBKDF2 is supported in FIPS mode." +msgstr "У режимі FIPS передбачено підтримку лише PBKDF2." + +#: lib/utils_benchmark.c:166 +msgid "PBKDF benchmark disabled but iterations not set." +msgstr "Тестування PBKDF вимкнено, але кількість ітерацій не встановлено." + +#: lib/utils_benchmark.c:185 +#, c-format +msgid "Not compatible PBKDF2 options (using hash algorithm %s)." +msgstr "Несумісні параметри PBKDF2 (з використанням алгоритму хешування %s)." + +#: lib/utils_benchmark.c:205 +msgid "Not compatible PBKDF options." +msgstr "Несумісні параметри PBKDF." + +#: lib/utils_device_locking.c:103 +#, c-format +msgid "Locking aborted. The locking path %s/%s is unusable (not a directory or missing)." +msgstr "Блокування перервано. Шлях блокування %s/%s є непридатним для користування (не є каталогом або його не вказано)." + +#: lib/utils_device_locking.c:110 +#, c-format +msgid "WARNING: Locking directory %s/%s is missing!\n" +msgstr "ПОПЕРЕДЖЕННЯ: не вистачає блокування каталогу %s/%s!\n" + +#: lib/utils_device_locking.c:120 +#, c-format +msgid "Locking aborted. The locking path %s/%s is unusable (%s is not a directory)." +msgstr "Блокування перервано Шлях блокування %s/%s є непридатним для користування (%s не є каталогом)." + +#: lib/utils_wipe.c:185 src/cryptsetup_reencrypt.c:933 +#: src/cryptsetup_reencrypt.c:1017 +msgid "Cannot seek to device offset." +msgstr "Не вдалося встановити вказану позицію на пристрої." + +#: lib/utils_wipe.c:209 +#, c-format +msgid "Device wipe error, offset %." +msgstr "Помилка витирання пристрою, зсув %." + +#: lib/luks1/keyencryption.c:40 +#, c-format +msgid "" +"Failed to setup dm-crypt key mapping for device %s.\n" +"Check that kernel supports %s cipher (check syslog for more info)." +msgstr "" +"Не вдалося визначити призначення ключа dm-crypt для пристрою %s.\n" +"Перевірте, чи передбачено у ядрі підтримку шифрування %s (докладніші дані можна знайти у журналі системи (syslog))." + +#: lib/luks1/keyencryption.c:45 +msgid "Key size in XTS mode must be 256 or 512 bits." +msgstr "Розмір ключа у режимі XTS має бути рівним 256 або 512 бітів." + +#: lib/luks1/keyencryption.c:47 +msgid "Cipher specification should be in [cipher]-[mode]-[iv] format." +msgstr "Специфікацію шифрування слід вказувати так: [алгоритм]-[режим]-[iv]." + +#: lib/luks1/keyencryption.c:98 lib/luks1/keymanage.c:345 +#: lib/luks1/keymanage.c:636 lib/luks1/keymanage.c:1074 +#: lib/luks2/luks2_json_metadata.c:1253 lib/luks2/luks2_keyslot.c:739 +#, c-format +msgid "Cannot write to device %s, permission denied." +msgstr "Не вдалося виконати запис на пристрій %s, недостатні права доступу." + +#: lib/luks1/keyencryption.c:121 +msgid "Failed to open temporary keystore device." +msgstr "Не вдалося відкрити пристрій тимчасового сховища ключів." + +#: lib/luks1/keyencryption.c:128 +msgid "Failed to access temporary keystore device." +msgstr "Не вдалося отримати доступ до пристрою тимчасового сховища ключів." + +#: lib/luks1/keyencryption.c:201 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 "Помилка введення-виведення під час шифрування слоту ключів." + +#: lib/luks1/keyencryption.c:247 lib/luks1/keymanage.c:348 +#: lib/luks1/keymanage.c:589 lib/luks1/keymanage.c:639 lib/tcrypt/tcrypt.c:661 +#: lib/verity/verity.c:81 lib/verity/verity.c:179 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:1256 +#: src/cryptsetup_reencrypt.c:205 +#, c-format +msgid "Cannot open device %s." +msgstr "Не вдалося відкрити пристрій %s." + +#: lib/luks1/keyencryption.c:258 lib/luks2/luks2_keyslot_luks2.c:137 +msgid "IO error while decrypting keyslot." +msgstr "Помилка введення-виведення під час розшифрування слоту ключів." + +#: lib/luks1/keymanage.c:111 +#, c-format +msgid "Device %s is too small. (LUKS1 requires at least % bytes.)" +msgstr "Обсяг пристрою %s є надто малим. (LUKS1 потрібно принаймні % байтів.)" + +#: 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 +#, c-format +msgid "LUKS keyslot %u is invalid." +msgstr "Слот ключа LUKS %u є некоректним." + +#: lib/luks1/keymanage.c:229 lib/luks1/keymanage.c:473 +#: lib/luks2/luks2_json_metadata.c:1084 src/cryptsetup.c:1372 +#: src/cryptsetup.c:1498 src/cryptsetup.c:1555 src/cryptsetup.c:1611 +#: src/cryptsetup.c:1678 src/cryptsetup.c:1781 src/cryptsetup.c:1845 +#: src/cryptsetup.c:2005 src/cryptsetup.c:2194 src/cryptsetup.c:2254 +#: src/cryptsetup.c:2320 src/cryptsetup.c:2484 src/cryptsetup.c:3137 +#: src/cryptsetup.c:3146 src/cryptsetup_reencrypt.c:1372 +#, c-format +msgid "Device %s is not a valid LUKS device." +msgstr "Пристрій %s не є коректним пристроєм LUKS." + +#: lib/luks1/keymanage.c:247 lib/luks2/luks2_json_metadata.c:1101 +#, c-format +msgid "Requested header backup file %s already exists." +msgstr "Потрібний вам файл резервної копії заголовка, %s, вже існує." + +#: lib/luks1/keymanage.c:249 lib/luks2/luks2_json_metadata.c:1103 +#, c-format +msgid "Cannot create header backup file %s." +msgstr "Не вдалося створити файл резервної копії заголовка, %s." + +#: lib/luks1/keymanage.c:256 lib/luks2/luks2_json_metadata.c:1110 +#, c-format +msgid "Cannot write header backup file %s." +msgstr "Не вдалося записати файл резервної копії заголовка, %s." + +#: lib/luks1/keymanage.c:287 lib/luks2/luks2_json_metadata.c:1162 +msgid "Backup file doesn't contain valid LUKS header." +msgstr "Файл резервної копії не містить коректного заголовка LUKS." + +#: lib/luks1/keymanage.c:300 lib/luks1/keymanage.c:550 +#: lib/luks2/luks2_json_metadata.c:1183 +#, c-format +msgid "Cannot open header backup file %s." +msgstr "Не вдалося відкрити файл резервної копії заголовка, %s." + +#: lib/luks1/keymanage.c:308 lib/luks2/luks2_json_metadata.c:1191 +#, c-format +msgid "Cannot read header backup file %s." +msgstr "Не вдалося прочитати дані з файла резервної копії заголовка, %s." + +#: lib/luks1/keymanage.c:318 +msgid "Data offset or key size differs on device and backup, restore failed." +msgstr "Відступ у даних або розмір ключа на пристрої і у резервній копії є різними. Відновлення неможливе." + +#: lib/luks1/keymanage.c:326 +#, c-format +msgid "Device %s %s%s" +msgstr "Пристрій %s %s%s" + +#: lib/luks1/keymanage.c:327 +msgid "does not contain LUKS header. Replacing header can destroy data on that device." +msgstr "не містить заголовка LUKS. Заміна заголовка може зруйнувати дані, що зберігаються на пристрої." + +#: lib/luks1/keymanage.c:328 +msgid "already contains LUKS header. Replacing header will destroy existing keyslots." +msgstr "вже містить заголовок LUKS. Заміна заголовка призведе до руйнування вже створених слотів ключів." + +#: lib/luks1/keymanage.c:329 lib/luks2/luks2_json_metadata.c:1225 +msgid "" +"\n" +"WARNING: real device header has different UUID than backup!" +msgstr "" +"\n" +"ПОПЕРЕДЖЕННЯ: заголовок, що зберігається на пристрої, має інший UUID, ніж заголовок у резервній копії!" + +#: lib/luks1/keymanage.c:376 +msgid "Non standard key size, manual repair required." +msgstr "Нестандартний розмір ключа, слід виправити дані вручну." + +#: lib/luks1/keymanage.c:381 +msgid "Non standard keyslots alignment, manual repair required." +msgstr "Нестандартне вирівнювання слотів ключів, слід виправити дані вручну." + +#: lib/luks1/keymanage.c:391 +msgid "Repairing keyslots." +msgstr "Виправлення слотів ключів." + +#: lib/luks1/keymanage.c:410 +#, c-format +msgid "Keyslot %i: offset repaired (%u -> %u)." +msgstr "Слот ключа %i: виправлено відступ (%u -> %u)." + +#: lib/luks1/keymanage.c:418 +#, c-format +msgid "Keyslot %i: stripes repaired (%u -> %u)." +msgstr "Слот ключа %i: виправлено смужки (%u -> %u)." + +#: lib/luks1/keymanage.c:427 +#, c-format +msgid "Keyslot %i: bogus partition signature." +msgstr "Слот ключа %i: зайвий підпис розділу." + +#: lib/luks1/keymanage.c:432 +#, c-format +msgid "Keyslot %i: salt wiped." +msgstr "Слот ключа %i: дані ініціалізації (сіль) витерто." + +#: lib/luks1/keymanage.c:449 +msgid "Writing LUKS header to disk." +msgstr "Запис заголовка LUKS на диск." + +#: lib/luks1/keymanage.c:454 +msgid "Repair failed." +msgstr "Спроба виправлення зазнала невдачі." + +#: lib/luks1/keymanage.c:482 lib/luks1/keymanage.c:751 +#, c-format +msgid "Requested LUKS hash %s is not supported." +msgstr "Підтримки бажаного хешування LUKS, %s, не передбачено." + +#: lib/luks1/keymanage.c:510 src/cryptsetup.c:1081 +msgid "No known problems detected for LUKS header." +msgstr "У заголовку LUKS не виявлено жодних проблем." + +#: lib/luks1/keymanage.c:661 +#, c-format +msgid "Error during update of LUKS header on device %s." +msgstr "Помилка під час оновлення заголовка LUKS на пристрої %s." + +#: lib/luks1/keymanage.c:669 +#, c-format +msgid "Error re-reading LUKS header after update on device %s." +msgstr "Помилка під час спроби повторного читання заголовка LUKS після оновлення на пристрої %s." + +#: lib/luks1/keymanage.c:745 +msgid "Data offset for LUKS header must be either 0 or higher than header size." +msgstr "Відступ даних для заголовка LUKS має бути або рівним нулеві, або перевищувати розмір заголовка." + +#: lib/luks1/keymanage.c:756 lib/luks1/keymanage.c:821 +#: lib/luks2/luks2_json_format.c:283 lib/luks2/luks2_json_metadata.c:1002 +#: src/cryptsetup.c:2647 +msgid "Wrong LUKS UUID format provided." +msgstr "Вказано UUID LUKS у помилковому форматі." + +#: lib/luks1/keymanage.c:779 +msgid "Cannot create LUKS header: reading random salt failed." +msgstr "Не вдалося створити заголовок LUKS: помилка читання випадкових даних для ініціалізації." + +#: lib/luks1/keymanage.c:800 +#, c-format +msgid "Cannot create LUKS header: header digest failed (using hash %s)." +msgstr "Не вдалося створити заголовок LUKS: помилка під час обчислення контрольної суми заголовка (з використанням хешу %s)." + +#: lib/luks1/keymanage.c:844 +#, c-format +msgid "Key slot %d active, purge first." +msgstr "Слот ключа %d є активним. Його слід спочатку спорожнити." + +#: lib/luks1/keymanage.c:850 +#, c-format +msgid "Key slot %d material includes too few stripes. Header manipulation?" +msgstr "Ентропія даних слота ключа %d є надто низькою. Маніпуляції з заголовком?" + +#: lib/luks1/keymanage.c:1060 +#, c-format +msgid "Key slot %d is invalid, please select keyslot between 0 and %d." +msgstr "Слот ключа %d є некоректним, будь ласка, виберіть слот ключа з номером від 0 до %d." + +#: lib/luks1/keymanage.c:1078 lib/luks2/luks2_keyslot.c:743 +#, c-format +msgid "Cannot wipe device %s." +msgstr "Не вдалося витерти пристрій %s." + +#: lib/loopaes/loopaes.c:146 +msgid "Detected not yet supported GPG encrypted keyfile." +msgstr "Виявлено файл ключа, підтримки шифрування GPG у якому ще не передбачено." + +#: lib/loopaes/loopaes.c:147 +msgid "Please use gpg --decrypt | cryptsetup --keyfile=- ...\n" +msgstr "Будь ласка, скористайтеся командою gpg --decrypt <ФАЙЛ_КЛЮЧА> | cryptsetup --keyfile=- ...\n" + +#: lib/loopaes/loopaes.c:168 lib/loopaes/loopaes.c:188 +msgid "Incompatible loop-AES keyfile detected." +msgstr "Виявлено несумісний з loop-AES файл ключа." + +#: lib/loopaes/loopaes.c:245 +msgid "Kernel doesn't support loop-AES compatible mapping." +msgstr "У ядрі не передбачено підтримки призначення, сумісного з loop-AES." + +#: lib/tcrypt/tcrypt.c:505 +#, c-format +msgid "Error reading keyfile %s." +msgstr "Помилка під час спроби читання файла ключа %s." + +#: lib/tcrypt/tcrypt.c:545 +#, c-format +msgid "Maximum TCRYPT passphrase length (%d) exceeded." +msgstr "Перевищено максимальну можливу довжину пароля TCRYPT (%d)." + +#: lib/tcrypt/tcrypt.c:586 +#, c-format +msgid "PBKDF2 hash algorithm %s not available, skipping." +msgstr "Засіб створення хешів PBKDF2 за алгоритмом %s недоступний, пропускаємо." + +#: lib/tcrypt/tcrypt.c:602 src/cryptsetup.c:959 +msgid "Required kernel crypto interface not available." +msgstr "Потрібний для роботи інтерфейс ядра для шифрування недоступний." + +#: lib/tcrypt/tcrypt.c:604 src/cryptsetup.c:961 +msgid "Ensure you have algif_skcipher kernel module loaded." +msgstr "Переконайтеся, що завантажено модуль ядра algif_skcipher." + +#: lib/tcrypt/tcrypt.c:744 +#, c-format +msgid "Activation is not supported for %d sector size." +msgstr "Підтримки активації для розміру сектора %d не передбачено." + +#: lib/tcrypt/tcrypt.c:750 +msgid "Kernel doesn't support activation for this TCRYPT legacy mode." +msgstr "У ядрі не передбачено підтримки вмикання цього застарілого режиму TCRYPT." + +#: lib/tcrypt/tcrypt.c:784 +#, c-format +msgid "Activating TCRYPT system encryption for partition %s." +msgstr "Активуємо шифрування системи за допомогою TCRYPT для розділу %s." + +#: lib/tcrypt/tcrypt.c:862 +msgid "Kernel doesn't support TCRYPT compatible mapping." +msgstr "У ядрі не передбачено підтримки призначення, сумісного з TCRYPT." + +#: lib/tcrypt/tcrypt.c:1084 +msgid "This function is not supported without TCRYPT header load." +msgstr "Підтримки цієї дії без завантаження заголовка TCRYPT." + +#: lib/verity/verity.c:69 lib/verity/verity.c:172 +#, c-format +msgid "Verity device %s doesn't use on-disk header." +msgstr "На пристрої VERITY %s не використовується вбудований заголовок." + +#: lib/verity/verity.c:91 +#, c-format +msgid "Device %s is not a valid VERITY device." +msgstr "Пристрій %s не є коректним пристроєм VERITY." + +#: lib/verity/verity.c:98 +#, c-format +msgid "Unsupported VERITY version %d." +msgstr "Непідтримувана версія VERITY, %d." + +#: lib/verity/verity.c:129 +msgid "VERITY header corrupted." +msgstr "Пошкоджено заголовок VERITY." + +#: lib/verity/verity.c:166 +#, c-format +msgid "Wrong VERITY UUID format provided on device %s." +msgstr "На пристрої %s вказано UUID VERITY у помилковому форматі." + +#: lib/verity/verity.c:199 +#, c-format +msgid "Error during update of verity header on device %s." +msgstr "Помилка під час оновлення заголовка verity на пристрої %s." + +#: lib/verity/verity.c:262 +msgid "Errors cannot be repaired with FEC device." +msgstr "Помилки не може бути виправлено за допомогою пристрою FEC." + +#: lib/verity/verity.c:264 +#, c-format +msgid "Found %u repairable errors with FEC device." +msgstr "За допомогою пристрою FEC виявлено %u придатних до виправлення помилок." + +#: lib/verity/verity.c:302 +msgid "Kernel doesn't support dm-verity mapping." +msgstr "У ядрі не передбачено підтримки призначення за dm-verity." + +#: lib/verity/verity.c:313 +msgid "Verity device detected corruption after activation." +msgstr "Виявлено пошкодження даних на пристрої перевірки після активації." + +#: lib/verity/verity_hash.c:59 +#, c-format +msgid "Spare area is not zeroed at position %." +msgstr "Резервну область не занулено у позиції %." + +#: lib/verity/verity_hash.c:160 lib/verity/verity_hash.c:287 +#: lib/verity/verity_hash.c:300 +msgid "Device offset overflow." +msgstr "Переповнення відступу на пристрої." + +#: lib/verity/verity_hash.c:200 +#, c-format +msgid "Verification failed at position %." +msgstr "Помилка під час перевірки за позицією %." + +#: lib/verity/verity_hash.c:273 +msgid "Invalid size parameters for verity device." +msgstr "Некоректні параметри розміру для пристрою перевірки." + +#: lib/verity/verity_hash.c:293 +msgid "Hash area overflow." +msgstr "Переповнення області хешу." + +#: lib/verity/verity_hash.c:370 +msgid "Verification of data area failed." +msgstr "Не вдалося перевірити область даних." + +#: lib/verity/verity_hash.c:375 +msgid "Verification of root hash failed." +msgstr "Не вдалося перевірити кореневий хеш." + +#: lib/verity/verity_hash.c:381 +msgid "Input/output error while creating hash area." +msgstr "Під час створення області хешу сталася помилка введення або виведення даних." + +#: lib/verity/verity_hash.c:383 +msgid "Creation of hash area failed." +msgstr "Не вдалося створити область хешу." + +#: lib/verity/verity_hash.c:430 +#, c-format +msgid "WARNING: Kernel cannot activate device if data block size exceeds page size (%u)." +msgstr "Попередження: ядро не зможе задіяти пристрій, якщо розмір блоку перевищуватиме розмір сторінки (%u)." + +#: lib/verity/verity_fec.c:132 +msgid "Failed to allocate RS context." +msgstr "Не вдалося розмістити контекст RS." + +#: lib/verity/verity_fec.c:147 +msgid "Failed to allocate buffer." +msgstr "Не вдалося розмістити у пам'яті буфер." + +#: lib/verity/verity_fec.c:157 +#, c-format +msgid "Failed to read RS block % byte %d." +msgstr "Не вдалося прочитати блок RS %, байт %d." + +#: lib/verity/verity_fec.c:170 +#, c-format +msgid "Failed to read parity for RS block %." +msgstr "Не вдалося прочитати парність для блоку RS %." + +#: lib/verity/verity_fec.c:178 +#, c-format +msgid "Failed to repair parity for block %." +msgstr "Не вдалося відновити парність для блоку %." + +#: lib/verity/verity_fec.c:189 +#, c-format +msgid "Failed to write parity for RS block %." +msgstr "Не вдалося прочитати парність для блоку RS %." + +#: lib/verity/verity_fec.c:224 +msgid "Block sizes must match for FEC." +msgstr "Розміри блоків для FEC мають бути однаковими." + +#: lib/verity/verity_fec.c:230 +msgid "Invalid number of parity bytes." +msgstr "Некоректна кількість байтів парності." + +#: lib/verity/verity_fec.c:266 +#, c-format +msgid "Failed to determine size for device %s." +msgstr "Не вдалося визначити розмір для пристрою %s." + +#: lib/integrity/integrity.c:241 lib/integrity/integrity.c:306 +msgid "Kernel doesn't support dm-integrity mapping." +msgstr "У ядрі не передбачено підтримки прив'язки dm-integrity." + +#: lib/luks2/luks2_disk_metadata.c:383 lib/luks2/luks2_json_metadata.c:959 +#: lib/luks2/luks2_json_metadata.c:1245 +#, c-format +msgid "Failed to acquire write lock on device %s." +msgstr "Не вдалося отримати блокування запису на пристрої %s." + +#: lib/luks2/luks2_disk_metadata.c:392 +msgid "Detected attempt for concurrent LUKS2 metadata update. Aborting operation." +msgstr "Виявлено спробу конкурентного оновлення метаданих LUKS2. Перериваємо виконання дії." + +#: 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 "" +"Пристрій містить неоднозначні підписи. Автоматичне відновлення LUKS2 неможливе.\n" +"Будь ласка, запустіть «cryptsetup repair» для відновлення." + +#: lib/luks2/luks2_json_format.c:227 +msgid "Requested data offset is too small." +msgstr "Вказаний відступ у даних є надто малим." + +#: 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 "Увага: область слоту ключів є надто малою (% байтів), доступна кількість слотів ключів LUKS2 буде дуже обмеженою.\n" + +#: lib/luks2/luks2_json_metadata.c:946 lib/luks2/luks2_json_metadata.c:1075 +#: lib/luks2/luks2_json_metadata.c:1151 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:1168 +#, c-format +msgid "Forbidden LUKS2 requirements detected in backup %s." +msgstr "У резервній копії %s виявлено заборонені вимоги щодо LUKS2." + +#: lib/luks2/luks2_json_metadata.c:1209 +msgid "Data offset differ on device and backup, restore failed." +msgstr "Зсуви даних на пристрої і на резервній копії різняться, не вдалося відновити." + +#: lib/luks2/luks2_json_metadata.c:1215 +msgid "Binary header with keyslot areas size differ on device and backup, restore failed." +msgstr "Двійкові заголовки із розмірами областей слотів ключів на пристрої і у резервній копії різняться, не вдалося відновити копію." + +#: lib/luks2/luks2_json_metadata.c:1222 +#, c-format +msgid "Device %s %s%s%s%s" +msgstr "Пристрій %s %s%s%s%s" + +#: lib/luks2/luks2_json_metadata.c:1223 +msgid "does not contain LUKS2 header. Replacing header can destroy data on that device." +msgstr "не містить заголовка LUKS2. Заміна заголовка може зруйнувати дані, що зберігаються на пристрої." + +#: lib/luks2/luks2_json_metadata.c:1224 +msgid "already contains LUKS2 header. Replacing header will destroy existing keyslots." +msgstr "вже містить заголовок LUKS2. Заміна заголовка призведе до руйнування вже створених слотів ключів." + +#: lib/luks2/luks2_json_metadata.c:1226 +msgid "" +"\n" +"WARNING: unknown LUKS2 requirements detected in real device header!\n" +"Replacing header with backup may corrupt the data on that device!" +msgstr "" +"\n" +"ПОПЕРЕДЖЕННЯ: виявлено невідомі вимоги LUKS2 у справжньому заголовку пристрою!\n" +"Заміна заголовка резервною копією може пошкодити дані на пристрої!" + +#: lib/luks2/luks2_json_metadata.c:1228 +msgid "" +"\n" +"WARNING: Unfinished offline reencryption detected on the device!\n" +"Replacing header with backup may corrupt data." +msgstr "" +"\n" +"ПОПЕРЕДЖЕННЯ: на пристрої виявлено дані незавершеного повторного шифрування!\n" +"Заміна заголовка заголовком із резервної копії може пошкодити дані." + +#: lib/luks2/luks2_json_metadata.c:1324 +#, c-format +msgid "Ignored unknown flag %s." +msgstr "Проігноровано невідомий прапорець %s." + +#: lib/luks2/luks2_json_metadata.c:2011 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:2023 lib/luks2/luks2_reencrypt.c:1764 +msgid "Failed to set dm-crypt segment." +msgstr "Не вдалося встановити сегмент dm-crypt." + +#: lib/luks2/luks2_json_metadata.c:2029 lib/luks2/luks2_reencrypt.c:1770 +msgid "Failed to set dm-linear segment." +msgstr "Не вдалося встановити сегмент dm-linear." + +#: lib/luks2/luks2_json_metadata.c:2156 +msgid "Unsupported device integrity configuration." +msgstr "Непідтримувані налаштування цілісності даних на пристрої." + +#: lib/luks2/luks2_json_metadata.c:2242 +msgid "Reencryption in-progress. Cannot deactivate device." +msgstr "Виконуємо повторне шифрування. Не можна деактивувати пристрій." + +#: lib/luks2/luks2_json_metadata.c:2253 lib/luks2/luks2_reencrypt.c:3171 +#, c-format +msgid "Failed to replace suspended device %s with dm-error target." +msgstr "Не вдалося замінити пристрій %s, роботу якого призупинено, ціллю dm-error." + +#: lib/luks2/luks2_json_metadata.c:2333 +msgid "Failed to read LUKS2 requirements." +msgstr "Не вдалося прочитати вимоги LUKS2." + +#: lib/luks2/luks2_json_metadata.c:2340 +msgid "Unmet LUKS2 requirements detected." +msgstr "Виявлено невідповідність вимог LUKS2." + +#: lib/luks2/luks2_json_metadata.c:2348 +msgid "Offline reencryption in progress. Aborting." +msgstr "Виконується повторне шифрування з від'єднанням. Перериваємо." + +#: lib/luks2/luks2_json_metadata.c:2350 +msgid "Online reencryption in progress. Aborting." +msgstr "Виконується повторне шифрування без від'єднання. Перериваємо." + +#: lib/luks2/luks2_keyslot.c:552 lib/luks2/luks2_keyslot.c:589 +msgid "Not enough available memory to open a keyslot." +msgstr "Недостатньо пам'яті для відкриття слоту ключів." + +#: lib/luks2/luks2_keyslot.c:554 lib/luks2/luks2_keyslot.c:591 +msgid "Keyslot open failed." +msgstr "Не вдалося відкрити слот ключів." + +#: 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 "Не можна використовувати шифрування %s-%s для слотів ключів." + +#: lib/luks2/luks2_keyslot_luks2.c:480 +msgid "No space for new keyslot." +msgstr "Немає простору для нового слоту ключа." + +#: lib/luks2/luks2_luks1_convert.c:481 +#, c-format +msgid "Cannot check status of device with uuid: %s." +msgstr "Не вдалося перевірити стан пристрою з uuid %s." + +#: lib/luks2/luks2_luks1_convert.c:507 +msgid "Unable to convert header with LUKSMETA additional metadata." +msgstr "Не вдалося перетворити заголовок з додатковими метаданими LUKSMETA." + +#: lib/luks2/luks2_luks1_convert.c:547 +msgid "Unable to move keyslot area. Not enough space." +msgstr "Не вдалося пересунути область слотів ключів. Недостатньо місця." + +#: lib/luks2/luks2_luks1_convert.c:590 lib/luks2/luks2_luks1_convert.c:872 +msgid "Unable to move keyslot area." +msgstr "Не вдалося пересунути область слотів ключів." + +#: lib/luks2/luks2_luks1_convert.c:682 +msgid "Cannot convert to LUKS1 format - default segment encryption sector size is not 512 bytes." +msgstr "Не вдалося перетворити на формат LUKS1 — типовий розмір сектору шифрування сегмента не дорівнює 512 байтам." + +#: lib/luks2/luks2_luks1_convert.c:690 +msgid "Cannot convert to LUKS1 format - key slot digests are not LUKS1 compatible." +msgstr "Не вдалося перетворити до формату LUKS1 — контрольні суми слотів ключів не сумісні з LUKS1." + +#: lib/luks2/luks2_luks1_convert.c:702 +#, c-format +msgid "Cannot convert to LUKS1 format - device uses wrapped key cipher %s." +msgstr "Не вдалося перетворити до формату LUKS1 — на пристрої використовується загорнуте шифрування ключів %s." + +#: lib/luks2/luks2_luks1_convert.c:710 +#, c-format +msgid "Cannot convert to LUKS1 format - LUKS2 header contains %u token(s)." +msgstr "Не вдалося перетворити до формату LUKS1 - заголовок LUKS2 містить %u ключів." + +#: lib/luks2/luks2_luks1_convert.c:724 +#, c-format +msgid "Cannot convert to LUKS1 format - keyslot %u is in invalid state." +msgstr "Не вдалося перетворити до формату LUKS1 - слот ключа %u перебуває у некоректному стані." + +#: lib/luks2/luks2_luks1_convert.c:729 +#, c-format +msgid "Cannot convert to LUKS1 format - slot %u (over maximum slots) is still active." +msgstr "Не вдалося перетворити до формату LUKS1 — слот %u (перевищує максимальну кількість слотів) усе ще є активним." + +#: lib/luks2/luks2_luks1_convert.c:734 +#, c-format +msgid "Cannot convert to LUKS1 format - keyslot %u is not LUKS1 compatible." +msgstr "не вдалося перетворити до формату LUKS1 — слот ключів %u є несумісним з LUKS1." + +#: lib/luks2/luks2_reencrypt.c:892 +#, c-format +msgid "Hotzone size must be multiple of calculated zone alignment (%zu bytes)." +msgstr "Розмір «гарячої» ділянки має бути кратним до обчисленого вирівнювання ділянки (%zu байтів)." + +#: lib/luks2/luks2_reencrypt.c:897 +#, c-format +msgid "Device size must be multiple of calculated zone alignment (%zu bytes)." +msgstr "Розмір пристрою має бути кратним до обчисленого вирівнювання ділянки (%zu байтів)." + +#: lib/luks2/luks2_reencrypt.c:941 +#, c-format +msgid "Unsupported resilience mode %s" +msgstr "Непідтримуваний режим стійкості %s" + +#: lib/luks2/luks2_reencrypt.c:1158 lib/luks2/luks2_reencrypt.c:1313 +#: lib/luks2/luks2_reencrypt.c:1396 lib/luks2/luks2_reencrypt.c:1430 +#: lib/luks2/luks2_reencrypt.c:3011 +msgid "Failed to initialize old segment storage wrapper." +msgstr "Не вдалося ініціалізувати обгортку старого сховища сегментів." + +#: lib/luks2/luks2_reencrypt.c:1172 lib/luks2/luks2_reencrypt.c:1291 +msgid "Failed to initialize new segment storage wrapper." +msgstr "Не вдалося ініціалізувати обгортку нового сховища сегментів." + +#: lib/luks2/luks2_reencrypt.c:1340 +msgid "Failed to read checksums for current hotzone." +msgstr "Не вдалося прочитати контрольні суми для поточної «гарячої» ділянки." + +#: lib/luks2/luks2_reencrypt.c:1347 lib/luks2/luks2_reencrypt.c:3019 +#, c-format +msgid "Failed to read hotzone area starting at %." +msgstr "Не вдалося прочитати «гарячу» ділянку, починаючи з %." + +#: lib/luks2/luks2_reencrypt.c:1366 +#, c-format +msgid "Failed to decrypt sector %zu." +msgstr "Не вдалося розшифрувати сектор %zu." + +#: lib/luks2/luks2_reencrypt.c:1372 +#, c-format +msgid "Failed to recover sector %zu." +msgstr "Не вдалося відновити сектор %zu." + +#: lib/luks2/luks2_reencrypt.c:1867 +#, c-format +msgid "Source and target device sizes don't match. Source %, target: %." +msgstr "Розміри пристроїв джерела та призначення не збігаються. Розмір джерела — %, розмір призначення — %." + +#: lib/luks2/luks2_reencrypt.c:1965 +#, c-format +msgid "Failed to activate hotzone device %s." +msgstr "Не вдалося задіяти пристрій «гарячої» ділянки %s." + +#: lib/luks2/luks2_reencrypt.c:1982 +#, c-format +msgid "Failed to activate overlay device %s with actual origin table." +msgstr "Не вдалося задіяти пристрій-накладку %s зі справжньою таблицею походження." + +#: lib/luks2/luks2_reencrypt.c:1989 +#, c-format +msgid "Failed to load new mapping for device %s." +msgstr "Не вдалося завантажити нову прив'язку для пристрою %s." + +#: lib/luks2/luks2_reencrypt.c:2060 +msgid "Failed to refresh reencryption devices stack." +msgstr "Не вдалося освіжити тек пристрої для повторного шифрування." + +#: lib/luks2/luks2_reencrypt.c:2216 +msgid "Failed to set new keyslots area size." +msgstr "Не вдалося встановити розмір області нових слотів ключів." + +#: lib/luks2/luks2_reencrypt.c:2318 +#, c-format +msgid "Data shift is not aligned to requested encryption sector size (% bytes)." +msgstr "Зміщення даних не вирівняно до запитаного розміру сектора для шифрування (% байтів)." + +#: lib/luks2/luks2_reencrypt.c:2339 +#, c-format +msgid "Data device is not aligned to requested encryption sector size (% bytes)." +msgstr "Пристрій зберігання даних не вирівняно до запитаного розміру сектора для шифрування (% байтів)." + +#: lib/luks2/luks2_reencrypt.c:2360 +#, c-format +msgid "Data shift (% sectors) is less than future data offset (% sectors)." +msgstr "Зміщення даних (% секторів) є меншим за майбутній зсув даних (% секторів)." + +#: lib/luks2/luks2_reencrypt.c:2366 lib/luks2/luks2_reencrypt.c:2760 +#: lib/luks2/luks2_reencrypt.c:2781 +#, c-format +msgid "Failed to open %s in exclusive mode (already mapped or mounted)." +msgstr "Не вдалося відкрити %s в ексклюзивному режимі (вже пов'язано або змонтовано)." + +#: lib/luks2/luks2_reencrypt.c:2534 +msgid "No LUKS2 reencryption in progress." +msgstr "Зараз не виконуємо жодного повторного шифрування LUKS2." + +#: lib/luks2/luks2_reencrypt.c:2540 lib/luks2/luks2_reencrypt.c:3276 +msgid "Failed to load LUKS2 reencryption context." +msgstr "Не вдалося завантажити контекст повторного шифрування LUKS2." + +#: lib/luks2/luks2_reencrypt.c:2600 +msgid "Failed to get reencryption state." +msgstr "Не вдалося отримати стан повторного шифрування." + +#: lib/luks2/luks2_reencrypt.c:2604 +msgid "Device is not in reencryption." +msgstr "Пристрій не перебуває у повторному шифруванні." + +#: lib/luks2/luks2_reencrypt.c:2611 +msgid "Reencryption process is already running." +msgstr "Процес повторного шифрування вже виконується." + +#: lib/luks2/luks2_reencrypt.c:2613 +msgid "Failed to acquire reencryption lock." +msgstr "Не вдалося створити блокування для повторного шифрування." + +#: lib/luks2/luks2_reencrypt.c:2631 +msgid "Cannot proceed with reencryption. Run reencryption recovery first." +msgstr "Продовження повторного шифрування неможливе. Спочатку слід виконати відновлення повторного шифрування." + +#: lib/luks2/luks2_reencrypt.c:2731 +msgid "Active device size and requested reencryption size don't match." +msgstr "Не збігаються розмір активного пристрою і запитаний розмір повторного шифрування." + +#: lib/luks2/luks2_reencrypt.c:2745 +msgid "Illegal device size requested in reencryption parameters." +msgstr "У параметрах повторного шифрування вказано некоректний розмір пристрою." + +#: lib/luks2/luks2_reencrypt.c:2815 +msgid "Reencryption in-progress. Cannot perform recovery." +msgstr "Виконується повторне шифрування. Неможливо виконати відновлення." + +#: lib/luks2/luks2_reencrypt.c:2887 +msgid "LUKS2 reencryption already initialized in metadata." +msgstr "Повторне шифрування LUKS2 вже ініційовано у метаданих." + +#: lib/luks2/luks2_reencrypt.c:2894 +msgid "Failed to initialize LUKS2 reencryption in metadata." +msgstr "Не вдалося ініціалізувати повторне шифрування LUKS2 лише у метаданих." + +#: lib/luks2/luks2_reencrypt.c:2985 +msgid "Failed to set device segments for next reencryption hotzone." +msgstr "Не вдалося встановити сегменти пристрою для наступної «гарячої» ділянки повторного шифрування." + +#: lib/luks2/luks2_reencrypt.c:3027 +msgid "Failed to write reencryption resilience metadata." +msgstr "Не вдалося записати метадані стійкості для повторного шифрування." + +#: lib/luks2/luks2_reencrypt.c:3034 +msgid "Decryption failed." +msgstr "Помилка розшифрування." + +#: lib/luks2/luks2_reencrypt.c:3039 +#, c-format +msgid "Failed to write hotzone area starting at %." +msgstr "Не вдалося записати «гарячу» ділянку, починаючи з %." + +#: lib/luks2/luks2_reencrypt.c:3044 +msgid "Failed to sync data." +msgstr "Не вдалося синхронізувати дані." + +#: lib/luks2/luks2_reencrypt.c:3052 +msgid "Failed to update metadata after current reencryption hotzone completed." +msgstr "Не вдалося оновити метадані після завершення обробки поточної «гарячої» зони повторного шифрування." + +#: lib/luks2/luks2_reencrypt.c:3119 +msgid "Failed to write LUKS2 metadata." +msgstr "Не вдалося записати метадані LUKS2." + +#: lib/luks2/luks2_reencrypt.c:3142 +msgid "Failed to wipe backup segment data." +msgstr "Не вдалося витерти дані резервного сегмента." + +#: lib/luks2/luks2_reencrypt.c:3155 +msgid "Failed to disable reencryption requirement flag." +msgstr "Не вдалося вимкнути прапорець вимоги повторного шифрування." + +#: lib/luks2/luks2_reencrypt.c:3163 +#, c-format +msgid "Fatal error while reencrypting chunk starting at %, % sectors long." +msgstr "Критична помилка під час повторного шифрування фрагмента, починаючи з %, довжиною у % секторів." + +#: lib/luks2/luks2_reencrypt.c:3172 +msgid "Do not resume the device unless replaced with error target manually." +msgstr "Не відновлюйте пристрій, якщо не заміните вручну пристрій призначення для помилок." + +#: lib/luks2/luks2_reencrypt.c:3221 +msgid "Cannot proceed with reencryption. Unexpected reencryption status." +msgstr "Не вдалося виконати повторне шифрування. Неочікуваний стан засобу повторного шифрування." + +#: lib/luks2/luks2_reencrypt.c:3227 +msgid "Missing or invalid reencrypt context." +msgstr "Не вказано контекст повторного шифрування або вказано некоректний контекст." + +#: lib/luks2/luks2_reencrypt.c:3234 +msgid "Failed to initialize reencryption device stack." +msgstr "Не вдалося ініціалізувати стос пристроїв повторного шифрування." + +#: lib/luks2/luks2_reencrypt.c:3253 lib/luks2/luks2_reencrypt.c:3289 +msgid "Failed to update reencryption context." +msgstr "Не вдалося оновити контекст повторного шифрування." + +#: lib/luks2/luks2_token.c:262 +msgid "No free token slot." +msgstr "Немає вільного слоту ключів." + +#: lib/luks2/luks2_token.c:269 +#, c-format +msgid "Failed to create builtin token %s." +msgstr "Не вдалося створити вбудований ключ %s." + +#: src/cryptsetup.c:162 +msgid "Can't do passphrase verification on non-tty inputs." +msgstr "Перевірку паролів не можна виконувати на основі вхідних даних, які надходять не з tty." + +#: src/cryptsetup.c:215 +msgid "Keyslot encryption parameters can be set only for LUKS2 device." +msgstr "Параметри шифрування слоту ключів можна встановлювати лише для пристроїв LUKS2." + +#: src/cryptsetup.c:245 src/cryptsetup.c:893 src/cryptsetup.c:1212 +#: src/cryptsetup.c:3011 src/cryptsetup_reencrypt.c:715 +#: src/cryptsetup_reencrypt.c:785 +msgid "No known cipher specification pattern detected." +msgstr "Не виявлено жодного відомого зразка специфікації шифрування." + +#: src/cryptsetup.c:253 +msgid "WARNING: The --hash parameter is being ignored in plain mode with keyfile specified.\n" +msgstr "Попередження: параметр --hash у простому режимі із вказаним файлом ключа ігнорується.\n" + +#: src/cryptsetup.c:261 +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:301 +#, c-format +msgid "Detected device signature(s) on %s. Proceeding further may damage existing data." +msgstr "На %s виявлено підписи пристроїв. Подальша обробка може пошкодити наявні дані." + +#: src/cryptsetup.c:307 src/cryptsetup.c:1038 src/cryptsetup.c:1090 +#: src/cryptsetup.c:1189 src/cryptsetup.c:1262 src/cryptsetup.c:1913 +#: src/cryptsetup.c:2545 src/cryptsetup.c:2668 src/integritysetup.c:232 +msgid "Operation aborted.\n" +msgstr "Дію перервано.\n" + +#: src/cryptsetup.c:375 +msgid "Option --key-file is required." +msgstr "Слід вказати параметр --key-file." + +#: src/cryptsetup.c:428 +msgid "Enter VeraCrypt PIM: " +msgstr "Введіть PIM VeraCrypt: " + +#: src/cryptsetup.c:437 +msgid "Invalid PIM value: parse error." +msgstr "Некоректне значення PIM: помилка обробки." + +#: src/cryptsetup.c:440 +msgid "Invalid PIM value: 0." +msgstr "Некоректне значення PIM: 0." + +#: src/cryptsetup.c:443 +msgid "Invalid PIM value: outside of range." +msgstr "Некоректне значення PIM: поза межами діапазону." + +#: src/cryptsetup.c:466 +msgid "No device header detected with this passphrase." +msgstr "Для цього пароля не виявлено заголовка пристрою." + +#: src/cryptsetup.c:528 src/cryptsetup.c:1940 +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 "" +"Дамп заголовка з ключем тому є конфіденційними даними,\n" +"за допомогою яких можна отримати доступ до шифрованого розділу\n" +"без пароля. Цей дамп слід зберігати у зашифрованому форматі\n" +"у безпечному місці." + +#: src/cryptsetup.c:607 +#, c-format +msgid "Device %s is still active and scheduled for deferred removal.\n" +msgstr "Пристрій %s усе ще є активним, його заплановано для відкладеного вилучення.\n" + +#: src/cryptsetup.c:635 +msgid "Resize of active device requires volume key in keyring but --disable-keyring option is set." +msgstr "Зміна розмірів активного пристрою потребує наявності ключа тому у сховищі ключів, але вказано параметр --disable-keyring." + +#: src/cryptsetup.c:771 +msgid "Benchmark interrupted." +msgstr "Тестування перервано." + +#: src/cryptsetup.c:792 +#, c-format +msgid "PBKDF2-%-9s N/A\n" +msgstr "PBKDF2-%-9s н/д\n" + +#: src/cryptsetup.c:794 +#, c-format +msgid "PBKDF2-%-9s %7u iterations per second for %zu-bit key\n" +msgstr "PBKDF2-%-9s %7u ітерацій за секунду для %zu-бітового ключа\n" + +#: src/cryptsetup.c:808 +#, c-format +msgid "%-10s N/A\n" +msgstr "%-10s н/д\n" + +#: src/cryptsetup.c:810 +#, 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:834 +msgid "Result of benchmark is not reliable." +msgstr "Результат тестування є ненадійним." + +#: src/cryptsetup.c:885 +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:919 +#, c-format +msgid "#%*s Algorithm | Key | Encryption | Decryption\n" +msgstr "№%*s Алгоритм | Ключ | Шифрування | Розшифрування\n" + +#: src/cryptsetup.c:923 +#, c-format +msgid "Cipher %s is not available." +msgstr "Шифрування %s є недоступним." + +#. TRANSLATORS: The string is header of a table and must be exactly (right side) aligned. +#: src/cryptsetup.c:943 +msgid "# Algorithm | Key | Encryption | Decryption\n" +msgstr "№ Алгоритм | Ключ | Шифрування | Розшифрування\n" + +#: src/cryptsetup.c:952 +msgid "N/A" +msgstr "н/д" + +#: src/cryptsetup.c:1031 +msgid "" +"Seems device does not require reencryption recovery.\n" +"Do you want to proceed anyway?" +msgstr "" +"Здається, пристрій не потребує відновлення повторного шифрування.\n" +"Хочете виконати цю дію попри це?" + +#: src/cryptsetup.c:1037 +msgid "Really proceed with LUKS2 reencryption recovery?" +msgstr "Ви справді хочете продовжити процедуру відновлення повторного шифрування LUKS2?" + +#: src/cryptsetup.c:1046 +msgid "Enter passphrase for reencryption recovery: " +msgstr "Вкажіть пароль для відновлення повторного шифрування: " + +#: src/cryptsetup.c:1089 +msgid "Really try to repair LUKS device header?" +msgstr "Спробувати відновити заголовок пристрою LUKS?" + +#: src/cryptsetup.c:1108 src/integritysetup.c:145 +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 "" +"Витираємо пристрій для ініціалізації контрольних сум для цілісності.\n" +"Ви можете перервати цей процес натисканням комбінації клавіш CTRL+C (решта невитертого пристрою міститиме некоректну контрольну суму).\n" + +#: src/cryptsetup.c:1130 src/integritysetup.c:167 +#, c-format +msgid "Cannot deactivate temporary device %s." +msgstr "Не можна скасувати активацію тимчасового пристрою %s." + +#: src/cryptsetup.c:1174 +msgid "Integrity option can be used only for LUKS2 format." +msgstr "Параметр цілісності може бути використано лише для формату LUKS2." + +#: src/cryptsetup.c:1179 src/cryptsetup.c:1239 +msgid "Unsupported LUKS2 metadata size options." +msgstr "Непідтримувані параметри розміру метаданих LUKS2." + +#: src/cryptsetup.c:1196 +#, c-format +msgid "Cannot create header file %s." +msgstr "Не вдалося створити файл заголовка %s." + +#: src/cryptsetup.c:1219 src/integritysetup.c:194 src/integritysetup.c:203 +#: src/integritysetup.c:212 src/integritysetup.c:279 src/integritysetup.c:288 +#: src/integritysetup.c:298 +msgid "No known integrity specification pattern detected." +msgstr "Не виявлено жодного відомого зразка специфікації цілісності." + +#: src/cryptsetup.c:1232 +#, c-format +msgid "Cannot use %s as on-disk header." +msgstr "Не можна використовувати %s як заголовок на диску." + +#: src/cryptsetup.c:1256 src/integritysetup.c:226 +#, c-format +msgid "This will overwrite data on %s irrevocably." +msgstr "Дані на %s буде перезаписано без можливості відновлення." + +#: src/cryptsetup.c:1297 src/cryptsetup.c:1627 src/cryptsetup.c:1694 +#: src/cryptsetup.c:1796 src/cryptsetup.c:1862 src/cryptsetup_reencrypt.c:545 +msgid "Failed to set pbkdf parameters." +msgstr "Не вдалося встановити параметри pbkdf." + +#: src/cryptsetup.c:1378 +msgid "Reduced data offset is allowed only for detached LUKS header." +msgstr "Зменшений відступ даних можна використовувати лише для від’єднаних заголовків LUKS." + +#: src/cryptsetup.c:1389 src/cryptsetup.c:1700 +msgid "Cannot determine volume key size for LUKS without keyslots, please use --key-size option." +msgstr "Неможливо визначити розмір ключа тому для LUKS без слотів ключів. Будь ласка, скористайтеся параметром --key-size." + +#: src/cryptsetup.c:1427 +msgid "Device activated but cannot make flags persistent." +msgstr "Пристрій задіяно, але не вдалося зробити прапорці сталими." + +#: src/cryptsetup.c:1508 src/cryptsetup.c:1578 +#, c-format +msgid "Keyslot %d is selected for deletion." +msgstr "Слот ключа %d позначено для вилучення." + +#: src/cryptsetup.c:1520 src/cryptsetup.c:1581 +msgid "This is the last keyslot. Device will become unusable after purging this key." +msgstr "Це останній слот ключа. Пристрій стане непридатним для використання після спорожнення цього ключа." + +#: src/cryptsetup.c:1521 +msgid "Enter any remaining passphrase: " +msgstr "Введіть будь-який інший пароль: " + +#: src/cryptsetup.c:1522 src/cryptsetup.c:1583 +msgid "Operation aborted, the keyslot was NOT wiped.\n" +msgstr "Дію перервано, слот ключів НЕ витерто.\n" + +#: src/cryptsetup.c:1560 +msgid "Enter passphrase to be deleted: " +msgstr "Введіть пароль, який слід вилучити: " + +#: src/cryptsetup.c:1641 src/cryptsetup.c:1715 src/cryptsetup.c:1749 +msgid "Enter new passphrase for key slot: " +msgstr "Введіть новий пароль для слота ключа: " + +#: src/cryptsetup.c:1732 src/cryptsetup_reencrypt.c:1327 +#, c-format +msgid "Enter any existing passphrase: " +msgstr "Введіть будь-який пароль: " + +#: src/cryptsetup.c:1800 +msgid "Enter passphrase to be changed: " +msgstr "Введіть пароль, який слід змінити: " + +#: src/cryptsetup.c:1816 src/cryptsetup_reencrypt.c:1313 +msgid "Enter new passphrase: " +msgstr "Введіть новий пароль: " + +#: src/cryptsetup.c:1866 +msgid "Enter passphrase for keyslot to be converted: " +msgstr "Вкажіть пароль для слоту ключа, який буде перетворено: " + +#: src/cryptsetup.c:1890 +msgid "Only one device argument for isLuks operation is supported." +msgstr "У команді isLuks можна використовувати лише один аргумент назви пристрою." + +#: src/cryptsetup.c:2074 src/cryptsetup.c:2095 +msgid "Option --header-backup-file is required." +msgstr "Слід вказати параметр --header-backup-file." + +#: src/cryptsetup.c:2125 +#, c-format +msgid "%s is not cryptsetup managed device." +msgstr "%s не є керованим cryptsetup пристроєм." + +#: src/cryptsetup.c:2136 +#, c-format +msgid "Refresh is not supported for device type %s" +msgstr "Підтримки дії з оновлення для пристрою типу %s не передбачено." + +#: src/cryptsetup.c:2174 +#, c-format +msgid "Unrecognized metadata device type %s." +msgstr "Нерозпізнаний тип пристрою метаданих, %s." + +#: src/cryptsetup.c:2177 +msgid "Command requires device and mapped name as arguments." +msgstr "Аргументами команди мають бути назва пристрою та призначена до нього назва." + +#: src/cryptsetup.c:2199 +#, c-format +msgid "" +"This operation will erase all keyslots on device %s.\n" +"Device will become unusable after this operation." +msgstr "" +"У результаті виконання цієї операції буде витерто усі слоти ключів на пристрої %s.\n" +"Після виконання цієї дії пристроєм не можна буде скористатися." + +#: src/cryptsetup.c:2206 +msgid "Operation aborted, keyslots were NOT wiped.\n" +msgstr "Дію перервано, слоти ключів НЕ витерто.\n" + +#: src/cryptsetup.c:2243 +msgid "Invalid LUKS type, only luks1 and luks2 are supported." +msgstr "Некоректний тип LUKS. Передбачено підтримку лише luks1 і luks2." + +#: src/cryptsetup.c:2261 +#, c-format +msgid "Device is already %s type." +msgstr "Пристрій вже належить до типу %s." + +#: src/cryptsetup.c:2266 +#, c-format +msgid "This operation will convert %s to %s format.\n" +msgstr "Ця дія перетворить %s до формату %s.\n" + +#: src/cryptsetup.c:2272 +msgid "Operation aborted, device was NOT converted.\n" +msgstr "Дію перервано, дані пристрою НЕ перетворено.\n" + +#: src/cryptsetup.c:2312 +msgid "Option --priority, --label or --subsystem is missing." +msgstr "Пропущено параметр --priority, --label або --subsystem." + +#: src/cryptsetup.c:2346 src/cryptsetup.c:2379 src/cryptsetup.c:2402 +#, c-format +msgid "Token %d is invalid." +msgstr "Ключ %d є некоректним." + +#: src/cryptsetup.c:2349 src/cryptsetup.c:2405 +#, c-format +msgid "Token %d in use." +msgstr "Ключ %d використовується." + +#: src/cryptsetup.c:2356 +#, c-format +msgid "Failed to add luks2-keyring token %d." +msgstr "Не вдалося додати ключ %d зі сховища ключів luks2." + +#: src/cryptsetup.c:2365 src/cryptsetup.c:2427 +#, c-format +msgid "Failed to assign token %d to keyslot %d." +msgstr "Не вдалося прив'язати ключ %d до слоту ключа %d." + +#: src/cryptsetup.c:2382 +#, c-format +msgid "Token %d is not in use." +msgstr "Ключ %d не використовується." + +#: src/cryptsetup.c:2417 +msgid "Failed to import token from file." +msgstr "Не вдалося імпортувати ключ з файла." + +#: src/cryptsetup.c:2442 +#, c-format +msgid "Failed to get token %d for export." +msgstr "Не вдалося отримати ключ %d для експортування." + +#: src/cryptsetup.c:2457 +msgid "--key-description parameter is mandatory for token add action." +msgstr "Параметр --key-description є обов'язковим для дій із додавання ключів." + +#: src/cryptsetup.c:2463 src/cryptsetup.c:2471 +msgid "Action requires specific token. Use --token-id parameter." +msgstr "Для виконання дії потрібен специфічний ключ. Скористайтеся параметром --token-id." + +#: src/cryptsetup.c:2476 +#, c-format +msgid "Invalid token operation %s." +msgstr "Некоректна дія з ключем %s." + +#: src/cryptsetup.c:2531 +#, c-format +msgid "Auto-detected active dm device '%s' for data device %s.\n" +msgstr "Автоматично виявлено активний пристрій dm «%s» для пристрою даних %s.\n" + +#: src/cryptsetup.c:2535 +#, c-format +msgid "Device %s is not a block device.\n" +msgstr "Пристрій %s не є блоковим пристроєм.\n" + +#: src/cryptsetup.c:2537 +#, c-format +msgid "Failed to auto-detect device %s holders." +msgstr "Не вдалося автоматично визначити утримувачів пристрою %s." + +#: src/cryptsetup.c:2539 +#, 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 "" +"Не вдалося визначити, чи задіяно пристрій %s.\n" +"Ви справді хочете продовжити повторне шифрування у режимі з від'єднанням?\n" +"Таке шифрування може призвести до пошкодження даних, якщо пристрій задіяно.\n" +"Щоб запустити повторне шифрування у режимі без від'єднання, скористайтеся параметром --active-name.\n" + +#: src/cryptsetup.c:2619 +msgid "Invalid LUKS device type." +msgstr "Некоректний тип пристрою LUKS." + +#: src/cryptsetup.c:2624 +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:2629 +msgid "Requested data offset must be less than or equal to half of --reduce-device-size parameter." +msgstr "Вказаний зсув даних має бути меншим або рівним половині значення параметра --reduce-device-size." + +#: src/cryptsetup.c:2638 +#, c-format +msgid "Adjusting --reduce-device-size value to twice the --offset % (sectors).\n" +msgstr "Коригуємо значення --reduce-device-size до подвійного значення --offset % (у секторах).\n" + +#: src/cryptsetup.c:2642 +msgid "Encryption is supported only for LUKS2 format." +msgstr "Підтримку шифрування передбачено лише для формату LUKS2." + +#: src/cryptsetup.c:2664 +#, c-format +msgid "Detected LUKS device on %s. Do you want to encrypt that LUKS device again?" +msgstr "Виявлено пристрій LUKS на %s. Хочете зашифрувати цей пристрій LUKS знову?" + +#: src/cryptsetup.c:2679 +#, c-format +msgid "Temporary header file %s already exists. Aborting." +msgstr "Файл тимчасового заголовка %s вже існує. Перериваємо обробку." + +#: src/cryptsetup.c:2681 src/cryptsetup.c:2688 +#, c-format +msgid "Cannot create temporary header file %s." +msgstr "Не вдалося створити файл тимчасового заголовка %s." + +#: src/cryptsetup.c:2752 +#, c-format +msgid "%s/%s is now active and ready for online encryption." +msgstr "%s/%s задіяно, система готова до інтерактивного шифрування." + +#: src/cryptsetup.c:2919 src/cryptsetup.c:2925 +msgid "Not enough free keyslots for reencryption." +msgstr "Недостатньо вільних слотів ключів для повторного шифрування." + +#: src/cryptsetup.c:2945 src/cryptsetup_reencrypt.c:1284 +msgid "Key file can be used only with --key-slot or with exactly one key slot active." +msgstr "Файлом ключа можна користуватися лише з --key-slot, або якщо активним є лише один слот ключа." + +#: src/cryptsetup.c:2954 src/cryptsetup_reencrypt.c:1325 +#: src/cryptsetup_reencrypt.c:1336 +#, c-format +msgid "Enter passphrase for key slot %d: " +msgstr "Вкажіть пароль для слоту ключа %d: " + +#: src/cryptsetup.c:2962 +#, c-format +msgid "Enter passphrase for key slot %u: " +msgstr "Вкажіть пароль для слоту ключа %u: " + +#: src/cryptsetup.c:3129 +msgid "Command requires device as argument." +msgstr "Комарні слід передати аргумент пристрою." + +#: src/cryptsetup.c:3151 +msgid "Only LUKS2 format is currently supported. Please use cryptsetup-reencrypt tool for LUKS1." +msgstr "У поточній версії передбачено підтримку лише формату LUKS2. Для роботи з LUKS1, будь ласка, скористайтеся програмою cryptsetup-reencrypt." + +#: src/cryptsetup.c:3163 +msgid "Legacy offline reencryption already in-progress. Use cryptsetup-reencrypt utility." +msgstr "Вже виконується повторне шифрування з від'єднанням у застарілому режимі. Скористайтеся програмою cryptsetup-reencrypt." + +#: src/cryptsetup.c:3173 src/cryptsetup_reencrypt.c:178 +msgid "Reencryption of device with integrity profile is not supported." +msgstr "Підтримки повторного шифрування пристрою із профілем цілісності не передбачено." + +#: src/cryptsetup.c:3181 +msgid "LUKS2 reencryption already initialized. Aborting operation." +msgstr "Вже ініційовано повторне шифрування LUKS2. Перериваємо виконання дії." + +#: src/cryptsetup.c:3185 +msgid "LUKS2 device is not in reencryption." +msgstr "Пристрій LUKS2 не перебуває у стані повторного шифрування." + +#: src/cryptsetup.c:3212 +msgid " [--type ] []" +msgstr "<пристрій> [--type <тип>] [<назва>]" + +#: src/cryptsetup.c:3212 src/veritysetup.c:358 src/integritysetup.c:470 +msgid "open device as " +msgstr "відкрити пристрій як <назва>" + +#: src/cryptsetup.c:3213 src/cryptsetup.c:3214 src/cryptsetup.c:3215 +#: src/veritysetup.c:359 src/veritysetup.c:360 src/integritysetup.c:471 +#: src/integritysetup.c:472 +msgid "" +msgstr "<назва>" + +#: src/cryptsetup.c:3213 src/veritysetup.c:359 src/integritysetup.c:471 +msgid "close device (remove mapping)" +msgstr "закрити пристрій (вилучити призначення)" + +#: src/cryptsetup.c:3214 +msgid "resize active device" +msgstr "змінити розмір активного пристрою" + +#: src/cryptsetup.c:3215 +msgid "show device status" +msgstr "показати стан пристрою" + +#: src/cryptsetup.c:3216 +msgid "[--cipher ]" +msgstr "[--cipher <шифр>]" + +#: src/cryptsetup.c:3216 +msgid "benchmark cipher" +msgstr "перевірити швидкодію шифрування" + +#: src/cryptsetup.c:3217 src/cryptsetup.c:3218 src/cryptsetup.c:3219 +#: src/cryptsetup.c:3220 src/cryptsetup.c:3221 src/cryptsetup.c:3228 +#: src/cryptsetup.c:3229 src/cryptsetup.c:3230 src/cryptsetup.c:3231 +#: src/cryptsetup.c:3232 src/cryptsetup.c:3233 src/cryptsetup.c:3234 +#: src/cryptsetup.c:3235 +msgid "" +msgstr "<пристрій>" + +#: src/cryptsetup.c:3217 +msgid "try to repair on-disk metadata" +msgstr "спробувати виправити метадані на диску" + +#: src/cryptsetup.c:3218 +msgid "reencrypt LUKS2 device" +msgstr "повторно зашифрувати пристрій LUKS2" + +#: src/cryptsetup.c:3219 +msgid "erase all keyslots (remove encryption key)" +msgstr "витерти усі слоти ключів (вилучити ключ шифрування)" + +#: src/cryptsetup.c:3220 +msgid "convert LUKS from/to LUKS2 format" +msgstr "перетворити LUKS із формату LUKS2 або навпаки" + +#: src/cryptsetup.c:3221 +msgid "set permanent configuration options for LUKS2" +msgstr "встановити сталі параметри налаштування для LUKS2" + +#: src/cryptsetup.c:3222 src/cryptsetup.c:3223 +msgid " []" +msgstr "<пристрій> [<новий файл ключа>]" + +#: src/cryptsetup.c:3222 +msgid "formats a LUKS device" +msgstr "форматує пристрій LUKS" + +#: src/cryptsetup.c:3223 +msgid "add key to LUKS device" +msgstr "додати ключ до пристрою LUKS" + +#: src/cryptsetup.c:3224 src/cryptsetup.c:3225 src/cryptsetup.c:3226 +msgid " []" +msgstr "<пристрій> [<файл ключа>]" + +#: src/cryptsetup.c:3224 +msgid "removes supplied key or key file from LUKS device" +msgstr "вилучає наданий ключ або файл ключа з пристрою LUKS" + +#: src/cryptsetup.c:3225 +msgid "changes supplied key or key file of LUKS device" +msgstr "змінює наданий ключ або файл ключа пристрою LUKS" + +#: src/cryptsetup.c:3226 +msgid "converts a key to new pbkdf parameters" +msgstr "перетворює ключ до нових параметрів pbkdf" + +#: src/cryptsetup.c:3227 +msgid " " +msgstr "<пристрій> <слот ключа>" + +#: src/cryptsetup.c:3227 +msgid "wipes key with number from LUKS device" +msgstr "вилучає ключ з номером <слот ключа> з пристрою LUKS" + +#: src/cryptsetup.c:3228 +msgid "print UUID of LUKS device" +msgstr "вивести UUID пристрою LUKS" + +#: src/cryptsetup.c:3229 +msgid "tests for LUKS partition header" +msgstr "виконати спробу виявлення заголовка розділу LUKS на пристрої <пристрій>" + +#: src/cryptsetup.c:3230 +msgid "dump LUKS partition information" +msgstr "створити дамп даних щодо розділу LUKS" + +#: src/cryptsetup.c:3231 +msgid "dump TCRYPT device information" +msgstr "створити дамп даних пристрою TCRYPT" + +#: src/cryptsetup.c:3232 +msgid "Suspend LUKS device and wipe key (all IOs are frozen)" +msgstr "Приспати пристрій LUKS і витерти ключ (роботу всіх каналів введення-виведення буде заморожено)" + +#: src/cryptsetup.c:3233 +msgid "Resume suspended LUKS device" +msgstr "Відновити роботу приспаного пристрою LUKS" + +#: src/cryptsetup.c:3234 +msgid "Backup LUKS device header and keyslots" +msgstr "Створити резервну копію заголовка пристрою LUKS і слотів ключів" + +#: src/cryptsetup.c:3235 +msgid "Restore LUKS device header and keyslots" +msgstr "Відновити заголовок пристрою LUKS і слоти ключів" + +#: src/cryptsetup.c:3236 +msgid " " +msgstr " <пристрій>" + +#: src/cryptsetup.c:3236 +msgid "Manipulate LUKS2 tokens" +msgstr "Керування ключами LUKS2" + +#: src/cryptsetup.c:3254 src/veritysetup.c:376 src/integritysetup.c:488 +msgid "" +"\n" +" is one of:\n" +msgstr "" +"\n" +"<дія> є однією з таких:\n" + +#: src/cryptsetup.c:3260 +msgid "" +"\n" +"You can also use old syntax aliases:\n" +"\topen: create (plainOpen), luksOpen, loopaesOpen, tcryptOpen\n" +"\tclose: remove (plainClose), luksClose, loopaesClose, tcryptClose\n" +msgstr "" +"\n" +"Ви також можете скористатися застарілими альтернативними\n" +"синтаксичними конструкціями для запису <дія>:\n" +"\tвідкрити: create (plainOpen), luksOpen, loopaesOpen, tcryptOpen\n" +"\tзакрити: remove (plainClose), luksClose, loopaesClose, tcryptClose\n" + +#: src/cryptsetup.c:3264 +#, c-format +msgid "" +"\n" +" is the device to create under %s\n" +" is the encrypted device\n" +" is the LUKS key slot number to modify\n" +" optional key file for the new key for luksAddKey action\n" +msgstr "" +"\n" +"<назва> — пристрій для створення у %s\n" +"<пристрій> — зашифрований пристрій\n" +"<слот ключа> — номер слота ключа LUKS, який слід змінити\n" +"<файл ключа> — необов’язковий файл ключа для нового ключа для дії luksAddKey\n" + +#: src/cryptsetup.c:3271 +#, c-format +msgid "" +"\n" +"Default compiled-in metadata format is %s (for luksFormat action).\n" +msgstr "" +"\n" +"Типовий укомпільований формат метаданих — %s (для дії luksFormat).\n" + +#: src/cryptsetup.c:3276 +#, c-format +msgid "" +"\n" +"Default compiled-in key and passphrase parameters:\n" +"\tMaximum keyfile size: %dkB, Maximum interactive passphrase length %d (characters)\n" +"Default PBKDF for LUKS1: %s, iteration time: %d (ms)\n" +"Default PBKDF for LUKS2: %s\n" +"\tIteration time: %d, Memory required: %dkB, Parallel threads: %d\n" +msgstr "" +"\n" +"Типові вбудовані параметри ключа і пароля:\n" +"\tМаксимальний розмір файла ключа: %d кБ, максимальна довжина інтерактивного пароля: %d (символів)\n" +"Типовий час ітерації PBKDF для LUKS1: %s, час ітерації: %d мс\n" +"Типовий PBKDF для LUKS2: %s\n" +"\tЧас ітерації: %d, потрібний обсяг пам'яті: %d кБ, паралельних потоків: %d\n" + +#: src/cryptsetup.c:3287 +#, c-format +msgid "" +"\n" +"Default compiled-in device cipher parameters:\n" +"\tloop-AES: %s, Key %d bits\n" +"\tplain: %s, Key: %d bits, Password hashing: %s\n" +"\tLUKS: %s, Key: %d bits, LUKS header hashing: %s, RNG: %s\n" +msgstr "" +"\n" +"Типові вбудовані параметри шифрування на пристрої:\n" +"\tloop-AES: %s, %d-бітовий ключ\n" +"\tзвичайне: %s, ключ: %d-бітовий, хешування пароля: %s\n" +"\tLUKS: %s, ключ: %d-бітовий, хешування заголовка LUKS: %s, RNG: %s\n" + +#: src/cryptsetup.c:3296 +msgid "\tLUKS: Default keysize with XTS mode (two internal keys) will be doubled.\n" +msgstr "\tLUKS: типовий розмір ключа у режимі XTS (два вбудованих ключа) буде подвоєно.\n" + +#: src/cryptsetup.c:3312 src/veritysetup.c:532 src/integritysetup.c:630 +#, c-format +msgid "%s: requires %s as arguments" +msgstr "%s: слід вказати у параметрах %s" + +#: src/cryptsetup.c:3350 src/veritysetup.c:421 src/integritysetup.c:527 +#: src/cryptsetup_reencrypt.c:1591 +msgid "Show this help message" +msgstr "Показати цю довідку" + +#: src/cryptsetup.c:3351 src/veritysetup.c:422 src/integritysetup.c:528 +#: src/cryptsetup_reencrypt.c:1592 +msgid "Display brief usage" +msgstr "Показати короткі настанови щодо користування" + +#: src/cryptsetup.c:3352 src/veritysetup.c:423 src/integritysetup.c:529 +#: src/cryptsetup_reencrypt.c:1593 +msgid "Print package version" +msgstr "Вивести дані щодо версії пакунка" + +#: src/cryptsetup.c:3356 src/veritysetup.c:427 src/integritysetup.c:533 +#: src/cryptsetup_reencrypt.c:1597 +msgid "Help options:" +msgstr "Пункти довідки:" + +#: src/cryptsetup.c:3357 src/veritysetup.c:428 src/integritysetup.c:534 +#: src/cryptsetup_reencrypt.c:1598 +msgid "Shows more detailed error messages" +msgstr "Показувати докладні повідомлення про помилки" + +#: src/cryptsetup.c:3358 src/veritysetup.c:429 src/integritysetup.c:535 +#: src/cryptsetup_reencrypt.c:1599 +msgid "Show debug messages" +msgstr "Показувати діагностичні повідомлення" + +#: src/cryptsetup.c:3359 +msgid "Show debug messages including JSON metadata" +msgstr "Показувати діагностичні повідомлення, зокрема метадані JSON" + +#: src/cryptsetup.c:3360 src/cryptsetup_reencrypt.c:1601 +msgid "The cipher used to encrypt the disk (see /proc/crypto)" +msgstr "Шифр, який використано для шифрування даних диска (див. /proc/crypto)" + +#: src/cryptsetup.c:3361 src/cryptsetup_reencrypt.c:1603 +msgid "The hash used to create the encryption key from the passphrase" +msgstr "Хеш, використаний для створення ключа шифрування на основі пароля" + +#: src/cryptsetup.c:3362 +msgid "Verifies the passphrase by asking for it twice" +msgstr "Перевіряє пароль повторним запитом щодо нього" + +#: src/cryptsetup.c:3363 src/cryptsetup_reencrypt.c:1605 +msgid "Read the key from a file" +msgstr "Прочитати ключ з файла" + +#: src/cryptsetup.c:3364 +msgid "Read the volume (master) key from file." +msgstr "Прочитати ключ тому (основний ключ) з файла." + +#: src/cryptsetup.c:3365 +msgid "Dump volume (master) key instead of keyslots info" +msgstr "Створити дамп ключа тому (основного ключа) замість показу даних щодо слотів ключів" + +#: src/cryptsetup.c:3366 src/cryptsetup_reencrypt.c:1602 +msgid "The size of the encryption key" +msgstr "Розмір ключа шифрування" + +#: src/cryptsetup.c:3366 src/cryptsetup.c:3425 src/integritysetup.c:553 +#: src/integritysetup.c:557 src/integritysetup.c:561 +#: src/cryptsetup_reencrypt.c:1602 +msgid "BITS" +msgstr "БІТИ" + +#: src/cryptsetup.c:3367 src/cryptsetup_reencrypt.c:1618 +msgid "Limits the read from keyfile" +msgstr "Обмежує читання з файла ключа" + +#: src/cryptsetup.c:3367 src/cryptsetup.c:3368 src/cryptsetup.c:3369 +#: src/cryptsetup.c:3370 src/cryptsetup.c:3373 src/cryptsetup.c:3422 +#: src/cryptsetup.c:3423 src/cryptsetup.c:3431 src/cryptsetup.c:3432 +#: src/veritysetup.c:432 src/veritysetup.c:433 src/veritysetup.c:434 +#: src/veritysetup.c:437 src/veritysetup.c:438 src/integritysetup.c:542 +#: src/integritysetup.c:548 src/integritysetup.c:549 +#: src/cryptsetup_reencrypt.c:1617 src/cryptsetup_reencrypt.c:1618 +#: src/cryptsetup_reencrypt.c:1619 src/cryptsetup_reencrypt.c:1620 +msgid "bytes" +msgstr "байти" + +#: src/cryptsetup.c:3368 src/cryptsetup_reencrypt.c:1617 +msgid "Number of bytes to skip in keyfile" +msgstr "Кількість байтів, які слід пропустити у файлі ключа" + +#: src/cryptsetup.c:3369 +msgid "Limits the read from newly added keyfile" +msgstr "Обмежує читання з щойно доданого файла ключа" + +#: src/cryptsetup.c:3370 +msgid "Number of bytes to skip in newly added keyfile" +msgstr "Кількість байтів, які слід пропустити у щойно доданому файлі ключа" + +#: src/cryptsetup.c:3371 +msgid "Slot number for new key (default is first free)" +msgstr "Номер слоту для нового ключа (типовим слотом є перший вільний слот)" + +#: src/cryptsetup.c:3372 +msgid "The size of the device" +msgstr "Розмір пристрою" + +#: src/cryptsetup.c:3372 src/cryptsetup.c:3374 src/cryptsetup.c:3375 +#: src/cryptsetup.c:3381 src/integritysetup.c:543 src/integritysetup.c:550 +msgid "SECTORS" +msgstr "СЕКТОРИ" + +#: src/cryptsetup.c:3373 src/cryptsetup_reencrypt.c:1620 +msgid "Use only specified device size (ignore rest of device). DANGEROUS!" +msgstr "Використовувати лише вказаний розмір пристрою (ігнорувати решту об’єму). НЕБЕЗПЕЧНО!" + +#: src/cryptsetup.c:3374 +msgid "The start offset in the backend device" +msgstr "Початковий відступ на допоміжному пристрої" + +#: src/cryptsetup.c:3375 +msgid "How many sectors of the encrypted data to skip at the beginning" +msgstr "Кількість секторів зашифрованих даних, які слід пропустити на початку" + +#: src/cryptsetup.c:3376 +msgid "Create a readonly mapping" +msgstr "Створити призначення у режимі лише читання" + +#: src/cryptsetup.c:3377 src/integritysetup.c:536 +#: src/cryptsetup_reencrypt.c:1608 +msgid "Do not ask for confirmation" +msgstr "Не питати про підтвердження" + +#: src/cryptsetup.c:3378 +msgid "Timeout for interactive passphrase prompt (in seconds)" +msgstr "Час очікування у інтерактивному запиті щодо пароля (у секундах)" + +#: src/cryptsetup.c:3378 src/cryptsetup.c:3379 src/integritysetup.c:537 +#: src/cryptsetup_reencrypt.c:1609 +msgid "secs" +msgstr "секунди" + +#: src/cryptsetup.c:3379 src/integritysetup.c:537 +#: src/cryptsetup_reencrypt.c:1609 +msgid "Progress line update (in seconds)" +msgstr "Оновлення лінії поступу (у секундах)" + +#: src/cryptsetup.c:3380 src/cryptsetup_reencrypt.c:1610 +msgid "How often the input of the passphrase can be retried" +msgstr "Частота повторень спроб отримання вхідних даних пароля" + +#: src/cryptsetup.c:3381 +msgid "Align payload at sector boundaries - for luksFormat" +msgstr "Вирівняти дані за областями у секторів, для luksFormat" + +#: src/cryptsetup.c:3382 +msgid "File with LUKS header and keyslots backup" +msgstr "Файл з заголовком LUKS та резервною копію слотів ключів" + +#: src/cryptsetup.c:3383 src/cryptsetup_reencrypt.c:1611 +msgid "Use /dev/random for generating volume key" +msgstr "Використовувати для створення ключа тому /dev/random" + +#: src/cryptsetup.c:3384 src/cryptsetup_reencrypt.c:1612 +msgid "Use /dev/urandom for generating volume key" +msgstr "Використовувати для створення ключа тому /dev/urandom" + +#: src/cryptsetup.c:3385 +msgid "Share device with another non-overlapping crypt segment" +msgstr "Використовувати пристрій спільно з іншим сегментом шифрування, без перекриття" + +#: src/cryptsetup.c:3386 src/veritysetup.c:441 +msgid "UUID for device to use" +msgstr "UUID пристрою, який слід використати" + +#: src/cryptsetup.c:3387 +msgid "Allow discards (aka TRIM) requests for device" +msgstr "Дозволити запити відкидання (або TRIM) до пристрою" + +#: src/cryptsetup.c:3388 src/cryptsetup_reencrypt.c:1629 +msgid "Device or file with separated LUKS header" +msgstr "Пристрій або файл з окремим заголовком LUKS" + +#: src/cryptsetup.c:3389 +msgid "Do not activate device, just check passphrase" +msgstr "Не задіювати пристрій, просто перевірити пароль" + +#: src/cryptsetup.c:3390 +msgid "Use hidden header (hidden TCRYPT device)" +msgstr "Використовувати прихований заголовок (прихований пристрій TCRYPT)" + +#: src/cryptsetup.c:3391 +msgid "Device is system TCRYPT drive (with bootloader)" +msgstr "Пристрій є системним диском TCRYPT (диском з завантажувачем)" + +#: src/cryptsetup.c:3392 +msgid "Use backup (secondary) TCRYPT header" +msgstr "Використовувати резервний (вторинний) заголовок TCRYPT" + +#: src/cryptsetup.c:3393 +msgid "Scan also for VeraCrypt compatible device" +msgstr "Виконати також пошук сумісних із VeraCrypt пристроїв" + +#: src/cryptsetup.c:3394 +msgid "Personal Iteration Multiplier for VeraCrypt compatible device" +msgstr "Особистий множник ітерації (Personal Iteration Multiplier або PIM) для сумісного з VeraCrypt пристрою" + +#: src/cryptsetup.c:3395 +msgid "Query Personal Iteration Multiplier for VeraCrypt compatible device" +msgstr "Особистий множник ітерації (Personal Iteration Multiplier або PIM) запису для сумісного з VeraCrypt пристрою" + +#: src/cryptsetup.c:3396 +msgid "Type of device metadata: luks, luks1, luks2, plain, loopaes, tcrypt" +msgstr "Типи метаданих пристрою: luks, luks1, luks2, plain, loopaes, tcrypt" + +#: src/cryptsetup.c:3397 +msgid "Disable password quality check (if enabled)" +msgstr "Вимкнути перевірку якості пароля (якщо її увімкнено)" + +#: src/cryptsetup.c:3398 +msgid "Use dm-crypt same_cpu_crypt performance compatibility option" +msgstr "Скористатися параметром сумісності швидкодії dm-crypt same_cpu_crypt" + +#: src/cryptsetup.c:3399 +msgid "Use dm-crypt submit_from_crypt_cpus performance compatibility option" +msgstr "Скористатися параметром сумісності швидкодії dm-crypt submit_from_crypt_cpus" + +#: src/cryptsetup.c:3400 +msgid "Device removal is deferred until the last user closes it" +msgstr "Вилучення пристрою відкладено до часу, коли останній користувач закриє його" + +#: src/cryptsetup.c:3401 +msgid "Use global lock to serialize memory hard PBKDF (OOM workaround)" +msgstr "Скористатися загальним блокуванням для перетворення у послідовну форму «жорсткого» PBKDF у пам'яті (обхід OOM)" + +#: src/cryptsetup.c:3402 +msgid "PBKDF iteration time for LUKS (in ms)" +msgstr "Тривалість ітерації PBKDF для LUKS (у мс)" + +#: src/cryptsetup.c:3402 src/cryptsetup_reencrypt.c:1607 +msgid "msecs" +msgstr "мс" + +#: src/cryptsetup.c:3403 src/cryptsetup_reencrypt.c:1625 +msgid "PBKDF algorithm (for LUKS2): argon2i, argon2id, pbkdf2" +msgstr "Алгоритм PBKDF (для LUKS2) (argon2i/argon2id/pbkdf2)" + +#: src/cryptsetup.c:3404 src/cryptsetup_reencrypt.c:1626 +msgid "PBKDF memory cost limit" +msgstr "Обмеження вартості пам'яті PBKDF" + +#: src/cryptsetup.c:3404 src/cryptsetup_reencrypt.c:1626 +msgid "kilobytes" +msgstr "кілобайти" + +#: src/cryptsetup.c:3405 src/cryptsetup_reencrypt.c:1627 +msgid "PBKDF parallel cost" +msgstr "Вартість розпаралелювання PBKDF" + +#: src/cryptsetup.c:3405 src/cryptsetup_reencrypt.c:1627 +msgid "threads" +msgstr "threads" + +#: src/cryptsetup.c:3406 src/cryptsetup_reencrypt.c:1628 +msgid "PBKDF iterations cost (forced, disables benchmark)" +msgstr "Вартість ітерацій PBKDF (примусово, вимикає тестування)" + +#: src/cryptsetup.c:3407 +msgid "Keyslot priority: ignore, normal, prefer" +msgstr "Пріоритетність слотів ключів: ignore, normal, prefer" + +#: src/cryptsetup.c:3408 +msgid "Disable locking of on-disk metadata" +msgstr "Вимкнути блокування метаданих на диску" + +#: src/cryptsetup.c:3409 +msgid "Disable loading volume keys via kernel keyring" +msgstr "Вимкнути завантаження ключів тому за допомогою сховища ключів ядра" + +#: src/cryptsetup.c:3410 +msgid "Data integrity algorithm (LUKS2 only)" +msgstr "Алгоритм перевірки цілісності даних (лише LUKS2)" + +#: src/cryptsetup.c:3411 src/integritysetup.c:564 +msgid "Disable journal for integrity device" +msgstr "Вимкнути журнал для пристрою забезпечення цілісності" + +#: src/cryptsetup.c:3412 src/integritysetup.c:538 +msgid "Do not wipe device after format" +msgstr "Не витирати пристрій після форматування" + +#: src/cryptsetup.c:3413 +msgid "Do not ask for passphrase if activation by token fails" +msgstr "Не просити ввести пароль, якщо не вдасться скористатися активацією за ключем" + +#: src/cryptsetup.c:3414 +msgid "Token number (default: any)" +msgstr "Номер ключа (типове значення: будь-який)" + +#: src/cryptsetup.c:3415 +msgid "Key description" +msgstr "Опис ключа" + +#: src/cryptsetup.c:3416 +msgid "Encryption sector size (default: 512 bytes)" +msgstr "Розмір сектора шифрування (типове значення: 512 байтів)" + +#: src/cryptsetup.c:3417 +msgid "Set activation flags persistent for device" +msgstr "Встановити сталі прапорці активації для пристрою" + +#: src/cryptsetup.c:3418 +msgid "Set label for the LUKS2 device" +msgstr "Встановити мітку для пристрою LUKS2" + +#: src/cryptsetup.c:3419 +msgid "Set subsystem label for the LUKS2 device" +msgstr "Встановити мітку підтому для пристрою LUKS2" + +#: src/cryptsetup.c:3420 +msgid "Create unbound (no assigned data segment) LUKS2 keyslot" +msgstr "Створити непов'язаний (без пов'язаного сегмента даних) слот ключів LUKS2" + +#: src/cryptsetup.c:3421 +msgid "Read or write the json from or to a file" +msgstr "Прочитати json з файла або записати json до файла" + +#: src/cryptsetup.c:3422 +msgid "LUKS2 header metadata area size" +msgstr "Розмір області метаданих у заголовку LUKS2" + +#: src/cryptsetup.c:3423 +msgid "LUKS2 header keyslots area size" +msgstr "Розмір області слотів ключів у заголовку LUKS2" + +#: src/cryptsetup.c:3424 +msgid "Refresh (reactivate) device with new parameters" +msgstr "Оновити (повторно активувати) пристрій згідно з новими параметрами" + +#: src/cryptsetup.c:3425 +msgid "LUKS2 keyslot: The size of the encryption key" +msgstr "Слот ключів LUKS2: розмір ключа шифрування" + +#: src/cryptsetup.c:3426 +msgid "LUKS2 keyslot: The cipher used for keyslot encryption" +msgstr "Слот ключа LUKS2: шифрування, яке використано для слоту ключів" + +#: src/cryptsetup.c:3427 +msgid "Encrypt LUKS2 device (in-place encryption)." +msgstr "Зашифрувати пристрій LUKS2 (шифрування на місці)." + +#: src/cryptsetup.c:3428 +msgid "Decrypt LUKS2 device (remove encryption)." +msgstr "Розшифрувати пристрій LUKS2 (усунути шифрування)." + +#: src/cryptsetup.c:3429 +msgid "Initialize LUKS2 reencryption in metadata only." +msgstr "Ініціалізувати повторне шифрування LUKS2 лише у метаданих." + +#: src/cryptsetup.c:3430 +msgid "Resume initialized LUKS2 reencryption only." +msgstr "Відновлювати лише ініціалізоване повторне шифрування LUKS2." + +#: src/cryptsetup.c:3431 src/cryptsetup_reencrypt.c:1619 +msgid "Reduce data device size (move data offset). DANGEROUS!" +msgstr "Зменшити розмір пристрою зберігання даних (змістити відступ даних). НЕБЕЗПЕЧНО!" + +#: src/cryptsetup.c:3432 +msgid "Maximal reencryption hotzone size." +msgstr "Максимальний розмір «гарячої» ділянки повторного шифрування." + +#: src/cryptsetup.c:3433 +msgid "Reencryption hotzone resilience type (checksum,journal,none)" +msgstr "Тип стійкості «гарячої» ділянки повторного шифрування (checksum (контрольна сума), journal (журнал), none (немає))" + +#: src/cryptsetup.c:3434 +msgid "Reencryption hotzone checksums hash" +msgstr "Хеш контрольних сум «гарячої» ділянки повторного шифрування" + +#: src/cryptsetup.c:3435 +msgid "Override device autodetection of dm device to be reencrypted" +msgstr "Перевизначити автоматично визначені параметри пристрою dm, який буде повторно зашифровано" + +#: src/cryptsetup.c:3451 src/veritysetup.c:462 src/integritysetup.c:583 +msgid "[OPTION...] " +msgstr "[ПАРАМЕТР...] <дія> <параметри_дії>" + +#: src/cryptsetup.c:3502 src/veritysetup.c:496 src/integritysetup.c:594 +msgid "Argument missing." +msgstr "Не вказано аргумент <дія>." + +#: src/cryptsetup.c:3565 src/veritysetup.c:527 src/integritysetup.c:625 +msgid "Unknown action." +msgstr "Невідома дія." + +#: src/cryptsetup.c:3575 +msgid "Parameter --refresh is only allowed with open or refresh commands.\n" +msgstr "Параметром --refresh можна користуватися лише для команд open або refresh.\n" + +#: src/cryptsetup.c:3580 +msgid "Options --refresh and --test-passphrase are mutually exclusive.\n" +msgstr "Не можна поєднувати параметри --refresh і --test-passphrase.\n" + +#: src/cryptsetup.c:3585 +msgid "Option --deferred is allowed only for close command.\n" +msgstr "Параметр --deferred можна використовувати лише для команди закриття (close).\n" + +#: src/cryptsetup.c:3590 +msgid "Option --shared is allowed only for open of plain device.\n" +msgstr "Параметр --shared можна використовувати лише для відкриття незашифрованого пристрою.\n" + +#: src/cryptsetup.c:3595 +msgid "Option --allow-discards is allowed only for open operation.\n" +msgstr "Параметр --shared можна використовувати лише для дії з відкриття.\n" + +#: src/cryptsetup.c:3600 +msgid "Option --persistent is allowed only for open operation.\n" +msgstr "Параметр --persistent можна використовувати лише для дії з відкриття.\n" + +#: src/cryptsetup.c:3605 +msgid "Option --serialize-memory-hard-pbkdf is allowed only for open operation.\n" +msgstr "Параметр --serialize-memory-hard-pbkdf можна використовувати лише для дії з відкриття.\n" + +#: src/cryptsetup.c:3610 +msgid "Option --persistent is not allowed with --test-passphrase.\n" +msgstr "Параметр --persistent не можна використовувати разом із --test-passphrase.\n" + +#: src/cryptsetup.c:3620 +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 "" +"Параметр --key-size можна використовувати лише для luksFormat, luksAddKey,\n" +"дій open і benchmark. Щоб обмежити читання з файла ключа, скористайтеся параметром --keyfile-size=(об’єм у байтах)." + +#: src/cryptsetup.c:3626 +msgid "Option --integrity is allowed only for luksFormat (LUKS2).\n" +msgstr "Параметр --integrity можна використовувати лише для luksFormat (LUKS2).\n" + +#: src/cryptsetup.c:3631 +msgid "Option --integrity-no-wipe can be used only for format action with integrity extension.\n" +msgstr "Параметром --integrity-no-wipe можна користуватися лише для дії з форматування із розширенням забезпечення цілісності.\n" + +#: src/cryptsetup.c:3637 +msgid "Options --label and --subsystem are allowed only for luksFormat and config LUKS2 operations.\n" +msgstr "Параметри --label і --subsystem можна використовувати лише для дій luksFormat та config для LUKS2.\n" + +#: src/cryptsetup.c:3643 +msgid "Option --test-passphrase is allowed only for open of LUKS and TCRYPT devices.\n" +msgstr "Параметр --test-passphrase можна використовувати лише для відкриття пристроїв LUKS та TCRYPT.\n" + +#: src/cryptsetup.c:3648 src/cryptsetup_reencrypt.c:1692 +msgid "Key size must be a multiple of 8 bits" +msgstr "Розмір ключа має бути кратним 8 бітам" + +#: src/cryptsetup.c:3654 src/cryptsetup_reencrypt.c:1378 +#: src/cryptsetup_reencrypt.c:1697 +msgid "Key slot is invalid." +msgstr "Некоректний слот ключа." + +#: src/cryptsetup.c:3661 +msgid "Option --key-file takes precedence over specified key file argument." +msgstr "Параметр --key-file має пріоритет над вказаним параметром файла ключа." + +#: src/cryptsetup.c:3668 src/veritysetup.c:539 src/integritysetup.c:649 +#: src/cryptsetup_reencrypt.c:1671 +msgid "Negative number for option not permitted." +msgstr "Не можна використовувати від’ємні значення для параметра." + +#: src/cryptsetup.c:3672 +msgid "Only one --key-file argument is allowed." +msgstr "Можна використовувати лише один аргумент --key-file." + +#: src/cryptsetup.c:3676 src/cryptsetup_reencrypt.c:1663 +#: src/cryptsetup_reencrypt.c:1701 +msgid "Only one of --use-[u]random options is allowed." +msgstr "Можна використовувати лише один з параметрів --use-[u]random." + +#: src/cryptsetup.c:3680 +msgid "Option --use-[u]random is allowed only for luksFormat." +msgstr "Параметр --use-[u]random можна використовувати лише для дії luksFormat." + +#: src/cryptsetup.c:3684 +msgid "Option --uuid is allowed only for luksFormat and luksUUID." +msgstr "Параметр --uuid можна використовувати лише для дій luksFormat і luksUUID." + +#: src/cryptsetup.c:3688 +msgid "Option --align-payload is allowed only for luksFormat." +msgstr "Параметр --align-payload можна використовувати лише для дії luksFormat." + +#: src/cryptsetup.c:3692 +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:3697 +msgid "Invalid LUKS2 metadata size specification." +msgstr "Некоректна специфікація розміру метаданих LUKS2." + +#: src/cryptsetup.c:3701 +msgid "Invalid LUKS2 keyslots size specification." +msgstr "Некоректна специфікація розміру слоту ключів LUKS2." + +#: src/cryptsetup.c:3705 +msgid "Options --align-payload and --offset cannot be combined." +msgstr "Не можна одночасно використовувати параметри --align-payload і --offset." + +#: src/cryptsetup.c:3711 +msgid "Option --skip is supported only for open of plain and loopaes devices.\n" +msgstr "Підтримку параметра --skip передбачено лише для відкриття незашифрованих пристроїв та пристроїв loopaes.\n" + +#: src/cryptsetup.c:3718 +msgid "Option --offset is supported only for open of plain and loopaes devices, luksFormat and device reencryption.\n" +msgstr "Підтримку параметра --offset передбачено лише для відкриття незашифрованих пристроїв та пристроїв loopaes, luksFormat та повторного шифрування.\n" + +#: src/cryptsetup.c:3724 +msgid "Option --tcrypt-hidden, --tcrypt-system or --tcrypt-backup is supported only for TCRYPT device.\n" +msgstr "Підтримку параметрів --tcrypt-hidden, --tcrypt-system і --tcrypt-backup передбачено лише для пристроїв TCRYPT.\n" + +#: src/cryptsetup.c:3729 +msgid "Option --tcrypt-hidden cannot be combined with --allow-discards.\n" +msgstr "Параметр --tcrypt-hidden не можна поєднувати з --allow-discards.\n" + +#: src/cryptsetup.c:3734 +msgid "Option --veracrypt is supported only for TCRYPT device type.\n" +msgstr "Підтримку параметра --veracrypt передбачено лише для пристроїв TCRYPT.\n" + +#: src/cryptsetup.c:3740 +msgid "Invalid argument for parameter --veracrypt-pim supplied.\n" +msgstr "Надано некоректний аргумент для параметра --veracrypt-pim.\n" + +#: src/cryptsetup.c:3744 +msgid "Option --veracrypt-pim is supported only for VeraCrypt compatible devices.\n" +msgstr "Параметр --veracrypt-pim можна використовувати лише для сумісних із VeraCrypt пристроїв.\n" + +#: src/cryptsetup.c:3752 +msgid "Option --veracrypt-query-pim is supported only for VeraCrypt compatible devices.\n" +msgstr "Параметр --veracrypt-query-pim можна використовувати лише для сумісних із VeraCrypt пристроїв.\n" + +#: src/cryptsetup.c:3756 +msgid "The options --veracrypt-pim and --veracrypt-query-pim are mutually exclusive.\n" +msgstr "Не можна поєднувати параметри --veracrypt-pim і --veracrypt-query-pim.\n" + +#: src/cryptsetup.c:3763 +msgid "Option --priority can be only ignore/normal/prefer.\n" +msgstr "Значенням для параметра --priority може бути лише один з таких рядків: ignore, normal або prefer.\n" + +#: src/cryptsetup.c:3768 +msgid "Keyslot specification is required.\n" +msgstr "Слід вказати специфікація слотів ключів.\n" + +#: src/cryptsetup.c:3773 src/cryptsetup_reencrypt.c:1677 +msgid "Password-based key derivation function (PBKDF) can be only pbkdf2 or argon2i/argon2id.\n" +msgstr "Функцією отримання ключа на основі пароля (PBKDF) може бути лише pbkdf2 або argon2i/argon2id.\n" + +#: src/cryptsetup.c:3778 src/cryptsetup_reencrypt.c:1682 +msgid "PBKDF forced iterations cannot be combined with iteration time option.\n" +msgstr "Примусові ітерації PBKDF не можна поєднувати із параметром тривалості ітерацій.\n" + +#: src/cryptsetup.c:3784 +msgid "Sector size option is not supported for this command.\n" +msgstr "У цій команді не передбачено підтримки параметра розміру сектора.\n" + +#: src/cryptsetup.c:3790 +msgid "Unsupported encryption sector size.\n" +msgstr "Непідтримуваний розмір сектора шифрування.\n" + +#: src/cryptsetup.c:3795 +msgid "Key size is required with --unbound option.\n" +msgstr "Разом із параметром --unbound слід вказувати розмір ключа.\n" + +#: src/cryptsetup.c:3800 +msgid "Option --unbound may be used only with luksAddKey action.\n" +msgstr "Параметр --unbound можна використовувати лише з дією luksAddKey.\n" + +#: src/cryptsetup.c:3805 +msgid "Option --refresh may be used only with open action.\n" +msgstr "Параметр --refresh можна використовувати лише під час дії з відкриття (open).\n" + +#: src/cryptsetup.c:3816 +msgid "Cannot disable metadata locking.\n" +msgstr "Не вдалося вимкнути блокування метаданих.\n" + +#: src/cryptsetup.c:3826 +msgid "Invalid max reencryption hotzone size specification." +msgstr "Некоректна специфікація розміру «гарячої» ділянки повторного шифрування." + +#: src/cryptsetup.c:3834 src/cryptsetup_reencrypt.c:1706 +#: src/cryptsetup_reencrypt.c:1711 +msgid "Invalid device size specification." +msgstr "Некоректна специфікація розміру пристрою." + +#: src/cryptsetup.c:3837 +msgid "Maximum device reduce size is 1 GiB." +msgstr "Максимальний розмір зменшення розміру пристрою дорівнює 1 ГіБ." + +#: src/cryptsetup.c:3840 src/cryptsetup_reencrypt.c:1717 +msgid "Reduce size must be multiple of 512 bytes sector." +msgstr "Розмір зменшення має бути кратним до 512-байтового сектора." + +#: src/cryptsetup.c:3845 +msgid "Invalid data size specification." +msgstr "Некоректна специфікація розміру даних." + +#: src/cryptsetup.c:3850 +msgid "Reduce size overflow." +msgstr "Переповнення розміру зменшення." + +#: src/cryptsetup.c:3854 +msgid "LUKS2 decryption requires option --header." +msgstr "Розшифрування LUKS2 потребує параметра --header." + +#: src/cryptsetup.c:3858 +msgid "Device size must be multiple of 512 bytes sector." +msgstr "Розмір пристрою має бути кратним до 512-байтового сектора." + +#: src/cryptsetup.c:3862 +msgid "Options --reduce-device-size and --data-size cannot be combined." +msgstr "Не можна одночасно використовувати параметри --reduce-device-size і --data-size." + +#: src/cryptsetup.c:3866 +msgid "Options --device-size and --size cannot be combined." +msgstr "Не можна одночасно використовувати параметри --device-size і --size." + +#: src/veritysetup.c:65 +msgid "Invalid salt string specified." +msgstr "Вказано некоректний рядок солі." + +#: src/veritysetup.c:96 +#, c-format +msgid "Cannot create hash image %s for writing." +msgstr "Не вдалося створити образ хешу %s для запису." + +#: src/veritysetup.c:106 +#, c-format +msgid "Cannot create FEC image %s for writing." +msgstr "Не вдалося створити образ FEC %s для запису." + +#: src/veritysetup.c:176 +msgid "Invalid root hash string specified." +msgstr "Вказано некоректний рядок кореневого хешу." + +#: src/veritysetup.c:356 +msgid " " +msgstr "<пристрій_даних> <пристрій_хешу>" + +#: src/veritysetup.c:356 src/integritysetup.c:469 +msgid "format device" +msgstr "форматувати пристрій" + +#: src/veritysetup.c:357 +msgid " " +msgstr "<пристрій_даних> <пристрій_хешу> <кореневий_хеш>" + +#: src/veritysetup.c:357 +msgid "verify device" +msgstr "перевірити пристрій" + +#: src/veritysetup.c:358 +msgid " " +msgstr "<пристрій_даних> <назва> <пристрій_хешу> <кореневий_хеш>" + +#: src/veritysetup.c:360 src/integritysetup.c:472 +msgid "show active device status" +msgstr "показати стан активного пристрою" + +#: src/veritysetup.c:361 +msgid "" +msgstr "<пристрій_хешу>" + +#: src/veritysetup.c:361 src/integritysetup.c:473 +msgid "show on-disk information" +msgstr "показати вбудовані дані" + +#: src/veritysetup.c:380 +#, c-format +msgid "" +"\n" +" is the device to create under %s\n" +" is the data device\n" +" is the device containing verification data\n" +" hash of the root node on \n" +msgstr "" +"\n" +"<назва> — назва пристрою, який слід створити у %s\n" +"<пристрій_даних> — пристрій даних\n" +"<пристрій_хешу> — пристрій, на якому зберігаються дані для перевірки\n" +"<кореневий_хеш> — хеш кореневого вузла на пристрої <пристрій_хешу>\n" + +#: src/veritysetup.c:387 +#, c-format +msgid "" +"\n" +"Default compiled-in dm-verity parameters:\n" +"\tHash: %s, Data block (bytes): %u, Hash block (bytes): %u, Salt size: %u, Hash format: %u\n" +msgstr "" +"\n" +"Типові вбудовані параметри dm-verity:\n" +"\tхеш: %s, блок даних (у байтах): %u, блок хешу (у байтах): %u, розмір солі: %u, формат хешування: %u\n" + +#: src/veritysetup.c:430 +msgid "Do not use verity superblock" +msgstr "Не використовувати суперблок verity" + +#: src/veritysetup.c:431 +msgid "Format type (1 - normal, 0 - original Chrome OS)" +msgstr "Тип форматування (1 — звичайне, 0 — початкове Chrome OS)" + +#: src/veritysetup.c:431 +msgid "number" +msgstr "номер" + +#: src/veritysetup.c:432 +msgid "Block size on the data device" +msgstr "Розмір блоку на пристрої даних" + +#: src/veritysetup.c:433 +msgid "Block size on the hash device" +msgstr "Розмір блоку на пристрої хешу" + +#: src/veritysetup.c:434 +msgid "FEC parity bytes" +msgstr "Байти парності FEC" + +#: src/veritysetup.c:435 +msgid "The number of blocks in the data file" +msgstr "Кількість блоків у файлі даних" + +#: src/veritysetup.c:435 +msgid "blocks" +msgstr "блоки" + +#: src/veritysetup.c:436 +msgid "Path to device with error correction data" +msgstr "Шлях до пристрою із даними для виправлення помилок" + +#: src/veritysetup.c:436 src/integritysetup.c:540 +msgid "path" +msgstr "шлях" + +#: src/veritysetup.c:437 +msgid "Starting offset on the hash device" +msgstr "Початковий відступ на пристрої хешу" + +#: src/veritysetup.c:438 +msgid "Starting offset on the FEC device" +msgstr "Початковий відступ на пристрої FEC" + +#: src/veritysetup.c:439 +msgid "Hash algorithm" +msgstr "Алгоритм хешування" + +#: src/veritysetup.c:439 +msgid "string" +msgstr "рядок" + +#: src/veritysetup.c:440 +msgid "Salt" +msgstr "Сіль" + +#: src/veritysetup.c:440 +msgid "hex string" +msgstr "шістнадцятковий рядок" + +#: src/veritysetup.c:442 +msgid "Restart kernel if corruption is detected" +msgstr "Перезапустити ядро, якщо виявлено пошкодження" + +#: src/veritysetup.c:443 +msgid "Ignore corruption, log it only" +msgstr "Ігнорувати пошкодження, лише записати повідомлення до журналу" + +#: src/veritysetup.c:444 +msgid "Do not verify zeroed blocks" +msgstr "Не перевіряти занулені блоки" + +#: src/veritysetup.c:445 +msgid "Verify data block only the first time it is read" +msgstr "Перевіряти блок даних лише під час його першого читання" + +#: src/veritysetup.c:545 +msgid "Option --ignore-corruption, --restart-on-corruption or --ignore-zero-blocks is allowed only for open operation.\n" +msgstr "Параметри --ignore-corruption, --restart-on-corruption та --ignore-zero-blocks можна використовувати лише для дії з відкриття (open).\n" + +#: src/veritysetup.c:550 +msgid "Option --ignore-corruption and --restart-on-corruption cannot be used together.\n" +msgstr "Параметри --ignore-corruption і --restart-on-corruption не можна використовувати одночасно.\n" + +#: src/integritysetup.c:83 src/utils_password.c:305 +#, c-format +msgid "Cannot read keyfile %s." +msgstr "Не вдалося прочитати файл ключа %s." + +#: src/integritysetup.c:87 src/utils_password.c:310 +#, c-format +msgid "Cannot read %d bytes from keyfile %s." +msgstr "Не вдалося прочитати %d байтів з файла ключа %s." + +#: src/integritysetup.c:250 +#, c-format +msgid "Formatted with tag size %u, internal integrity %s.\n" +msgstr "Форматовано із розміром мітки %u, внутрішня цілісність %s.\n" + +#: src/integritysetup.c:469 src/integritysetup.c:473 +msgid "" +msgstr "<пристрій_цілісності>" + +#: src/integritysetup.c:470 +msgid " " +msgstr "<пристрій_цілісності> <назва>" + +#: src/integritysetup.c:492 +#, c-format +msgid "" +"\n" +" is the device to create under %s\n" +" is the device containing data with integrity tags\n" +msgstr "" +"\n" +"<назва> є пристроєм, який слід створити у %s\n" +"<пристрій_цілісності> є пристроєм, на якому зберігаються дані із мітками цілісності\n" + +#: src/integritysetup.c:497 +#, c-format +msgid "" +"\n" +"Default compiled-in dm-integrity parameters:\n" +"\tTag size: %u bytes, Checksum algorithm: %s\n" +msgstr "" +"\n" +"Типові компільовані параметри dm-integrity:\n" +"\tРозмір міток: %u байтів, алгоритм перевірки контрольних сум: %s\n" + +#: src/integritysetup.c:540 +msgid "Path to data device (if separated)" +msgstr "Шлях до пристрою даних (якщо відокремлено)" + +#: src/integritysetup.c:542 +msgid "Journal size" +msgstr "Розмір журналу" + +#: src/integritysetup.c:543 +msgid "Interleave sectors" +msgstr "Перемежовування секторів" + +#: src/integritysetup.c:544 +msgid "Journal watermark" +msgstr "«Водяний знак» журналу" + +#: src/integritysetup.c:544 +msgid "percent" +msgstr "відсоток" + +#: src/integritysetup.c:545 +msgid "Journal commit time" +msgstr "Час внесення до журналу" + +#: src/integritysetup.c:545 src/integritysetup.c:547 +msgid "ms" +msgstr "мс" + +#: src/integritysetup.c:546 +msgid "Number of 512-byte sectors per bit (bitmap mode)." +msgstr "Кількість 512-байтових секторів на біт (режим бітової карти)." + +#: src/integritysetup.c:547 +msgid "Bitmap mode flush time" +msgstr "Час спорожнення режиму бітової карти" + +#: src/integritysetup.c:548 +msgid "Tag size (per-sector)" +msgstr "Розмір мітки на сектор" + +#: src/integritysetup.c:549 +msgid "Sector size" +msgstr "Розмір сектора" + +#: src/integritysetup.c:550 +msgid "Buffers size" +msgstr "Розмір буферів" + +#: src/integritysetup.c:552 +msgid "Data integrity algorithm" +msgstr "Алгоритм забезпечення цілісності даних" + +#: src/integritysetup.c:553 +msgid "The size of the data integrity key" +msgstr "Розмір ключа цілісності даних" + +#: src/integritysetup.c:554 +msgid "Read the integrity key from a file" +msgstr "Прочитати ключ цілісності з файла" + +#: src/integritysetup.c:556 +msgid "Journal integrity algorithm" +msgstr "Алгоритм забезпечення цілісності журналу" + +#: src/integritysetup.c:557 +msgid "The size of the journal integrity key" +msgstr "Розмір ключа цілісності журналу" + +#: src/integritysetup.c:558 +msgid "Read the journal integrity key from a file" +msgstr "Прочитати ключ цілісності журналу з файла" + +#: src/integritysetup.c:560 +msgid "Journal encryption algorithm" +msgstr "Алгоритм шифрування журналу" + +#: src/integritysetup.c:561 +msgid "The size of the journal encryption key" +msgstr "Розмір ключа шифрування журналу" + +#: src/integritysetup.c:562 +msgid "Read the journal encryption key from a file" +msgstr "Читати ключ шифрування журналу з файла" + +#: src/integritysetup.c:565 +msgid "Recovery mode (no journal, no tag checking)" +msgstr "Режим відновлення (без журналу, без перевірки міток)" + +#: src/integritysetup.c:566 +msgid "Use bitmap to track changes and disable journal for integrity device" +msgstr "Використовувати для стеження за змінами бітову карту і вимкнути журнал для пристрою забезпечення цілісності" + +#: src/integritysetup.c:567 +msgid "Recalculate initial tags automatically." +msgstr "Обчислювати початкові мітки автоматично." + +#: src/integritysetup.c:640 +msgid "Option --integrity-recalculate can be used only for open action." +msgstr "Параметр --integrity-recalculate можна використовувати лише під час дії з відкриття (open)." + +#: src/integritysetup.c:655 +msgid "Options --journal-size, --interleave-sectors, --sector-size, --tag-size and --no-wipe can be used only for format action.\n" +msgstr "Параметри --journal-size, --interleave-sectors, --sector-size, --tag-size та --no-wipe можна використовувати лише для дії з форматування.\n" + +#: src/integritysetup.c:661 +msgid "Invalid journal size specification." +msgstr "Некоректна специфікація розміру журналу." + +#: src/integritysetup.c:666 +msgid "Both key file and key size options must be specified." +msgstr "Не можна одночасно вказувати параметри файла ключа і розміру ключа." + +#: src/integritysetup.c:669 +msgid "Integrity algorithm must be specified if integrity key is used." +msgstr "Якщо використано ключ цілісності, має бути вказано алгоритм забезпечення цілісності." + +#: src/integritysetup.c:674 +msgid "Both journal integrity key file and key size options must be specified." +msgstr "Не можна одночасно вказувати параметри файла ключа цілісності журналу і розміру ключа." + +#: src/integritysetup.c:677 +msgid "Journal integrity algorithm must be specified if journal integrity key is used." +msgstr "Якщо використано ключ цілісності журналу, має бути вказано алгоритм забезпечення цілісності журналу." + +#: src/integritysetup.c:682 +msgid "Both journal encryption key file and key size options must be specified." +msgstr "Не можна одночасно вказувати параметри файла ключа шифрування журналу і розміру ключа." + +#: src/integritysetup.c:685 +msgid "Journal encryption algorithm must be specified if journal encryption key is used." +msgstr "Якщо використано ключ шифрування журналу, має бути вказано алгоритм забезпечення шифрування журналу." + +#: src/integritysetup.c:689 +msgid "Recovery and bitmap mode options are mutually exclusive." +msgstr "Не можна поєднувати параметри відновлення і бітової карти." + +#: src/integritysetup.c:693 +msgid "Journal options cannot be used in bitmap mode." +msgstr "Параметри журналу у режимі бітової карти використовувати не можна." + +#: src/integritysetup.c:697 +msgid "Bitmap options can be used only in bitmap mode." +msgstr "Параметри бітової карти можна використовувати лише у режимі бітового карти." + +#: src/cryptsetup_reencrypt.c:172 +msgid "Reencryption already in-progress." +msgstr "Вже виконується повторне шифрування." + +#: src/cryptsetup_reencrypt.c:201 +#, c-format +msgid "Cannot exclusively open %s, device in use." +msgstr "Не можна відкрити %s у виключному режимі, пристрій вже використовується." + +#: src/cryptsetup_reencrypt.c:215 src/cryptsetup_reencrypt.c:1127 +msgid "Allocation of aligned memory failed." +msgstr "Спроба розподілу вирівняних ділянок пам’яті зазнала невдачі." + +#: src/cryptsetup_reencrypt.c:222 +#, c-format +msgid "Cannot read device %s." +msgstr "Не вдалося виконати читання з пристрою %s." + +#: src/cryptsetup_reencrypt.c:233 +#, c-format +msgid "Marking LUKS1 device %s unusable." +msgstr "Позначаємо пристрій LUKS1 %s як непридатний." + +#: src/cryptsetup_reencrypt.c:237 +#, c-format +msgid "Setting LUKS2 offline reencrypt flag on device %s." +msgstr "Встановлюємо прапорець повторного шифрування LUKS2 з від'єднанням на пристрій %s." + +#: src/cryptsetup_reencrypt.c:254 +#, c-format +msgid "Cannot write device %s." +msgstr "Не вдалося виконати запис на пристрій %s." + +#: src/cryptsetup_reencrypt.c:302 +msgid "Cannot write reencryption log file." +msgstr "Не вдалося записати файл журналу повторного шифрування." + +#: src/cryptsetup_reencrypt.c:358 +msgid "Cannot read reencryption log file." +msgstr "Не вдалося прочитати файл журналу повторного шифрування." + +#: src/cryptsetup_reencrypt.c:396 +#, c-format +msgid "Log file %s exists, resuming reencryption.\n" +msgstr "Файл журналу %s вже існує, поновлюємо повторне шифрування.\n" + +#: src/cryptsetup_reencrypt.c:445 +msgid "Activating temporary device using old LUKS header." +msgstr "Спроба задіяти тимчасовий пристрій за допомогою старого заголовка LUKS." + +#: src/cryptsetup_reencrypt.c:455 +msgid "Activating temporary device using new LUKS header." +msgstr "Спроба задіяти тимчасовий пристрій за допомогою нового заголовка LUKS." + +#: src/cryptsetup_reencrypt.c:465 +msgid "Activation of temporary devices failed." +msgstr "Спроба задіяти тимчасові пристрої зазнала невдачі." + +#: src/cryptsetup_reencrypt.c:551 +msgid "Failed to set data offset." +msgstr "Не вдалося встановити відступ у даних." + +#: src/cryptsetup_reencrypt.c:557 +msgid "Failed to set metadata size." +msgstr "Не вдалося встановити розмір метаданих." + +#: src/cryptsetup_reencrypt.c:565 +#, c-format +msgid "New LUKS header for device %s created." +msgstr "Створено новий заголовок LUKS для пристрою %s." + +#: src/cryptsetup_reencrypt.c:625 +#, c-format +msgid "This version of cryptsetup-reencrypt can't handle new internal token type %s." +msgstr "Ця версія cryptsetup-reencrypt не може обробляти новий тип вбудованих ключів %s." + +#: src/cryptsetup_reencrypt.c:647 +msgid "Failed to read activation flags from backup header." +msgstr "Не вдалося прочитати прапорці активації з резервного заголовка." + +#: src/cryptsetup_reencrypt.c:651 +msgid "Failed to write activation flags to new header." +msgstr "Не вдалося записати прапорці активації до нового заголовка." + +#: src/cryptsetup_reencrypt.c:655 src/cryptsetup_reencrypt.c:659 +msgid "Failed to read requirements from backup header." +msgstr "Не вдалося прочитати вимоги із резервного заголовка." + +#: src/cryptsetup_reencrypt.c:697 +#, c-format +msgid "%s header backup of device %s created." +msgstr "Створено резервну копію заголовка %s пристрою %s." + +#: src/cryptsetup_reencrypt.c:760 +msgid "Creation of LUKS backup headers failed." +msgstr "Спроба створення заголовків резервних копій LUKS зазнала невдачі." + +#: src/cryptsetup_reencrypt.c:893 +#, c-format +msgid "Cannot restore %s header on device %s." +msgstr "Не вдалося відновити заголовок %s на пристрої %s." + +#: src/cryptsetup_reencrypt.c:895 +#, c-format +msgid "%s header on device %s restored." +msgstr "Відновлено заголовок %s на пристрої %s." + +#: src/cryptsetup_reencrypt.c:1099 src/cryptsetup_reencrypt.c:1105 +msgid "Cannot open temporary LUKS device." +msgstr "Неможливо відкрити тимчасовий пристрій LUKS." + +#: src/cryptsetup_reencrypt.c:1110 src/cryptsetup_reencrypt.c:1115 +msgid "Cannot get device size." +msgstr "Не вдалося отримати дані щодо розміру пристрою." + +#: src/cryptsetup_reencrypt.c:1150 +msgid "IO error during reencryption." +msgstr "Помилка введення-виведення під час повторного шифрування." + +#: src/cryptsetup_reencrypt.c:1181 +msgid "Provided UUID is invalid." +msgstr "Наданий UUID є некоректним." + +#: src/cryptsetup_reencrypt.c:1407 +msgid "Cannot open reencryption log file." +msgstr "Не вдалося відкрити файл журналу повторного шифрування." + +#: src/cryptsetup_reencrypt.c:1413 +msgid "No decryption in progress, provided UUID can be used only to resume suspended decryption process." +msgstr "Розшифровування не виконується. Наданий UUID можна використовувати лише для відновлення призупиненого процесу розшифровування." + +#: src/cryptsetup_reencrypt.c:1488 +#, c-format +msgid "Changed pbkdf parameters in keyslot %i." +msgstr "Змінено параметри pbkdf у слоті ключа %i." + +#: src/cryptsetup_reencrypt.c:1600 +msgid "Reencryption block size" +msgstr "Розмір блоку повторного шифрування" + +#: src/cryptsetup_reencrypt.c:1600 +msgid "MiB" +msgstr "МіБ" + +#: src/cryptsetup_reencrypt.c:1604 +msgid "Do not change key, no data area reencryption" +msgstr "Не змінювати ключ, не виконувати повторного шифрування області даних" + +#: src/cryptsetup_reencrypt.c:1606 +msgid "Read new volume (master) key from file" +msgstr "Прочитати новий ключ тому (основний ключ) з файла" + +#: src/cryptsetup_reencrypt.c:1607 +msgid "PBKDF2 iteration time for LUKS (in ms)" +msgstr "Тривалість ітерації PBKDF2 для LUKS (у мс)" + +#: src/cryptsetup_reencrypt.c:1613 +msgid "Use direct-io when accessing devices" +msgstr "Використовувати безпосереднє введення-виведення під час доступу до пристроїв" + +#: src/cryptsetup_reencrypt.c:1614 +msgid "Use fsync after each block" +msgstr "Використовувати fsync після кожного блоку" + +#: src/cryptsetup_reencrypt.c:1615 +msgid "Update log file after every block" +msgstr "Оновлювати файл журналу після кожного блоку" + +#: src/cryptsetup_reencrypt.c:1616 +msgid "Use only this slot (others will be disabled)" +msgstr "Використовувати лише цей слот (інші буде вимкнено)" + +#: src/cryptsetup_reencrypt.c:1621 +msgid "Create new header on not encrypted device" +msgstr "Створити новий заголовок на незашифрованому пристрої" + +#: src/cryptsetup_reencrypt.c:1622 +msgid "Permanently decrypt device (remove encryption)" +msgstr "Остаточно розшифрувати пристрій (скасувати шифрування)" + +#: src/cryptsetup_reencrypt.c:1623 +msgid "The UUID used to resume decryption" +msgstr "UUID, що використовується для відновлення розшифровування" + +#: src/cryptsetup_reencrypt.c:1624 +msgid "Type of LUKS metadata: luks1, luks2" +msgstr "Тип метаданих LUKS (luks1 або luks2)" + +#: src/cryptsetup_reencrypt.c:1643 +msgid "[OPTION...] " +msgstr "[ПАРАМЕТР...] <пристрій>" + +#: src/cryptsetup_reencrypt.c:1651 +#, c-format +msgid "Reencryption will change: %s%s%s%s%s%s." +msgstr "Повторне шифрування призведе до зміни: %s%s%s%s%s%s." + +#: src/cryptsetup_reencrypt.c:1652 +msgid "volume key" +msgstr "ключ тому" + +#: src/cryptsetup_reencrypt.c:1654 +msgid "set hash to " +msgstr "встановити хеш у значення " + +#: src/cryptsetup_reencrypt.c:1655 +msgid ", set cipher to " +msgstr ", встановити шифрування " + +#: src/cryptsetup_reencrypt.c:1659 +msgid "Argument required." +msgstr "Слід вказати аргумент." + +#: src/cryptsetup_reencrypt.c:1687 +msgid "Only values between 1 MiB and 64 MiB allowed for reencryption block size." +msgstr "Розмір блоку повторного шифрування повинен належати діапазону від 1 МіБ до 64 МІБ." + +#: src/cryptsetup_reencrypt.c:1714 +msgid "Maximum device reduce size is 64 MiB." +msgstr "Максимальний розмір зменшення розміру пристрою дорівнює 64 МіБ." + +#: src/cryptsetup_reencrypt.c:1721 +msgid "Option --new must be used together with --reduce-device-size or --header." +msgstr "Параметр --new слід використовувати разом з --reduce-device-size або --header." + +#: src/cryptsetup_reencrypt.c:1725 +msgid "Option --keep-key can be used only with --hash, --iter-time or --pbkdf-force-iterations." +msgstr "Параметр --keep-key можна використовувати лише разом з параметром --hash --iter-time або --pbkdf-force-iterations." + +#: src/cryptsetup_reencrypt.c:1729 +msgid "Option --new cannot be used together with --decrypt." +msgstr "Параметр --new не можна використовувати разом з --decrypt." + +#: src/cryptsetup_reencrypt.c:1733 +msgid "Option --decrypt is incompatible with specified parameters." +msgstr "Параметр --decrypt є несумісним із вказаними параметрами." + +#: src/cryptsetup_reencrypt.c:1737 +msgid "Option --uuid is allowed only together with --decrypt." +msgstr "Параметр --uuid можна використовувати лише разом із --decrypt." + +#: src/cryptsetup_reencrypt.c:1741 +msgid "Invalid luks type. Use one of these: 'luks', 'luks1' or 'luks2'." +msgstr "Некоректний тип luks. Скористайтеся одним з таких типів: luks, luks1 або luks2." + +#: src/utils_tools.c:151 +msgid "Error reading response from terminal." +msgstr "Помилка під час спроби читання відповіді з термінала." + +#: src/utils_tools.c:186 +msgid "Command successful.\n" +msgstr "Команду виконано успішно.\n" + +#: src/utils_tools.c:194 +msgid "wrong or missing parameters" +msgstr "помилкові параметри або параметри не вказано" + +#: src/utils_tools.c:196 +msgid "no permission or bad passphrase" +msgstr "немає права доступу або помилковий пароль" + +#: src/utils_tools.c:198 +msgid "out of memory" +msgstr "недостатньо пам'яті" + +#: src/utils_tools.c:200 +msgid "wrong device or file specified" +msgstr "вказано помилковий пристрій або файл" + +#: src/utils_tools.c:202 +msgid "device already exists or device is busy" +msgstr "пристрій вже існує або пристрій зайнято" + +#: src/utils_tools.c:204 +msgid "unknown error" +msgstr "невідома помилка" + +#: src/utils_tools.c:206 +#, c-format +msgid "Command failed with code %i (%s).\n" +msgstr "Спроба виконання команди завершилася повідомленням про помилку з кодом %i (%s).\n" + +#: src/utils_tools.c:283 +#, c-format +msgid "Key slot %i created." +msgstr "Створено слот ключа %i." + +#: src/utils_tools.c:285 +#, c-format +msgid "Key slot %i unlocked." +msgstr "Слот ключа %i розблоковано." + +#: src/utils_tools.c:287 +#, c-format +msgid "Key slot %i removed." +msgstr "Слот ключа %i вилучено." + +#: src/utils_tools.c:296 +#, c-format +msgid "Token %i created." +msgstr "Створено ключ %i." + +#: src/utils_tools.c:298 +#, c-format +msgid "Token %i removed." +msgstr "Ключ %i вилучено." + +#: src/utils_tools.c:464 +msgid "" +"\n" +"Wipe interrupted." +msgstr "" +"\n" +"Витирання перервано." + +#: src/utils_tools.c:475 +#, c-format +msgid "WARNING: Device %s already contains a '%s' partition signature.\n" +msgstr "Попередження: пристрій %s вже містить підпис розділу «%s».\n" + +#: src/utils_tools.c:483 +#, c-format +msgid "WARNING: Device %s already contains a '%s' superblock signature.\n" +msgstr "Попередження: пристрій %s вже містить підпис суперблоку «%s».\n" + +#: src/utils_tools.c:504 src/utils_tools.c:568 +msgid "Failed to initialize device signature probes." +msgstr "Не вдалося ініціалізувати зондування підписів пристроїв." + +#: src/utils_tools.c:548 +#, c-format +msgid "Failed to stat device %s." +msgstr "Не вдалося зібрати статистичні дані щодо пристрою %s." + +#: src/utils_tools.c:561 +#, c-format +msgid "Device %s is in use. Can not proceed with format operation." +msgstr "Пристрій %s використовується сторонньою програмою. Продовження дій з форматування неможливе." + +#: src/utils_tools.c:563 +#, c-format +msgid "Failed to open file %s in read/write mode." +msgstr "Не вдалося відкрити файл %s у режимі читання-запису." + +#: src/utils_tools.c:577 +#, c-format +msgid "Existing '%s' partition signature (offset: % bytes) on device %s will be wiped." +msgstr "Наявний підпис розділу «%s» (зміщення: % байтів) на пристрої %s буде витерто." + +#: src/utils_tools.c:580 +#, c-format +msgid "Existing '%s' superblock signature (offset: % bytes) on device %s will be wiped." +msgstr "Наявний підпис суперблоку «%s» (зміщення: % байтів) на пристрої %s буде витерто." + +#: src/utils_tools.c:583 +msgid "Failed to wipe device signature." +msgstr "Не вдалося витерти підпис пристрою." + +#: src/utils_tools.c:590 +#, c-format +msgid "Failed to probe device %s for a signature." +msgstr "Не вдалося виконати зондування пристрою %s з метою виявлення підпису." + +#: src/utils_tools.c:629 +msgid "" +"\n" +"Reencryption interrupted." +msgstr "" +"\n" +"Повторне шифрування перервано." + +#: src/utils_password.c:43 src/utils_password.c:75 +#, c-format +msgid "Cannot check password quality: %s" +msgstr "Не вдалося перевірити якість пароля: %s" + +#: src/utils_password.c:51 +#, c-format +msgid "" +"Password quality check failed:\n" +" %s" +msgstr "" +"Помилка під час спроби оцінити якість пароля:\n" +" %s" + +#: src/utils_password.c:83 +#, c-format +msgid "Password quality check failed: Bad passphrase (%s)" +msgstr "Помилка під час спроби оцінити якість пароля: некоректний пароль (%s)" + +#: src/utils_password.c:193 src/utils_password.c:208 +msgid "Error reading passphrase from terminal." +msgstr "Помилка під час читання пароля з термінала." + +#: src/utils_password.c:206 +msgid "Verify passphrase: " +msgstr "Перевірка пароля: " + +#: src/utils_password.c:213 +msgid "Passphrases do not match." +msgstr "Паролі не збігаються." + +#: src/utils_password.c:250 +msgid "Cannot use offset with terminal input." +msgstr "Не можна використовувати відступ у даних, що надходять з термінала." + +#: src/utils_password.c:253 +#, c-format +msgid "Enter passphrase: " +msgstr "Введіть пароль: " + +#: src/utils_password.c:256 +#, c-format +msgid "Enter passphrase for %s: " +msgstr "Введіть пароль до %s: " + +#: src/utils_password.c:287 +msgid "No key available with this passphrase." +msgstr "Для цього пароля немає відповідного ключа." + +#: src/utils_password.c:289 +msgid "No usable keyslot is available." +msgstr "Немає доступних придатних до користування слотів ключів." + +#: src/utils_password.c:328 +#, c-format +msgid "Cannot open keyfile %s for write." +msgstr "Не вдалося відкрити файл ключа %s для запису." + +#: src/utils_password.c:335 +#, c-format +msgid "Cannot write to keyfile %s." +msgstr "Не вдалося виконати запису до файла ключа %s." + +#: src/utils_luks2.c:47 +#, c-format +msgid "Failed to open file %s in read-only mode." +msgstr "Не вдалося відкрити файл %s у режимі лише читання." + +#: src/utils_luks2.c:60 +msgid "Provide valid LUKS2 token JSON:\n" +msgstr "Надайте коректний ключ JSON LUKS2:\n" + +#: src/utils_luks2.c:67 +msgid "Failed to read JSON file." +msgstr "Не вдалося прочитати файл JSON." + +#: src/utils_luks2.c:72 +msgid "" +"\n" +"Read interrupted." +msgstr "" +"\n" +"Читання перервано." + +#: src/utils_luks2.c:113 +#, c-format +msgid "Failed to open file %s in write mode." +msgstr "Не вдалося відкрити файл %s у режимі запису." + +#: src/utils_luks2.c:122 +msgid "" +"\n" +"Write interrupted." +msgstr "" +"\n" +"Запис перервано." + +#: src/utils_luks2.c:126 +msgid "Failed to write JSON file." +msgstr "Не вдалося записати файл JSON." + +#~ msgid "Interrupted by a signal." +#~ msgstr "Перервано за сигналом." + +#~ msgid "Function not available in FIPS mode." +#~ msgstr "Ця функція недоступна у режимі FIPS." + +#~ msgid "Failed to write hash." +#~ msgstr "Не вдалося записати хеш." + +#~ msgid "Failed to finalize hash." +#~ msgstr "Не вдалося завершити хеш." + +#~ msgid "Invalid resilience parameters (internal error)." +#~ msgstr "Некоректні параметри стійкості (внутрішня помилка)." + +#~ msgid "Failed to assign new enc segments." +#~ msgstr "Не вдалося призначити нові сегменти шифрування." + +#~ msgid "Failed to assign digest %u to segment %u." +#~ msgstr "Не вдалося пов'язати контрольну суму %u із сегментом %u." + +#~ msgid "Failed to set segments." +#~ msgstr "Не вдалося встановити сегменти." + +#~ msgid "Failed to assign reencrypt previous backup segment." +#~ msgstr "Не вдалося призначити попередній резервний сегмент повторного шифрування." + +#~ msgid "Failed to assign reencrypt final backup segment." +#~ msgstr "Не вдалося призначити останній резервний сегмент повторного шифрування." + +#~ msgid "Failed generate 2nd segment." +#~ msgstr "Не вдалося створити другий сегмент." + +#~ msgid "Failed generate 1st segment." +#~ msgstr "Не вдалося створити перший сегмент." + +#~ msgid "Failed to allocate device %s." +#~ msgstr "Не вдалося розмістити пристрій %s." + +#~ msgid "Failed to allocate dm segments." +#~ msgstr "Не вдалося розмістити сегменти dm." + +#~ msgid "Failed to create dm segments." +#~ msgstr "Не вдалося створити сегменти dm." + +#~ msgid "Failed to allocate device for new backing device." +#~ msgstr "Не вдалося отримати місце для нового резервного пристрою." + +#~ msgid "Failed to reload overlay device %s." +#~ msgstr "Не вдалося перезавантажити пристрій-накладку %s." + +#~ msgid "Failed to refresh helper devices." +#~ msgstr "Не вдалося освіжити список допоміжних пристроїв." + +#~ msgid "Failed to create reencryption backup segments." +#~ msgstr "Не вдалося створити резервні сегменти повторного шифрування." + +#~ msgid "Failed to set online-reencryption requirement." +#~ msgstr "Не вдалося встановити вимогу щодо повторного шифрування без від'єднання." + +#~ msgid "Failed to hash sector at offset %zu." +#~ msgstr "Не вдалося визначити хеш сектора зі зсувом %zu." + +#~ msgid "Failed to read sector hash." +#~ msgstr "Не вдалося прочитати хеш сектора." + +#~ msgid "Error: Calculated reencryption offset % is beyond device size %." +#~ msgstr "Помилка: обчислений зсув повторного шифрування % виходить за межі розміру пристрою — %." + +#~ msgid "Device is not in clean reencryption state." +#~ msgstr "Пристрій не перебуває у «чистому» стані повторного шифрування." + +#~ msgid "Failed to read device info from %s." +#~ msgstr "Не вдалося прочитати дані щодо пристрою з %s." + +#~ msgid "Failed to calculate new segments." +#~ msgstr "Не вдалося обчислити нові сегменти." + +#~ msgid "Failed to assign pre reenc segments." +#~ msgstr "Не вдалося прив'язати сегменти перед повторним шифруванням." + +#~ msgid "Failed finalize hotzone resilience, retval = %d" +#~ msgstr "Не вдалося завершити забезпечення стійкості «гарячої» ділянки, повернуте значення = %d" + +#~ msgid "Failed to write data." +#~ msgstr "Не вдалося записати дані." + +#~ msgid "Failed to update metadata or reassign device segments." +#~ msgstr "Не вдалося оновити метадані або повторно пов'язати сегменти пристрою." + +#~ msgid "Failed to reload %s device." +#~ msgstr "Не вдалося перезавантажити пристрій %s." + +#~ msgid "Failed to erase backup segments" +#~ msgstr "Не вдалося витерти резервні сегменти" + +#~ msgid "Requested dmcrypt performance options are not supported." +#~ msgstr "Підтримки вказаних параметрів швидкодії dmcrypt не передбачено." + +#~ msgid "Cannot format device %s which is still in use." +#~ msgstr "Не можна форматувати пристрій %s, який перебуває у користуванні." + +#~ msgid "Key slot %d is not used." +#~ msgstr "Слот ключа %d не використовується." + +#~ msgid "Key slot %d selected for deletion." +#~ msgstr "Слот ключа %d позначено для вилучення." + +#~ msgid "open device as mapping " +#~ msgstr "відкрити пристрій як призначення <назва>" + +#~ msgid "close device (deactivate and remove mapping)" +#~ msgstr "закрити пристрій (скасувати активацію і вилучити призначення)" + +#~ msgid "Failed to set PBKDF parameters." +#~ msgstr "Не вдалося встановити параметри PBKDF." + +#~ msgid "Cannot seek to device offset.\n" +#~ msgstr "Не вдалося встановити вказану позицію на пристрої.\n" + +#~ msgid "Device %s is too small. (LUKS2 requires at least % bytes.)" +#~ msgstr "Обсяг пристрою %s є надто малим. (LUKS2 потрібно принаймні % байтів.)" + +#~ msgid "Replaced with key slot %d." +#~ msgstr "Замінено слотом ключа %d." + +#~ msgid "Missing LUKS target type, option --type is required." +#~ msgstr "Не вказано типу призначення LUKS, слід вказати параметр --type." + +#~ msgid "Missing --token option specifying token for removal." +#~ msgstr "Пропущено параметр --token, який задає ключ, який слід вилучити." + +#~ msgid "Add or remove keyring token" +#~ msgstr "Додати або вилучити ключ зі сховища ключів" + +#~ msgid "Activated keyslot %i." +#~ msgstr "Задіяний слот ключа %i." + +#~ msgid "memory allocation error in action_luksFormat" +#~ msgstr "помилка під час отримання області пам’яті у action_luksFormat" + +#~ msgid "Key slot is invalid.\n" +#~ msgstr "Слот ключа є некоректним.\n" + +#~ msgid "Using default pbkdf parameters for new LUKS2 header.\n" +#~ msgstr "Використовуємо типові параметри pbkdf для нового заголовка LUKS2.\n" + +#~ msgid "Too many tree levels for verity volume.\n" +#~ msgstr "Занадто високий рівень вкладеності для тому перевірки.\n" + +#~ msgid "Key %d not active. Can't wipe.\n" +#~ msgstr "Ключ %d не є активним. Його не можна витерти.\n" + +#~ msgid " " +#~ msgstr "<назва> <пристрій_даних> <пристрій_хешу> <кореневий_хеш>" + +#~ msgid "create active device" +#~ msgstr "створити активний пристрій" + +#~ msgid "remove (deactivate) device" +#~ msgstr "вилучити пристрій (скасувати активацію)" + +#~ msgid "Progress: %5.1f%%, ETA %02llu:%02llu, %4llu MiB written, speed %5.1f MiB/s%s" +#~ msgstr "Поступ: %5.1f%%, час до завершення: %02llu:%02llu, записано %4llu МіБ, швидкість %5.1f МіБ/с%s" + +#~ msgid "Cannot find a free loopback device.\n" +#~ msgstr "Не вдалося знайти вільний петльовий пристрій.\n" + +#~ msgid "Cannot open device %s\n" +#~ msgstr "Не вдалося відкрити пристрій %s\n" + +#~ msgid "Cannot use passed UUID unless decryption in progress.\n" +#~ msgstr "Не можна використовувати переданий UUID, якщо не виконується дія з розшифровування.\n" + +#~ msgid "Marking LUKS device %s usable.\n" +#~ msgstr "Позначаємо пристрій LUKS %s як придатний\n" + +#~ msgid "WARNING: this is experimental code, it can completely break your data.\n" +#~ msgstr "ПОПЕРЕДЖЕННЯ: цей код не перевірено достатнім чином, його використання може призвести до незворотного пошкодження даних.\n" + +#~ msgid "FIPS checksum verification failed.\n" +#~ msgstr "Контрольні суми FIPS не збігаються.\n" + +#~ msgid "WARNING: device %s is a partition, for TCRYPT system encryption you usually need to use whole block device path.\n" +#~ msgstr "Попередження: пристрій %s є розділом; для шифрування системи за допомогою TCRYPT, зазвичай, вам слід використовувати шлях до цілого блокового пристрою.\n" + +#~ msgid "Kernel doesn't support plain64 IV.\n" +#~ msgstr "У ядрі не передбачено підтримки plain64 IV.\n" + +#~ msgid "Enter LUKS passphrase: " +#~ msgstr "Введіть пароль LUKS: " + +#~ msgid "Enter new LUKS passphrase: " +#~ msgstr "Введіть новий пароль LUKS: " + +#~ msgid "Enter any LUKS passphrase: " +#~ msgstr "Введіть довільний пароль LUKS: " + +#~ msgid "Backup file %s doesn't exist.\n" +#~ msgstr "Файла резервної копії, %s, не існує.\n" + +#~ msgid "create device" +#~ msgstr "створити пристрій" + +#~ msgid "remove device" +#~ msgstr "вилучити пристрій" + +#~ msgid "remove LUKS mapping" +#~ msgstr "вилучити призначення LUKS" + +#~ msgid "open loop-AES device as mapping " +#~ msgstr "відкрити пристрій loop-AES як призначення <назва>" + +#~ msgid "remove loop-AES mapping" +#~ msgstr "вилучити призначення loop-AES" + +#~ msgid "Cannot open device %s for %s%s access.\n" +#~ msgstr "Не вдалося відкрити пристрій %s для доступу %s%s.\n" + +#~ msgid "exclusive " +#~ msgstr "ексклюзивний " + +#~ msgid "writable" +#~ msgstr "придатний до запису" + +#~ msgid "read-only" +#~ msgstr "тільки читання" + +#~ msgid "WARNING!!! Possibly insecure memory. Are you root?\n" +#~ msgstr "УВАГА!!! Небезпека доступу до даних у пам’яті. Працюєте від імені адміністратора?\n" + +#~ msgid "Unable to obtain sector size for %s" +#~ msgstr "Не вдалося отримати розмір сектора %s" + +#~ msgid "Cannot use device %s (crypt segments overlaps or in use by another device).\n" +#~ msgstr "Використання пристрою %s неможливе (сегменти шифрування перекриваються або використовуються іншим пристроєм).\n" diff --git a/po/vi.gmo b/po/vi.gmo new file mode 100644 index 0000000000000000000000000000000000000000..5cf33f4ef52e8eb8ebff736f5ef6cd53f11b0141 GIT binary patch literal 18844 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 beP^Y1SqLeRej;1qts^X3c}Vv8, 2010. +# Trần Ngọc Quân , 2012-2014, 2015, 2016, 2017. +# +msgid "" +msgstr "" +"Project-Id-Version: cryptsetup 1.7.4\n" +"Report-Msgid-Bugs-To: dm-crypt@saout.de\n" +"POT-Creation-Date: 2019-11-01 09:04+0100\n" +"PO-Revision-Date: 2017-03-05 15:08+0700\n" +"Last-Translator: Trần Ngọc Quân \n" +"Language-Team: Vietnamese \n" +"Language: vi\n" +"MIME-Version: 1.0\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" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Gtranslator 2.91.7\n" + +#: lib/libdevmapper.c:384 +#, fuzzy +msgid "Cannot initialize device-mapper, running as non-root user." +msgstr "Không thể khởi tạo ánh-xạ-thiết-bị (device-mapper), do không chạy dưới quyền siêu người dùng.\n" + +#: lib/libdevmapper.c:387 +#, fuzzy +msgid "Cannot initialize device-mapper. Is dm_mod kernel module loaded?" +msgstr "" +"Không thể khởi tạo tiến trình ánh xạ thiết bị.\n" +"Mô-đun hạt nhân “dm_mod” được nạp chưa?\n" + +#: lib/libdevmapper.c:1082 +#, fuzzy +msgid "Requested deferred flag is not supported." +msgstr "Không hỗ trợ chuỗi duy nhất LUKS %s được yêu cầu.\n" + +#: lib/libdevmapper.c:1149 +#, fuzzy, c-format +msgid "DM-UUID for device %s was truncated." +msgstr "Mã số DM-UUID cho thiết bị %s bị cắt ngắn.\n" + +#: lib/libdevmapper.c:1463 +msgid "Unknown dm target type." +msgstr "" + +#: lib/libdevmapper.c:1565 lib/libdevmapper.c:1617 +#, fuzzy +msgid "Requested dm-crypt performance options are not supported." +msgstr "Không hỗ trợ tùy chọn hiệu năng dm-crypt đã yêu cầu.\n" + +#: lib/libdevmapper.c:1572 +#, fuzzy +msgid "Requested dm-verity data corruption handling options are not supported." +msgstr "Không hỗ trợ tùy chọn xử lý dữ liệu sai hỏng dm-verity đã yêu cầu.\n" + +#: lib/libdevmapper.c:1576 +#, fuzzy +msgid "Requested dm-verity FEC options are not supported." +msgstr "Không hỗ trợ tùy chọn hiệu năng dm-crypt đã yêu cầu.\n" + +#: lib/libdevmapper.c:1580 +#, fuzzy +msgid "Requested data integrity options are not supported." +msgstr "Không hỗ trợ tùy chọn hiệu năng dm-crypt đã yêu cầu.\n" + +#: lib/libdevmapper.c:1582 +#, fuzzy +msgid "Requested sector_size option is not supported." +msgstr "Không hỗ trợ tùy chọn hiệu năng dm-crypt đã yêu cầu.\n" + +#: lib/libdevmapper.c:1587 +#, fuzzy +msgid "Requested automatic recalculation of integrity tags is not supported." +msgstr "Không hỗ trợ tùy chọn xử lý dữ liệu sai hỏng dm-verity đã yêu cầu.\n" + +#: lib/libdevmapper.c:1591 +#, fuzzy +msgid "Requested dm-integrity bitmap mode is not supported." +msgstr "Không hỗ trợ tùy chọn xử lý dữ liệu sai hỏng dm-verity đã yêu cầu.\n" + +#: lib/libdevmapper.c:1620 +#, fuzzy +msgid "Discard/TRIM is not supported." +msgstr "Thuật toán băm %s không được hỗ trợ.\n" + +#: lib/libdevmapper.c:2511 +#, c-format +msgid "Failed to query dm-%s segment." +msgstr "" + +#: lib/random.c:80 +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" +msgstr "" +"Hệ thống bị nằm ngoài en-trô-pi trong khi tạo khóa vùng chứa.\n" +"Xin hãy di chuyển con chuột hay gõ vài chữ trong cửa sổ khác để thu thập sự kiện ngẫu nhiên.\n" + +#: lib/random.c:84 +#, c-format +msgid "Generating key (%d%% done).\n" +msgstr "Đang tạo khóa (xong %d%%).\n" + +#: lib/random.c:170 +#, fuzzy +msgid "Running in FIPS mode." +msgstr "Đang chạy trong chế độ FIPS.\n" + +#: lib/random.c:176 +#, fuzzy +msgid "Fatal error during RNG initialisation." +msgstr "Gặp lỗi nghiêm trọng trong quá trình khởi tạo RNG.\n" + +#: lib/random.c:213 +#, fuzzy +msgid "Unknown RNG quality requested." +msgstr "Không hiểu chất lượng RNG đã yêu cầu.\n" + +#: lib/random.c:218 +#, fuzzy +msgid "Error reading from RNG." +msgstr "Lỗi %d khi đọc từ RNG: %s\n" + +#: lib/setup.c:223 +#, fuzzy +msgid "Cannot initialize crypto RNG backend." +msgstr "Không thể khởi tạo ứng dụng chạy ở phía sau (backend) mã hóa RNG.\n" + +#: lib/setup.c:229 +#, fuzzy +msgid "Cannot initialize crypto backend." +msgstr "Không thể khởi ứng dụng mã hóa chạy ở phía sau (backend).\n" + +#: lib/setup.c:260 lib/setup.c:1990 lib/verity/verity.c:120 +#, fuzzy, c-format +msgid "Hash algorithm %s not supported." +msgstr "Thuật toán băm %s không được hỗ trợ.\n" + +#: lib/setup.c:263 lib/loopaes/loopaes.c:90 +#, fuzzy, c-format +msgid "Key processing error (using hash %s)." +msgstr "Lỗi xử lý khóa (dùng mã băm %s).\n" + +#: lib/setup.c:324 lib/setup.c:351 +#, fuzzy +msgid "Cannot determine device type. Incompatible activation of device?" +msgstr "Không thể dò tìm kiểu thiết bị. Phần hoạt hóa của thiết bị không tương thích à?\n" + +#: lib/setup.c:330 lib/setup.c:2985 +#, fuzzy +msgid "This operation is supported only for LUKS device." +msgstr "Thao tác này được hỗ trợ chỉ cho thiết bị LUKS.\n" + +#: lib/setup.c:357 +#, fuzzy +msgid "This operation is supported only for LUKS2 device." +msgstr "Thao tác này được hỗ trợ chỉ cho thiết bị LUKS.\n" + +#: lib/setup.c:412 lib/luks2/luks2_reencrypt.c:2345 +#, fuzzy +msgid "All key slots full." +msgstr "Mọi khe khóa đều đã đầy.\n" + +#: lib/setup.c:423 +#, fuzzy, c-format +msgid "Key slot %d is invalid, please select between 0 and %d." +msgstr "Khe khóa %d không đúng, hãy chọn một giá trị trong phạm vi từ 0 đến %d.\n" + +#: lib/setup.c:429 +#, fuzzy, c-format +msgid "Key slot %d is full, please select another one." +msgstr "Khe khóa %d bị đầy, hãy chọn một khe khác.\n" + +#: lib/setup.c:514 lib/setup.c:2759 +#, fuzzy +msgid "Device size is not aligned to device logical block size." +msgstr "Thiết bị %s không phải là một thiết bị kiểu LUKS đúng.\n" + +#: lib/setup.c:610 +#, fuzzy, c-format +msgid "Header detected but device %s is too small." +msgstr "Phát hiện được phần đầu nhưng mà thiết bị %s quá nhỏ.\n" + +#: lib/setup.c:647 +#, fuzzy +msgid "This operation is not supported for this device type." +msgstr "Thao tác này không được hỗ trợ cho kiểu thiết bị này.\n" + +#: lib/setup.c:652 +msgid "Illegal operation with reencryption in-progress." +msgstr "" + +#: lib/setup.c:821 lib/luks1/keymanage.c:476 +#, fuzzy, c-format +msgid "Unsupported LUKS version %d." +msgstr "Phiên bản LUKS không được hỗ trợ %d.\n" + +#: lib/setup.c:838 lib/setup.c:1483 lib/setup.c:1903 +#, fuzzy +msgid "Detached metadata device is not supported for this crypt type." +msgstr "UUID không hỗ trợ kiểu mã hóa này.\n" + +#: lib/setup.c:1373 lib/setup.c:2479 lib/setup.c:2551 lib/setup.c:2563 +#: lib/setup.c:2712 lib/setup.c:4310 +#, fuzzy, c-format +msgid "Device %s is not active." +msgstr "Thiết bị %s không hoạt động.\n" + +#: lib/setup.c:1390 +#, fuzzy, c-format +msgid "Underlying device for crypt device %s disappeared." +msgstr "Thiết bị nằm dưới cho thiết bị crypt %s đã bị biến mất.\n" + +#: lib/setup.c:1468 +#, fuzzy +msgid "Invalid plain crypt parameters." +msgstr "Đặt sai tham số mã hóa bình thường.\n" + +#: lib/setup.c:1473 lib/setup.c:1893 src/integritysetup.c:73 +#, fuzzy +msgid "Invalid key size." +msgstr "Kích cỡ khóa không đúng.\n" + +#: lib/setup.c:1478 lib/setup.c:1898 lib/setup.c:2100 +#, fuzzy +msgid "UUID is not supported for this crypt type." +msgstr "UUID không hỗ trợ kiểu mã hóa này.\n" + +#: lib/setup.c:1493 lib/setup.c:1683 lib/luks2/luks2_reencrypt.c:2308 +#: src/cryptsetup.c:1169 +#, fuzzy +msgid "Unsupported encryption sector size." +msgstr "Không đọc được tập tin nhật ký reencryption.\n" + +#: lib/setup.c:1501 lib/setup.c:1808 lib/setup.c:2753 +#, fuzzy +msgid "Device size is not aligned to requested sector size." +msgstr "Thiết bị %s không phải là một thiết bị kiểu LUKS đúng.\n" + +#: lib/setup.c:1552 lib/setup.c:1671 +#, fuzzy +msgid "Can't format LUKS without device." +msgstr "Không thể định dạng “LUKS” mà không có thiết bị.\n" + +#: lib/setup.c:1558 lib/setup.c:1677 +msgid "Requested data alignment is not compatible with data offset." +msgstr "" + +#: lib/setup.c:1626 lib/setup.c:1795 +msgid "WARNING: Data offset is outside of currently available data device.\n" +msgstr "" + +#: lib/setup.c:1636 lib/setup.c:1823 lib/setup.c:1844 lib/setup.c:2112 +#, fuzzy, c-format +msgid "Cannot wipe header on device %s." +msgstr "Không thể tẩy xóa phần đầu trên thiết bị %s.\n" + +#: lib/setup.c:1688 +msgid "WARNING: The device activation will fail, dm-crypt is missing support for requested encryption sector size.\n" +msgstr "" + +#: lib/setup.c:1710 +msgid "Volume key is too small for encryption with integrity extensions." +msgstr "" + +#: lib/setup.c:1765 +#, fuzzy, c-format +msgid "Cipher %s-%s (key size %zd bits) is not available." +msgstr "Mã hóa kiểu %s không sẵn có.\n" + +#: lib/setup.c:1798 +#, c-format +msgid "WARNING: LUKS2 metadata size changed to % bytes.\n" +msgstr "" + +#: lib/setup.c:1802 +#, c-format +msgid "WARNING: LUKS2 keyslots area size changed to % bytes.\n" +msgstr "" + +#: lib/setup.c:1826 lib/utils_device.c:829 lib/luks1/keyencryption.c:256 +#: lib/luks2/luks2_reencrypt.c:2356 lib/luks2/luks2_reencrypt.c:3348 +#, fuzzy, c-format +msgid "Device %s is too small." +msgstr "Thiết bị %s có kích cỡ quá nhỏ.\n" + +#: lib/setup.c:1837 lib/setup.c:1863 +#, fuzzy, c-format +msgid "Cannot format device %s in use." +msgstr "Không thể định dạng thiết bị %s mà nó lại vẫn đang được sử dụng.\n" + +#: lib/setup.c:1840 lib/setup.c:1866 +#, fuzzy, c-format +msgid "Cannot format device %s, permission denied." +msgstr "Không thể định dạng thiết bị %s, không đủ thẩm quyền.\n" + +#: lib/setup.c:1852 lib/setup.c:2164 +#, fuzzy, c-format +msgid "Cannot format integrity for device %s." +msgstr "Không thể ghi thiết bị %s.\n" + +#: lib/setup.c:1870 +#, fuzzy, c-format +msgid "Cannot format device %s." +msgstr "Không thể đọc thiết bị %s.\n" + +#: lib/setup.c:1888 +#, fuzzy +msgid "Can't format LOOPAES without device." +msgstr "Không thể định dạng “LOOPAES” bên ngoài thiết bị.\n" + +#: lib/setup.c:1933 +#, fuzzy +msgid "Can't format VERITY without device." +msgstr "Không thể định dạng “VERITY” mà không có thiết bị.\n" + +#: lib/setup.c:1944 lib/verity/verity.c:103 +#, fuzzy, c-format +msgid "Unsupported VERITY hash type %d." +msgstr "Kiểu băm “VERITY” %d không được hỗ trợ.\n" + +#: lib/setup.c:1950 lib/verity/verity.c:111 +#, fuzzy +msgid "Unsupported VERITY block size." +msgstr "Kích thước khối “VERITY” không được hỗ trợ.\n" + +#: lib/setup.c:1955 lib/verity/verity.c:75 +#, fuzzy +msgid "Unsupported VERITY hash offset." +msgstr "Khoảng bù (offset) mã băm “VERITY” không được hỗ trợ.\n" + +#: lib/setup.c:1960 +#, fuzzy +msgid "Unsupported VERITY FEC offset." +msgstr "Khoảng bù (offset) mã băm “VERITY” không được hỗ trợ.\n" + +#: lib/setup.c:1984 +#, fuzzy +msgid "Data area overlaps with hash area." +msgstr "Vùng dữ liệu chồng lấn với vùng mã băm.\n" + +#: lib/setup.c:2009 +#, fuzzy +msgid "Hash area overlaps with FEC area." +msgstr "Vùng dữ liệu chồng lấn với vùng mã băm.\n" + +#: lib/setup.c:2016 +#, fuzzy +msgid "Data area overlaps with FEC area." +msgstr "Vùng dữ liệu chồng lấn với vùng mã băm.\n" + +#: lib/setup.c:2221 +#, fuzzy, c-format +msgid "Unknown crypt device type %s requested." +msgstr "Không rõ kiểu thiết bị mã hóa %s được yêu cầu.\n" + +#: lib/setup.c:2485 lib/setup.c:2557 lib/setup.c:2570 +#, fuzzy, c-format +msgid "Unsupported parameters on device %s." +msgstr "Không thể tẩy xóa phần đầu trên thiết bị %s.\n" + +#: lib/setup.c:2491 lib/setup.c:2576 lib/luks2/luks2_reencrypt.c:2408 +#: lib/luks2/luks2_reencrypt.c:2718 +#, fuzzy, c-format +msgid "Mismatching parameters on device %s." +msgstr "Không thể tẩy xóa phần đầu trên thiết bị %s.\n" + +#: lib/setup.c:2596 +msgid "Crypt devices mismatch." +msgstr "" + +#: lib/setup.c:2633 lib/setup.c:2638 lib/luks2/luks2_reencrypt.c:2054 +#: lib/luks2/luks2_reencrypt.c:3126 +#, fuzzy, c-format +msgid "Failed to reload device %s." +msgstr "Không thể đọc thiết bị %s.\n" + +#: lib/setup.c:2643 lib/setup.c:2648 lib/luks2/luks2_reencrypt.c:2025 +#: lib/luks2/luks2_reencrypt.c:2032 +#, fuzzy, c-format +msgid "Failed to suspend device %s." +msgstr "Gặp lỗi khi mở tập tin khóa.\n" + +#: lib/setup.c:2653 lib/luks2/luks2_reencrypt.c:2039 +#: lib/luks2/luks2_reencrypt.c:3061 lib/luks2/luks2_reencrypt.c:3130 +#, fuzzy, c-format +msgid "Failed to resume device %s." +msgstr "Không thể đọc thiết bị %s.\n" + +#: lib/setup.c:2667 +#, c-format +msgid "Fatal error while reloading device %s (on top of device %s)." +msgstr "" + +#: lib/setup.c:2670 lib/setup.c:2672 +#, fuzzy, c-format +msgid "Failed to switch device %s to dm-error." +msgstr "Lỗi lấy thư mục trình ánh xạ thiết bị." + +#: lib/setup.c:2744 +#, fuzzy +msgid "Cannot resize loop device." +msgstr "Không thể đổi cỡ thiết bị vòng ngược (loopback).\n" + +#: lib/setup.c:2817 +msgid "Do you really want to change UUID of device?" +msgstr "Bạn có thực sự muốn thay đổi UUID cho thiết bị?" + +#: lib/setup.c:2893 +#, fuzzy +msgid "Header backup file does not contain compatible LUKS header." +msgstr "Tập tin sao lưu không chứa phần đầu LUKS hợp lệ.\n" + +#: lib/setup.c:2993 +#, fuzzy, c-format +msgid "Volume %s is not active." +msgstr "Khối tin %s không hoạt động.\n" + +#: lib/setup.c:3004 +#, fuzzy, c-format +msgid "Volume %s is already suspended." +msgstr "Khối %s đã bị ngưng.\n" + +#: lib/setup.c:3017 +#, fuzzy, c-format +msgid "Suspend is not supported for device %s." +msgstr "Tạm dừng không được hỗ trợ cho kiểu thiết bị %s.\n" + +#: lib/setup.c:3019 +#, fuzzy, c-format +msgid "Error during suspending device %s." +msgstr "Gặp lỗi khi tạm dừng thiết bị %s.\n" + +#: lib/setup.c:3052 lib/setup.c:3119 +#, fuzzy, c-format +msgid "Volume %s is not suspended." +msgstr "Vùng %s không bị treo.\n" + +#: lib/setup.c:3081 +#, fuzzy, c-format +msgid "Resume is not supported for device %s." +msgstr "Thao tác phục hồi không được hỗ trợ cho kiểu thiết bị %s.\n" + +#: lib/setup.c:3083 lib/setup.c:3151 +#, fuzzy, c-format +msgid "Error during resuming device %s." +msgstr "Gặp lỗi khi cho hoạt động trở lại thiết bị %s.\n" + +#: lib/setup.c:3219 lib/setup.c:3407 +#, fuzzy +msgid "Cannot add key slot, all slots disabled and no volume key provided." +msgstr "Không thể thêm khe khóa vì mọi khe đều bị tắt và không cung cấp khóa khối tin.\n" + +#: lib/setup.c:3359 +#, fuzzy +msgid "Failed to swap new key slot." +msgstr "Gặp lỗi khi hoán đổi khe khóa mới.\n" + +#: lib/setup.c:3524 lib/setup.c:4161 lib/setup.c:4174 lib/setup.c:4182 +#: lib/setup.c:4195 lib/setup.c:4480 lib/setup.c:5593 +#, fuzzy +msgid "Volume key does not match the volume." +msgstr "Khóa khối tin không tương ứng với khối tin đó.\n" + +#: lib/setup.c:3545 +#, fuzzy, c-format +msgid "Key slot %d is invalid." +msgstr "Khe khóa %d không đúng.\n" + +#: lib/setup.c:3551 src/cryptsetup.c:1511 src/cryptsetup.c:1856 +#, fuzzy, c-format +msgid "Keyslot %d is not active." +msgstr "Khe khóa %d không được dùng.\n" + +#: lib/setup.c:3570 +#, fuzzy +msgid "Device header overlaps with data area." +msgstr "Vùng dữ liệu chồng lấn với vùng mã băm.\n" + +#: lib/setup.c:3836 +msgid "Reencryption in-progress. Cannot activate device." +msgstr "" + +#: lib/setup.c:3838 lib/luks2/luks2_json_metadata.c:2244 +#: lib/luks2/luks2_reencrypt.c:2817 +#, fuzzy +msgid "Failed to get reencryption lock." +msgstr "Không đọc được tập tin nhật ký reencryption.\n" + +#: lib/setup.c:3851 lib/luks2/luks2_reencrypt.c:2836 +#, fuzzy +msgid "LUKS2 reencryption recovery failed." +msgstr "Không mở được tập tin nhật ký reencryption.\n" + +#: lib/setup.c:3978 lib/setup.c:4248 +#, fuzzy +msgid "Device type is not properly initialised." +msgstr "Kiểu thiết bị gần như chắc chắn là chưa được thiết lập.\n" + +#: lib/setup.c:4022 +#, fuzzy, c-format +msgid "Cannot use device %s, name is invalid or still in use." +msgstr "Không thể định dạng thiết bị %s mà nó lại vẫn đang được sử dụng.\n" + +#: lib/setup.c:4025 +#, fuzzy, c-format +msgid "Device %s already exists." +msgstr "Thiết bị %s đã sẵn có.\n" + +#: lib/setup.c:4148 +#, fuzzy +msgid "Incorrect volume key specified for plain device." +msgstr "Khóa vùng chứa đã chỉ định không đúng cho thiết bị thường.\n" + +#: lib/setup.c:4214 +#, fuzzy +msgid "Incorrect root hash specified for verity device." +msgstr "Mã băm gốc đã chỉ định không đúng cho thiết bị chứng thực (verity).\n" + +#: lib/setup.c:4289 lib/setup.c:4305 lib/luks2/luks2_json_metadata.c:2297 +#: src/cryptsetup.c:2527 +#, fuzzy, c-format +msgid "Device %s is still in use." +msgstr "Thiết bị %s vẫn đang được sử dụng.\n" + +#: lib/setup.c:4314 +#, fuzzy, c-format +msgid "Invalid device %s." +msgstr "Thiết bị không đúng %s.\n" + +#: lib/setup.c:4430 +#, fuzzy +msgid "Volume key buffer too small." +msgstr "Vùng đệm khóa khối tin quá nhỏ.\n" + +#: lib/setup.c:4438 +#, fuzzy +msgid "Cannot retrieve volume key for plain device." +msgstr "Không thể lấy khóa khối tin cho thiết bị bình thường.\n" + +#: lib/setup.c:4449 +#, fuzzy, c-format +msgid "This operation is not supported for %s crypt device." +msgstr "Thao tác này không được hỗ trợ cho thiết bị mã hóa %s.\n" + +#: lib/setup.c:4636 +#, fuzzy +msgid "Dump operation is not supported for this device type." +msgstr "Thao tác đổ đống (dump) không được hỗ trợ cho kiểu thiết bị này.\n" + +#: lib/setup.c:4947 +#, c-format +msgid "Data offset is not multiple of %u bytes." +msgstr "" + +#: lib/setup.c:5229 +#, fuzzy, c-format +msgid "Cannot convert device %s which is still in use." +msgstr "Không thể định dạng thiết bị %s mà nó lại vẫn đang được sử dụng.\n" + +#: lib/setup.c:5526 +#, c-format +msgid "Failed to assign keyslot %u as the new volume key." +msgstr "" + +#: lib/setup.c:5599 +msgid "Failed to initialise default LUKS2 keyslot parameters." +msgstr "" + +#: lib/setup.c:5605 +#, fuzzy, c-format +msgid "Failed to assign keyslot %d to digest." +msgstr "Gặp lỗi khi hoán đổi khe khóa mới.\n" + +#: lib/setup.c:5690 +#, fuzzy +msgid "Failed to load key in kernel keyring." +msgstr "Gặp lỗi khi mở tập tin khóa.\n" + +#: lib/setup.c:5757 +#, fuzzy +msgid "Kernel keyring is not supported by the kernel." +msgstr "Thao tác này không được hỗ trợ cho kiểu thiết bị này.\n" + +#: lib/setup.c:5767 lib/luks2/luks2_reencrypt.c:2933 +#, fuzzy, c-format +msgid "Failed to read passphrase from keyring (error %d)." +msgstr "Lỗi đọc từ kho lưu khóa.\n" + +#: lib/setup.c:5791 +msgid "Failed to acquire global memory-hard access serialization lock." +msgstr "" + +#: lib/utils.c:81 +#, fuzzy +msgid "Cannot get process priority." +msgstr "Không thể lấy mức ưu tiên của tiến trình.\n" + +#: lib/utils.c:95 +#, fuzzy +msgid "Cannot unlock memory." +msgstr "Không thể mở khóa bộ nhớ.\n" + +#: lib/utils.c:169 lib/tcrypt/tcrypt.c:498 +#, fuzzy +msgid "Failed to open key file." +msgstr "Gặp lỗi khi mở tập tin khóa.\n" + +#: lib/utils.c:174 +#, fuzzy +msgid "Cannot read keyfile from a terminal." +msgstr "Không thể đọc tập-tin khóa %s.\n" + +#: lib/utils.c:191 +#, fuzzy +msgid "Failed to stat key file." +msgstr "Gặp lỗi khi lấy thông tin tập tin khóa.\n" + +#: lib/utils.c:199 lib/utils.c:220 +#, fuzzy +msgid "Cannot seek to requested keyfile offset." +msgstr "Không thể di chuyển vị trí đầu đọc tới vị trí tương đối (offset) tập tin khóa đã yêu cầu.\n" + +#: lib/utils.c:214 lib/utils.c:229 src/utils_password.c:188 +#: src/utils_password.c:201 +#, fuzzy +msgid "Out of memory while reading passphrase." +msgstr "Tràn bộ nhớ trong khi đọc cụm từ mật khẩu.\n" + +#: lib/utils.c:249 +#, fuzzy +msgid "Error reading passphrase." +msgstr "Lỗi đọc cụm từ mật khẩu.\n" + +#: lib/utils.c:266 +msgid "Nothing to read on input." +msgstr "" + +#: lib/utils.c:273 +#, fuzzy +msgid "Maximum keyfile size exceeded." +msgstr "Đã vượt quá kích thước tập tin khóa tối đa.\n" + +#: lib/utils.c:278 +#, fuzzy +msgid "Cannot read requested amount of data." +msgstr "Không thể đọc đống dữ liệu đã yêu cầu.\n" + +#: lib/utils_device.c:188 lib/utils_storage_wrappers.c:111 +#: lib/luks1/keyencryption.c:92 +#, fuzzy, c-format +msgid "Device %s doesn't exist or access denied." +msgstr "Thiết bị %s không tồn tại hoặc không đủ quyền truy cập.\n" + +#: lib/utils_device.c:198 +#, fuzzy, c-format +msgid "Device %s is not compatible." +msgstr "Thiết bị %s không hoạt động.\n" + +#: lib/utils_device.c:643 +#, fuzzy, c-format +msgid "Device %s is too small. Need at least % bytes." +msgstr "Thiết bị %s quá nhỏ. (LUKS cần ít nhất % byte.)\n" + +#: lib/utils_device.c:724 +#, fuzzy, c-format +msgid "Cannot use device %s which is in use (already mapped or mounted)." +msgstr "Không thể sử dụng thiết bị %s mà nó lại đang được sử dụng (đang được ánh xạ hoặc gắn).\n" + +#: lib/utils_device.c:728 +#, fuzzy, c-format +msgid "Cannot use device %s, permission denied." +msgstr "Không thể ghi thiết bị %s, không đủ thẩm quyền.\n" + +#: lib/utils_device.c:731 +#, fuzzy, c-format +msgid "Cannot get info about device %s." +msgstr "Không thể lấy thông tin về thiết bị %s.\n" + +#: lib/utils_device.c:754 +#, fuzzy +msgid "Cannot use a loopback device, running as non-root user." +msgstr "Không thể sử dụng thiết-bị vòng ngược (loopback), do không chạy dưới quyền siêu người dùng.\n" + +#: lib/utils_device.c:764 +#, fuzzy +msgid "Attaching loopback device failed (loop device with autoclear flag is required)." +msgstr "Gặp lỗi khi gắn thiết bị vòng ngược (loopback) (thiết bị lặp với cờ autoclear là bắt buộc).\n" + +#: lib/utils_device.c:810 +#, fuzzy, c-format +msgid "Requested offset is beyond real size of device %s." +msgstr "Khoảng bù (offset) đã yêu cầu nằm ngoài kích thước thật của thiết bị %s.\n" + +#: lib/utils_device.c:818 +#, fuzzy, c-format +msgid "Device %s has zero size." +msgstr "Thiết bị %s có kích cỡ là không.\n" + +#: lib/utils_pbkdf.c:100 +msgid "Requested PBKDF target time cannot be zero." +msgstr "" + +#: lib/utils_pbkdf.c:106 +#, c-format +msgid "Unknown PBKDF type %s." +msgstr "" + +#: lib/utils_pbkdf.c:111 +#, fuzzy, c-format +msgid "Requested hash %s is not supported." +msgstr "Không hỗ trợ chuỗi duy nhất LUKS %s được yêu cầu.\n" + +#: lib/utils_pbkdf.c:122 +#, fuzzy +msgid "Requested PBKDF type is not supported for LUKS1." +msgstr "Không hỗ trợ chuỗi duy nhất LUKS %s được yêu cầu.\n" + +#: lib/utils_pbkdf.c:128 +msgid "PBKDF max memory or parallel threads must not be set with pbkdf2." +msgstr "" + +#: lib/utils_pbkdf.c:133 lib/utils_pbkdf.c:143 +#, c-format +msgid "Forced iteration count is too low for %s (minimum is %u)." +msgstr "" + +#: lib/utils_pbkdf.c:148 +#, c-format +msgid "Forced memory cost is too low for %s (minimum is %u kilobytes)." +msgstr "" + +#: lib/utils_pbkdf.c:155 +#, c-format +msgid "Requested maximum PBKDF memory cost is too high (maximum is %d kilobytes)." +msgstr "" + +#: lib/utils_pbkdf.c:160 +msgid "Requested maximum PBKDF memory cannot be zero." +msgstr "" + +#: lib/utils_pbkdf.c:164 +msgid "Requested PBKDF parallel threads cannot be zero." +msgstr "" + +#: lib/utils_pbkdf.c:184 +msgid "Only PBKDF2 is supported in FIPS mode." +msgstr "" + +#: lib/utils_benchmark.c:166 +msgid "PBKDF benchmark disabled but iterations not set." +msgstr "" + +#: lib/utils_benchmark.c:185 +#, fuzzy, c-format +msgid "Not compatible PBKDF2 options (using hash algorithm %s)." +msgstr "Gặp các tùy chọn PBKDF2 không tương thích (dùng thuật toán chuỗi duy nhất %s).\n" + +#: lib/utils_benchmark.c:205 +#, fuzzy +msgid "Not compatible PBKDF options." +msgstr "Gặp các tùy chọn PBKDF2 không tương thích (dùng thuật toán chuỗi duy nhất %s).\n" + +#: lib/utils_device_locking.c:103 +#, c-format +msgid "Locking aborted. The locking path %s/%s is unusable (not a directory or missing)." +msgstr "" + +#: lib/utils_device_locking.c:110 +#, c-format +msgid "WARNING: Locking directory %s/%s is missing!\n" +msgstr "" + +#: lib/utils_device_locking.c:120 +#, c-format +msgid "Locking aborted. The locking path %s/%s is unusable (%s is not a directory)." +msgstr "" + +#: lib/utils_wipe.c:185 src/cryptsetup_reencrypt.c:933 +#: src/cryptsetup_reencrypt.c:1017 +#, fuzzy +msgid "Cannot seek to device offset." +msgstr "Không thể di chuyển vị trí tới vị trí tương đối thiết bị.\n" + +#: lib/utils_wipe.c:209 +#, c-format +msgid "Device wipe error, offset %." +msgstr "" + +#: lib/luks1/keyencryption.c:40 +#, fuzzy, c-format +msgid "" +"Failed to setup dm-crypt key mapping for device %s.\n" +"Check that kernel supports %s cipher (check syslog for more info)." +msgstr "" +"Gặp lỗi khi cài đặt ánh xạ khóa dm-crypt cho thiết bị %s.\n" +"Kiểm tra lại hạt nhân hỗ trợ mật mã %s (kiểu tra sổ theo dõi hệ thống để tìm thêm thông tin.)\n" + +#: lib/luks1/keyencryption.c:45 +#, fuzzy +msgid "Key size in XTS mode must be 256 or 512 bits." +msgstr "Kích thước khóa trong chế độ “XTS” phải là 256 hay 512 bit.\n" + +#: lib/luks1/keyencryption.c:47 +msgid "Cipher specification should be in [cipher]-[mode]-[iv] format." +msgstr "" + +#: lib/luks1/keyencryption.c:98 lib/luks1/keymanage.c:345 +#: lib/luks1/keymanage.c:636 lib/luks1/keymanage.c:1074 +#: lib/luks2/luks2_json_metadata.c:1253 lib/luks2/luks2_keyslot.c:739 +#, fuzzy, c-format +msgid "Cannot write to device %s, permission denied." +msgstr "Không thể ghi thiết bị %s, không đủ thẩm quyền.\n" + +#: lib/luks1/keyencryption.c:121 +#, fuzzy +msgid "Failed to open temporary keystore device." +msgstr "Gặp lỗi khi mở thiết bị lưu trữ khóa tạm thời.\n" + +#: lib/luks1/keyencryption.c:128 +#, fuzzy +msgid "Failed to access temporary keystore device." +msgstr "Gl khi truy cập đến thiết bị lưu trữ khóa tạm thời.\n" + +#: lib/luks1/keyencryption.c:201 lib/luks2/luks2_keyslot_luks2.c:60 +#: lib/luks2/luks2_keyslot_luks2.c:78 lib/luks2/luks2_keyslot_reenc.c:134 +#, fuzzy +msgid "IO error while encrypting keyslot." +msgstr "Lỗi IO (vào/ra) trong quá trình mã hóa khe khóa.\n" + +#: lib/luks1/keyencryption.c:247 lib/luks1/keymanage.c:348 +#: lib/luks1/keymanage.c:589 lib/luks1/keymanage.c:639 lib/tcrypt/tcrypt.c:661 +#: lib/verity/verity.c:81 lib/verity/verity.c:179 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:1256 +#: src/cryptsetup_reencrypt.c:205 +#, fuzzy, c-format +msgid "Cannot open device %s." +msgstr "Không thể mở thiết bị %s.\n" + +#: lib/luks1/keyencryption.c:258 lib/luks2/luks2_keyslot_luks2.c:137 +#, fuzzy +msgid "IO error while decrypting keyslot." +msgstr "Lỗi IO (vào/ra) trong quá trình giải mã khe khóa.\n" + +#: lib/luks1/keymanage.c:111 +#, fuzzy, c-format +msgid "Device %s is too small. (LUKS1 requires at least % bytes.)" +msgstr "Thiết bị %s quá nhỏ. (LUKS cần ít nhất % byte.)\n" + +#: 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 +#, fuzzy, c-format +msgid "LUKS keyslot %u is invalid." +msgstr "khe-khóa LUKS %u là không hợp lệ.\n" + +#: lib/luks1/keymanage.c:229 lib/luks1/keymanage.c:473 +#: lib/luks2/luks2_json_metadata.c:1084 src/cryptsetup.c:1372 +#: src/cryptsetup.c:1498 src/cryptsetup.c:1555 src/cryptsetup.c:1611 +#: src/cryptsetup.c:1678 src/cryptsetup.c:1781 src/cryptsetup.c:1845 +#: src/cryptsetup.c:2005 src/cryptsetup.c:2194 src/cryptsetup.c:2254 +#: src/cryptsetup.c:2320 src/cryptsetup.c:2484 src/cryptsetup.c:3137 +#: src/cryptsetup.c:3146 src/cryptsetup_reencrypt.c:1372 +#, fuzzy, c-format +msgid "Device %s is not a valid LUKS device." +msgstr "Thiết bị %s không phải là một thiết bị kiểu LUKS đúng.\n" + +#: lib/luks1/keymanage.c:247 lib/luks2/luks2_json_metadata.c:1101 +#, fuzzy, c-format +msgid "Requested header backup file %s already exists." +msgstr "Phần đầu tập tin sao lưu dự phòng đã yêu cầu %s đã sẵn có.\n" + +#: lib/luks1/keymanage.c:249 lib/luks2/luks2_json_metadata.c:1103 +#, fuzzy, c-format +msgid "Cannot create header backup file %s." +msgstr "Không thể tạo phần đầu của tập tin sao lưu dự phòng %s.\n" + +#: lib/luks1/keymanage.c:256 lib/luks2/luks2_json_metadata.c:1110 +#, fuzzy, c-format +msgid "Cannot write header backup file %s." +msgstr "Không thể ghi tập tin sao lưu phần đầu %s.\n" + +#: lib/luks1/keymanage.c:287 lib/luks2/luks2_json_metadata.c:1162 +#, fuzzy +msgid "Backup file doesn't contain valid LUKS header." +msgstr "Tập tin sao lưu không chứa phần đầu LUKS hợp lệ.\n" + +#: lib/luks1/keymanage.c:300 lib/luks1/keymanage.c:550 +#: lib/luks2/luks2_json_metadata.c:1183 +#, fuzzy, c-format +msgid "Cannot open header backup file %s." +msgstr "Không mở được tập tin sao lưu phần đầu %s.\n" + +#: lib/luks1/keymanage.c:308 lib/luks2/luks2_json_metadata.c:1191 +#, fuzzy, c-format +msgid "Cannot read header backup file %s." +msgstr "Không đọc được tập tin sao lưu phần đầu %s.\n" + +#: lib/luks1/keymanage.c:318 +#, fuzzy +msgid "Data offset or key size differs on device and backup, restore failed." +msgstr "Khoảng bù dữ liệu hoặc kích cỡ khóa vẫn khác nhau trên thiết bị và bản sao lưu thì chức năng phục hồi bị lỗi.\n" + +#: lib/luks1/keymanage.c:326 +#, c-format +msgid "Device %s %s%s" +msgstr "Thiết bị %s %s%s" + +#: lib/luks1/keymanage.c:327 +msgid "does not contain LUKS header. Replacing header can destroy data on that device." +msgstr "không chứa phần đầu LUKS. Thay thế phần đầu thì cũng có thể hủy dữ liệu trên thiết bị đó." + +#: lib/luks1/keymanage.c:328 +msgid "already contains LUKS header. Replacing header will destroy existing keyslots." +msgstr "đã chứa phần đầu LUKS. Thay thế phần đầu thì cũng hủy các khe khóa đã có." + +#: lib/luks1/keymanage.c:329 lib/luks2/luks2_json_metadata.c:1225 +msgid "" +"\n" +"WARNING: real device header has different UUID than backup!" +msgstr "" +"\n" +"CẢNH BÁO: phần đầu thiết bị thật có mã số “UUID” khác với bản sao lưu!" + +#: lib/luks1/keymanage.c:376 +#, fuzzy +msgid "Non standard key size, manual repair required." +msgstr "Kích thước khóa không tiêu chuẩn, yêu cầu sửa chữa bằng tay.\n" + +#: lib/luks1/keymanage.c:381 +#, fuzzy +msgid "Non standard keyslots alignment, manual repair required." +msgstr "Không thể đồng chỉnh các khe khóa (keyslot) tiêu chuẩn, yêu cầu sửa chữa bằng tay.\n" + +#: lib/luks1/keymanage.c:391 +#, fuzzy +msgid "Repairing keyslots." +msgstr "Đang chuẩn bị các khe khóa (keyslots).\n" + +#: lib/luks1/keymanage.c:410 +#, fuzzy, c-format +msgid "Keyslot %i: offset repaired (%u -> %u)." +msgstr "Khe-khóa (keyslot) %i: khoảng bù (offset) được sửa chữa (%u -> %u).\n" + +#: lib/luks1/keymanage.c:418 +#, fuzzy, c-format +msgid "Keyslot %i: stripes repaired (%u -> %u)." +msgstr "Khe-khóa (keyslot) %i: stripes được sửa chữa (%u -> %u).\n" + +#: lib/luks1/keymanage.c:427 +#, fuzzy, c-format +msgid "Keyslot %i: bogus partition signature." +msgstr "Khe-khóa (keyslot) %i: chữ ký phân vùng không có thật.\n" + +#: lib/luks1/keymanage.c:432 +#, fuzzy, c-format +msgid "Keyslot %i: salt wiped." +msgstr "Khe-khóa (keyslot) %i: muối bị tẩy xóa.\n" + +#: lib/luks1/keymanage.c:449 +#, fuzzy +msgid "Writing LUKS header to disk." +msgstr "Đang ghi phần đầu của LUKS lên đĩa.\n" + +#: lib/luks1/keymanage.c:454 +msgid "Repair failed." +msgstr "Gặp lỗi khi sửa chữa." + +#: lib/luks1/keymanage.c:482 lib/luks1/keymanage.c:751 +#, fuzzy, c-format +msgid "Requested LUKS hash %s is not supported." +msgstr "Không hỗ trợ chuỗi duy nhất LUKS %s được yêu cầu.\n" + +#: lib/luks1/keymanage.c:510 src/cryptsetup.c:1081 +#, fuzzy +msgid "No known problems detected for LUKS header." +msgstr "Không phát hiện thấy vấn đề với phần đầu LUKS.\n" + +#: lib/luks1/keymanage.c:661 +#, fuzzy, c-format +msgid "Error during update of LUKS header on device %s." +msgstr "Gặp lỗi trong khi cập nhật phần đầu LUKS trên thiết bị %s.\n" + +#: lib/luks1/keymanage.c:669 +#, fuzzy, c-format +msgid "Error re-reading LUKS header after update on device %s." +msgstr "Gặp lỗi trong khi đọc lại phần đầu LUKS sau khi cập nhật trên thiết bị %s.\n" + +#: lib/luks1/keymanage.c:745 +#, fuzzy +msgid "Data offset for LUKS header must be either 0 or higher than header size." +msgstr "Khoảng bù dữ liệu cho phần đầu LUKS tách rời phải hoặc là 0 hoặc là lớn hơn kích thước phần đầu (%d cung từ).\n" + +#: lib/luks1/keymanage.c:756 lib/luks1/keymanage.c:821 +#: lib/luks2/luks2_json_format.c:283 lib/luks2/luks2_json_metadata.c:1002 +#: src/cryptsetup.c:2647 +#, fuzzy +msgid "Wrong LUKS UUID format provided." +msgstr "Đưa ra định dạng mã số UUID LUKS không đúng.\n" + +#: lib/luks1/keymanage.c:779 +#, fuzzy +msgid "Cannot create LUKS header: reading random salt failed." +msgstr "Không thể tạo phần đầu LUKS: lỗi đọc salt ngẫu nhiên.\n" + +#: lib/luks1/keymanage.c:800 +#, fuzzy, c-format +msgid "Cannot create LUKS header: header digest failed (using hash %s)." +msgstr "Không thể tạo phần đầu LUKS: lỗi tạo bản tóm tắt (dùng chuỗi duy nhất %s).\n" + +#: lib/luks1/keymanage.c:844 +#, fuzzy, c-format +msgid "Key slot %d active, purge first." +msgstr "Khe khóa %d vẫn hoạt động: cần tẩy trước.\n" + +#: lib/luks1/keymanage.c:850 +#, fuzzy, c-format +msgid "Key slot %d material includes too few stripes. Header manipulation?" +msgstr "Nguyên liệu khe khóa %d gồm có quá ít sọc. Có nên thao tác phần đầu không?\n" + +#: lib/luks1/keymanage.c:1060 +#, fuzzy, c-format +msgid "Key slot %d is invalid, please select keyslot between 0 and %d." +msgstr "Khe khóa %d không đúng: hãy chọn khe khóa trong phạm vi 0 đến %d.\n" + +#: lib/luks1/keymanage.c:1078 lib/luks2/luks2_keyslot.c:743 +#, fuzzy, c-format +msgid "Cannot wipe device %s." +msgstr "Không thể tẩy thiết bị %s.\n" + +#: lib/loopaes/loopaes.c:146 +#, fuzzy +msgid "Detected not yet supported GPG encrypted keyfile." +msgstr "Tìm thấy tập tin khóa mã hóa GPG vẫn chưa được hỗ trợ.\n" + +#: lib/loopaes/loopaes.c:147 +msgid "Please use gpg --decrypt | cryptsetup --keyfile=- ...\n" +msgstr "Hãy dùng gpg --decrypt | cryptsetup --keyfile=- …\n" + +#: lib/loopaes/loopaes.c:168 lib/loopaes/loopaes.c:188 +#, fuzzy +msgid "Incompatible loop-AES keyfile detected." +msgstr "Tập tin khóa (keyfile) loop-AES không tương thích được tìm thấy.\n" + +#: lib/loopaes/loopaes.c:245 +#, fuzzy +msgid "Kernel doesn't support loop-AES compatible mapping." +msgstr "Nhân không hỗ trợ ánh xạ tương thích loop-AES.\n" + +#: lib/tcrypt/tcrypt.c:505 +#, fuzzy, c-format +msgid "Error reading keyfile %s." +msgstr "Gặp lỗi khi đọc tập-tin khóa %s.\n" + +#: lib/tcrypt/tcrypt.c:545 +#, fuzzy, c-format +msgid "Maximum TCRYPT passphrase length (%d) exceeded." +msgstr "Độ dài cụm từ mật khẩu TCRYPT tối đa (%d) đã bị vượt quá.\n" + +#: lib/tcrypt/tcrypt.c:586 +#, fuzzy, c-format +msgid "PBKDF2 hash algorithm %s not available, skipping." +msgstr "Thuật toán băm PBKDF2 không khả dụng %s, bỏ qua.\n" + +#: lib/tcrypt/tcrypt.c:602 src/cryptsetup.c:959 +#, fuzzy +msgid "Required kernel crypto interface not available." +msgstr "Giao diện mã hóa từ nhân đã yêu cầu không khả dụng.\n" + +#: lib/tcrypt/tcrypt.c:604 src/cryptsetup.c:961 +#, fuzzy +msgid "Ensure you have algif_skcipher kernel module loaded." +msgstr "Bạn cần chắc chắn là mô-đun nhân algif_skcipher đã được tải.\n" + +#: lib/tcrypt/tcrypt.c:744 +#, fuzzy, c-format +msgid "Activation is not supported for %d sector size." +msgstr "Hoạt hóa không được hỗ trợ cho kích thước cung %d.\n" + +#: lib/tcrypt/tcrypt.c:750 +#, fuzzy +msgid "Kernel doesn't support activation for this TCRYPT legacy mode." +msgstr "Nhân không hỗ trợ hoạt hóa cho chế độ cũ của TCRYPT.\n" + +#: lib/tcrypt/tcrypt.c:784 +#, fuzzy, c-format +msgid "Activating TCRYPT system encryption for partition %s." +msgstr "Đang kích hoạt mã hóa hệ thống TCRYPT cho phân vùng %s.\n" + +#: lib/tcrypt/tcrypt.c:862 +#, fuzzy +msgid "Kernel doesn't support TCRYPT compatible mapping." +msgstr "Nhân không hỗ trợ ánh xạ tương thích TCRYPT.\n" + +#: lib/tcrypt/tcrypt.c:1084 +msgid "This function is not supported without TCRYPT header load." +msgstr "Chức năng này không được hỗ trợ mà không có phần tải đầu TCRYPT." + +#: lib/verity/verity.c:69 lib/verity/verity.c:172 +#, fuzzy, c-format +msgid "Verity device %s doesn't use on-disk header." +msgstr "Thiết bị xác thực %s không sử dụng phần đầu on-disk.\n" + +#: lib/verity/verity.c:91 +#, fuzzy, c-format +msgid "Device %s is not a valid VERITY device." +msgstr "Thiết bị %s không phải là thiết bị VERITY thích hợp.\n" + +#: lib/verity/verity.c:98 +#, fuzzy, c-format +msgid "Unsupported VERITY version %d." +msgstr "Không hỗ trợ phiên bản VERITY %d.\n" + +#: lib/verity/verity.c:129 +#, fuzzy +msgid "VERITY header corrupted." +msgstr "phần đầu VERITY sai hỏng.\n" + +#: lib/verity/verity.c:166 +#, fuzzy, c-format +msgid "Wrong VERITY UUID format provided on device %s." +msgstr "Đưa ra định dạng mã số VERITY không đúng trên thiết bị %s.\n" + +#: lib/verity/verity.c:199 +#, fuzzy, c-format +msgid "Error during update of verity header on device %s." +msgstr "Gặp lỗi trong khi cập nhật phần đầu xác thực trên thiết bị %s.\n" + +#: lib/verity/verity.c:262 +msgid "Errors cannot be repaired with FEC device." +msgstr "" + +#: lib/verity/verity.c:264 +#, c-format +msgid "Found %u repairable errors with FEC device." +msgstr "" + +#: lib/verity/verity.c:302 +#, fuzzy +msgid "Kernel doesn't support dm-verity mapping." +msgstr "Nhân không hỗ trợ ánh xạ dm-verity.\n" + +#: lib/verity/verity.c:313 +#, fuzzy +msgid "Verity device detected corruption after activation." +msgstr "Thiết bị xác thực đã được phát hiện sai hỏng sau khi hoạt hóa.\n" + +#: lib/verity/verity_hash.c:59 +#, fuzzy, c-format +msgid "Spare area is not zeroed at position %." +msgstr "Vùng để dành không được điền đầy bằng số không tại vị trí %.\n" + +#: lib/verity/verity_hash.c:160 lib/verity/verity_hash.c:287 +#: lib/verity/verity_hash.c:300 +#, fuzzy +msgid "Device offset overflow." +msgstr "Khoảng bù (offset) thiết bị bị tràn.\n" + +#: lib/verity/verity_hash.c:200 +#, fuzzy, c-format +msgid "Verification failed at position %." +msgstr "Thẩm tra gặp lỗi tại vị trí %.\n" + +#: lib/verity/verity_hash.c:273 +#, fuzzy +msgid "Invalid size parameters for verity device." +msgstr "Các tham số kích thước cho thiết bị xác thực không hợp lệ.\n" + +#: lib/verity/verity_hash.c:293 +msgid "Hash area overflow." +msgstr "" + +#: lib/verity/verity_hash.c:370 +#, fuzzy +msgid "Verification of data area failed." +msgstr "Việc thẩm tra vùng dữ liệu gặp lỗi.\n" + +#: lib/verity/verity_hash.c:375 +#, fuzzy +msgid "Verification of root hash failed." +msgstr "Việc thẩm tra mã băm gốc gặp lỗi.\n" + +#: lib/verity/verity_hash.c:381 +#, fuzzy +msgid "Input/output error while creating hash area." +msgstr "Lỗi Vào/Ra trong khi đang tạo vùng băm.\n" + +#: lib/verity/verity_hash.c:383 +#, fuzzy +msgid "Creation of hash area failed." +msgstr "Việc tạo vùng dữ liệu băm gặp lỗi.\n" + +#: lib/verity/verity_hash.c:430 +#, fuzzy, c-format +msgid "WARNING: Kernel cannot activate device if data block size exceeds page size (%u)." +msgstr "CẢNH BÁO: Nhân (kernel) không thể kích hoạt thiết bị nếu kích thước khối dữ liệu vượt quá kích cỡ trang (%u).\n" + +#: lib/verity/verity_fec.c:132 +msgid "Failed to allocate RS context." +msgstr "" + +#: lib/verity/verity_fec.c:147 +#, fuzzy +msgid "Failed to allocate buffer." +msgstr "Gặp lỗi khi lấy thông tin tập tin khóa.\n" + +#: lib/verity/verity_fec.c:157 +#, c-format +msgid "Failed to read RS block % byte %d." +msgstr "" + +#: lib/verity/verity_fec.c:170 +#, c-format +msgid "Failed to read parity for RS block %." +msgstr "" + +#: lib/verity/verity_fec.c:178 +#, c-format +msgid "Failed to repair parity for block %." +msgstr "" + +#: lib/verity/verity_fec.c:189 +#, c-format +msgid "Failed to write parity for RS block %." +msgstr "" + +#: lib/verity/verity_fec.c:224 +msgid "Block sizes must match for FEC." +msgstr "" + +#: lib/verity/verity_fec.c:230 +msgid "Invalid number of parity bytes." +msgstr "" + +#: lib/verity/verity_fec.c:266 +#, fuzzy, c-format +msgid "Failed to determine size for device %s." +msgstr "Gặp lỗi khi mở thiết bị lưu trữ khóa tạm thời.\n" + +#: lib/integrity/integrity.c:241 lib/integrity/integrity.c:306 +#, fuzzy +msgid "Kernel doesn't support dm-integrity mapping." +msgstr "Nhân không hỗ trợ ánh xạ dm-verity.\n" + +#: lib/luks2/luks2_disk_metadata.c:383 lib/luks2/luks2_json_metadata.c:959 +#: lib/luks2/luks2_json_metadata.c:1245 +#, fuzzy, c-format +msgid "Failed to acquire write lock on device %s." +msgstr "Gl khi truy cập đến thiết bị lưu trữ khóa tạm thời.\n" + +#: lib/luks2/luks2_disk_metadata.c:392 +msgid "Detected attempt for concurrent LUKS2 metadata update. Aborting operation." +msgstr "" + +#: 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 "" + +#: lib/luks2/luks2_json_format.c:227 +#, fuzzy +msgid "Requested data offset is too small." +msgstr "Thiết bị %s có kích cỡ quá nhỏ.\n" + +#: lib/luks2/luks2_json_format.c:271 +#, c-format +msgid "WARNING: keyslots area (% bytes) is very small, available LUKS2 keyslot count is very limited.\n" +msgstr "" + +#: lib/luks2/luks2_json_metadata.c:946 lib/luks2/luks2_json_metadata.c:1075 +#: lib/luks2/luks2_json_metadata.c:1151 lib/luks2/luks2_keyslot_luks2.c:92 +#: lib/luks2/luks2_keyslot_luks2.c:114 +#, fuzzy, c-format +msgid "Failed to acquire read lock on device %s." +msgstr "Gl khi truy cập đến thiết bị lưu trữ khóa tạm thời.\n" + +#: lib/luks2/luks2_json_metadata.c:1168 +#, c-format +msgid "Forbidden LUKS2 requirements detected in backup %s." +msgstr "" + +#: lib/luks2/luks2_json_metadata.c:1209 +#, fuzzy +msgid "Data offset differ on device and backup, restore failed." +msgstr "Khoảng bù dữ liệu hoặc kích cỡ khóa vẫn khác nhau trên thiết bị và bản sao lưu thì chức năng phục hồi bị lỗi.\n" + +#: lib/luks2/luks2_json_metadata.c:1215 +#, fuzzy +msgid "Binary header with keyslot areas size differ on device and backup, restore failed." +msgstr "Khoảng bù dữ liệu hoặc kích cỡ khóa vẫn khác nhau trên thiết bị và bản sao lưu thì chức năng phục hồi bị lỗi.\n" + +#: lib/luks2/luks2_json_metadata.c:1222 +#, fuzzy, c-format +msgid "Device %s %s%s%s%s" +msgstr "Thiết bị %s %s%s" + +#: lib/luks2/luks2_json_metadata.c:1223 +#, fuzzy +msgid "does not contain LUKS2 header. Replacing header can destroy data on that device." +msgstr "không chứa phần đầu LUKS. Thay thế phần đầu thì cũng có thể hủy dữ liệu trên thiết bị đó." + +#: lib/luks2/luks2_json_metadata.c:1224 +#, fuzzy +msgid "already contains LUKS2 header. Replacing header will destroy existing keyslots." +msgstr "đã chứa phần đầu LUKS. Thay thế phần đầu thì cũng hủy các khe khóa đã có." + +#: lib/luks2/luks2_json_metadata.c:1226 +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:1228 +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:1324 +#, c-format +msgid "Ignored unknown flag %s." +msgstr "" + +#: lib/luks2/luks2_json_metadata.c:2011 lib/luks2/luks2_reencrypt.c:1746 +#, c-format +msgid "Missing key for dm-crypt segment %u" +msgstr "" + +#: lib/luks2/luks2_json_metadata.c:2023 lib/luks2/luks2_reencrypt.c:1764 +#, fuzzy +msgid "Failed to set dm-crypt segment." +msgstr "Gặp lỗi khi lấy thông tin tập tin khóa.\n" + +#: lib/luks2/luks2_json_metadata.c:2029 lib/luks2/luks2_reencrypt.c:1770 +msgid "Failed to set dm-linear segment." +msgstr "" + +#: lib/luks2/luks2_json_metadata.c:2156 +msgid "Unsupported device integrity configuration." +msgstr "" + +#: lib/luks2/luks2_json_metadata.c:2242 +msgid "Reencryption in-progress. Cannot deactivate device." +msgstr "" + +#: lib/luks2/luks2_json_metadata.c:2253 lib/luks2/luks2_reencrypt.c:3171 +#, c-format +msgid "Failed to replace suspended device %s with dm-error target." +msgstr "" + +#: lib/luks2/luks2_json_metadata.c:2333 +msgid "Failed to read LUKS2 requirements." +msgstr "" + +#: lib/luks2/luks2_json_metadata.c:2340 +msgid "Unmet LUKS2 requirements detected." +msgstr "" + +#: lib/luks2/luks2_json_metadata.c:2348 +msgid "Offline reencryption in progress. Aborting." +msgstr "" + +#: lib/luks2/luks2_json_metadata.c:2350 +msgid "Online reencryption in progress. Aborting." +msgstr "" + +#: lib/luks2/luks2_keyslot.c:552 lib/luks2/luks2_keyslot.c:589 +msgid "Not enough available memory to open a keyslot." +msgstr "" + +#: lib/luks2/luks2_keyslot.c:554 lib/luks2/luks2_keyslot.c:591 +#, fuzzy +msgid "Keyslot open failed." +msgstr "Khe khóa %d được thẩm định.\n" + +#: 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 "" + +#: lib/luks2/luks2_keyslot_luks2.c:480 +#, fuzzy +msgid "No space for new keyslot." +msgstr "Gặp lỗi khi hoán đổi khe khóa mới.\n" + +#: lib/luks2/luks2_luks1_convert.c:481 +#, fuzzy, c-format +msgid "Cannot check status of device with uuid: %s." +msgstr "Không thể kiểm tra chất lượng mật khẩu: %s\n" + +#: lib/luks2/luks2_luks1_convert.c:507 +msgid "Unable to convert header with LUKSMETA additional metadata." +msgstr "" + +#: lib/luks2/luks2_luks1_convert.c:547 +msgid "Unable to move keyslot area. Not enough space." +msgstr "" + +#: lib/luks2/luks2_luks1_convert.c:590 lib/luks2/luks2_luks1_convert.c:872 +#, fuzzy +msgid "Unable to move keyslot area." +msgstr "Gặp lỗi khi mở tập tin khóa.\n" + +#: lib/luks2/luks2_luks1_convert.c:682 +msgid "Cannot convert to LUKS1 format - default segment encryption sector size is not 512 bytes." +msgstr "" + +#: lib/luks2/luks2_luks1_convert.c:690 +msgid "Cannot convert to LUKS1 format - key slot digests are not LUKS1 compatible." +msgstr "" + +#: lib/luks2/luks2_luks1_convert.c:702 +#, c-format +msgid "Cannot convert to LUKS1 format - device uses wrapped key cipher %s." +msgstr "" + +#: lib/luks2/luks2_luks1_convert.c:710 +#, c-format +msgid "Cannot convert to LUKS1 format - LUKS2 header contains %u token(s)." +msgstr "" + +#: lib/luks2/luks2_luks1_convert.c:724 +#, c-format +msgid "Cannot convert to LUKS1 format - keyslot %u is in invalid state." +msgstr "" + +#: lib/luks2/luks2_luks1_convert.c:729 +#, c-format +msgid "Cannot convert to LUKS1 format - slot %u (over maximum slots) is still active." +msgstr "" + +#: lib/luks2/luks2_luks1_convert.c:734 +#, c-format +msgid "Cannot convert to LUKS1 format - keyslot %u is not LUKS1 compatible." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:892 +#, c-format +msgid "Hotzone size must be multiple of calculated zone alignment (%zu bytes)." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:897 +#, fuzzy, c-format +msgid "Device size must be multiple of calculated zone alignment (%zu bytes)." +msgstr "Kích cỡ giảm phải là bội số cung từ (sector) 512 byte" + +#: lib/luks2/luks2_reencrypt.c:941 +#, fuzzy, c-format +msgid "Unsupported resilience mode %s" +msgstr "Phiên bản LUKS không được hỗ trợ %d.\n" + +#: lib/luks2/luks2_reencrypt.c:1158 lib/luks2/luks2_reencrypt.c:1313 +#: lib/luks2/luks2_reencrypt.c:1396 lib/luks2/luks2_reencrypt.c:1430 +#: lib/luks2/luks2_reencrypt.c:3011 +#, fuzzy +msgid "Failed to initialize old segment storage wrapper." +msgstr "Lỗi ghi khóa vào kho lưu khóa.\n" + +#: lib/luks2/luks2_reencrypt.c:1172 lib/luks2/luks2_reencrypt.c:1291 +#, fuzzy +msgid "Failed to initialize new segment storage wrapper." +msgstr "Lỗi ghi khóa vào kho lưu khóa.\n" + +#: lib/luks2/luks2_reencrypt.c:1340 +#, fuzzy +msgid "Failed to read checksums for current hotzone." +msgstr "Lỗi đọc từ kho lưu khóa.\n" + +#: lib/luks2/luks2_reencrypt.c:1347 lib/luks2/luks2_reencrypt.c:3019 +#, fuzzy, c-format +msgid "Failed to read hotzone area starting at %." +msgstr "Vùng để dành không được điền đầy bằng số không tại vị trí %.\n" + +#: lib/luks2/luks2_reencrypt.c:1366 +#, fuzzy, c-format +msgid "Failed to decrypt sector %zu." +msgstr "Lỗi đọc từ kho lưu khóa.\n" + +#: lib/luks2/luks2_reencrypt.c:1372 +#, fuzzy, c-format +msgid "Failed to recover sector %zu." +msgstr "Lỗi ghi khóa vào kho lưu khóa.\n" + +#: lib/luks2/luks2_reencrypt.c:1867 +#, c-format +msgid "Source and target device sizes don't match. Source %, target: %." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:1965 +#, fuzzy, c-format +msgid "Failed to activate hotzone device %s." +msgstr "Gl khi truy cập đến thiết bị lưu trữ khóa tạm thời.\n" + +#: lib/luks2/luks2_reencrypt.c:1982 +#, c-format +msgid "Failed to activate overlay device %s with actual origin table." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:1989 +#, fuzzy, c-format +msgid "Failed to load new mapping for device %s." +msgstr "Gặp lỗi khi mở thiết bị lưu trữ khóa tạm thời.\n" + +#: lib/luks2/luks2_reencrypt.c:2060 +msgid "Failed to refresh reencryption devices stack." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:2216 +#, fuzzy +msgid "Failed to set new keyslots area size." +msgstr "Gặp lỗi khi hoán đổi khe khóa mới.\n" + +#: lib/luks2/luks2_reencrypt.c:2318 +#, c-format +msgid "Data shift is not aligned to requested encryption sector size (% bytes)." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:2339 +#, c-format +msgid "Data device is not aligned to requested encryption sector size (% bytes)." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:2360 +#, c-format +msgid "Data shift (% sectors) is less than future data offset (% sectors)." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:2366 lib/luks2/luks2_reencrypt.c:2760 +#: lib/luks2/luks2_reencrypt.c:2781 +#, fuzzy, c-format +msgid "Failed to open %s in exclusive mode (already mapped or mounted)." +msgstr "Không thể sử dụng thiết bị %s mà nó lại đang được sử dụng (đang được ánh xạ hoặc gắn).\n" + +#: lib/luks2/luks2_reencrypt.c:2534 +#, fuzzy +msgid "No LUKS2 reencryption in progress." +msgstr "Không thể dùng UUID chuyển qua trừ khi việc giải mã đang được thực hiện.\n" + +#: lib/luks2/luks2_reencrypt.c:2540 lib/luks2/luks2_reencrypt.c:3276 +msgid "Failed to load LUKS2 reencryption context." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:2600 +#, fuzzy +msgid "Failed to get reencryption state." +msgstr "Lỗi ghi khóa vào kho lưu khóa.\n" + +#: lib/luks2/luks2_reencrypt.c:2604 +#, fuzzy +msgid "Device is not in reencryption." +msgstr "Thiết bị %s không hoạt động.\n" + +#: lib/luks2/luks2_reencrypt.c:2611 +msgid "Reencryption process is already running." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:2613 +#, fuzzy +msgid "Failed to acquire reencryption lock." +msgstr "Không đọc được tập tin nhật ký reencryption.\n" + +#: lib/luks2/luks2_reencrypt.c:2631 +msgid "Cannot proceed with reencryption. Run reencryption recovery first." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:2731 +msgid "Active device size and requested reencryption size don't match." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:2745 +msgid "Illegal device size requested in reencryption parameters." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:2815 +msgid "Reencryption in-progress. Cannot perform recovery." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:2887 +msgid "LUKS2 reencryption already initialized in metadata." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:2894 +msgid "Failed to initialize LUKS2 reencryption in metadata." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:2985 +msgid "Failed to set device segments for next reencryption hotzone." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:3027 +#, fuzzy +msgid "Failed to write reencryption resilience metadata." +msgstr "Không thể ghi tập tin nhật ký reencryption (mã hóa lại).\n" + +#: lib/luks2/luks2_reencrypt.c:3034 +#, fuzzy +msgid "Decryption failed." +msgstr "Gặp lỗi khi sửa chữa." + +#: lib/luks2/luks2_reencrypt.c:3039 +#, fuzzy, c-format +msgid "Failed to write hotzone area starting at %." +msgstr "Lỗi ghi khóa vào kho lưu khóa.\n" + +#: lib/luks2/luks2_reencrypt.c:3044 +#, fuzzy +msgid "Failed to sync data." +msgstr "Gặp lỗi khi lấy thông tin tập tin khóa.\n" + +#: lib/luks2/luks2_reencrypt.c:3052 +msgid "Failed to update metadata after current reencryption hotzone completed." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:3119 +#, fuzzy +msgid "Failed to write LUKS2 metadata." +msgstr "Lỗi ghi khóa vào kho lưu khóa.\n" + +#: lib/luks2/luks2_reencrypt.c:3142 +msgid "Failed to wipe backup segment data." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:3155 +msgid "Failed to disable reencryption requirement flag." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:3163 +#, c-format +msgid "Fatal error while reencrypting chunk starting at %, % sectors long." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:3172 +msgid "Do not resume the device unless replaced with error target manually." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:3221 +msgid "Cannot proceed with reencryption. Unexpected reencryption status." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:3227 +msgid "Missing or invalid reencrypt context." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:3234 +#, fuzzy +msgid "Failed to initialize reencryption device stack." +msgstr "Không thể khởi ứng dụng mã hóa chạy ở phía sau (backend).\n" + +#: lib/luks2/luks2_reencrypt.c:3253 lib/luks2/luks2_reencrypt.c:3289 +#, fuzzy +msgid "Failed to update reencryption context." +msgstr "Không mở được tập tin nhật ký reencryption.\n" + +#: lib/luks2/luks2_token.c:262 +msgid "No free token slot." +msgstr "" + +#: lib/luks2/luks2_token.c:269 +#, fuzzy, c-format +msgid "Failed to create builtin token %s." +msgstr "Lỗi ghi khóa vào kho lưu khóa.\n" + +#: src/cryptsetup.c:162 +#, fuzzy +msgid "Can't do passphrase verification on non-tty inputs." +msgstr "Không thể thẩm tra cụm từ mật khẩu trên đầu vào khác TTY.\n" + +#: src/cryptsetup.c:215 +#, fuzzy +msgid "Keyslot encryption parameters can be set only for LUKS2 device." +msgstr "Thao tác này được hỗ trợ chỉ cho thiết bị LUKS.\n" + +#: src/cryptsetup.c:245 src/cryptsetup.c:893 src/cryptsetup.c:1212 +#: src/cryptsetup.c:3011 src/cryptsetup_reencrypt.c:715 +#: src/cryptsetup_reencrypt.c:785 +#, fuzzy +msgid "No known cipher specification pattern detected." +msgstr "Không phát hiện mẫu đặc tả mã hóa đã biết.\n" + +#: src/cryptsetup.c:253 +msgid "WARNING: The --hash parameter is being ignored in plain mode with keyfile specified.\n" +msgstr "CẢNH BÁO: Tham số --hash bị bỏ qua trong chế độ thường với tập tin khóa đã cho.\n" + +#: src/cryptsetup.c:261 +msgid "WARNING: The --keyfile-size option is being ignored, the read size is the same as the encryption key size.\n" +msgstr "CẢNH BÁO: Đang bỏ qua các tùy chọn kích thước tập-tin-khóa --keyfile-size --, kích thước đọc giống với kích thước khóa mã hóa.\n" + +#: src/cryptsetup.c:301 +#, c-format +msgid "Detected device signature(s) on %s. Proceeding further may damage existing data." +msgstr "" + +#: src/cryptsetup.c:307 src/cryptsetup.c:1038 src/cryptsetup.c:1090 +#: src/cryptsetup.c:1189 src/cryptsetup.c:1262 src/cryptsetup.c:1913 +#: src/cryptsetup.c:2545 src/cryptsetup.c:2668 src/integritysetup.c:232 +msgid "Operation aborted.\n" +msgstr "" + +#: src/cryptsetup.c:375 +#, fuzzy +msgid "Option --key-file is required." +msgstr "Cần tùy chọn “--key-file”.\n" + +#: src/cryptsetup.c:428 +msgid "Enter VeraCrypt PIM: " +msgstr "" + +#: src/cryptsetup.c:437 +msgid "Invalid PIM value: parse error." +msgstr "" + +#: src/cryptsetup.c:440 +#, fuzzy +msgid "Invalid PIM value: 0." +msgstr "Thiết bị không đúng %s.\n" + +#: src/cryptsetup.c:443 +msgid "Invalid PIM value: outside of range." +msgstr "" + +#: src/cryptsetup.c:466 +#, fuzzy +msgid "No device header detected with this passphrase." +msgstr "Không có phần đầu thiết bị cho cụm từ mật khẩu này.\n" + +#: src/cryptsetup.c:528 src/cryptsetup.c:1940 +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 "" +"Đổ đống phần đầu với khóa vùng chứa là thông tin phân biệt hoa thường\n" +"cái mà cho phép truy cập phân vùng được mã hóa mà không cần mật khẩu.\n" +"Việc đổ đống này nên luôn được lưu trữ mã hóa tại một nơi an toàn." + +#: src/cryptsetup.c:607 +#, c-format +msgid "Device %s is still active and scheduled for deferred removal.\n" +msgstr "" + +#: src/cryptsetup.c:635 +msgid "Resize of active device requires volume key in keyring but --disable-keyring option is set." +msgstr "" + +#: src/cryptsetup.c:771 +#, fuzzy +msgid "Benchmark interrupted." +msgstr "đo kiểm tốc độ mã hóa" + +#: src/cryptsetup.c:792 +#, c-format +msgid "PBKDF2-%-9s N/A\n" +msgstr "" + +#: src/cryptsetup.c:794 +#, c-format +msgid "PBKDF2-%-9s %7u iterations per second for %zu-bit key\n" +msgstr "" + +#: src/cryptsetup.c:808 +#, c-format +msgid "%-10s N/A\n" +msgstr "" + +#: src/cryptsetup.c:810 +#, 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:834 +#, fuzzy +msgid "Result of benchmark is not reliable." +msgstr "Kết quả đo kiểm không đáng tin cậy.\n" + +#: src/cryptsetup.c:885 +msgid "# Tests are approximate using memory only (no storage IO).\n" +msgstr "# Các kiểm tra là chỉ ước lượng việc sử dụng bộ nhớ (không tính IO ổ đĩa).\n" + +#. TRANSLATORS: The string is header of a table and must be exactly (right side) aligned. +#: src/cryptsetup.c:919 +#, fuzzy, c-format +msgid "#%*s Algorithm | Key | Encryption | Decryption\n" +msgstr "# Thuật toán| Khóa| Mã hóa | Giải mã\n" + +#: src/cryptsetup.c:923 +#, fuzzy, c-format +msgid "Cipher %s is not available." +msgstr "Mã hóa kiểu %s không sẵn có.\n" + +#. TRANSLATORS: The string is header of a table and must be exactly (right side) aligned. +#: src/cryptsetup.c:943 +#, fuzzy +msgid "# Algorithm | Key | Encryption | Decryption\n" +msgstr "# Thuật toán| Khóa| Mã hóa | Giải mã\n" + +#: src/cryptsetup.c:952 +msgid "N/A" +msgstr "N/A" + +#: src/cryptsetup.c:1031 +msgid "" +"Seems device does not require reencryption recovery.\n" +"Do you want to proceed anyway?" +msgstr "" + +#: src/cryptsetup.c:1037 +msgid "Really proceed with LUKS2 reencryption recovery?" +msgstr "" + +#: src/cryptsetup.c:1046 +#, fuzzy +msgid "Enter passphrase for reencryption recovery: " +msgstr "Gõ cụm từ mật khẩu cho khe khóa %u: " + +#: src/cryptsetup.c:1089 +msgid "Really try to repair LUKS device header?" +msgstr "Bạn có thực sự muốn thử sửa chữa phần đầu thiết bị LUKS không?" + +#: src/cryptsetup.c:1108 src/integritysetup.c:145 +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:1130 src/integritysetup.c:167 +#, fuzzy, c-format +msgid "Cannot deactivate temporary device %s." +msgstr "Không thể r thiết bị LUKS tạm thời.\n" + +#: src/cryptsetup.c:1174 +msgid "Integrity option can be used only for LUKS2 format." +msgstr "" + +#: src/cryptsetup.c:1179 src/cryptsetup.c:1239 +#, fuzzy +msgid "Unsupported LUKS2 metadata size options." +msgstr "Phiên bản LUKS không được hỗ trợ %d.\n" + +#: src/cryptsetup.c:1196 +#, fuzzy, c-format +msgid "Cannot create header file %s." +msgstr "Không thể tạo phần đầu của tập tin sao lưu dự phòng %s.\n" + +#: src/cryptsetup.c:1219 src/integritysetup.c:194 src/integritysetup.c:203 +#: src/integritysetup.c:212 src/integritysetup.c:279 src/integritysetup.c:288 +#: src/integritysetup.c:298 +#, fuzzy +msgid "No known integrity specification pattern detected." +msgstr "Không phát hiện mẫu đặc tả mã hóa đã biết.\n" + +#: src/cryptsetup.c:1232 +#, fuzzy, c-format +msgid "Cannot use %s as on-disk header." +msgstr "Không thể sử dụng %s như là phần đầu on-disk.\n" + +#: src/cryptsetup.c:1256 src/integritysetup.c:226 +#, c-format +msgid "This will overwrite data on %s irrevocably." +msgstr "Thao tác này sẽ ghi đè lên dữ liệu trên thiết bị %s một cách không phục hồi được." + +#: src/cryptsetup.c:1297 src/cryptsetup.c:1627 src/cryptsetup.c:1694 +#: src/cryptsetup.c:1796 src/cryptsetup.c:1862 src/cryptsetup_reencrypt.c:545 +#, fuzzy +msgid "Failed to set pbkdf parameters." +msgstr "Gặp lỗi khi lấy thông tin tập tin khóa.\n" + +#: src/cryptsetup.c:1378 +#, fuzzy +msgid "Reduced data offset is allowed only for detached LUKS header." +msgstr "Giảm khoảng bù (offset) dữ liệu chỉ cho phép khi phần đầu LUKS được tách rời.\n" + +#: src/cryptsetup.c:1389 src/cryptsetup.c:1700 +msgid "Cannot determine volume key size for LUKS without keyslots, please use --key-size option." +msgstr "" + +#: src/cryptsetup.c:1427 +msgid "Device activated but cannot make flags persistent." +msgstr "" + +#: src/cryptsetup.c:1508 src/cryptsetup.c:1578 +#, fuzzy, c-format +msgid "Keyslot %d is selected for deletion." +msgstr "Khe khóa %d đã được chọn để xóa.\n" + +#: src/cryptsetup.c:1520 src/cryptsetup.c:1581 +msgid "This is the last keyslot. Device will become unusable after purging this key." +msgstr "Đây là khe khóa cuối cùng. Sau khi tẩy khóa này thì thiết bị không dùng được." + +#: src/cryptsetup.c:1521 +msgid "Enter any remaining passphrase: " +msgstr "Gõ cụm từ mật khẩu bất kỳ còn lại: " + +#: src/cryptsetup.c:1522 src/cryptsetup.c:1583 +msgid "Operation aborted, the keyslot was NOT wiped.\n" +msgstr "" + +#: src/cryptsetup.c:1560 +msgid "Enter passphrase to be deleted: " +msgstr "Gõ cụm từ mật khẩu cần xóa: " + +#: src/cryptsetup.c:1641 src/cryptsetup.c:1715 src/cryptsetup.c:1749 +msgid "Enter new passphrase for key slot: " +msgstr "Gõ cụm từ mật khẩu mới cho khe khóa: " + +#: src/cryptsetup.c:1732 src/cryptsetup_reencrypt.c:1327 +#, c-format +msgid "Enter any existing passphrase: " +msgstr "Hãy nhập mật khẩu bất kỳ sẵn có: " + +#: src/cryptsetup.c:1800 +msgid "Enter passphrase to be changed: " +msgstr "Gõ cụm từ mật khẩu cần được thay đổi: " + +#: src/cryptsetup.c:1816 src/cryptsetup_reencrypt.c:1313 +msgid "Enter new passphrase: " +msgstr "Gõ cụm từ mật khẩu mới: " + +#: src/cryptsetup.c:1866 +#, fuzzy +msgid "Enter passphrase for keyslot to be converted: " +msgstr "Gõ cụm từ mật khẩu cho khe khóa %u: " + +#: src/cryptsetup.c:1890 +#, fuzzy +msgid "Only one device argument for isLuks operation is supported." +msgstr "Chỉ hỗ trợ một đối số thiết-bị dành cho thao tác isLuks.\n" + +#: src/cryptsetup.c:2074 src/cryptsetup.c:2095 +#, fuzzy +msgid "Option --header-backup-file is required." +msgstr "Cần tùy chọn“--header-backup-file”.\n" + +#: src/cryptsetup.c:2125 +#, c-format +msgid "%s is not cryptsetup managed device." +msgstr "" + +#: src/cryptsetup.c:2136 +#, fuzzy, c-format +msgid "Refresh is not supported for device type %s" +msgstr "Thao tác phục hồi không được hỗ trợ cho kiểu thiết bị %s.\n" + +#: src/cryptsetup.c:2174 +#, fuzzy, c-format +msgid "Unrecognized metadata device type %s." +msgstr "Không nhận ra siêu dữ liệu của kiểu thiết bị %s.\n" + +#: src/cryptsetup.c:2177 +#, fuzzy +msgid "Command requires device and mapped name as arguments." +msgstr "Lệnh cần thiết bị và tên ánh xạ như là các tham số.\n" + +#: src/cryptsetup.c:2199 +#, c-format +msgid "" +"This operation will erase all keyslots on device %s.\n" +"Device will become unusable after this operation." +msgstr "" +"Thao tác này sẽ tẩy mọi khe khóa trên thiết bị %s.\n" +"Thiết bị sẽ không dùng được sau thao tác này." + +#: src/cryptsetup.c:2206 +msgid "Operation aborted, keyslots were NOT wiped.\n" +msgstr "" + +#: src/cryptsetup.c:2243 +msgid "Invalid LUKS type, only luks1 and luks2 are supported." +msgstr "" + +#: src/cryptsetup.c:2261 +#, fuzzy, c-format +msgid "Device is already %s type." +msgstr "Thiết bị %s đã sẵn có.\n" + +#: src/cryptsetup.c:2266 +#, fuzzy, c-format +msgid "This operation will convert %s to %s format.\n" +msgstr "Thao tác này không được hỗ trợ cho thiết bị mã hóa %s.\n" + +#: src/cryptsetup.c:2272 +msgid "Operation aborted, device was NOT converted.\n" +msgstr "" + +#: src/cryptsetup.c:2312 +msgid "Option --priority, --label or --subsystem is missing." +msgstr "" + +#: src/cryptsetup.c:2346 src/cryptsetup.c:2379 src/cryptsetup.c:2402 +#, fuzzy, c-format +msgid "Token %d is invalid." +msgstr "Khe khóa %d không đúng.\n" + +#: src/cryptsetup.c:2349 src/cryptsetup.c:2405 +#, c-format +msgid "Token %d in use." +msgstr "" + +#: src/cryptsetup.c:2356 +#, fuzzy, c-format +msgid "Failed to add luks2-keyring token %d." +msgstr "Lỗi đọc từ kho lưu khóa.\n" + +#: src/cryptsetup.c:2365 src/cryptsetup.c:2427 +#, fuzzy, c-format +msgid "Failed to assign token %d to keyslot %d." +msgstr "Lỗi ghi khóa vào kho lưu khóa.\n" + +#: src/cryptsetup.c:2382 +#, fuzzy, c-format +msgid "Token %d is not in use." +msgstr "Khe khóa %d không được dùng.\n" + +#: src/cryptsetup.c:2417 +#, fuzzy +msgid "Failed to import token from file." +msgstr "Gặp lỗi khi mở tập tin khóa.\n" + +#: src/cryptsetup.c:2442 +#, fuzzy, c-format +msgid "Failed to get token %d for export." +msgstr "Lỗi ghi khóa vào kho lưu khóa.\n" + +#: src/cryptsetup.c:2457 +msgid "--key-description parameter is mandatory for token add action." +msgstr "" + +#: src/cryptsetup.c:2463 src/cryptsetup.c:2471 +msgid "Action requires specific token. Use --token-id parameter." +msgstr "" + +#: src/cryptsetup.c:2476 +#, fuzzy, c-format +msgid "Invalid token operation %s." +msgstr "Kích cỡ khóa không đúng %d.\n" + +#: src/cryptsetup.c:2531 +#, c-format +msgid "Auto-detected active dm device '%s' for data device %s.\n" +msgstr "" + +#: src/cryptsetup.c:2535 +#, fuzzy, c-format +msgid "Device %s is not a block device.\n" +msgstr "Thiết bị %s không phải là một thiết bị kiểu LUKS đúng.\n" + +#: src/cryptsetup.c:2537 +#, fuzzy, c-format +msgid "Failed to auto-detect device %s holders." +msgstr "Lỗi lấy thư mục trình ánh xạ thiết bị." + +#: src/cryptsetup.c:2539 +#, 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 "" + +#: src/cryptsetup.c:2619 +#, fuzzy +msgid "Invalid LUKS device type." +msgstr "Thiết bị không đúng %s.\n" + +#: src/cryptsetup.c:2624 +msgid "Encryption without detached header (--header) is not possible without data device size reduction (--reduce-device-size)." +msgstr "" + +#: src/cryptsetup.c:2629 +msgid "Requested data offset must be less than or equal to half of --reduce-device-size parameter." +msgstr "" + +#: src/cryptsetup.c:2638 +#, c-format +msgid "Adjusting --reduce-device-size value to twice the --offset % (sectors).\n" +msgstr "" + +#: src/cryptsetup.c:2642 +#, fuzzy +msgid "Encryption is supported only for LUKS2 format." +msgstr "Thao tác này được hỗ trợ chỉ cho thiết bị LUKS.\n" + +#: src/cryptsetup.c:2664 +#, c-format +msgid "Detected LUKS device on %s. Do you want to encrypt that LUKS device again?" +msgstr "" + +#: src/cryptsetup.c:2679 +#, fuzzy, c-format +msgid "Temporary header file %s already exists. Aborting." +msgstr "Phần đầu tập tin sao lưu dự phòng đã yêu cầu %s đã sẵn có.\n" + +#: src/cryptsetup.c:2681 src/cryptsetup.c:2688 +#, fuzzy, c-format +msgid "Cannot create temporary header file %s." +msgstr "Không thể tạo phần đầu của tập tin sao lưu dự phòng %s.\n" + +#: src/cryptsetup.c:2752 +#, c-format +msgid "%s/%s is now active and ready for online encryption." +msgstr "" + +#: src/cryptsetup.c:2919 src/cryptsetup.c:2925 +#, fuzzy +msgid "Not enough free keyslots for reencryption." +msgstr "Khôngười thay đổi khóa, không có mã hóa lại vùng dữ liệu." + +#: src/cryptsetup.c:2945 src/cryptsetup_reencrypt.c:1284 +#, fuzzy +msgid "Key file can be used only with --key-slot or with exactly one key slot active." +msgstr "Tập tin khóa có thể sử dụng với tùy chọn --key-slot hoặc với chính xác một khe khóa hoạt động.\n" + +#: src/cryptsetup.c:2954 src/cryptsetup_reencrypt.c:1325 +#: src/cryptsetup_reencrypt.c:1336 +#, fuzzy, c-format +msgid "Enter passphrase for key slot %d: " +msgstr "Gõ cụm từ mật khẩu cho khe khóa %u: " + +#: src/cryptsetup.c:2962 +#, c-format +msgid "Enter passphrase for key slot %u: " +msgstr "Gõ cụm từ mật khẩu cho khe khóa %u: " + +#: src/cryptsetup.c:3129 +#, fuzzy +msgid "Command requires device as argument." +msgstr "Lệnh cần thiết bị và tên ánh xạ như là các tham số.\n" + +#: src/cryptsetup.c:3151 +msgid "Only LUKS2 format is currently supported. Please use cryptsetup-reencrypt tool for LUKS1." +msgstr "" + +#: src/cryptsetup.c:3163 +msgid "Legacy offline reencryption already in-progress. Use cryptsetup-reencrypt utility." +msgstr "" + +#: src/cryptsetup.c:3173 src/cryptsetup_reencrypt.c:178 +msgid "Reencryption of device with integrity profile is not supported." +msgstr "" + +#: src/cryptsetup.c:3181 +msgid "LUKS2 reencryption already initialized. Aborting operation." +msgstr "" + +#: src/cryptsetup.c:3185 +#, fuzzy +msgid "LUKS2 device is not in reencryption." +msgstr "Tập tin nhật ký %s đã có sẵn rồi, giả định là reencryption (mã hóa lại).\n" + +#: src/cryptsetup.c:3212 +msgid " [--type ] []" +msgstr " [--type ] []" + +#: src/cryptsetup.c:3212 src/veritysetup.c:358 src/integritysetup.c:470 +#, fuzzy +msgid "open device as " +msgstr "mở thiết bị như là ánh xạ " + +#: src/cryptsetup.c:3213 src/cryptsetup.c:3214 src/cryptsetup.c:3215 +#: src/veritysetup.c:359 src/veritysetup.c:360 src/integritysetup.c:471 +#: src/integritysetup.c:472 +msgid "" +msgstr "" + +#: src/cryptsetup.c:3213 src/veritysetup.c:359 src/integritysetup.c:471 +msgid "close device (remove mapping)" +msgstr "đóng thiết bị (gỡ bỏ ánh xạ)" + +#: src/cryptsetup.c:3214 +msgid "resize active device" +msgstr "thay đổi kích cỡ của thiết bị hoạt động" + +#: src/cryptsetup.c:3215 +msgid "show device status" +msgstr "hiển thị trạng thái về thiết bị" + +#: src/cryptsetup.c:3216 +msgid "[--cipher ]" +msgstr "[--cipher ]" + +#: src/cryptsetup.c:3216 +msgid "benchmark cipher" +msgstr "đo kiểm tốc độ mã hóa" + +#: src/cryptsetup.c:3217 src/cryptsetup.c:3218 src/cryptsetup.c:3219 +#: src/cryptsetup.c:3220 src/cryptsetup.c:3221 src/cryptsetup.c:3228 +#: src/cryptsetup.c:3229 src/cryptsetup.c:3230 src/cryptsetup.c:3231 +#: src/cryptsetup.c:3232 src/cryptsetup.c:3233 src/cryptsetup.c:3234 +#: src/cryptsetup.c:3235 +msgid "" +msgstr "" + +#: src/cryptsetup.c:3217 +msgid "try to repair on-disk metadata" +msgstr "thử sửa chữa siêu dữ liệu (metadata) on-disk" + +#: src/cryptsetup.c:3218 +#, fuzzy +msgid "reencrypt LUKS2 device" +msgstr "thêm khóa vào thiết bị LUKS" + +#: src/cryptsetup.c:3219 +msgid "erase all keyslots (remove encryption key)" +msgstr "tẩy mọi khe khóa (gỡ bỏ khóa mã hóa)" + +#: src/cryptsetup.c:3220 +msgid "convert LUKS from/to LUKS2 format" +msgstr "" + +#: src/cryptsetup.c:3221 +msgid "set permanent configuration options for LUKS2" +msgstr "" + +#: src/cryptsetup.c:3222 src/cryptsetup.c:3223 +msgid " []" +msgstr " []" + +#: src/cryptsetup.c:3222 +msgid "formats a LUKS device" +msgstr "định dạng một thiết bị kiểu LUKS" + +#: src/cryptsetup.c:3223 +msgid "add key to LUKS device" +msgstr "thêm khóa vào thiết bị LUKS" + +#: src/cryptsetup.c:3224 src/cryptsetup.c:3225 src/cryptsetup.c:3226 +msgid " []" +msgstr " []" + +#: src/cryptsetup.c:3224 +msgid "removes supplied key or key file from LUKS device" +msgstr "gỡ bỏ khỏi thiết bị LUKS khóa hoặc tập tin khóa đưa ra" + +#: src/cryptsetup.c:3225 +msgid "changes supplied key or key file of LUKS device" +msgstr "thay đổi khóa hay tập tin khóa đã áp dụng của thiết bị LUKS" + +#: src/cryptsetup.c:3226 +msgid "converts a key to new pbkdf parameters" +msgstr "" + +#: src/cryptsetup.c:3227 +msgid " " +msgstr " " + +#: src/cryptsetup.c:3227 +msgid "wipes key with number from LUKS device" +msgstr "xóa khỏi thiết bị LUKS khóa có số " + +#: src/cryptsetup.c:3228 +msgid "print UUID of LUKS device" +msgstr "in ra mã số UUID của thiết bị LUKS" + +#: src/cryptsetup.c:3229 +msgid "tests for LUKS partition header" +msgstr "thử có phần đầu phân vùng LUKS không" + +#: src/cryptsetup.c:3230 +msgid "dump LUKS partition information" +msgstr "đổ thông tin về phân vùng LUKS" + +#: src/cryptsetup.c:3231 +msgid "dump TCRYPT device information" +msgstr "dump thông tin thiết bị TCRYPT" + +#: src/cryptsetup.c:3232 +#, fuzzy +msgid "Suspend LUKS device and wipe key (all IOs are frozen)" +msgstr "Ngưng thiết bị LUKS và tẩy khóa (thì mọi việc V/R đều đông cứng)." + +#: src/cryptsetup.c:3233 +#, fuzzy +msgid "Resume suspended LUKS device" +msgstr "Tiếp tục lại sử dụng thiết bị LUKS bị ngưng." + +#: src/cryptsetup.c:3234 +msgid "Backup LUKS device header and keyslots" +msgstr "Sao lưu phần đầu và các khe khóa của thiết bị LUKS" + +#: src/cryptsetup.c:3235 +msgid "Restore LUKS device header and keyslots" +msgstr "Phục hồi phần đầu và các khe khóa của thiết bị LUKS" + +#: src/cryptsetup.c:3236 +msgid " " +msgstr "" + +#: src/cryptsetup.c:3236 +msgid "Manipulate LUKS2 tokens" +msgstr "" + +#: src/cryptsetup.c:3254 src/veritysetup.c:376 src/integritysetup.c:488 +msgid "" +"\n" +" is one of:\n" +msgstr "" +"\n" +" là một trong:\n" + +#: src/cryptsetup.c:3260 +msgid "" +"\n" +"You can also use old syntax aliases:\n" +"\topen: create (plainOpen), luksOpen, loopaesOpen, tcryptOpen\n" +"\tclose: remove (plainClose), luksClose, loopaesClose, tcryptClose\n" +msgstr "" +"\n" +"Bạn còn có thể sử dụng cú pháp bí danh kiểu cũ:\n" +"\topen: create (plainOpen), luksOpen, loopaesOpen, tcryptOpen\n" +"\tclose: remove (plainClose), luksClose, loopaesClose, tcryptClose\n" + +#: src/cryptsetup.c:3264 +#, c-format +msgid "" +"\n" +" is the device to create under %s\n" +" is the encrypted device\n" +" is the LUKS key slot number to modify\n" +" optional key file for the new key for luksAddKey action\n" +msgstr "" +"\n" +" là thiết bị cần tạo dưới %s\n" +" là thiết bị đã mã hóa\n" +" là số thứ tự khe khóa LUKS cần sửa đổi\n" +" là tập tin khóa tùy chọn cho khóa mới trong thao tác luksAddKey\n" + +#: src/cryptsetup.c:3271 +#, c-format +msgid "" +"\n" +"Default compiled-in metadata format is %s (for luksFormat action).\n" +msgstr "" + +#: src/cryptsetup.c:3276 +#, fuzzy, c-format +msgid "" +"\n" +"Default compiled-in key and passphrase parameters:\n" +"\tMaximum keyfile size: %dkB, Maximum interactive passphrase length %d (characters)\n" +"Default PBKDF for LUKS1: %s, iteration time: %d (ms)\n" +"Default PBKDF for LUKS2: %s\n" +"\tIteration time: %d, Memory required: %dkB, Parallel threads: %d\n" +msgstr "" +"\n" +"Các tham số mặc định liên quan đến khóa và mật khẩu được biên dịch sẵn:\n" +"\tĐộ dài tập tin khóa tối đa: %dkB, Độ dài mật khẩu tương tác tối đa %d (ký tự)\n" +"Thời gian tương tác PBKDF2 mặc định cho LUKS: %d (ms)\n" + +#: src/cryptsetup.c:3287 +#, fuzzy, c-format +msgid "" +"\n" +"Default compiled-in device cipher parameters:\n" +"\tloop-AES: %s, Key %d bits\n" +"\tplain: %s, Key: %d bits, Password hashing: %s\n" +"\tLUKS: %s, Key: %d bits, LUKS header hashing: %s, RNG: %s\n" +msgstr "" +"\n" +"Các tham số mặc định liên quan đến việc mã hóa được đặt sẵn:\n" +"\tloop-AES: %s, Khóa %d bit\n" +"\tdữ liệu thô: %s, Khóa: %d bit, Kiểu băm mật khẩu: %s\n" +"\tLUKS1: %s, Khóa: %d bit, Kiểu băm cho phần đầu LUKS: %s, RNG: %s\n" + +#: src/cryptsetup.c:3296 +msgid "\tLUKS: Default keysize with XTS mode (two internal keys) will be doubled.\n" +msgstr "" + +#: src/cryptsetup.c:3312 src/veritysetup.c:532 src/integritysetup.c:630 +#, c-format +msgid "%s: requires %s as arguments" +msgstr "%s: cần thiết %s làm đối số" + +#: src/cryptsetup.c:3350 src/veritysetup.c:421 src/integritysetup.c:527 +#: src/cryptsetup_reencrypt.c:1591 +msgid "Show this help message" +msgstr "Hiển thị trợ giúp này" + +#: src/cryptsetup.c:3351 src/veritysetup.c:422 src/integritysetup.c:528 +#: src/cryptsetup_reencrypt.c:1592 +msgid "Display brief usage" +msgstr "Hiển thị thông tin ngắn về cách sử dụng" + +#: src/cryptsetup.c:3352 src/veritysetup.c:423 src/integritysetup.c:529 +#: src/cryptsetup_reencrypt.c:1593 +msgid "Print package version" +msgstr "Hiển thị phiên bản của gói" + +#: src/cryptsetup.c:3356 src/veritysetup.c:427 src/integritysetup.c:533 +#: src/cryptsetup_reencrypt.c:1597 +msgid "Help options:" +msgstr "Tùy chọn trợ giúp:" + +#: src/cryptsetup.c:3357 src/veritysetup.c:428 src/integritysetup.c:534 +#: src/cryptsetup_reencrypt.c:1598 +msgid "Shows more detailed error messages" +msgstr "Hiển thị các thông điệp lỗi chi tiết hơn" + +#: src/cryptsetup.c:3358 src/veritysetup.c:429 src/integritysetup.c:535 +#: src/cryptsetup_reencrypt.c:1599 +msgid "Show debug messages" +msgstr "Hiển thị thông điệp gỡ lỗi" + +#: src/cryptsetup.c:3359 +#, fuzzy +msgid "Show debug messages including JSON metadata" +msgstr "Hiển thị thông điệp gỡ lỗi" + +#: src/cryptsetup.c:3360 src/cryptsetup_reencrypt.c:1601 +msgid "The cipher used to encrypt the disk (see /proc/crypto)" +msgstr "Mật mã dùng để bảo vệ đĩa (xem “/proc/crypto”)" + +#: src/cryptsetup.c:3361 src/cryptsetup_reencrypt.c:1603 +msgid "The hash used to create the encryption key from the passphrase" +msgstr "Chuỗi duy nhất dùng để tạo khóa mã hóa từ cụm từ mật khẩu" + +#: src/cryptsetup.c:3362 +msgid "Verifies the passphrase by asking for it twice" +msgstr "Thẩm tra cụm từ mật khẩu bằng cách yêu cầu nó hai lần" + +#: src/cryptsetup.c:3363 src/cryptsetup_reencrypt.c:1605 +#, fuzzy +msgid "Read the key from a file" +msgstr "Đọc khóa từ một tập tin." + +#: src/cryptsetup.c:3364 +msgid "Read the volume (master) key from file." +msgstr "Đọc khóa khối tin (chủ) từ tập tin." + +#: src/cryptsetup.c:3365 +#, fuzzy +msgid "Dump volume (master) key instead of keyslots info" +msgstr "Dump (đổ thành đống) khóa vùng chứa (master) thay vì thông tin khe-khóa." + +#: src/cryptsetup.c:3366 src/cryptsetup_reencrypt.c:1602 +msgid "The size of the encryption key" +msgstr "Kích cỡ của khóa mã hóa" + +#: src/cryptsetup.c:3366 src/cryptsetup.c:3425 src/integritysetup.c:553 +#: src/integritysetup.c:557 src/integritysetup.c:561 +#: src/cryptsetup_reencrypt.c:1602 +msgid "BITS" +msgstr "BIT" + +#: src/cryptsetup.c:3367 src/cryptsetup_reencrypt.c:1618 +msgid "Limits the read from keyfile" +msgstr "Giới hạn việc đọc từ tập-tin-khóa" + +#: src/cryptsetup.c:3367 src/cryptsetup.c:3368 src/cryptsetup.c:3369 +#: src/cryptsetup.c:3370 src/cryptsetup.c:3373 src/cryptsetup.c:3422 +#: src/cryptsetup.c:3423 src/cryptsetup.c:3431 src/cryptsetup.c:3432 +#: src/veritysetup.c:432 src/veritysetup.c:433 src/veritysetup.c:434 +#: src/veritysetup.c:437 src/veritysetup.c:438 src/integritysetup.c:542 +#: src/integritysetup.c:548 src/integritysetup.c:549 +#: src/cryptsetup_reencrypt.c:1617 src/cryptsetup_reencrypt.c:1618 +#: src/cryptsetup_reencrypt.c:1619 src/cryptsetup_reencrypt.c:1620 +msgid "bytes" +msgstr "byte" + +#: src/cryptsetup.c:3368 src/cryptsetup_reencrypt.c:1617 +msgid "Number of bytes to skip in keyfile" +msgstr "Số lượng byte nhảy qua trong tập tin khóa" + +#: src/cryptsetup.c:3369 +msgid "Limits the read from newly added keyfile" +msgstr "Giới hạn đọc từ tập tin khóa mới thêm vào" + +#: src/cryptsetup.c:3370 +msgid "Number of bytes to skip in newly added keyfile" +msgstr "Số lượng byte để nhảy qua trong tập tin khóa mới thêm" + +#: src/cryptsetup.c:3371 +msgid "Slot number for new key (default is first free)" +msgstr "Số thứ tự khe cho khóa mới (mặc định là khe trống thứ nhất)" + +#: src/cryptsetup.c:3372 +msgid "The size of the device" +msgstr "Kích cỡ của thiết bị" + +#: src/cryptsetup.c:3372 src/cryptsetup.c:3374 src/cryptsetup.c:3375 +#: src/cryptsetup.c:3381 src/integritysetup.c:543 src/integritysetup.c:550 +msgid "SECTORS" +msgstr "CUNG-TỪ" + +#: src/cryptsetup.c:3373 src/cryptsetup_reencrypt.c:1620 +msgid "Use only specified device size (ignore rest of device). DANGEROUS!" +msgstr "Chỉ sử dụng kích thước dữ liệu thiết bị (bỏ qua phần còn lại của thiết bị). NGUY HIỂM!" + +#: src/cryptsetup.c:3374 +msgid "The start offset in the backend device" +msgstr "Khoảng bù đầu tiên trong thiết bị thật chạy ở phía sau" + +#: src/cryptsetup.c:3375 +msgid "How many sectors of the encrypted data to skip at the beginning" +msgstr "Bao nhiêu cung từ dữ liệu mã hóa cần bỏ qua ở đầu" + +#: src/cryptsetup.c:3376 +msgid "Create a readonly mapping" +msgstr "Tạo một sự ánh xạ chỉ cho đọc" + +#: src/cryptsetup.c:3377 src/integritysetup.c:536 +#: src/cryptsetup_reencrypt.c:1608 +msgid "Do not ask for confirmation" +msgstr "Không cần xác nhận" + +#: src/cryptsetup.c:3378 +msgid "Timeout for interactive passphrase prompt (in seconds)" +msgstr "Thời gian chờ gõ cụm từ mật khẩu tối đa (theo giây)" + +#: src/cryptsetup.c:3378 src/cryptsetup.c:3379 src/integritysetup.c:537 +#: src/cryptsetup_reencrypt.c:1609 +msgid "secs" +msgstr "giây" + +#: src/cryptsetup.c:3379 src/integritysetup.c:537 +#: src/cryptsetup_reencrypt.c:1609 +msgid "Progress line update (in seconds)" +msgstr "" + +#: src/cryptsetup.c:3380 src/cryptsetup_reencrypt.c:1610 +msgid "How often the input of the passphrase can be retried" +msgstr "Số các lần có cho phép thử gõ lại cụm từ mật khẩu" + +#: src/cryptsetup.c:3381 +msgid "Align payload at sector boundaries - for luksFormat" +msgstr "Căn chỉnh trọng tải ở biên giới cung từ — cho định dạng “luksFormat”" + +#: src/cryptsetup.c:3382 +#, fuzzy +msgid "File with LUKS header and keyslots backup" +msgstr "Tập tin chứa bản sao lưu phần đầu và các khe khóa của thiết bị LUKS." + +#: src/cryptsetup.c:3383 src/cryptsetup_reencrypt.c:1611 +#, fuzzy +msgid "Use /dev/random for generating volume key" +msgstr "Dùng /dev/random để tạo khóa volume." + +#: src/cryptsetup.c:3384 src/cryptsetup_reencrypt.c:1612 +#, fuzzy +msgid "Use /dev/urandom for generating volume key" +msgstr "Dùng /dev/urandom để tạo khóa vùng." + +#: src/cryptsetup.c:3385 +#, fuzzy +msgid "Share device with another non-overlapping crypt segment" +msgstr "Thiết bị chia sẻ với đoạn crypt không-chồng-lên-nhau khác." + +#: src/cryptsetup.c:3386 src/veritysetup.c:441 +#, fuzzy +msgid "UUID for device to use" +msgstr "UUID dành cho tập tin sử dụng." + +#: src/cryptsetup.c:3387 +#, fuzzy +msgid "Allow discards (aka TRIM) requests for device" +msgstr "Cho phép hủy bỏ (được biết đến như là TRIM) các yêu cầu cho thiết bị." + +#: src/cryptsetup.c:3388 src/cryptsetup_reencrypt.c:1629 +#, fuzzy +msgid "Device or file with separated LUKS header" +msgstr "Thiết bị hay tập tin với phần đầu LUKS tách nhau." + +#: src/cryptsetup.c:3389 +#, fuzzy +msgid "Do not activate device, just check passphrase" +msgstr "Không kích hoạt thiết bị, chỉ cần kiểm tra mật khẩu." + +#: src/cryptsetup.c:3390 +#, fuzzy +msgid "Use hidden header (hidden TCRYPT device)" +msgstr "Dùng phần đầu ẩn (thiết bị TCRYPT ẩn)." + +#: src/cryptsetup.c:3391 +#, fuzzy +msgid "Device is system TCRYPT drive (with bootloader)" +msgstr "Thiết bị là ổ đĩa TCRYPT hệ thống (có bootloader)." + +#: src/cryptsetup.c:3392 +#, fuzzy +msgid "Use backup (secondary) TCRYPT header" +msgstr "Dùng phần đầu (thứ cấp) TCRYPT." + +#: src/cryptsetup.c:3393 +#, fuzzy +msgid "Scan also for VeraCrypt compatible device" +msgstr "Cũng quét cho thiết bị tương thích VeraCrypt." + +#: src/cryptsetup.c:3394 +#, fuzzy +msgid "Personal Iteration Multiplier for VeraCrypt compatible device" +msgstr "Cũng quét cho thiết bị tương thích VeraCrypt." + +#: src/cryptsetup.c:3395 +#, fuzzy +msgid "Query Personal Iteration Multiplier for VeraCrypt compatible device" +msgstr "Cũng quét cho thiết bị tương thích VeraCrypt." + +#: src/cryptsetup.c:3396 +#, fuzzy +msgid "Type of device metadata: luks, luks1, luks2, plain, loopaes, tcrypt" +msgstr "Kiểu của siêu dữ liệu thiết bị: luks, plain, loopaes, tcrypt." + +#: src/cryptsetup.c:3397 +#, fuzzy +msgid "Disable password quality check (if enabled)" +msgstr "Tắt chức năng kiểm tra chất lượng mật khẩu (nếu nó đang bật)." + +#: src/cryptsetup.c:3398 +#, fuzzy +msgid "Use dm-crypt same_cpu_crypt performance compatibility option" +msgstr "Dùng tùy chọn tương thích hiệu năng same_cpu_crypt dm-crypt." + +#: src/cryptsetup.c:3399 +#, fuzzy +msgid "Use dm-crypt submit_from_crypt_cpus performance compatibility option" +msgstr "Dùng tùy chọn tương thích hiệu năng submit_from_crypt_cpus dm-crypt." + +#: src/cryptsetup.c:3400 +msgid "Device removal is deferred until the last user closes it" +msgstr "" + +#: src/cryptsetup.c:3401 +msgid "Use global lock to serialize memory hard PBKDF (OOM workaround)" +msgstr "" + +#: src/cryptsetup.c:3402 +#, fuzzy +msgid "PBKDF iteration time for LUKS (in ms)" +msgstr "Thời gian lặp lại PBKDF2 cho LUKS (theo mili-giây)" + +#: src/cryptsetup.c:3402 src/cryptsetup_reencrypt.c:1607 +msgid "msecs" +msgstr "mili-giây" + +#: src/cryptsetup.c:3403 src/cryptsetup_reencrypt.c:1625 +msgid "PBKDF algorithm (for LUKS2): argon2i, argon2id, pbkdf2" +msgstr "" + +#: src/cryptsetup.c:3404 src/cryptsetup_reencrypt.c:1626 +msgid "PBKDF memory cost limit" +msgstr "" + +#: src/cryptsetup.c:3404 src/cryptsetup_reencrypt.c:1626 +#, fuzzy +msgid "kilobytes" +msgstr "byte" + +#: src/cryptsetup.c:3405 src/cryptsetup_reencrypt.c:1627 +msgid "PBKDF parallel cost" +msgstr "" + +#: src/cryptsetup.c:3405 src/cryptsetup_reencrypt.c:1627 +msgid "threads" +msgstr "" + +#: src/cryptsetup.c:3406 src/cryptsetup_reencrypt.c:1628 +msgid "PBKDF iterations cost (forced, disables benchmark)" +msgstr "" + +#: src/cryptsetup.c:3407 +msgid "Keyslot priority: ignore, normal, prefer" +msgstr "" + +#: src/cryptsetup.c:3408 +#, fuzzy +msgid "Disable locking of on-disk metadata" +msgstr "thử sửa chữa siêu dữ liệu (metadata) on-disk" + +#: src/cryptsetup.c:3409 +msgid "Disable loading volume keys via kernel keyring" +msgstr "" + +#: src/cryptsetup.c:3410 +msgid "Data integrity algorithm (LUKS2 only)" +msgstr "" + +#: src/cryptsetup.c:3411 src/integritysetup.c:564 +msgid "Disable journal for integrity device" +msgstr "" + +#: src/cryptsetup.c:3412 src/integritysetup.c:538 +msgid "Do not wipe device after format" +msgstr "" + +#: src/cryptsetup.c:3413 +msgid "Do not ask for passphrase if activation by token fails" +msgstr "" + +#: src/cryptsetup.c:3414 +msgid "Token number (default: any)" +msgstr "" + +#: src/cryptsetup.c:3415 +msgid "Key description" +msgstr "" + +#: src/cryptsetup.c:3416 +msgid "Encryption sector size (default: 512 bytes)" +msgstr "" + +#: src/cryptsetup.c:3417 +msgid "Set activation flags persistent for device" +msgstr "" + +#: src/cryptsetup.c:3418 +#, fuzzy +msgid "Set label for the LUKS2 device" +msgstr "định dạng một thiết bị kiểu LUKS" + +#: src/cryptsetup.c:3419 +msgid "Set subsystem label for the LUKS2 device" +msgstr "" + +#: src/cryptsetup.c:3420 +msgid "Create unbound (no assigned data segment) LUKS2 keyslot" +msgstr "" + +#: src/cryptsetup.c:3421 +#, fuzzy +msgid "Read or write the json from or to a file" +msgstr "Đọc khóa từ một tập tin." + +#: src/cryptsetup.c:3422 +msgid "LUKS2 header metadata area size" +msgstr "" + +#: src/cryptsetup.c:3423 +#, fuzzy +msgid "LUKS2 header keyslots area size" +msgstr "Tập tin chứa bản sao lưu phần đầu và các khe khóa của thiết bị LUKS." + +#: src/cryptsetup.c:3424 +msgid "Refresh (reactivate) device with new parameters" +msgstr "" + +#: src/cryptsetup.c:3425 +#, fuzzy +msgid "LUKS2 keyslot: The size of the encryption key" +msgstr "Kích cỡ của khóa mã hóa" + +#: src/cryptsetup.c:3426 +msgid "LUKS2 keyslot: The cipher used for keyslot encryption" +msgstr "" + +#: src/cryptsetup.c:3427 +#, fuzzy +msgid "Encrypt LUKS2 device (in-place encryption)." +msgstr "Thiết bị mã hóa cố định (gỡ bỏ mã hóa)." + +#: src/cryptsetup.c:3428 +#, fuzzy +msgid "Decrypt LUKS2 device (remove encryption)." +msgstr "Thiết bị mã hóa cố định (gỡ bỏ mã hóa)." + +#: src/cryptsetup.c:3429 +msgid "Initialize LUKS2 reencryption in metadata only." +msgstr "" + +#: src/cryptsetup.c:3430 +msgid "Resume initialized LUKS2 reencryption only." +msgstr "" + +#: src/cryptsetup.c:3431 src/cryptsetup_reencrypt.c:1619 +msgid "Reduce data device size (move data offset). DANGEROUS!" +msgstr "Giảm kích thước dữ liệu thiết bị (di chuyển offset dữ liệu). NGUY HIỂM!" + +#: src/cryptsetup.c:3432 +#, fuzzy +msgid "Maximal reencryption hotzone size." +msgstr "Kích thước khối mã hóa lại" + +#: src/cryptsetup.c:3433 +msgid "Reencryption hotzone resilience type (checksum,journal,none)" +msgstr "" + +#: src/cryptsetup.c:3434 +#, fuzzy +msgid "Reencryption hotzone checksums hash" +msgstr "Kích thước khối mã hóa lại" + +#: src/cryptsetup.c:3435 +msgid "Override device autodetection of dm device to be reencrypted" +msgstr "" + +#: src/cryptsetup.c:3451 src/veritysetup.c:462 src/integritysetup.c:583 +msgid "[OPTION...] " +msgstr "[TÙY CHỌN…] <đặc-tả-thao-tác>" + +#: src/cryptsetup.c:3502 src/veritysetup.c:496 src/integritysetup.c:594 +msgid "Argument missing." +msgstr "Còn thiếu đối số ." + +#: src/cryptsetup.c:3565 src/veritysetup.c:527 src/integritysetup.c:625 +msgid "Unknown action." +msgstr "Không hiểu thao-tác." + +#: src/cryptsetup.c:3575 +msgid "Parameter --refresh is only allowed with open or refresh commands.\n" +msgstr "" + +#: src/cryptsetup.c:3580 +msgid "Options --refresh and --test-passphrase are mutually exclusive.\n" +msgstr "" + +#: src/cryptsetup.c:3585 +#, fuzzy +msgid "Option --deferred is allowed only for close command.\n" +msgstr "Tùy chọn “--shared” chỉ cho phép với thao tác tạo mở của thiết bị thường.\n" + +#: src/cryptsetup.c:3590 +msgid "Option --shared is allowed only for open of plain device.\n" +msgstr "Tùy chọn “--shared” chỉ cho phép với thao tác tạo mở của thiết bị thường.\n" + +#: src/cryptsetup.c:3595 +msgid "Option --allow-discards is allowed only for open operation.\n" +msgstr "Tùy chọn “--allow-discards” chỉ cho phép với thao tác mở.\n" + +#: src/cryptsetup.c:3600 +#, fuzzy +msgid "Option --persistent is allowed only for open operation.\n" +msgstr "Tùy chọn “--allow-discards” chỉ cho phép với thao tác mở.\n" + +#: src/cryptsetup.c:3605 +#, fuzzy +msgid "Option --serialize-memory-hard-pbkdf is allowed only for open operation.\n" +msgstr "Tùy chọn “--allow-discards” chỉ cho phép với thao tác mở.\n" + +#: src/cryptsetup.c:3610 +msgid "Option --persistent is not allowed with --test-passphrase.\n" +msgstr "" + +#: src/cryptsetup.c:3620 +#, fuzzy +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 "" +"Tùy chọn --key-size thì chỉ cho phép với các thao tác luksFormat, mở và đo kiểm.\n" +"Để giới hạn đọc từ tập-tin-khóa, hãy sử dụng tùy chọn --keyfile-size=(bytes)." + +#: src/cryptsetup.c:3626 +#, fuzzy +msgid "Option --integrity is allowed only for luksFormat (LUKS2).\n" +msgstr "Tùy chọn “--align-payload” chỉ được phép cho “luksFormat”." + +#: src/cryptsetup.c:3631 +msgid "Option --integrity-no-wipe can be used only for format action with integrity extension.\n" +msgstr "" + +#: src/cryptsetup.c:3637 +#, fuzzy +msgid "Options --label and --subsystem are allowed only for luksFormat and config LUKS2 operations.\n" +msgstr "Tùy chọn “--allow-discards” thì chỉ cho phép với thao tác “luksOpen”, “loopaesOpen” và tạo (create).\n" + +#: src/cryptsetup.c:3643 +msgid "Option --test-passphrase is allowed only for open of LUKS and TCRYPT devices.\n" +msgstr "Tùy chọn “--test-passphrase” chỉ được phép cho lệnh mở thiết bị LUKS và TCRYPT.\n" + +#: src/cryptsetup.c:3648 src/cryptsetup_reencrypt.c:1692 +msgid "Key size must be a multiple of 8 bits" +msgstr "Kích cỡ khóa phải là bội số của 8 bít" + +#: src/cryptsetup.c:3654 src/cryptsetup_reencrypt.c:1378 +#: src/cryptsetup_reencrypt.c:1697 +msgid "Key slot is invalid." +msgstr "Khe khóa không đúng." + +#: src/cryptsetup.c:3661 +#, fuzzy +msgid "Option --key-file takes precedence over specified key file argument." +msgstr "Tùy chọn --key-file giữ quyền ưu tiên cao hơn tham số tập tin khóa đã chỉ định.\n" + +#: src/cryptsetup.c:3668 src/veritysetup.c:539 src/integritysetup.c:649 +#: src/cryptsetup_reencrypt.c:1671 +msgid "Negative number for option not permitted." +msgstr "Tùy chọn không chấp nhận giá trị là số âm." + +#: src/cryptsetup.c:3672 +msgid "Only one --key-file argument is allowed." +msgstr "Chỉ cho phép một tùy chọn --key-file." + +#: src/cryptsetup.c:3676 src/cryptsetup_reencrypt.c:1663 +#: src/cryptsetup_reencrypt.c:1701 +msgid "Only one of --use-[u]random options is allowed." +msgstr "Chỉ cho phép một tùy chọn “--use-[u]random”." + +#: src/cryptsetup.c:3680 +msgid "Option --use-[u]random is allowed only for luksFormat." +msgstr "Tùy chọn “--use-[u]random” chỉ được phép cho “luksFormat”." + +#: src/cryptsetup.c:3684 +msgid "Option --uuid is allowed only for luksFormat and luksUUID." +msgstr "Tùy chọn “--uuid” thì chỉ cho phép với “luksFormat” và “luksUUID”." + +#: src/cryptsetup.c:3688 +msgid "Option --align-payload is allowed only for luksFormat." +msgstr "Tùy chọn “--align-payload” chỉ được phép cho “luksFormat”." + +#: src/cryptsetup.c:3692 +msgid "Options --luks2-metadata-size and --opt-luks2-keyslots-size are allowed only for luksFormat with LUKS2." +msgstr "" + +#: src/cryptsetup.c:3697 +#, fuzzy +msgid "Invalid LUKS2 metadata size specification." +msgstr "Đặc tả kích thước thiết bị không đúng." + +#: src/cryptsetup.c:3701 +#, fuzzy +msgid "Invalid LUKS2 keyslots size specification." +msgstr "Đặc tả kích thước thiết bị không đúng." + +#: src/cryptsetup.c:3705 +#, fuzzy +msgid "Options --align-payload and --offset cannot be combined." +msgstr "Tùy chọn “--align-payload” chỉ được phép cho “luksFormat”." + +#: src/cryptsetup.c:3711 +msgid "Option --skip is supported only for open of plain and loopaes devices.\n" +msgstr "Tùy chọn “--skip” chỉ hỗ trợ cho lệnh mở (open) của thiết bị thường và “loopaes”.\n" + +#: src/cryptsetup.c:3718 +#, fuzzy +msgid "Option --offset is supported only for open of plain and loopaes devices, luksFormat and device reencryption.\n" +msgstr "Tùy chọn “--offset” chỉ hỗ trợ cho lệnh mở (open) của thiết bị thường và “loopaes”.\n" + +#: src/cryptsetup.c:3724 +msgid "Option --tcrypt-hidden, --tcrypt-system or --tcrypt-backup is supported only for TCRYPT device.\n" +msgstr "Tùy chọn --tcrypt-hidden, --tcrypt-system hay --tcrypt-backup chỉ được hỗ trợ trên thiết bị TCRYPT.\n" + +#: src/cryptsetup.c:3729 +msgid "Option --tcrypt-hidden cannot be combined with --allow-discards.\n" +msgstr "Tùy chọn --tcrypt-hidden không thể được tổ hợp cùng với --allow-discards.\n" + +#: src/cryptsetup.c:3734 +msgid "Option --veracrypt is supported only for TCRYPT device type.\n" +msgstr "Tùy chọn --veracrypt chỉ được hỗ trợ trên thiết bị TCRYPT.\n" + +#: src/cryptsetup.c:3740 +msgid "Invalid argument for parameter --veracrypt-pim supplied.\n" +msgstr "" + +#: src/cryptsetup.c:3744 +#, fuzzy +msgid "Option --veracrypt-pim is supported only for VeraCrypt compatible devices.\n" +msgstr "Tùy chọn --veracrypt chỉ được hỗ trợ trên thiết bị TCRYPT.\n" + +#: src/cryptsetup.c:3752 +#, fuzzy +msgid "Option --veracrypt-query-pim is supported only for VeraCrypt compatible devices.\n" +msgstr "Tùy chọn --veracrypt chỉ được hỗ trợ trên thiết bị TCRYPT.\n" + +#: src/cryptsetup.c:3756 +msgid "The options --veracrypt-pim and --veracrypt-query-pim are mutually exclusive.\n" +msgstr "" + +#: src/cryptsetup.c:3763 +msgid "Option --priority can be only ignore/normal/prefer.\n" +msgstr "" + +#: src/cryptsetup.c:3768 +msgid "Keyslot specification is required.\n" +msgstr "" + +#: src/cryptsetup.c:3773 src/cryptsetup_reencrypt.c:1677 +msgid "Password-based key derivation function (PBKDF) can be only pbkdf2 or argon2i/argon2id.\n" +msgstr "" + +#: src/cryptsetup.c:3778 src/cryptsetup_reencrypt.c:1682 +msgid "PBKDF forced iterations cannot be combined with iteration time option.\n" +msgstr "" + +#: src/cryptsetup.c:3784 +#, fuzzy +msgid "Sector size option is not supported for this command.\n" +msgstr "Thao tác này không được hỗ trợ cho kiểu thiết bị này.\n" + +#: src/cryptsetup.c:3790 +#, fuzzy +msgid "Unsupported encryption sector size.\n" +msgstr "Không đọc được tập tin nhật ký reencryption.\n" + +#: src/cryptsetup.c:3795 +msgid "Key size is required with --unbound option.\n" +msgstr "" + +#: src/cryptsetup.c:3800 +#, fuzzy +msgid "Option --unbound may be used only with luksAddKey action.\n" +msgstr "Tùy chọn “--new” không được sử dụng cùng với “ --decrypt”." + +#: src/cryptsetup.c:3805 +#, fuzzy +msgid "Option --refresh may be used only with open action.\n" +msgstr "Tùy chọn “--keep-key” có thể dùng với “--hash” hoặc “--iter-time”." + +#: src/cryptsetup.c:3816 +msgid "Cannot disable metadata locking.\n" +msgstr "" + +#: src/cryptsetup.c:3826 +#, fuzzy +msgid "Invalid max reencryption hotzone size specification." +msgstr "Đặc tả kích thước thiết bị không đúng." + +#: src/cryptsetup.c:3834 src/cryptsetup_reencrypt.c:1706 +#: src/cryptsetup_reencrypt.c:1711 +msgid "Invalid device size specification." +msgstr "Đặc tả kích thước thiết bị không đúng." + +#: src/cryptsetup.c:3837 +#, fuzzy +msgid "Maximum device reduce size is 1 GiB." +msgstr "Kích thước thu nhỏ thiết bị tối đa là 64 MiB." + +#: src/cryptsetup.c:3840 src/cryptsetup_reencrypt.c:1717 +msgid "Reduce size must be multiple of 512 bytes sector." +msgstr "Kích cỡ giảm phải là bội số cung từ (sector) 512 byte" + +#: src/cryptsetup.c:3845 +#, fuzzy +msgid "Invalid data size specification." +msgstr "Đặc tả kích thước thiết bị không đúng." + +#: src/cryptsetup.c:3850 +#, fuzzy +msgid "Reduce size overflow." +msgstr "Khoảng bù (offset) thiết bị bị tràn.\n" + +#: src/cryptsetup.c:3854 +msgid "LUKS2 decryption requires option --header." +msgstr "" + +#: src/cryptsetup.c:3858 +#, fuzzy +msgid "Device size must be multiple of 512 bytes sector." +msgstr "Kích cỡ giảm phải là bội số cung từ (sector) 512 byte" + +#: src/cryptsetup.c:3862 +msgid "Options --reduce-device-size and --data-size cannot be combined." +msgstr "" + +#: src/cryptsetup.c:3866 +msgid "Options --device-size and --size cannot be combined." +msgstr "" + +#: src/veritysetup.c:65 +#, fuzzy +msgid "Invalid salt string specified." +msgstr "Chuỗi salt (muối) đã cho không hợp lệ.\n" + +#: src/veritysetup.c:96 +#, fuzzy, c-format +msgid "Cannot create hash image %s for writing." +msgstr "Không thể tạo ảnh băm %s để ghi.\n" + +#: src/veritysetup.c:106 +#, fuzzy, c-format +msgid "Cannot create FEC image %s for writing." +msgstr "Không thể tạo ảnh băm %s để ghi.\n" + +#: src/veritysetup.c:176 +#, fuzzy +msgid "Invalid root hash string specified." +msgstr "Chuỗi mã băm gốc (thư mục root) đã chỉ ra không hợp lệ.\n" + +#: src/veritysetup.c:356 +msgid " " +msgstr " " + +#: src/veritysetup.c:356 src/integritysetup.c:469 +msgid "format device" +msgstr "định dạng thiết bị" + +#: src/veritysetup.c:357 +msgid " " +msgstr " " + +#: src/veritysetup.c:357 +msgid "verify device" +msgstr "thẩm tra thiết bị" + +#: src/veritysetup.c:358 +#, fuzzy +msgid " " +msgstr " " + +#: src/veritysetup.c:360 src/integritysetup.c:472 +msgid "show active device status" +msgstr "hiển thị trạng thái các thiết bị đang hoạt động" + +#: src/veritysetup.c:361 +msgid "" +msgstr "" + +#: src/veritysetup.c:361 src/integritysetup.c:473 +msgid "show on-disk information" +msgstr "hiển thị thông tin trên-đĩa" + +#: src/veritysetup.c:380 +#, c-format +msgid "" +"\n" +" is the device to create under %s\n" +" is the data device\n" +" is the device containing verification data\n" +" hash of the root node on \n" +msgstr "" +"\n" +" là thiết bị để tạo dưới %s\n" +" là thiết bị dữ liệu\n" +" là thiết bị chứa dữ liệu xác thực\n" +" mã băm của nút root (gốc) trên \n" + +#: src/veritysetup.c:387 +#, c-format +msgid "" +"\n" +"Default compiled-in dm-verity parameters:\n" +"\tHash: %s, Data block (bytes): %u, Hash block (bytes): %u, Salt size: %u, Hash format: %u\n" +msgstr "" +"\n" +"Các tham số dm-verity dựng sẵn mặc định:\n" +"\tBăm: %s, Khối dữ liệu (bytes): %u, Khối băm (bytes): %u, Kích thước muối: %u, Định dạng băm: %u\n" + +#: src/veritysetup.c:430 +msgid "Do not use verity superblock" +msgstr "Không sử dụng siêu khối thẩm định" + +#: src/veritysetup.c:431 +msgid "Format type (1 - normal, 0 - original Chrome OS)" +msgstr "Kiểu định dạng (1 - thông thường, 0 - Chrome OS)" + +#: src/veritysetup.c:431 +msgid "number" +msgstr "số" + +#: src/veritysetup.c:432 +msgid "Block size on the data device" +msgstr "Kích cỡ khối trên thiết bị dữ liệu" + +#: src/veritysetup.c:433 +msgid "Block size on the hash device" +msgstr "Kích cỡ của khối trên thiết bị băm" + +#: src/veritysetup.c:434 +msgid "FEC parity bytes" +msgstr "" + +#: src/veritysetup.c:435 +msgid "The number of blocks in the data file" +msgstr "Số lượng khối trong tập tin dữ liệu" + +#: src/veritysetup.c:435 +msgid "blocks" +msgstr "khối" + +#: src/veritysetup.c:436 +msgid "Path to device with error correction data" +msgstr "" + +#: src/veritysetup.c:436 src/integritysetup.c:540 +msgid "path" +msgstr "" + +#: src/veritysetup.c:437 +msgid "Starting offset on the hash device" +msgstr "Khoảng bù (offset) khởi đầu của thiết bị băm" + +#: src/veritysetup.c:438 +#, fuzzy +msgid "Starting offset on the FEC device" +msgstr "Khoảng bù (offset) khởi đầu của thiết bị băm" + +#: src/veritysetup.c:439 +msgid "Hash algorithm" +msgstr "Thuật toán băm" + +#: src/veritysetup.c:439 +msgid "string" +msgstr "chuỗi" + +#: src/veritysetup.c:440 +msgid "Salt" +msgstr "Muối" + +#: src/veritysetup.c:440 +msgid "hex string" +msgstr "chuỗi hex (thập lục phân)" + +#: src/veritysetup.c:442 +msgid "Restart kernel if corruption is detected" +msgstr "Khởi động lại nhân nếu thấy có sai hỏng" + +#: src/veritysetup.c:443 +msgid "Ignore corruption, log it only" +msgstr "Bỏ qua sai hỏng, chỉ ghi nhật ký lại" + +#: src/veritysetup.c:444 +msgid "Do not verify zeroed blocks" +msgstr "Không thẩm tra các khối không" + +#: src/veritysetup.c:445 +msgid "Verify data block only the first time it is read" +msgstr "" + +#: src/veritysetup.c:545 +#, fuzzy +msgid "Option --ignore-corruption, --restart-on-corruption or --ignore-zero-blocks is allowed only for open operation.\n" +msgstr "Tùy chọn --ignore-corruption, --restart-on-corruption hay --ignore-zero-blocks chỉ được phép dùng cho thao tác tạo.\n" + +#: src/veritysetup.c:550 +msgid "Option --ignore-corruption and --restart-on-corruption cannot be used together.\n" +msgstr "Không được dùng các tùy chọn --ignore-corruption và --restart-on-corruption cùng một lúc.\n" + +#: src/integritysetup.c:83 src/utils_password.c:305 +#, fuzzy, c-format +msgid "Cannot read keyfile %s." +msgstr "Không thể đọc tập-tin khóa %s.\n" + +#: src/integritysetup.c:87 src/utils_password.c:310 +#, fuzzy, c-format +msgid "Cannot read %d bytes from keyfile %s." +msgstr "Không thể đọc %d byte từ tập tin khóa %s.\n" + +#: src/integritysetup.c:250 +#, c-format +msgid "Formatted with tag size %u, internal integrity %s.\n" +msgstr "" + +#: src/integritysetup.c:469 src/integritysetup.c:473 +#, fuzzy +msgid "" +msgstr "thẩm tra thiết bị" + +#: src/integritysetup.c:470 +msgid " " +msgstr "" + +#: src/integritysetup.c:492 +#, fuzzy, c-format +msgid "" +"\n" +" is the device to create under %s\n" +" is the device containing data with integrity tags\n" +msgstr "" +"\n" +" là thiết bị để tạo dưới %s\n" +" là thiết bị dữ liệu\n" +" là thiết bị chứa dữ liệu xác thực\n" +" mã băm của nút root (gốc) trên \n" + +#: src/integritysetup.c:497 +#, fuzzy, c-format +msgid "" +"\n" +"Default compiled-in dm-integrity parameters:\n" +"\tTag size: %u bytes, Checksum algorithm: %s\n" +msgstr "" +"\n" +"Các tham số dm-verity dựng sẵn mặc định:\n" +"\tBăm: %s, Khối dữ liệu (bytes): %u, Khối băm (bytes): %u, Kích thước muối: %u, Định dạng băm: %u\n" + +#: src/integritysetup.c:540 +msgid "Path to data device (if separated)" +msgstr "" + +#: src/integritysetup.c:542 +msgid "Journal size" +msgstr "" + +#: src/integritysetup.c:543 +msgid "Interleave sectors" +msgstr "" + +#: src/integritysetup.c:544 +msgid "Journal watermark" +msgstr "" + +#: src/integritysetup.c:544 +msgid "percent" +msgstr "" + +#: src/integritysetup.c:545 +msgid "Journal commit time" +msgstr "" + +#: src/integritysetup.c:545 src/integritysetup.c:547 +msgid "ms" +msgstr "" + +#: src/integritysetup.c:546 +msgid "Number of 512-byte sectors per bit (bitmap mode)." +msgstr "" + +#: src/integritysetup.c:547 +msgid "Bitmap mode flush time" +msgstr "" + +#: src/integritysetup.c:548 +msgid "Tag size (per-sector)" +msgstr "" + +#: src/integritysetup.c:549 +msgid "Sector size" +msgstr "" + +#: src/integritysetup.c:550 +msgid "Buffers size" +msgstr "" + +#: src/integritysetup.c:552 +msgid "Data integrity algorithm" +msgstr "" + +#: src/integritysetup.c:553 +#, fuzzy +msgid "The size of the data integrity key" +msgstr "Kích cỡ của khóa mã hóa" + +#: src/integritysetup.c:554 +#, fuzzy +msgid "Read the integrity key from a file" +msgstr "Đọc khóa từ một tập tin." + +#: src/integritysetup.c:556 +msgid "Journal integrity algorithm" +msgstr "" + +#: src/integritysetup.c:557 +#, fuzzy +msgid "The size of the journal integrity key" +msgstr "Kích cỡ của khóa mã hóa" + +#: src/integritysetup.c:558 +#, fuzzy +msgid "Read the journal integrity key from a file" +msgstr "Đọc khóa từ một tập tin." + +#: src/integritysetup.c:560 +msgid "Journal encryption algorithm" +msgstr "" + +#: src/integritysetup.c:561 +#, fuzzy +msgid "The size of the journal encryption key" +msgstr "Kích cỡ của khóa mã hóa" + +#: src/integritysetup.c:562 +#, fuzzy +msgid "Read the journal encryption key from a file" +msgstr "Đọc khóa từ một tập tin." + +#: src/integritysetup.c:565 +msgid "Recovery mode (no journal, no tag checking)" +msgstr "" + +#: src/integritysetup.c:566 +msgid "Use bitmap to track changes and disable journal for integrity device" +msgstr "" + +#: src/integritysetup.c:567 +msgid "Recalculate initial tags automatically." +msgstr "" + +#: src/integritysetup.c:640 +#, fuzzy +msgid "Option --integrity-recalculate can be used only for open action." +msgstr "Tùy chọn “--allow-discards” chỉ cho phép với thao tác mở.\n" + +#: src/integritysetup.c:655 +msgid "Options --journal-size, --interleave-sectors, --sector-size, --tag-size and --no-wipe can be used only for format action.\n" +msgstr "" + +#: src/integritysetup.c:661 +#, fuzzy +msgid "Invalid journal size specification." +msgstr "Đặc tả kích thước thiết bị không đúng." + +#: src/integritysetup.c:666 +msgid "Both key file and key size options must be specified." +msgstr "" + +#: src/integritysetup.c:669 +msgid "Integrity algorithm must be specified if integrity key is used." +msgstr "" + +#: src/integritysetup.c:674 +msgid "Both journal integrity key file and key size options must be specified." +msgstr "" + +#: src/integritysetup.c:677 +msgid "Journal integrity algorithm must be specified if journal integrity key is used." +msgstr "" + +#: src/integritysetup.c:682 +msgid "Both journal encryption key file and key size options must be specified." +msgstr "" + +#: src/integritysetup.c:685 +msgid "Journal encryption algorithm must be specified if journal encryption key is used." +msgstr "" + +#: src/integritysetup.c:689 +msgid "Recovery and bitmap mode options are mutually exclusive." +msgstr "" + +#: src/integritysetup.c:693 +msgid "Journal options cannot be used in bitmap mode." +msgstr "" + +#: src/integritysetup.c:697 +msgid "Bitmap options can be used only in bitmap mode." +msgstr "" + +#: src/cryptsetup_reencrypt.c:172 +#, fuzzy +msgid "Reencryption already in-progress." +msgstr "Kích thước khối mã hóa lại" + +#: src/cryptsetup_reencrypt.c:201 +#, fuzzy, c-format +msgid "Cannot exclusively open %s, device in use." +msgstr "Không thể mở %s một cách đệ qui, thiết bị vẫn đang được sử dụng.\n" + +#: src/cryptsetup_reencrypt.c:215 src/cryptsetup_reencrypt.c:1127 +#, fuzzy +msgid "Allocation of aligned memory failed." +msgstr "Phân bổ bộ nhớ điều chỉnh gặp lỗi.\n" + +#: src/cryptsetup_reencrypt.c:222 +#, fuzzy, c-format +msgid "Cannot read device %s." +msgstr "Không thể đọc thiết bị %s.\n" + +#: src/cryptsetup_reencrypt.c:233 +#, fuzzy, c-format +msgid "Marking LUKS1 device %s unusable." +msgstr "Đánh dấu thiết bị LUKS %s là không thể dùng.\n" + +#: src/cryptsetup_reencrypt.c:237 +#, c-format +msgid "Setting LUKS2 offline reencrypt flag on device %s." +msgstr "" + +#: src/cryptsetup_reencrypt.c:254 +#, fuzzy, c-format +msgid "Cannot write device %s." +msgstr "Không thể ghi thiết bị %s.\n" + +#: src/cryptsetup_reencrypt.c:302 +#, fuzzy +msgid "Cannot write reencryption log file." +msgstr "Không thể ghi tập tin nhật ký reencryption (mã hóa lại).\n" + +#: src/cryptsetup_reencrypt.c:358 +#, fuzzy +msgid "Cannot read reencryption log file." +msgstr "Không đọc được tập tin nhật ký reencryption.\n" + +#: src/cryptsetup_reencrypt.c:396 +#, c-format +msgid "Log file %s exists, resuming reencryption.\n" +msgstr "Tập tin nhật ký %s đã có sẵn rồi, giả định là reencryption (mã hóa lại).\n" + +#: src/cryptsetup_reencrypt.c:445 +#, fuzzy +msgid "Activating temporary device using old LUKS header." +msgstr "Hoạt hóa thiết bị tạm thời sử dụng phần đầu LUKS kiểu cũ.\n" + +#: src/cryptsetup_reencrypt.c:455 +#, fuzzy +msgid "Activating temporary device using new LUKS header." +msgstr "Hoạt hóa thiết bị tạm thời sử dụng phần đầu LUKS kiểu mới.\n" + +#: src/cryptsetup_reencrypt.c:465 +#, fuzzy +msgid "Activation of temporary devices failed." +msgstr "Việc hoạt hóa các thiết bị tạm thời gặp lỗi.\n" + +#: src/cryptsetup_reencrypt.c:551 +#, fuzzy +msgid "Failed to set data offset." +msgstr "Gặp lỗi khi lấy thông tin tập tin khóa.\n" + +#: src/cryptsetup_reencrypt.c:557 +#, fuzzy +msgid "Failed to set metadata size." +msgstr "Gặp lỗi khi lấy thông tin tập tin khóa.\n" + +#: src/cryptsetup_reencrypt.c:565 +#, fuzzy, c-format +msgid "New LUKS header for device %s created." +msgstr "Phần đầu LUKS mới cho thiết bị %s được tạo.\n" + +#: src/cryptsetup_reencrypt.c:625 +#, c-format +msgid "This version of cryptsetup-reencrypt can't handle new internal token type %s." +msgstr "" + +#: src/cryptsetup_reencrypt.c:647 +msgid "Failed to read activation flags from backup header." +msgstr "" + +#: src/cryptsetup_reencrypt.c:651 +#, fuzzy +msgid "Failed to write activation flags to new header." +msgstr "Lỗi ghi khóa vào kho lưu khóa.\n" + +#: src/cryptsetup_reencrypt.c:655 src/cryptsetup_reencrypt.c:659 +#, fuzzy +msgid "Failed to read requirements from backup header." +msgstr "Lỗi đọc từ kho lưu khóa.\n" + +#: src/cryptsetup_reencrypt.c:697 +#, fuzzy, c-format +msgid "%s header backup of device %s created." +msgstr "Phần đầu sao lưu LUKS của thiết bị %s được tạo.\n" + +#: src/cryptsetup_reencrypt.c:760 +#, fuzzy +msgid "Creation of LUKS backup headers failed." +msgstr "Việc tạo phần đầu LUKS sao lưu dự phòng gặp lỗi.\n" + +#: src/cryptsetup_reencrypt.c:893 +#, fuzzy, c-format +msgid "Cannot restore %s header on device %s." +msgstr "Không thể phục hồi phần đầu LUKS trên thiết bị %s.\n" + +#: src/cryptsetup_reencrypt.c:895 +#, fuzzy, c-format +msgid "%s header on device %s restored." +msgstr "Phần đầu LUKS trên thiết bị %s đã được phục hồi.\n" + +#: src/cryptsetup_reencrypt.c:1099 src/cryptsetup_reencrypt.c:1105 +#, fuzzy +msgid "Cannot open temporary LUKS device." +msgstr "Không thể r thiết bị LUKS tạm thời.\n" + +#: src/cryptsetup_reencrypt.c:1110 src/cryptsetup_reencrypt.c:1115 +#, fuzzy +msgid "Cannot get device size." +msgstr "Không thể lấy kích cỡ thiết bị.\n" + +#: src/cryptsetup_reencrypt.c:1150 +#, fuzzy +msgid "IO error during reencryption." +msgstr "Lỗi IO (vào/ra) trong quá trình mã hóa lại.\n" + +#: src/cryptsetup_reencrypt.c:1181 +#, fuzzy +msgid "Provided UUID is invalid." +msgstr "UUID đã cung cấp không hợp lệ.\n" + +#: src/cryptsetup_reencrypt.c:1407 +#, fuzzy +msgid "Cannot open reencryption log file." +msgstr "Không mở được tập tin nhật ký reencryption.\n" + +#: src/cryptsetup_reencrypt.c:1413 +#, fuzzy +msgid "No decryption in progress, provided UUID can be used only to resume suspended decryption process." +msgstr "Không có quá trình giải mã nào đang xử lý, UUID đã cung cấp có thể chỉ được dùng để phục hồi lại tiến trình giải mã đã tạm dừng.\n" + +#: src/cryptsetup_reencrypt.c:1488 +#, c-format +msgid "Changed pbkdf parameters in keyslot %i." +msgstr "" + +#: src/cryptsetup_reencrypt.c:1600 +msgid "Reencryption block size" +msgstr "Kích thước khối mã hóa lại" + +#: src/cryptsetup_reencrypt.c:1600 +msgid "MiB" +msgstr "MiB" + +#: src/cryptsetup_reencrypt.c:1604 +#, fuzzy +msgid "Do not change key, no data area reencryption" +msgstr "Khôngười thay đổi khóa, không có mã hóa lại vùng dữ liệu." + +#: src/cryptsetup_reencrypt.c:1606 +#, fuzzy +msgid "Read new volume (master) key from file" +msgstr "Đọc khóa khối tin (chủ) từ tập tin." + +#: src/cryptsetup_reencrypt.c:1607 +msgid "PBKDF2 iteration time for LUKS (in ms)" +msgstr "Thời gian lặp lại PBKDF2 cho LUKS (theo mili-giây)" + +#: src/cryptsetup_reencrypt.c:1613 +#, fuzzy +msgid "Use direct-io when accessing devices" +msgstr "Sử dụng vào ra trực tiếp khi truy cập các thiết bị." + +#: src/cryptsetup_reencrypt.c:1614 +#, fuzzy +msgid "Use fsync after each block" +msgstr "Sử dụng fsync sau mỗi khối." + +#: src/cryptsetup_reencrypt.c:1615 +#, fuzzy +msgid "Update log file after every block" +msgstr "Cập nhật tập tin nhật ký sau mỗi khối." + +#: src/cryptsetup_reencrypt.c:1616 +#, fuzzy +msgid "Use only this slot (others will be disabled)" +msgstr "Chỉ sử dụng khe này (những cái khác sẽ bị tắt đi)." + +#: src/cryptsetup_reencrypt.c:1621 +#, fuzzy +msgid "Create new header on not encrypted device" +msgstr "Tạo phần đầu mới không trên thiết bị được mã hóa." + +#: src/cryptsetup_reencrypt.c:1622 +#, fuzzy +msgid "Permanently decrypt device (remove encryption)" +msgstr "Thiết bị mã hóa cố định (gỡ bỏ mã hóa)." + +#: src/cryptsetup_reencrypt.c:1623 +#, fuzzy +msgid "The UUID used to resume decryption" +msgstr "uuid được dùng để khôi phục việc giải mã." + +#: src/cryptsetup_reencrypt.c:1624 +#, fuzzy +msgid "Type of LUKS metadata: luks1, luks2" +msgstr "Kiểu của siêu dữ liệu thiết bị: luks, plain, loopaes, tcrypt." + +#: src/cryptsetup_reencrypt.c:1643 +msgid "[OPTION...] " +msgstr "[TÙY_CHỌN…] " + +#: src/cryptsetup_reencrypt.c:1651 +#, fuzzy, c-format +msgid "Reencryption will change: %s%s%s%s%s%s." +msgstr "Reencryption sẽ thay đổi: khóa dung lượng%s%s%s%s.\n" + +#: src/cryptsetup_reencrypt.c:1652 +msgid "volume key" +msgstr "" + +#: src/cryptsetup_reencrypt.c:1654 +#, fuzzy +msgid "set hash to " +msgstr ", đặt kiểu băm thành " + +#: src/cryptsetup_reencrypt.c:1655 +msgid ", set cipher to " +msgstr ", đặt kiểu mã hóa thành " + +#: src/cryptsetup_reencrypt.c:1659 +msgid "Argument required." +msgstr "Cần đối số." + +#: src/cryptsetup_reencrypt.c:1687 +msgid "Only values between 1 MiB and 64 MiB allowed for reencryption block size." +msgstr "Chỉ những giá trị nằm giữa 1MiB và 64 MiB là cho phép đối với kích thước khối reencryption (mã hóa lại)." + +#: src/cryptsetup_reencrypt.c:1714 +msgid "Maximum device reduce size is 64 MiB." +msgstr "Kích thước thu nhỏ thiết bị tối đa là 64 MiB." + +#: src/cryptsetup_reencrypt.c:1721 +#, fuzzy +msgid "Option --new must be used together with --reduce-device-size or --header." +msgstr "Tùy chọn “--new” phải được sử dụng cùng với “--reduce-device-size”." + +#: src/cryptsetup_reencrypt.c:1725 +#, fuzzy +msgid "Option --keep-key can be used only with --hash, --iter-time or --pbkdf-force-iterations." +msgstr "Tùy chọn “--keep-key” có thể dùng với “--hash” hoặc “--iter-time”." + +#: src/cryptsetup_reencrypt.c:1729 +msgid "Option --new cannot be used together with --decrypt." +msgstr "Tùy chọn “--new” không được sử dụng cùng với “ --decrypt”." + +#: src/cryptsetup_reencrypt.c:1733 +msgid "Option --decrypt is incompatible with specified parameters." +msgstr "Tùy chọn --decrypt không tương thích với các đối số đã cho." + +#: src/cryptsetup_reencrypt.c:1737 +msgid "Option --uuid is allowed only together with --decrypt." +msgstr "Tùy chọn “--uuid” chỉ được sử dụng cùng với “ --decrypt”." + +#: src/cryptsetup_reencrypt.c:1741 +msgid "Invalid luks type. Use one of these: 'luks', 'luks1' or 'luks2'." +msgstr "" + +#: src/utils_tools.c:151 +#, fuzzy +msgid "Error reading response from terminal." +msgstr "Gặp lỗi khi đọc phản hồi từ thiết bị cuối.\n" + +#: src/utils_tools.c:186 +msgid "Command successful.\n" +msgstr "Câu lệnh đã chạy thành công.\n" + +#: src/utils_tools.c:194 +msgid "wrong or missing parameters" +msgstr "" + +#: src/utils_tools.c:196 +#, fuzzy +msgid "no permission or bad passphrase" +msgstr "Nhập bất cứ cụm từ mật khẩu nào: " + +#: src/utils_tools.c:198 +#, fuzzy +msgid "out of memory" +msgstr "Không thể mở khóa bộ nhớ.\n" + +#: src/utils_tools.c:200 +msgid "wrong device or file specified" +msgstr "" + +#: src/utils_tools.c:202 +#, fuzzy +msgid "device already exists or device is busy" +msgstr "Thiết bị %s đã sẵn có.\n" + +#: src/utils_tools.c:204 +msgid "unknown error" +msgstr "" + +#: src/utils_tools.c:206 +#, fuzzy, c-format +msgid "Command failed with code %i (%s).\n" +msgstr "Câu lệnh đã thất bại với mã %i" + +#: src/utils_tools.c:283 +#, fuzzy, c-format +msgid "Key slot %i created." +msgstr "Khe khóa %d đã thay đổi.\n" + +#: src/utils_tools.c:285 +#, fuzzy, c-format +msgid "Key slot %i unlocked." +msgstr "Khe khóa %d được mở khóa.\n" + +#: src/utils_tools.c:287 +#, fuzzy, c-format +msgid "Key slot %i removed." +msgstr "Khe khóa %d được mở khóa.\n" + +#: src/utils_tools.c:296 +#, c-format +msgid "Token %i created." +msgstr "" + +#: src/utils_tools.c:298 +#, c-format +msgid "Token %i removed." +msgstr "" + +#: src/utils_tools.c:464 +msgid "" +"\n" +"Wipe interrupted." +msgstr "" + +#: src/utils_tools.c:475 +#, c-format +msgid "WARNING: Device %s already contains a '%s' partition signature.\n" +msgstr "" + +#: src/utils_tools.c:483 +#, c-format +msgid "WARNING: Device %s already contains a '%s' superblock signature.\n" +msgstr "" + +#: src/utils_tools.c:504 src/utils_tools.c:568 +#, fuzzy +msgid "Failed to initialize device signature probes." +msgstr "Lỗi lấy thư mục trình ánh xạ thiết bị." + +#: src/utils_tools.c:548 +#, fuzzy, c-format +msgid "Failed to stat device %s." +msgstr "Gặp lỗi khi lấy thông tin tập tin khóa.\n" + +#: src/utils_tools.c:561 +#, c-format +msgid "Device %s is in use. Can not proceed with format operation." +msgstr "" + +#: src/utils_tools.c:563 +#, c-format +msgid "Failed to open file %s in read/write mode." +msgstr "" + +#: src/utils_tools.c:577 +#, c-format +msgid "Existing '%s' partition signature (offset: % bytes) on device %s will be wiped." +msgstr "" + +#: src/utils_tools.c:580 +#, c-format +msgid "Existing '%s' superblock signature (offset: % bytes) on device %s will be wiped." +msgstr "" + +#: src/utils_tools.c:583 +#, fuzzy +msgid "Failed to wipe device signature." +msgstr "Lỗi ghi khóa vào kho lưu khóa.\n" + +#: src/utils_tools.c:590 +#, fuzzy, c-format +msgid "Failed to probe device %s for a signature." +msgstr "Lỗi lấy thư mục trình ánh xạ thiết bị." + +#: src/utils_tools.c:629 +#, fuzzy +msgid "" +"\n" +"Reencryption interrupted." +msgstr "Kích thước khối mã hóa lại" + +#: src/utils_password.c:43 src/utils_password.c:75 +#, fuzzy, c-format +msgid "Cannot check password quality: %s" +msgstr "Không thể kiểm tra chất lượng mật khẩu: %s\n" + +#: src/utils_password.c:51 +#, fuzzy, c-format +msgid "" +"Password quality check failed:\n" +" %s" +msgstr "" +"Chất lượng mật khẩu không đạt:\n" +" %s\n" + +#: src/utils_password.c:83 +#, fuzzy, c-format +msgid "Password quality check failed: Bad passphrase (%s)" +msgstr "Gặp lỗi khi kiểm tra chất lượng mật khẩu: mật khẩu sai (%s)\n" + +#: src/utils_password.c:193 src/utils_password.c:208 +#, fuzzy +msgid "Error reading passphrase from terminal." +msgstr "Gặp lỗi khi đọc cụm từ mật khẩu từ thiết bị cuối.\n" + +#: src/utils_password.c:206 +msgid "Verify passphrase: " +msgstr "Nhập lại mật khẩu: " + +#: src/utils_password.c:213 +#, fuzzy +msgid "Passphrases do not match." +msgstr "Hai cụm từ mật khẩu không trùng nhau.\n" + +#: src/utils_password.c:250 +#, fuzzy +msgid "Cannot use offset with terminal input." +msgstr "Không thể sử dụng khoảng bù (offset) với đầu vào là thiết bị cuối.\n" + +#: src/utils_password.c:253 +#, c-format +msgid "Enter passphrase: " +msgstr "Gõ cụm từ mật khẩu: " + +#: src/utils_password.c:256 +#, c-format +msgid "Enter passphrase for %s: " +msgstr "Nhập cụm từ mật khẩu cho %s: " + +#: src/utils_password.c:287 +#, fuzzy +msgid "No key available with this passphrase." +msgstr "Không có khóa sẵn sàng dùng với cụm từ mật khẩu này.\n" + +#: src/utils_password.c:289 +msgid "No usable keyslot is available." +msgstr "" + +#: src/utils_password.c:328 +#, fuzzy, c-format +msgid "Cannot open keyfile %s for write." +msgstr "Không thể mở tập tin %s.\n" + +#: src/utils_password.c:335 +#, fuzzy, c-format +msgid "Cannot write to keyfile %s." +msgstr "Không thể đọc tập-tin khóa %s.\n" + +#: src/utils_luks2.c:47 +#, fuzzy, c-format +msgid "Failed to open file %s in read-only mode." +msgstr "Gặp lỗi khi mở tập tin khóa.\n" + +#: src/utils_luks2.c:60 +msgid "Provide valid LUKS2 token JSON:\n" +msgstr "" + +#: src/utils_luks2.c:67 +#, fuzzy +msgid "Failed to read JSON file." +msgstr "Gặp lỗi khi mở tập tin khóa.\n" + +#: src/utils_luks2.c:72 +#, fuzzy +msgid "" +"\n" +"Read interrupted." +msgstr "phần đầu VERITY sai hỏng.\n" + +#: src/utils_luks2.c:113 +#, fuzzy, c-format +msgid "Failed to open file %s in write mode." +msgstr "Gặp lỗi khi mở tập tin khóa.\n" + +#: src/utils_luks2.c:122 +msgid "" +"\n" +"Write interrupted." +msgstr "" + +#: src/utils_luks2.c:126 +#, fuzzy +msgid "Failed to write JSON file." +msgstr "Gặp lỗi khi mở tập tin khóa.\n" + +#~ msgid "Replaced with key slot %d.\n" +#~ msgstr "Đã thay thế với khe khóa %d.\n" + +#~ msgid "Function not available in FIPS mode.\n" +#~ msgstr "Chức năng không khả dụng trong chế độ “FIPS”.\n" + +#~ msgid "Too many tree levels for verity volume.\n" +#~ msgstr "Có quá nhiều mức cây cho mỗi vùng xác thực.\n" + +#~ msgid "memory allocation error in action_luksFormat" +#~ msgstr "gặp lỗi phân cấp vùng nhớ trong“action_luksFormat”" + +#~ msgid "Key %d not active. Can't wipe.\n" +#~ msgstr "Khóa %d không hoạt động thì không xóa được.\n" + +#~ msgid " " +#~ msgstr " " + +#~ msgid "create active device" +#~ msgstr "tạo thiết bị hoạt động" + +#~ msgid "remove (deactivate) device" +#~ msgstr "gỡ bỏ (dừng hoạt động) thiết bị" + +#~ msgid "Activated keyslot %i.\n" +#~ msgstr "Khe-khóa (keyslot) đã được kích hoạt %i.\n" + +#~ msgid "Progress: %5.1f%%, ETA %02llu:%02llu, %4llu MiB written, speed %5.1f MiB/s%s" +#~ msgstr "Diễn biến: %5.1f%%, ETA %02llu:%02llu, đã ghi %4llu MiB, tốc độ %5.1f MiB/s%s" + +#~ msgid "Interrupted by a signal.\n" +#~ msgstr "Bị ngắt bởi tín hiệu signal.\n" + +#~ msgid "Cannot find a free loopback device.\n" +#~ msgstr "Không tìm thấy thiết bị vòng ngược (loopback) nào còn rảnh.\n" + +#~ msgid "Cannot open device %s\n" +#~ msgstr "Không thể mở thiết bị %s\n" + +#~ msgid "Marking LUKS device %s usable.\n" +#~ msgstr "Đánh dấu thiết bị LUKS %s là có thể dùng.\n" + +#~ msgid "WARNING: this is experimental code, it can completely break your data.\n" +#~ msgstr "CẢNH BÁO: đây chỉ là mã thử nghiệm, nó có thể phá hoại dữ liệu của bạn.\n" + +#~ msgid "FIPS checksum verification failed.\n" +#~ msgstr "Thẩm tra mã băm FIPS không đạt.\n" + +#~ msgid "WARNING: device %s is a partition, for TCRYPT system encryption you usually need to use whole block device path.\n" +#~ msgstr "CẢNH BÁO: thiết-bị %s là một phân vùng, với mã hóa hệ thống TCRYPT bạn thường cần phải sử dụng toàn bộ đường dẫn thiết-bị khối.\n" + +#~ msgid "Kernel doesn't support plain64 IV.\n" +#~ msgstr "Nhân không hỗ trợ plain64 IV.\n" + +#~ msgid "Enter LUKS passphrase: " +#~ msgstr "Gõ cụm từ mật khẩu LUKS: " + +#~ msgid "Enter new LUKS passphrase: " +#~ msgstr "Gõ cụm từ mật khẩu LUKS: " + +#~ msgid "Enter any LUKS passphrase: " +#~ msgstr "Nhập mật khẩu LUKS vào: " + +#~ msgid "Backup file %s doesn't exist.\n" +#~ msgstr "Tập tin sao lưu %s không tồn tại.\n" + +#~ msgid " " +#~ msgstr " " + +#~ msgid "create device" +#~ msgstr "tạo thiết bị" + +#~ msgid "remove device" +#~ msgstr "gỡ bỏ thiết bị" + +#~ msgid "remove LUKS mapping" +#~ msgstr "gỡ bỏ sự ánh xạ LUKS" + +#~ msgid "open loop-AES device as mapping " +#~ msgstr "mở thiết bị loop-AES như là ánh xạ " + +#~ msgid "remove loop-AES mapping" +#~ msgstr "gỡ bỏ ánh xạ loop-AES" + +#~ msgid "Cannot open device %s for %s%s access.\n" +#~ msgstr "Không thể mở thiết bị %s cho truy cập %s%s.\n" + +#~ msgid "exclusive " +#~ msgstr "dành riêng " + +#~ msgid "writable" +#~ msgstr "ghi được" + +#~ msgid "read-only" +#~ msgstr "chỉ đọc" + +#~ msgid "WARNING!!! Possibly insecure memory. Are you root?\n" +#~ msgstr "CẢNH BÁO!!! Có thể là vùng nhớ không an toàn. Bạn có đang chạy dưới quyền siêu người dùng (root) không?\n" + +#~ msgid "Unable to obtain sector size for %s" +#~ msgstr "Không thể lấy kích cỡ cung từ cho %s" + +#~ msgid "Cannot use device %s (crypt segments overlaps or in use by another device).\n" +#~ msgstr "Không thể sử dụng thiết bị %s (các đoạn crypt chồng lên nhau hay đang sử dụng bởi thiết bị khác).\n" + +#~ msgid "Cannot find compatible device-mapper kernel modules.\n" +#~ msgstr "Không tìm thấy mô-đun hạt nhân ánh xạ thiết bị tương thích.\n" + +#~ msgid "Warning: exhausting read requested, but key file %s is not a regular file, function might never return.\n" +#~ msgstr "Cảnh báo: yêu cầu một hàm đọc vét kiệt mà tập tin khóa %s không phải là một tập tin thông thường thì có thể là hàm chưa bao giờ trả lại.\n" + +#~ msgid "Cannot open device: %s\n" +#~ msgstr "Không thể mở thiết bị: %s\n" + +#~ msgid "BLKROGET failed on device %s.\n" +#~ msgstr "BLKROGET bị lỗi trên thiết bị %s.\n" + +#~ msgid "BLKGETSIZE failed on device %s.\n" +#~ msgstr "BLKGETSIZE bị lỗi trên thiết bị %s.\n" + +#~ msgid "identical to luksKillSlot - DEPRECATED - see man page" +#~ msgstr "trùng với luksKillSlot - BỊ PHẢN ĐỐI - xem trang hướng dẫn" + +#~ msgid "modify active device - DEPRECATED - see man page" +#~ msgstr "sửa đổi thiết bị hoạt động - BỊ PHẢN ĐỐI - xem trang hướng dẫn" + +#~ msgid "" +#~ "The reload action is deprecated. Please use`dmsetup reload' in case you really need this functionality.\n" +#~ "WARNING: do not use reload to touch LUKS devices. If that is the case, hit Ctrl-C now.\n" +#~ msgstr "" +#~ "Thao tác nạp lại bị phản đối. Hãy sử dụng“dmsetup reload” trong trường hợp bạn thực sự yêu cầu chức năng này.\n" +#~ "CẢNH BÁO: đừng sử dụng chức năng nạp lại để thao tác thiết bị kiểu LUKS. Trong trường hợp đó, bấm tổ hợp phím Ctrl-C ngay bây giờ.\n" + +#~ msgid "Obsolete option --non-exclusive is ignored.\n" +#~ msgstr "Tùy chọn cũ“--non-exclusive” bị bỏ qua.\n" + +#~ msgid "Read the key from a file (can be /dev/random)" +#~ msgstr "Đọc khóa từ một tập tin nào đó (có thể là“/dev/random”)" + +#~ msgid "(Obsoleted, see man page.)" +#~ msgstr "(Bị phản đối, xem trang hướng dẫn.)" diff --git a/po/zh_CN.gmo b/po/zh_CN.gmo new file mode 100644 index 0000000000000000000000000000000000000000..192562d716b7e3b2e14951e9692f992ff88400f8 GIT binary patch literal 42200 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 T!Ce2M*Ky5J#DxR1D8~4|JBK_l literal 0 HcmV?d00001 diff --git a/po/zh_CN.po b/po/zh_CN.po new file mode 100644 index 0000000..b22aeba --- /dev/null +++ b/po/zh_CN.po @@ -0,0 +1,3909 @@ +# Chinese simplified translation for cryptsetup. +# Copyright (C) 2015 Free Software Foundation, Inc. +# This file is distributed under the same license as the cryptsetup package. +# Mingcong Bai , 2015. +# Mingye Wang , 2015. +# Boyuan Yang <073plan@gmail.com>, 2018. +# +msgid "" +msgstr "" +"Project-Id-Version: cryptsetup 2.0.3.1\n" +"Report-Msgid-Bugs-To: dm-crypt@saout.de\n" +"POT-Creation-Date: 2019-11-01 09:04+0100\n" +"PO-Revision-Date: 2018-04-27 22:41+0800\n" +"Last-Translator: Boyuan Yang <073plan@gmail.com>\n" +"Language-Team: Chinese (simplified) \n" +"Language: zh_CN\n" +"MIME-Version: 1.0\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.0.6\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: lib/libdevmapper.c:384 +msgid "Cannot initialize device-mapper, running as non-root user." +msgstr "无法初始化设备映射器,正作为非 root 用户运行。" + +#: lib/libdevmapper.c:387 +msgid "Cannot initialize device-mapper. Is dm_mod kernel module loaded?" +msgstr "无法初始化设备映射器。dm_mod 内核模块装载了吗?" + +#: lib/libdevmapper.c:1082 +msgid "Requested deferred flag is not supported." +msgstr "不支持请求的推迟(deferred)标记。" + +#: lib/libdevmapper.c:1149 +#, c-format +msgid "DM-UUID for device %s was truncated." +msgstr "设备 %s 的 DM-UUID 被截断。" + +#: lib/libdevmapper.c:1463 +#, fuzzy +msgid "Unknown dm target type." +msgstr "未知的 PBKDF 类型 %s。" + +#: lib/libdevmapper.c:1565 lib/libdevmapper.c:1617 +msgid "Requested dm-crypt performance options are not supported." +msgstr "不支持请求的 dm-crypt 性能选项。" + +#: lib/libdevmapper.c:1572 +msgid "Requested dm-verity data corruption handling options are not supported." +msgstr "不支持请求的 dm-verity 数据损坏处理选项。" + +#: lib/libdevmapper.c:1576 +msgid "Requested dm-verity FEC options are not supported." +msgstr "不支持请求的 dm-verity FEC 选项。" + +#: lib/libdevmapper.c:1580 +msgid "Requested data integrity options are not supported." +msgstr "不支持请求的数据完整性选项。" + +#: lib/libdevmapper.c:1582 +msgid "Requested sector_size option is not supported." +msgstr "不支持请求的 sector_size 选项。" + +#: lib/libdevmapper.c:1587 +#, fuzzy +msgid "Requested automatic recalculation of integrity tags is not supported." +msgstr "不支持请求的数据完整性选项。" + +#: lib/libdevmapper.c:1591 +#, fuzzy +msgid "Requested dm-integrity bitmap mode is not supported." +msgstr "不支持请求的数据完整性选项。" + +#: lib/libdevmapper.c:1620 +#, fuzzy +msgid "Discard/TRIM is not supported." +msgstr "不支持哈希算法 %s。" + +#: lib/libdevmapper.c:2511 +#, c-format +msgid "Failed to query dm-%s segment." +msgstr "" + +#: lib/random.c:80 +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" +msgstr "" +"系统在生成卷密钥时熵不足。\n" +"请随意移动鼠标或是在别的窗口打字,以便生成随机事件让系统使用。\n" + +#: lib/random.c:84 +#, c-format +msgid "Generating key (%d%% done).\n" +msgstr "正生成密钥(%d%% 已完成)\n" + +#: lib/random.c:170 +msgid "Running in FIPS mode." +msgstr "在 FIPS 模式下运行。" + +#: lib/random.c:176 +msgid "Fatal error during RNG initialisation." +msgstr "随机数生成器初始化时发生致命错误。" + +#: lib/random.c:213 +msgid "Unknown RNG quality requested." +msgstr "未知的随机数生成器质量请求。" + +#: lib/random.c:218 +msgid "Error reading from RNG." +msgstr "从随机数生成器(RNG)读取时出错。" + +#: lib/setup.c:223 +msgid "Cannot initialize crypto RNG backend." +msgstr "无法初始化加密随机数生成器后端。" + +#: lib/setup.c:229 +msgid "Cannot initialize crypto backend." +msgstr "无法初始化加密后端。" + +#: lib/setup.c:260 lib/setup.c:1990 lib/verity/verity.c:120 +#, c-format +msgid "Hash algorithm %s not supported." +msgstr "不支持哈希算法 %s。" + +#: lib/setup.c:263 lib/loopaes/loopaes.c:90 +#, c-format +msgid "Key processing error (using hash %s)." +msgstr "密钥处理错误(使用散列 %s)。" + +#: lib/setup.c:324 lib/setup.c:351 +msgid "Cannot determine device type. Incompatible activation of device?" +msgstr "无法确定设备类型。不兼容的设备激活?" + +#: lib/setup.c:330 lib/setup.c:2985 +msgid "This operation is supported only for LUKS device." +msgstr "此操作只适用 LUKS 设备。" + +#: lib/setup.c:357 +msgid "This operation is supported only for LUKS2 device." +msgstr "此操作只适用 LUKS2 设备。" + +#: lib/setup.c:412 lib/luks2/luks2_reencrypt.c:2345 +msgid "All key slots full." +msgstr "密钥槽全都满了。" + +#: lib/setup.c:423 +#, c-format +msgid "Key slot %d is invalid, please select between 0 and %d." +msgstr "密钥槽 %d 无效,请选择 0 到 %d 间的数字。" + +#: lib/setup.c:429 +#, c-format +msgid "Key slot %d is full, please select another one." +msgstr "密钥槽 %d 满了,请选择另一个。" + +#: lib/setup.c:514 lib/setup.c:2759 +#, fuzzy +msgid "Device size is not aligned to device logical block size." +msgstr "设备 %s 的大小没有和请求的扇区大小对齐(%u 字节)。" + +#: lib/setup.c:610 +#, c-format +msgid "Header detected but device %s is too small." +msgstr "检测到标头但设备 %s 太小。" + +#: lib/setup.c:647 +msgid "This operation is not supported for this device type." +msgstr "不支持在这类设备上执行此操作。" + +#: lib/setup.c:652 +#, fuzzy +msgid "Illegal operation with reencryption in-progress." +msgstr "正在进行离线重加密。中止。" + +#: lib/setup.c:821 lib/luks1/keymanage.c:476 +#, c-format +msgid "Unsupported LUKS version %d." +msgstr "不支持的 LUKS 版本 %d。" + +#: lib/setup.c:838 lib/setup.c:1483 lib/setup.c:1903 +#, fuzzy +msgid "Detached metadata device is not supported for this crypt type." +msgstr "此加密类型不支持 UUID。" + +#: lib/setup.c:1373 lib/setup.c:2479 lib/setup.c:2551 lib/setup.c:2563 +#: lib/setup.c:2712 lib/setup.c:4310 +#, c-format +msgid "Device %s is not active." +msgstr "设备 %s 未激活。" + +#: lib/setup.c:1390 +#, c-format +msgid "Underlying device for crypt device %s disappeared." +msgstr "加密设备 %s 下层的设备消失了。" + +#: lib/setup.c:1468 +msgid "Invalid plain crypt parameters." +msgstr "无效的纯加密选项。" + +#: lib/setup.c:1473 lib/setup.c:1893 src/integritysetup.c:73 +msgid "Invalid key size." +msgstr "无效的密钥大小。" + +#: lib/setup.c:1478 lib/setup.c:1898 lib/setup.c:2100 +msgid "UUID is not supported for this crypt type." +msgstr "此加密类型不支持 UUID。" + +#: lib/setup.c:1493 lib/setup.c:1683 lib/luks2/luks2_reencrypt.c:2308 +#: src/cryptsetup.c:1169 +msgid "Unsupported encryption sector size." +msgstr "不支持的加密扇区大小。" + +#: lib/setup.c:1501 lib/setup.c:1808 lib/setup.c:2753 +#, fuzzy +msgid "Device size is not aligned to requested sector size." +msgstr "设备 %s 的大小没有和请求的扇区大小对齐(%u 字节)。" + +#: lib/setup.c:1552 lib/setup.c:1671 +msgid "Can't format LUKS without device." +msgstr "无法在没有设备的情况下格式化 LUKS。" + +#: lib/setup.c:1558 lib/setup.c:1677 +msgid "Requested data alignment is not compatible with data offset." +msgstr "" + +#: lib/setup.c:1626 lib/setup.c:1795 +msgid "WARNING: Data offset is outside of currently available data device.\n" +msgstr "" + +#: lib/setup.c:1636 lib/setup.c:1823 lib/setup.c:1844 lib/setup.c:2112 +#, c-format +msgid "Cannot wipe header on device %s." +msgstr "无法将设备 %s 上的标头擦除。" + +#: lib/setup.c:1688 +msgid "WARNING: The device activation will fail, dm-crypt is missing support for requested encryption sector size.\n" +msgstr "" + +#: lib/setup.c:1710 +msgid "Volume key is too small for encryption with integrity extensions." +msgstr "卷密钥对于带完整性校验扩展的加密而言过小。" + +#: lib/setup.c:1765 +#, fuzzy, c-format +msgid "Cipher %s-%s (key size %zd bits) is not available." +msgstr "密文 %s 不可用。\n" + +#: lib/setup.c:1798 +#, c-format +msgid "WARNING: LUKS2 metadata size changed to % bytes.\n" +msgstr "" + +#: lib/setup.c:1802 +#, c-format +msgid "WARNING: LUKS2 keyslots area size changed to % bytes.\n" +msgstr "" + +#: lib/setup.c:1826 lib/utils_device.c:829 lib/luks1/keyencryption.c:256 +#: lib/luks2/luks2_reencrypt.c:2356 lib/luks2/luks2_reencrypt.c:3348 +#, c-format +msgid "Device %s is too small." +msgstr "设备 %s 太小。" + +#: lib/setup.c:1837 lib/setup.c:1863 +#, c-format +msgid "Cannot format device %s in use." +msgstr "无法格式化正在使用的设备 %s。" + +#: lib/setup.c:1840 lib/setup.c:1866 +#, c-format +msgid "Cannot format device %s, permission denied." +msgstr "无法格式化设备 %s,权限被拒绝。" + +#: lib/setup.c:1852 lib/setup.c:2164 +#, fuzzy, c-format +msgid "Cannot format integrity for device %s." +msgstr "无法写入设备 %s。\n" + +#: lib/setup.c:1870 +#, c-format +msgid "Cannot format device %s." +msgstr "无法格式化设备 %s。" + +#: lib/setup.c:1888 +msgid "Can't format LOOPAES without device." +msgstr "无法在没有设备的情况下格式化 LOOPAES。" + +#: lib/setup.c:1933 +msgid "Can't format VERITY without device." +msgstr "无法在没有设备的情况下格式化 VERIFY。" + +#: lib/setup.c:1944 lib/verity/verity.c:103 +#, c-format +msgid "Unsupported VERITY hash type %d." +msgstr "不支持的 VERITY 哈希类型 %d。" + +#: lib/setup.c:1950 lib/verity/verity.c:111 +msgid "Unsupported VERITY block size." +msgstr "不支持的 VERITY 块大小。" + +#: lib/setup.c:1955 lib/verity/verity.c:75 +msgid "Unsupported VERITY hash offset." +msgstr "不支持的 VERITY 哈希偏移量。" + +#: lib/setup.c:1960 +msgid "Unsupported VERITY FEC offset." +msgstr "不支持的 VERITY 哈希偏移量。" + +#: lib/setup.c:1984 +msgid "Data area overlaps with hash area." +msgstr "数据区域重叠覆盖了哈希区域。" + +#: lib/setup.c:2009 +msgid "Hash area overlaps with FEC area." +msgstr "哈希区域重叠覆盖了 FEC 区域。" + +#: lib/setup.c:2016 +msgid "Data area overlaps with FEC area." +msgstr "数据区域重叠覆盖了 FEC 区域。" + +#: lib/setup.c:2221 +#, c-format +msgid "Unknown crypt device type %s requested." +msgstr "请求了未知的加密设备类型 %s。" + +#: lib/setup.c:2485 lib/setup.c:2557 lib/setup.c:2570 +#, fuzzy, c-format +msgid "Unsupported parameters on device %s." +msgstr "无法将设备 %s 上的标头擦除。" + +#: lib/setup.c:2491 lib/setup.c:2576 lib/luks2/luks2_reencrypt.c:2408 +#: lib/luks2/luks2_reencrypt.c:2718 +#, fuzzy, c-format +msgid "Mismatching parameters on device %s." +msgstr "无法将设备 %s 上的标头擦除。" + +#: lib/setup.c:2596 +msgid "Crypt devices mismatch." +msgstr "" + +#: lib/setup.c:2633 lib/setup.c:2638 lib/luks2/luks2_reencrypt.c:2054 +#: lib/luks2/luks2_reencrypt.c:3126 +#, fuzzy, c-format +msgid "Failed to reload device %s." +msgstr "无法获取设备 %s 的读取锁。" + +#: lib/setup.c:2643 lib/setup.c:2648 lib/luks2/luks2_reencrypt.c:2025 +#: lib/luks2/luks2_reencrypt.c:2032 +#, fuzzy, c-format +msgid "Failed to suspend device %s." +msgstr "无法获取设备 %s 的读取锁。" + +#: lib/setup.c:2653 lib/luks2/luks2_reencrypt.c:2039 +#: lib/luks2/luks2_reencrypt.c:3061 lib/luks2/luks2_reencrypt.c:3130 +#, fuzzy, c-format +msgid "Failed to resume device %s." +msgstr "打开临时密钥存储设备失败。\n" + +#: lib/setup.c:2667 +#, c-format +msgid "Fatal error while reloading device %s (on top of device %s)." +msgstr "" + +#: lib/setup.c:2670 lib/setup.c:2672 +#, fuzzy, c-format +msgid "Failed to switch device %s to dm-error." +msgstr "无法获取设备 %s 上的写入锁。" + +#: lib/setup.c:2744 +msgid "Cannot resize loop device." +msgstr "无法改变回环设备大小。" + +#: lib/setup.c:2817 +msgid "Do you really want to change UUID of device?" +msgstr "你真的想改变设备的 UUID 吗?" + +#: lib/setup.c:2893 +msgid "Header backup file does not contain compatible LUKS header." +msgstr "标头备份文件不包含兼容的 LUKS 标头。" + +#: lib/setup.c:2993 +#, c-format +msgid "Volume %s is not active." +msgstr "卷 %s 未激活。" + +#: lib/setup.c:3004 +#, c-format +msgid "Volume %s is already suspended." +msgstr "卷 %s 已挂起。" + +#: lib/setup.c:3017 +#, c-format +msgid "Suspend is not supported for device %s." +msgstr "设备 %s 不支持挂起。" + +#: lib/setup.c:3019 +#, c-format +msgid "Error during suspending device %s." +msgstr "挂起设备 %s 时出错。" + +#: lib/setup.c:3052 lib/setup.c:3119 +#, c-format +msgid "Volume %s is not suspended." +msgstr "卷 %s 未挂起。" + +#: lib/setup.c:3081 +#, c-format +msgid "Resume is not supported for device %s." +msgstr "设备 %s 不支持恢复。" + +#: lib/setup.c:3083 lib/setup.c:3151 +#, c-format +msgid "Error during resuming device %s." +msgstr "恢复设备 %s 时出错。" + +#: lib/setup.c:3219 lib/setup.c:3407 +msgid "Cannot add key slot, all slots disabled and no volume key provided." +msgstr "无法添加密钥槽,所有密钥槽已禁用且未提供卷密钥。" + +#: lib/setup.c:3359 +msgid "Failed to swap new key slot." +msgstr "交换新密钥槽失败。" + +#: lib/setup.c:3524 lib/setup.c:4161 lib/setup.c:4174 lib/setup.c:4182 +#: lib/setup.c:4195 lib/setup.c:4480 lib/setup.c:5593 +msgid "Volume key does not match the volume." +msgstr "卷密钥与卷不匹配。" + +#: lib/setup.c:3545 +#, c-format +msgid "Key slot %d is invalid." +msgstr "密钥槽 %d 无效。" + +#: lib/setup.c:3551 src/cryptsetup.c:1511 src/cryptsetup.c:1856 +#, fuzzy, c-format +msgid "Keyslot %d is not active." +msgstr "密钥槽 %d 未使用。\n" + +#: lib/setup.c:3570 +#, fuzzy +msgid "Device header overlaps with data area." +msgstr "数据区域重叠覆盖了哈希区域。" + +#: lib/setup.c:3836 +#, fuzzy +msgid "Reencryption in-progress. Cannot activate device." +msgstr "重加密已在进行中。" + +#: lib/setup.c:3838 lib/luks2/luks2_json_metadata.c:2244 +#: lib/luks2/luks2_reencrypt.c:2817 +#, fuzzy +msgid "Failed to get reencryption lock." +msgstr "无法获取写入设备锁。" + +#: lib/setup.c:3851 lib/luks2/luks2_reencrypt.c:2836 +#, fuzzy +msgid "LUKS2 reencryption recovery failed." +msgstr "不支持的加密扇区大小。" + +#: lib/setup.c:3978 lib/setup.c:4248 +msgid "Device type is not properly initialised." +msgstr "设备类型未正确初始化。" + +#: lib/setup.c:4022 +#, c-format +msgid "Cannot use device %s, name is invalid or still in use." +msgstr "无法使用设备 %s,名称无效或它正被使用。" + +#: lib/setup.c:4025 +#, c-format +msgid "Device %s already exists." +msgstr "设备 %s 已存在。" + +#: lib/setup.c:4148 +msgid "Incorrect volume key specified for plain device." +msgstr "为普通设备指定的卷密钥有误。" + +#: lib/setup.c:4214 +msgid "Incorrect root hash specified for verity device." +msgstr "为 verity 设备指定的根 hash 不正确。" + +#: lib/setup.c:4289 lib/setup.c:4305 lib/luks2/luks2_json_metadata.c:2297 +#: src/cryptsetup.c:2527 +#, c-format +msgid "Device %s is still in use." +msgstr "设备 %s 仍在使用。" + +#: lib/setup.c:4314 +#, c-format +msgid "Invalid device %s." +msgstr "设备 %s 无效。" + +#: lib/setup.c:4430 +msgid "Volume key buffer too small." +msgstr "卷密钥缓冲区太小。" + +#: lib/setup.c:4438 +msgid "Cannot retrieve volume key for plain device." +msgstr "无法获取普通设备的卷密钥。" + +#: lib/setup.c:4449 +#, c-format +msgid "This operation is not supported for %s crypt device." +msgstr "不支持在 %s 加密设备上执行此操作。" + +#: lib/setup.c:4636 +msgid "Dump operation is not supported for this device type." +msgstr "不支持在此类设备上执行导出操作。" + +#: lib/setup.c:4947 +#, c-format +msgid "Data offset is not multiple of %u bytes." +msgstr "" + +#: lib/setup.c:5229 +#, c-format +msgid "Cannot convert device %s which is still in use." +msgstr "无法转换正在使用的设备 %s。" + +#: lib/setup.c:5526 +#, c-format +msgid "Failed to assign keyslot %u as the new volume key." +msgstr "将密钥槽 %u 指定为新卷密钥的操作失败。" + +#: lib/setup.c:5599 +msgid "Failed to initialise default LUKS2 keyslot parameters." +msgstr "初始化默认 LUKS2 密钥槽参数失败。" + +#: lib/setup.c:5605 +#, fuzzy, c-format +msgid "Failed to assign keyslot %d to digest." +msgstr "交换新密钥槽失败。\n" + +#: lib/setup.c:5690 +msgid "Failed to load key in kernel keyring." +msgstr "在内核密钥环中加载密钥失败。" + +#: lib/setup.c:5757 +msgid "Kernel keyring is not supported by the kernel." +msgstr "该内核不支持内核密钥环。" + +#: lib/setup.c:5767 lib/luks2/luks2_reencrypt.c:2933 +#, c-format +msgid "Failed to read passphrase from keyring (error %d)." +msgstr "从密钥环读取口令失败(错误 %d)。" + +#: lib/setup.c:5791 +msgid "Failed to acquire global memory-hard access serialization lock." +msgstr "" + +#: lib/utils.c:81 +msgid "Cannot get process priority." +msgstr "无法获取进程优先级。" + +#: lib/utils.c:95 +msgid "Cannot unlock memory." +msgstr "无法解锁内存。" + +#: lib/utils.c:169 lib/tcrypt/tcrypt.c:498 +msgid "Failed to open key file." +msgstr "打开 (open) 密钥文件失败。" + +#: lib/utils.c:174 +msgid "Cannot read keyfile from a terminal." +msgstr "无法从终端读取密钥文件。" + +# stat() 主要就是出来一个各种文件信息…… +#: lib/utils.c:191 +msgid "Failed to stat key file." +msgstr "获取 (stat) 密钥文件信息失败。" + +#: lib/utils.c:199 lib/utils.c:220 +msgid "Cannot seek to requested keyfile offset." +msgstr "无法寻找 (seek) 到请求的密钥文件偏移量。" + +#: lib/utils.c:214 lib/utils.c:229 src/utils_password.c:188 +#: src/utils_password.c:201 +msgid "Out of memory while reading passphrase." +msgstr "读取密码时内存耗尽。" + +#: lib/utils.c:249 +msgid "Error reading passphrase." +msgstr "读取口令出错。" + +#: lib/utils.c:266 +msgid "Nothing to read on input." +msgstr "" + +#: lib/utils.c:273 +msgid "Maximum keyfile size exceeded." +msgstr "超出最大密钥文件大小。" + +#: lib/utils.c:278 +msgid "Cannot read requested amount of data." +msgstr "无法读取请求量的数据。" + +#: lib/utils_device.c:188 lib/utils_storage_wrappers.c:111 +#: lib/luks1/keyencryption.c:92 +#, c-format +msgid "Device %s doesn't exist or access denied." +msgstr "设备 %s 不存在或访问被拒绝。" + +#: lib/utils_device.c:198 +#, fuzzy, c-format +msgid "Device %s is not compatible." +msgstr "设备 %s 未激活。" + +#: lib/utils_device.c:643 +#, fuzzy, c-format +msgid "Device %s is too small. Need at least % bytes." +msgstr "设备 %s 过小。(LUKS1 需要至少 % 字节。)" + +#: lib/utils_device.c:724 +#, c-format +msgid "Cannot use device %s which is in use (already mapped or mounted)." +msgstr "无法使用正被使用的设备 %s(已被映射或挂载)。" + +#: lib/utils_device.c:728 +#, c-format +msgid "Cannot use device %s, permission denied." +msgstr "无法使用设备 %s,权限被拒绝。" + +#: lib/utils_device.c:731 +#, c-format +msgid "Cannot get info about device %s." +msgstr "无法获取有关设备 %s 的信息。" + +#: lib/utils_device.c:754 +msgid "Cannot use a loopback device, running as non-root user." +msgstr "无法使用回环设备,正作为非 root 用户运行。" + +#: lib/utils_device.c:764 +msgid "Attaching loopback device failed (loop device with autoclear flag is required)." +msgstr "连接回环设备失败(需要有 autoclear 旗标的回环设备)。" + +#: lib/utils_device.c:810 +#, c-format +msgid "Requested offset is beyond real size of device %s." +msgstr "请求的偏移量超出设备 %s 的真实大小。" + +#: lib/utils_device.c:818 +#, c-format +msgid "Device %s has zero size." +msgstr "设备 %s 大小为零。" + +#: lib/utils_pbkdf.c:100 +#, fuzzy +msgid "Requested PBKDF target time cannot be zero." +msgstr "请求的 PBKDF 目标时间不能为零。" + +#: lib/utils_pbkdf.c:106 +#, c-format +msgid "Unknown PBKDF type %s." +msgstr "未知的 PBKDF 类型 %s。" + +#: lib/utils_pbkdf.c:111 +#, fuzzy, c-format +msgid "Requested hash %s is not supported." +msgstr "不支持请求的 LUKS 哈希 %s。" + +#: lib/utils_pbkdf.c:122 +msgid "Requested PBKDF type is not supported for LUKS1." +msgstr "请求的 PBKDF 类型不被 LUKS1 支持。" + +#: lib/utils_pbkdf.c:128 +msgid "PBKDF max memory or parallel threads must not be set with pbkdf2." +msgstr "" + +#: lib/utils_pbkdf.c:133 lib/utils_pbkdf.c:143 +#, c-format +msgid "Forced iteration count is too low for %s (minimum is %u)." +msgstr "" + +#: lib/utils_pbkdf.c:148 +#, c-format +msgid "Forced memory cost is too low for %s (minimum is %u kilobytes)." +msgstr "" + +#: lib/utils_pbkdf.c:155 +#, c-format +msgid "Requested maximum PBKDF memory cost is too high (maximum is %d kilobytes)." +msgstr "请求的最大 PBKDF 内存开销过大(最大为 %d 千字节)。" + +#: lib/utils_pbkdf.c:160 +#, fuzzy +msgid "Requested maximum PBKDF memory cannot be zero." +msgstr "请求的最大 PBKDF 内存使用量不能为零。" + +#: lib/utils_pbkdf.c:164 +#, fuzzy +msgid "Requested PBKDF parallel threads cannot be zero." +msgstr "请求的 PBKDF 并行线程数不能为零。" + +#: lib/utils_pbkdf.c:184 +msgid "Only PBKDF2 is supported in FIPS mode." +msgstr "" + +#: lib/utils_benchmark.c:166 +msgid "PBKDF benchmark disabled but iterations not set." +msgstr "" + +#: lib/utils_benchmark.c:185 +#, c-format +msgid "Not compatible PBKDF2 options (using hash algorithm %s)." +msgstr "PBKDF2 选项不兼容(正在使用哈希算法 %s)。" + +#: lib/utils_benchmark.c:205 +msgid "Not compatible PBKDF options." +msgstr "PBKDF2 选项不兼容。" + +#: lib/utils_device_locking.c:103 +#, c-format +msgid "Locking aborted. The locking path %s/%s is unusable (not a directory or missing)." +msgstr "锁定中止。锁定路径 %s/%s 不可用(不是一个目录或缺失)。" + +#: lib/utils_device_locking.c:110 +#, c-format +msgid "WARNING: Locking directory %s/%s is missing!\n" +msgstr "警告:锁定目录 %s/%s 缺失!\n" + +#: lib/utils_device_locking.c:120 +#, c-format +msgid "Locking aborted. The locking path %s/%s is unusable (%s is not a directory)." +msgstr "锁定中止。锁定路径 %s/%s 不可用(%s 不是目录)。" + +#: lib/utils_wipe.c:185 src/cryptsetup_reencrypt.c:933 +#: src/cryptsetup_reencrypt.c:1017 +msgid "Cannot seek to device offset." +msgstr "无法寻找到设备偏移位置。" + +#: lib/utils_wipe.c:209 +#, c-format +msgid "Device wipe error, offset %." +msgstr "" + +#: lib/luks1/keyencryption.c:40 +#, c-format +msgid "" +"Failed to setup dm-crypt key mapping for device %s.\n" +"Check that kernel supports %s cipher (check syslog for more info)." +msgstr "" +"为设备 %s 配置 dm-crypt 键映射失败。\n" +"请确认内核支持 %s 加密(查看系统日志 (syslog) 以获取更多信息)。" + +#: lib/luks1/keyencryption.c:45 +msgid "Key size in XTS mode must be 256 or 512 bits." +msgstr "XTS 模式的密钥大小必须是 256 或 512 位。" + +#: lib/luks1/keyencryption.c:47 +msgid "Cipher specification should be in [cipher]-[mode]-[iv] format." +msgstr "" + +#: lib/luks1/keyencryption.c:98 lib/luks1/keymanage.c:345 +#: lib/luks1/keymanage.c:636 lib/luks1/keymanage.c:1074 +#: lib/luks2/luks2_json_metadata.c:1253 lib/luks2/luks2_keyslot.c:739 +#, c-format +msgid "Cannot write to device %s, permission denied." +msgstr "无法写入到设备 %s,访问被拒绝。" + +#: lib/luks1/keyencryption.c:121 +msgid "Failed to open temporary keystore device." +msgstr "打开临时密钥存储设备失败。" + +#: lib/luks1/keyencryption.c:128 +msgid "Failed to access temporary keystore device." +msgstr "访问临时密钥存储设备失败。" + +#: lib/luks1/keyencryption.c:201 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 "加密密钥槽时发生输入输出错误。" + +#: lib/luks1/keyencryption.c:247 lib/luks1/keymanage.c:348 +#: lib/luks1/keymanage.c:589 lib/luks1/keymanage.c:639 lib/tcrypt/tcrypt.c:661 +#: lib/verity/verity.c:81 lib/verity/verity.c:179 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:1256 +#: src/cryptsetup_reencrypt.c:205 +#, c-format +msgid "Cannot open device %s." +msgstr "无法打开设备 %s。" + +#: lib/luks1/keyencryption.c:258 lib/luks2/luks2_keyslot_luks2.c:137 +msgid "IO error while decrypting keyslot." +msgstr "解密密钥槽时发生输入输出错误。" + +#: lib/luks1/keymanage.c:111 +#, c-format +msgid "Device %s is too small. (LUKS1 requires at least % bytes.)" +msgstr "设备 %s 过小。(LUKS1 需要至少 % 字节。)" + +#: 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 +#, c-format +msgid "LUKS keyslot %u is invalid." +msgstr "LUKS 密钥槽 %u 无效。" + +#: lib/luks1/keymanage.c:229 lib/luks1/keymanage.c:473 +#: lib/luks2/luks2_json_metadata.c:1084 src/cryptsetup.c:1372 +#: src/cryptsetup.c:1498 src/cryptsetup.c:1555 src/cryptsetup.c:1611 +#: src/cryptsetup.c:1678 src/cryptsetup.c:1781 src/cryptsetup.c:1845 +#: src/cryptsetup.c:2005 src/cryptsetup.c:2194 src/cryptsetup.c:2254 +#: src/cryptsetup.c:2320 src/cryptsetup.c:2484 src/cryptsetup.c:3137 +#: src/cryptsetup.c:3146 src/cryptsetup_reencrypt.c:1372 +#, c-format +msgid "Device %s is not a valid LUKS device." +msgstr "%s 不是有效的 LUKS 设备。" + +#: lib/luks1/keymanage.c:247 lib/luks2/luks2_json_metadata.c:1101 +#, c-format +msgid "Requested header backup file %s already exists." +msgstr "请求的标头备份文件 %s 已存在。" + +#: lib/luks1/keymanage.c:249 lib/luks2/luks2_json_metadata.c:1103 +#, c-format +msgid "Cannot create header backup file %s." +msgstr "无法创建标头备份文件 %s。" + +#: lib/luks1/keymanage.c:256 lib/luks2/luks2_json_metadata.c:1110 +#, c-format +msgid "Cannot write header backup file %s." +msgstr "无法写入标头备份文件 %s。" + +#: lib/luks1/keymanage.c:287 lib/luks2/luks2_json_metadata.c:1162 +msgid "Backup file doesn't contain valid LUKS header." +msgstr "备份文件不包含有效 LUKS 标头。" + +#: lib/luks1/keymanage.c:300 lib/luks1/keymanage.c:550 +#: lib/luks2/luks2_json_metadata.c:1183 +#, c-format +msgid "Cannot open header backup file %s." +msgstr "无法打开备份标头文件 %s。" + +#: lib/luks1/keymanage.c:308 lib/luks2/luks2_json_metadata.c:1191 +#, c-format +msgid "Cannot read header backup file %s." +msgstr "无法读取标头备份文件 %s。" + +#: lib/luks1/keymanage.c:318 +#, fuzzy +msgid "Data offset or key size differs on device and backup, restore failed." +msgstr "源设备和备份上的数据偏移或密钥大小不符,恢复失败。\n" + +#: lib/luks1/keymanage.c:326 +#, c-format +msgid "Device %s %s%s" +msgstr "设备 %s %s%s" + +#: lib/luks1/keymanage.c:327 +msgid "does not contain LUKS header. Replacing header can destroy data on that device." +msgstr "不包含 LUKS 标头。替换标头可能损毁设备上的数据。" + +#: lib/luks1/keymanage.c:328 +msgid "already contains LUKS header. Replacing header will destroy existing keyslots." +msgstr "已包含 LUKS 标头。替换标头将损毁已存在的密钥槽。" + +#: lib/luks1/keymanage.c:329 lib/luks2/luks2_json_metadata.c:1225 +msgid "" +"\n" +"WARNING: real device header has different UUID than backup!" +msgstr "" +"\n" +"警告: 真实设备标头 UUID 和备份不符!" + +#: lib/luks1/keymanage.c:376 +msgid "Non standard key size, manual repair required." +msgstr "不标准的密钥大小,需要手动修复。" + +#: lib/luks1/keymanage.c:381 +msgid "Non standard keyslots alignment, manual repair required." +msgstr "不标准的密钥槽对齐,需要手动修复。" + +#: lib/luks1/keymanage.c:391 +msgid "Repairing keyslots." +msgstr "正在修复密钥槽。" + +#: lib/luks1/keymanage.c:410 +#, c-format +msgid "Keyslot %i: offset repaired (%u -> %u)." +msgstr "密钥槽 %i: 偏移已修复 (%u -> %u)。" + +#: lib/luks1/keymanage.c:418 +#, c-format +msgid "Keyslot %i: stripes repaired (%u -> %u)." +msgstr "密钥槽 %i:已修复条带(%u -> %u)。" + +#: lib/luks1/keymanage.c:427 +#, c-format +msgid "Keyslot %i: bogus partition signature." +msgstr "密钥槽 %i:虚假的分区签名。" + +#: lib/luks1/keymanage.c:432 +#, c-format +msgid "Keyslot %i: salt wiped." +msgstr "密钥槽 %i: 已清除盐。" + +#: lib/luks1/keymanage.c:449 +msgid "Writing LUKS header to disk." +msgstr "正在将 LUKS 标头写入磁盘。" + +#: lib/luks1/keymanage.c:454 +msgid "Repair failed." +msgstr "修复失败。" + +#: lib/luks1/keymanage.c:482 lib/luks1/keymanage.c:751 +#, c-format +msgid "Requested LUKS hash %s is not supported." +msgstr "不支持请求的 LUKS 哈希 %s。" + +#: lib/luks1/keymanage.c:510 src/cryptsetup.c:1081 +msgid "No known problems detected for LUKS header." +msgstr "未在 LUKS 标头发现已知问题。" + +#: lib/luks1/keymanage.c:661 +#, c-format +msgid "Error during update of LUKS header on device %s." +msgstr "更新设备 %s 上的 LUKS 标头时出错。" + +#: lib/luks1/keymanage.c:669 +#, c-format +msgid "Error re-reading LUKS header after update on device %s." +msgstr "在更新设备 %s 后重新读取 LUKS 标头失败。" + +#: lib/luks1/keymanage.c:745 +#, fuzzy +msgid "Data offset for LUKS header must be either 0 or higher than header size." +msgstr "分离的 LUKS 标头的数据偏移量必须为零或高于标头大小(%d 扇区)。" + +#: lib/luks1/keymanage.c:756 lib/luks1/keymanage.c:821 +#: lib/luks2/luks2_json_format.c:283 lib/luks2/luks2_json_metadata.c:1002 +#: src/cryptsetup.c:2647 +msgid "Wrong LUKS UUID format provided." +msgstr "提供了错误的 LUKS UUID 格式。" + +#: lib/luks1/keymanage.c:779 +msgid "Cannot create LUKS header: reading random salt failed." +msgstr "无法创建 LUKS 标头:读取随机盐失败。" + +#: lib/luks1/keymanage.c:800 +#, c-format +msgid "Cannot create LUKS header: header digest failed (using hash %s)." +msgstr "无法创建 LUKS 标头:标头摘要失败(正在使用哈希 %s)。" + +#: lib/luks1/keymanage.c:844 +#, c-format +msgid "Key slot %d active, purge first." +msgstr "密钥槽 %d 已激活,请先清除。" + +#: lib/luks1/keymanage.c:850 +#, fuzzy, c-format +msgid "Key slot %d material includes too few stripes. Header manipulation?" +msgstr "密钥槽 %d 条带数过少。标头修改?\n" + +#: lib/luks1/keymanage.c:1060 +#, fuzzy, c-format +msgid "Key slot %d is invalid, please select keyslot between 0 and %d." +msgstr "密钥槽 %d 无效,请选择标号 0 到 %d 间的密钥槽。\n" + +#: lib/luks1/keymanage.c:1078 lib/luks2/luks2_keyslot.c:743 +#, c-format +msgid "Cannot wipe device %s." +msgstr "无法擦除设备 %s。" + +#: lib/loopaes/loopaes.c:146 +#, fuzzy +msgid "Detected not yet supported GPG encrypted keyfile." +msgstr "探测到未支持的 GPG 加密密钥文件。\n" + +#: lib/loopaes/loopaes.c:147 +msgid "Please use gpg --decrypt | cryptsetup --keyfile=- ...\n" +msgstr "请使用 gpg --decrypt <密钥文件> | cryptsetup --keyfile=- ...\n" + +#: lib/loopaes/loopaes.c:168 lib/loopaes/loopaes.c:188 +msgid "Incompatible loop-AES keyfile detected." +msgstr "探测到不兼容的 loop-AES 密钥文件。" + +#: lib/loopaes/loopaes.c:245 +#, fuzzy +msgid "Kernel doesn't support loop-AES compatible mapping." +msgstr "内核不支持 loop-AES 兼容映射。\n" + +#: lib/tcrypt/tcrypt.c:505 +#, c-format +msgid "Error reading keyfile %s." +msgstr "读取密钥文件 %s 出错。" + +#: lib/tcrypt/tcrypt.c:545 +#, c-format +msgid "Maximum TCRYPT passphrase length (%d) exceeded." +msgstr "超出 TCRYPT 口令最大长度限制 (%d)。" + +#: lib/tcrypt/tcrypt.c:586 +#, c-format +msgid "PBKDF2 hash algorithm %s not available, skipping." +msgstr "PBKDF2 哈希算法 %s 不可用,将跳过。" + +#: lib/tcrypt/tcrypt.c:602 src/cryptsetup.c:959 +msgid "Required kernel crypto interface not available." +msgstr "无法找到所需的内核加密接口。" + +#: lib/tcrypt/tcrypt.c:604 src/cryptsetup.c:961 +msgid "Ensure you have algif_skcipher kernel module loaded." +msgstr "请确定您已载入内核模块 algif_skcipher。" + +#: lib/tcrypt/tcrypt.c:744 +#, c-format +msgid "Activation is not supported for %d sector size." +msgstr "扇区大小为 %d 时不支持激活。" + +#: lib/tcrypt/tcrypt.c:750 +msgid "Kernel doesn't support activation for this TCRYPT legacy mode." +msgstr "内核不支持激活此处的旧 TCRYPT 模式。" + +#: lib/tcrypt/tcrypt.c:784 +#, c-format +msgid "Activating TCRYPT system encryption for partition %s." +msgstr "正在为分区 %s 激活 TCRYPT 系统加密。" + +#: lib/tcrypt/tcrypt.c:862 +msgid "Kernel doesn't support TCRYPT compatible mapping." +msgstr "内核不支持 TCRYPT 兼容映射。" + +#: lib/tcrypt/tcrypt.c:1084 +msgid "This function is not supported without TCRYPT header load." +msgstr "未载入 TCRYPT 标头时不支持此功能。" + +#: lib/verity/verity.c:69 lib/verity/verity.c:172 +#, c-format +msgid "Verity device %s doesn't use on-disk header." +msgstr "Verity 设备 %s 未使用磁盘上的标头。" + +#: lib/verity/verity.c:91 +#, c-format +msgid "Device %s is not a valid VERITY device." +msgstr "%s 不是有效的 VERITY 设备。" + +#: lib/verity/verity.c:98 +#, c-format +msgid "Unsupported VERITY version %d." +msgstr "不支持的 VERITY 版本 %d。" + +#: lib/verity/verity.c:129 +msgid "VERITY header corrupted." +msgstr "VERITY 标头损坏。" + +#: lib/verity/verity.c:166 +#, fuzzy, c-format +msgid "Wrong VERITY UUID format provided on device %s." +msgstr "为设备 %s 提供的 VERITY UUID 错误。\n" + +#: lib/verity/verity.c:199 +#, fuzzy, c-format +msgid "Error during update of verity header on device %s." +msgstr "更新设备 %s 上的 VERITY 标头时出错。\n" + +#: lib/verity/verity.c:262 +msgid "Errors cannot be repaired with FEC device." +msgstr "" + +#: lib/verity/verity.c:264 +#, c-format +msgid "Found %u repairable errors with FEC device." +msgstr "" + +#: lib/verity/verity.c:302 +msgid "Kernel doesn't support dm-verity mapping." +msgstr "内核不支持 dm-verity 映射。" + +#: lib/verity/verity.c:313 +#, fuzzy +msgid "Verity device detected corruption after activation." +msgstr "在 VERITY 设备激活后探测到损坏。\n" + +#: lib/verity/verity_hash.c:59 +#, fuzzy, c-format +msgid "Spare area is not zeroed at position %." +msgstr "备用区位置 % 未清零。\n" + +#: lib/verity/verity_hash.c:160 lib/verity/verity_hash.c:287 +#: lib/verity/verity_hash.c:300 +msgid "Device offset overflow." +msgstr "设备偏移量溢出。" + +#: lib/verity/verity_hash.c:200 +#, fuzzy, c-format +msgid "Verification failed at position %." +msgstr "在 % 上发生检验错误。\n" + +#: lib/verity/verity_hash.c:273 +#, fuzzy +msgid "Invalid size parameters for verity device." +msgstr "为 VERITY 设备提供的大小指标无效。\n" + +#: lib/verity/verity_hash.c:293 +msgid "Hash area overflow." +msgstr "哈希区域溢出。" + +#: lib/verity/verity_hash.c:370 +msgid "Verification of data area failed." +msgstr "数据区检验失败。" + +#: lib/verity/verity_hash.c:375 +msgid "Verification of root hash failed." +msgstr "根哈希值检验失败。" + +#: lib/verity/verity_hash.c:381 +#, fuzzy +msgid "Input/output error while creating hash area." +msgstr "创建哈希数据区时发生输入/输出错误。\n" + +#: lib/verity/verity_hash.c:383 +msgid "Creation of hash area failed." +msgstr "创建哈希区失败。" + +#: lib/verity/verity_hash.c:430 +#, fuzzy, c-format +msgid "WARNING: Kernel cannot activate device if data block size exceeds page size (%u)." +msgstr "警告:如数据块大小超过内存分页大小,内核将无法激活设备 (%u)。\n" + +#: lib/verity/verity_fec.c:132 +#, fuzzy +msgid "Failed to allocate RS context." +msgstr "打开 (open) 密钥文件失败。\n" + +# stat() 主要就是出来一个各种文件信息…… +#: lib/verity/verity_fec.c:147 +#, fuzzy +msgid "Failed to allocate buffer." +msgstr "获取 (stat) 密钥文件统计数据失败。\n" + +#: lib/verity/verity_fec.c:157 +#, fuzzy, c-format +msgid "Failed to read RS block % byte %d." +msgstr "无法访问临时密钥存储设备。\n" + +#: lib/verity/verity_fec.c:170 +#, fuzzy, c-format +msgid "Failed to read parity for RS block %." +msgstr "无法访问临时密钥存储设备。\n" + +#: lib/verity/verity_fec.c:178 +#, fuzzy, c-format +msgid "Failed to repair parity for block %." +msgstr "无法访问临时密钥存储设备。\n" + +#: lib/verity/verity_fec.c:189 +#, fuzzy, c-format +msgid "Failed to write parity for RS block %." +msgstr "无法访问临时密钥存储设备。\n" + +#: lib/verity/verity_fec.c:224 +msgid "Block sizes must match for FEC." +msgstr "" + +#: lib/verity/verity_fec.c:230 +msgid "Invalid number of parity bytes." +msgstr "" + +#: lib/verity/verity_fec.c:266 +#, fuzzy, c-format +msgid "Failed to determine size for device %s." +msgstr "打开临时密钥存储设备失败。\n" + +#: lib/integrity/integrity.c:241 lib/integrity/integrity.c:306 +#, fuzzy +msgid "Kernel doesn't support dm-integrity mapping." +msgstr "内核不支持 dm-verity 映射。\n" + +#: lib/luks2/luks2_disk_metadata.c:383 lib/luks2/luks2_json_metadata.c:959 +#: lib/luks2/luks2_json_metadata.c:1245 +#, c-format +msgid "Failed to acquire write lock on device %s." +msgstr "无法获取设备 %s 上的写入锁。" + +#: lib/luks2/luks2_disk_metadata.c:392 +msgid "Detected attempt for concurrent LUKS2 metadata update. Aborting operation." +msgstr "" + +#: 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 "" + +#: lib/luks2/luks2_json_format.c:227 +#, fuzzy +msgid "Requested data offset is too small." +msgstr "设备 %s 太小。" + +#: 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 "" + +#: lib/luks2/luks2_json_metadata.c:946 lib/luks2/luks2_json_metadata.c:1075 +#: lib/luks2/luks2_json_metadata.c:1151 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:1168 +#, c-format +msgid "Forbidden LUKS2 requirements detected in backup %s." +msgstr "" + +#: lib/luks2/luks2_json_metadata.c:1209 +#, fuzzy +msgid "Data offset differ on device and backup, restore failed." +msgstr "源设备和备份上的数据偏移或密钥大小不符,恢复失败。\n" + +#: lib/luks2/luks2_json_metadata.c:1215 +#, fuzzy +msgid "Binary header with keyslot areas size differ on device and backup, restore failed." +msgstr "源设备和备份上的数据偏移或密钥大小不符,恢复失败。\n" + +#: lib/luks2/luks2_json_metadata.c:1222 +#, c-format +msgid "Device %s %s%s%s%s" +msgstr "设备 %s %s%s%s%s" + +#: lib/luks2/luks2_json_metadata.c:1223 +#, fuzzy +msgid "does not contain LUKS2 header. Replacing header can destroy data on that device." +msgstr "不包含 LUKS 标头。替换标头可能损毁设备上的数据。" + +#: lib/luks2/luks2_json_metadata.c:1224 +#, fuzzy +msgid "already contains LUKS2 header. Replacing header will destroy existing keyslots." +msgstr "已包含 LUKS 标头。替换标头将损毁已存在的密钥槽。" + +#: lib/luks2/luks2_json_metadata.c:1226 +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:1228 +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:1324 +#, c-format +msgid "Ignored unknown flag %s." +msgstr "已忽略未知旗标 %s。" + +#: lib/luks2/luks2_json_metadata.c:2011 lib/luks2/luks2_reencrypt.c:1746 +#, c-format +msgid "Missing key for dm-crypt segment %u" +msgstr "" + +# stat() 主要就是出来一个各种文件信息…… +#: lib/luks2/luks2_json_metadata.c:2023 lib/luks2/luks2_reencrypt.c:1764 +#, fuzzy +msgid "Failed to set dm-crypt segment." +msgstr "设置 pbkdf 参数失败。" + +# stat() 主要就是出来一个各种文件信息…… +#: lib/luks2/luks2_json_metadata.c:2029 lib/luks2/luks2_reencrypt.c:1770 +#, fuzzy +msgid "Failed to set dm-linear segment." +msgstr "设置 pbkdf 参数失败。" + +#: lib/luks2/luks2_json_metadata.c:2156 +msgid "Unsupported device integrity configuration." +msgstr "" + +#: lib/luks2/luks2_json_metadata.c:2242 +msgid "Reencryption in-progress. Cannot deactivate device." +msgstr "" + +#: lib/luks2/luks2_json_metadata.c:2253 lib/luks2/luks2_reencrypt.c:3171 +#, c-format +msgid "Failed to replace suspended device %s with dm-error target." +msgstr "" + +#: lib/luks2/luks2_json_metadata.c:2333 +msgid "Failed to read LUKS2 requirements." +msgstr "读取 LUKS2 需求时失败。" + +#: lib/luks2/luks2_json_metadata.c:2340 +msgid "Unmet LUKS2 requirements detected." +msgstr "探测到未满足的 LUKS2 需求。" + +#: lib/luks2/luks2_json_metadata.c:2348 +msgid "Offline reencryption in progress. Aborting." +msgstr "正在进行离线重加密。中止。" + +#: lib/luks2/luks2_json_metadata.c:2350 +#, fuzzy +msgid "Online reencryption in progress. Aborting." +msgstr "正在进行离线重加密。中止。" + +#: lib/luks2/luks2_keyslot.c:552 lib/luks2/luks2_keyslot.c:589 +msgid "Not enough available memory to open a keyslot." +msgstr "" + +#: lib/luks2/luks2_keyslot.c:554 lib/luks2/luks2_keyslot.c:591 +#, fuzzy +msgid "Keyslot open failed." +msgstr "密钥槽 %i: 已清除盐。" + +#: 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 "" + +#: lib/luks2/luks2_keyslot_luks2.c:480 +#, fuzzy +msgid "No space for new keyslot." +msgstr "交换新密钥槽失败。\n" + +#: lib/luks2/luks2_luks1_convert.c:481 +#, fuzzy, c-format +msgid "Cannot check status of device with uuid: %s." +msgstr "无法检查密码质量:%s\n" + +#: lib/luks2/luks2_luks1_convert.c:507 +msgid "Unable to convert header with LUKSMETA additional metadata." +msgstr "" + +#: lib/luks2/luks2_luks1_convert.c:547 +msgid "Unable to move keyslot area. Not enough space." +msgstr "无法移动密钥槽区域。空间不足。" + +#: lib/luks2/luks2_luks1_convert.c:590 lib/luks2/luks2_luks1_convert.c:872 +msgid "Unable to move keyslot area." +msgstr "无法移动密钥槽区域。" + +#: lib/luks2/luks2_luks1_convert.c:682 +#, fuzzy +msgid "Cannot convert to LUKS1 format - default segment encryption sector size is not 512 bytes." +msgstr "LUKS 密钥槽 %u 无效。\n" + +#: lib/luks2/luks2_luks1_convert.c:690 +#, fuzzy +msgid "Cannot convert to LUKS1 format - key slot digests are not LUKS1 compatible." +msgstr "LUKS 密钥槽 %u 无效。\n" + +#: lib/luks2/luks2_luks1_convert.c:702 +#, fuzzy, c-format +msgid "Cannot convert to LUKS1 format - device uses wrapped key cipher %s." +msgstr "LUKS 密钥槽 %u 无效。\n" + +#: lib/luks2/luks2_luks1_convert.c:710 +#, fuzzy, c-format +msgid "Cannot convert to LUKS1 format - LUKS2 header contains %u token(s)." +msgstr "LUKS 密钥槽 %u 无效。\n" + +#: lib/luks2/luks2_luks1_convert.c:724 +#, fuzzy, c-format +msgid "Cannot convert to LUKS1 format - keyslot %u is in invalid state." +msgstr "LUKS 密钥槽 %u 无效。\n" + +#: lib/luks2/luks2_luks1_convert.c:729 +#, fuzzy, c-format +msgid "Cannot convert to LUKS1 format - slot %u (over maximum slots) is still active." +msgstr "LUKS 密钥槽 %u 无效。\n" + +#: lib/luks2/luks2_luks1_convert.c:734 +#, fuzzy, c-format +msgid "Cannot convert to LUKS1 format - keyslot %u is not LUKS1 compatible." +msgstr "LUKS 密钥槽 %u 无效。\n" + +#: lib/luks2/luks2_reencrypt.c:892 +#, c-format +msgid "Hotzone size must be multiple of calculated zone alignment (%zu bytes)." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:897 +#, fuzzy, c-format +msgid "Device size must be multiple of calculated zone alignment (%zu bytes)." +msgstr "设备 %s 的大小没有和请求的扇区大小对齐(%u 字节)。" + +#: lib/luks2/luks2_reencrypt.c:941 +#, fuzzy, c-format +msgid "Unsupported resilience mode %s" +msgstr "不支持的 LUKS 版本 %d。" + +#: lib/luks2/luks2_reencrypt.c:1158 lib/luks2/luks2_reencrypt.c:1313 +#: lib/luks2/luks2_reencrypt.c:1396 lib/luks2/luks2_reencrypt.c:1430 +#: lib/luks2/luks2_reencrypt.c:3011 +#, fuzzy +msgid "Failed to initialize old segment storage wrapper." +msgstr "初始化默认 LUKS2 密钥槽参数失败。" + +#: lib/luks2/luks2_reencrypt.c:1172 lib/luks2/luks2_reencrypt.c:1291 +#, fuzzy +msgid "Failed to initialize new segment storage wrapper." +msgstr "初始化默认 LUKS2 密钥槽参数失败。" + +#: lib/luks2/luks2_reencrypt.c:1340 +#, fuzzy +msgid "Failed to read checksums for current hotzone." +msgstr "从备份标头读取需求失败。" + +#: lib/luks2/luks2_reencrypt.c:1347 lib/luks2/luks2_reencrypt.c:3019 +#, fuzzy, c-format +msgid "Failed to read hotzone area starting at %." +msgstr "无法访问临时密钥存储设备。\n" + +# stat() 主要就是出来一个各种文件信息…… +#: lib/luks2/luks2_reencrypt.c:1366 +#, fuzzy, c-format +msgid "Failed to decrypt sector %zu." +msgstr "获取 (stat) 密钥文件统计数据失败。\n" + +#: lib/luks2/luks2_reencrypt.c:1372 +#, fuzzy, c-format +msgid "Failed to recover sector %zu." +msgstr "打开 (open) 密钥文件失败。\n" + +#: lib/luks2/luks2_reencrypt.c:1867 +#, c-format +msgid "Source and target device sizes don't match. Source %, target: %." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:1965 +#, fuzzy, c-format +msgid "Failed to activate hotzone device %s." +msgstr "无法获取设备 %s 上的写入锁。" + +#: lib/luks2/luks2_reencrypt.c:1982 +#, c-format +msgid "Failed to activate overlay device %s with actual origin table." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:1989 +#, fuzzy, c-format +msgid "Failed to load new mapping for device %s." +msgstr "打开临时密钥存储设备失败。\n" + +#: lib/luks2/luks2_reencrypt.c:2060 +#, fuzzy +msgid "Failed to refresh reencryption devices stack." +msgstr "无法获取设备 %s 的读取锁。" + +#: lib/luks2/luks2_reencrypt.c:2216 +#, fuzzy +msgid "Failed to set new keyslots area size." +msgstr "交换新密钥槽失败。" + +#: lib/luks2/luks2_reencrypt.c:2318 +#, fuzzy, c-format +msgid "Data shift is not aligned to requested encryption sector size (% bytes)." +msgstr "设备 %s 的大小没有和请求的扇区大小对齐(%u 字节)。" + +#: lib/luks2/luks2_reencrypt.c:2339 +#, fuzzy, c-format +msgid "Data device is not aligned to requested encryption sector size (% bytes)." +msgstr "设备 %s 的大小没有和请求的扇区大小对齐(%u 字节)。" + +#: lib/luks2/luks2_reencrypt.c:2360 +#, c-format +msgid "Data shift (% sectors) is less than future data offset (% sectors)." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:2366 lib/luks2/luks2_reencrypt.c:2760 +#: lib/luks2/luks2_reencrypt.c:2781 +#, fuzzy, c-format +msgid "Failed to open %s in exclusive mode (already mapped or mounted)." +msgstr "无法使用正被使用的设备 %s(已被映射或挂载)。" + +#: lib/luks2/luks2_reencrypt.c:2534 +#, fuzzy +msgid "No LUKS2 reencryption in progress." +msgstr "重加密已在进行中。" + +#: lib/luks2/luks2_reencrypt.c:2540 lib/luks2/luks2_reencrypt.c:3276 +#, fuzzy +msgid "Failed to load LUKS2 reencryption context." +msgstr "打开 (open) 密钥文件失败。\n" + +#: lib/luks2/luks2_reencrypt.c:2600 +#, fuzzy +msgid "Failed to get reencryption state." +msgstr "打开 (open) 密钥文件失败。\n" + +#: lib/luks2/luks2_reencrypt.c:2604 +#, fuzzy +msgid "Device is not in reencryption." +msgstr "设备 %s 未激活。" + +#: lib/luks2/luks2_reencrypt.c:2611 +#, fuzzy +msgid "Reencryption process is already running." +msgstr "重加密已在进行中。" + +#: lib/luks2/luks2_reencrypt.c:2613 +#, fuzzy +msgid "Failed to acquire reencryption lock." +msgstr "无法获取写入设备锁。" + +#: lib/luks2/luks2_reencrypt.c:2631 +msgid "Cannot proceed with reencryption. Run reencryption recovery first." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:2731 +msgid "Active device size and requested reencryption size don't match." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:2745 +msgid "Illegal device size requested in reencryption parameters." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:2815 +#, fuzzy +msgid "Reencryption in-progress. Cannot perform recovery." +msgstr "重加密已在进行中。" + +#: lib/luks2/luks2_reencrypt.c:2887 +msgid "LUKS2 reencryption already initialized in metadata." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:2894 +#, fuzzy +msgid "Failed to initialize LUKS2 reencryption in metadata." +msgstr "初始化默认 LUKS2 密钥槽参数失败。" + +#: lib/luks2/luks2_reencrypt.c:2985 +msgid "Failed to set device segments for next reencryption hotzone." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:3027 +#, fuzzy +msgid "Failed to write reencryption resilience metadata." +msgstr "向新表头写入活动旗标失败。" + +#: lib/luks2/luks2_reencrypt.c:3034 +#, fuzzy +msgid "Decryption failed." +msgstr "修复失败。" + +#: lib/luks2/luks2_reencrypt.c:3039 +#, fuzzy, c-format +msgid "Failed to write hotzone area starting at %." +msgstr "无法访问临时密钥存储设备。\n" + +# stat() 主要就是出来一个各种文件信息…… +#: lib/luks2/luks2_reencrypt.c:3044 +#, fuzzy +msgid "Failed to sync data." +msgstr "获取 (stat) 密钥文件信息失败。" + +#: lib/luks2/luks2_reencrypt.c:3052 +msgid "Failed to update metadata after current reencryption hotzone completed." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:3119 +#, fuzzy +msgid "Failed to write LUKS2 metadata." +msgstr "读取 LUKS2 需求时失败。" + +#: lib/luks2/luks2_reencrypt.c:3142 +#, fuzzy +msgid "Failed to wipe backup segment data." +msgstr "交换新密钥槽失败。" + +#: lib/luks2/luks2_reencrypt.c:3155 +#, fuzzy +msgid "Failed to disable reencryption requirement flag." +msgstr "读取 LUKS2 需求时失败。" + +#: lib/luks2/luks2_reencrypt.c:3163 +#, c-format +msgid "Fatal error while reencrypting chunk starting at %, % sectors long." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:3172 +msgid "Do not resume the device unless replaced with error target manually." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:3221 +msgid "Cannot proceed with reencryption. Unexpected reencryption status." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:3227 +msgid "Missing or invalid reencrypt context." +msgstr "" + +#: lib/luks2/luks2_reencrypt.c:3234 +#, fuzzy +msgid "Failed to initialize reencryption device stack." +msgstr "无法获取设备 %s 的读取锁。" + +#: lib/luks2/luks2_reencrypt.c:3253 lib/luks2/luks2_reencrypt.c:3289 +#, fuzzy +msgid "Failed to update reencryption context." +msgstr "打开 (open) 密钥文件失败。\n" + +#: lib/luks2/luks2_token.c:262 +#, fuzzy +msgid "No free token slot." +msgstr "交换新密钥槽失败。\n" + +# stat() 主要就是出来一个各种文件信息…… +#: lib/luks2/luks2_token.c:269 +#, fuzzy, c-format +msgid "Failed to create builtin token %s." +msgstr "获取 (stat) 密钥文件统计数据失败。\n" + +#: src/cryptsetup.c:162 +#, fuzzy +msgid "Can't do passphrase verification on non-tty inputs." +msgstr "无法从非 TTY 输入验证密码。\n" + +#: src/cryptsetup.c:215 +#, fuzzy +msgid "Keyslot encryption parameters can be set only for LUKS2 device." +msgstr "此操作只适用 LUKS2 设备。" + +#: src/cryptsetup.c:245 src/cryptsetup.c:893 src/cryptsetup.c:1212 +#: src/cryptsetup.c:3011 src/cryptsetup_reencrypt.c:715 +#: src/cryptsetup_reencrypt.c:785 +#, fuzzy +msgid "No known cipher specification pattern detected." +msgstr "未探测到已知的密文特征。\n" + +#: src/cryptsetup.c:253 +msgid "WARNING: The --hash parameter is being ignored in plain mode with keyfile specified.\n" +msgstr "警告:在纯文本模式下指定密钥文件时将忽略参数 --hash。\n" + +#: src/cryptsetup.c:261 +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:301 +#, c-format +msgid "Detected device signature(s) on %s. Proceeding further may damage existing data." +msgstr "" + +#: src/cryptsetup.c:307 src/cryptsetup.c:1038 src/cryptsetup.c:1090 +#: src/cryptsetup.c:1189 src/cryptsetup.c:1262 src/cryptsetup.c:1913 +#: src/cryptsetup.c:2545 src/cryptsetup.c:2668 src/integritysetup.c:232 +msgid "Operation aborted.\n" +msgstr "操作中止。\n" + +#: src/cryptsetup.c:375 +msgid "Option --key-file is required." +msgstr "需要选项 --key-file。" + +#: src/cryptsetup.c:428 +msgid "Enter VeraCrypt PIM: " +msgstr "输入 VeraCrypt PIM: " + +#: src/cryptsetup.c:437 +msgid "Invalid PIM value: parse error." +msgstr "无效的 PIM 值:解析错误。" + +#: src/cryptsetup.c:440 +msgid "Invalid PIM value: 0." +msgstr "无效的 PIM 值:0。" + +#: src/cryptsetup.c:443 +msgid "Invalid PIM value: outside of range." +msgstr "无效的 PIM 值:超出范围。" + +#: src/cryptsetup.c:466 +#, fuzzy +msgid "No device header detected with this passphrase." +msgstr "未从此密码中探测到设备标头。\n" + +#: src/cryptsetup.c:528 src/cryptsetup.c:1940 +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:607 +#, c-format +msgid "Device %s is still active and scheduled for deferred removal.\n" +msgstr "" + +#: src/cryptsetup.c:635 +msgid "Resize of active device requires volume key in keyring but --disable-keyring option is set." +msgstr "" + +#: src/cryptsetup.c:771 +#, fuzzy +msgid "Benchmark interrupted." +msgstr "测试密文" + +#: src/cryptsetup.c:792 +#, c-format +msgid "PBKDF2-%-9s N/A\n" +msgstr "" + +#: src/cryptsetup.c:794 +#, c-format +msgid "PBKDF2-%-9s %7u iterations per second for %zu-bit key\n" +msgstr "" + +#: src/cryptsetup.c:808 +#, c-format +msgid "%-10s N/A\n" +msgstr "" + +#: src/cryptsetup.c:810 +#, 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:834 +#, fuzzy +msgid "Result of benchmark is not reliable." +msgstr "测试结果不可靠。\n" + +#: src/cryptsetup.c:885 +msgid "# Tests are approximate using memory only (no storage IO).\n" +msgstr "# 测试仅使用内存(无存储 IO)。\n" + +#. TRANSLATORS: The string is header of a table and must be exactly (right side) aligned. +#: src/cryptsetup.c:919 +#, fuzzy, c-format +msgid "#%*s Algorithm | Key | Encryption | Decryption\n" +msgstr "# 算法 | 密钥 | 加密 | 解密\n" + +#: src/cryptsetup.c:923 +#, fuzzy, c-format +msgid "Cipher %s is not available." +msgstr "密文 %s 不可用。\n" + +#. TRANSLATORS: The string is header of a table and must be exactly (right side) aligned. +#: src/cryptsetup.c:943 +#, fuzzy +msgid "# Algorithm | Key | Encryption | Decryption\n" +msgstr "# 算法 | 密钥 | 加密 | 解密\n" + +#: src/cryptsetup.c:952 +msgid "N/A" +msgstr "不可用" + +#: src/cryptsetup.c:1031 +msgid "" +"Seems device does not require reencryption recovery.\n" +"Do you want to proceed anyway?" +msgstr "" + +#: src/cryptsetup.c:1037 +msgid "Really proceed with LUKS2 reencryption recovery?" +msgstr "" + +#: src/cryptsetup.c:1046 +#, fuzzy +msgid "Enter passphrase for reencryption recovery: " +msgstr "输入密钥槽 %u 的密码:" + +#: src/cryptsetup.c:1089 +msgid "Really try to repair LUKS device header?" +msgstr "确定要尝试修复 LUKS 设备标头吗?" + +#: src/cryptsetup.c:1108 src/integritysetup.c:145 +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:1130 src/integritysetup.c:167 +#, fuzzy, c-format +msgid "Cannot deactivate temporary device %s." +msgstr "无法打开临时 LUKS 设备。\n" + +#: src/cryptsetup.c:1174 +msgid "Integrity option can be used only for LUKS2 format." +msgstr "" + +#: src/cryptsetup.c:1179 src/cryptsetup.c:1239 +#, fuzzy +msgid "Unsupported LUKS2 metadata size options." +msgstr "不支持的 LUKS 版本 %d。" + +#: src/cryptsetup.c:1196 +#, c-format +msgid "Cannot create header file %s." +msgstr "无法创建标头文件 %s。" + +#: src/cryptsetup.c:1219 src/integritysetup.c:194 src/integritysetup.c:203 +#: src/integritysetup.c:212 src/integritysetup.c:279 src/integritysetup.c:288 +#: src/integritysetup.c:298 +#, fuzzy +msgid "No known integrity specification pattern detected." +msgstr "未探测到已知的密文特征。\n" + +#: src/cryptsetup.c:1232 +#, c-format +msgid "Cannot use %s as on-disk header." +msgstr "无法将 %s 作为磁盘上的标头使用。" + +#: src/cryptsetup.c:1256 src/integritysetup.c:226 +#, c-format +msgid "This will overwrite data on %s irrevocably." +msgstr "这将覆盖 %s 上的数据,该动作不可取消。" + +# stat() 主要就是出来一个各种文件信息…… +#: src/cryptsetup.c:1297 src/cryptsetup.c:1627 src/cryptsetup.c:1694 +#: src/cryptsetup.c:1796 src/cryptsetup.c:1862 src/cryptsetup_reencrypt.c:545 +msgid "Failed to set pbkdf parameters." +msgstr "设置 pbkdf 参数失败。" + +#: src/cryptsetup.c:1378 +#, fuzzy +msgid "Reduced data offset is allowed only for detached LUKS header." +msgstr "仅已脱离的 LUKS 数据头可以使用缩减的数据偏移。\n" + +#: src/cryptsetup.c:1389 src/cryptsetup.c:1700 +msgid "Cannot determine volume key size for LUKS without keyslots, please use --key-size option." +msgstr "" + +#: src/cryptsetup.c:1427 +msgid "Device activated but cannot make flags persistent." +msgstr "" + +#: src/cryptsetup.c:1508 src/cryptsetup.c:1578 +#, fuzzy, c-format +msgid "Keyslot %d is selected for deletion." +msgstr "已选中密钥槽 %d 以删除。\n" + +#: src/cryptsetup.c:1520 src/cryptsetup.c:1581 +msgid "This is the last keyslot. Device will become unusable after purging this key." +msgstr "这是最后一个密钥槽。设备在清空此密钥后将不可用。" + +#: src/cryptsetup.c:1521 +msgid "Enter any remaining passphrase: " +msgstr "输入任意剩余的口令: " + +#: src/cryptsetup.c:1522 src/cryptsetup.c:1583 +msgid "Operation aborted, the keyslot was NOT wiped.\n" +msgstr "" + +#: src/cryptsetup.c:1560 +msgid "Enter passphrase to be deleted: " +msgstr "输入要移除的口令: " + +#: src/cryptsetup.c:1641 src/cryptsetup.c:1715 src/cryptsetup.c:1749 +msgid "Enter new passphrase for key slot: " +msgstr "输入密钥槽的新口令: " + +#: src/cryptsetup.c:1732 src/cryptsetup_reencrypt.c:1327 +#, c-format +msgid "Enter any existing passphrase: " +msgstr "输入任意已存在的口令: " + +#: src/cryptsetup.c:1800 +msgid "Enter passphrase to be changed: " +msgstr "输入要更改的口令: " + +#: src/cryptsetup.c:1816 src/cryptsetup_reencrypt.c:1313 +msgid "Enter new passphrase: " +msgstr "输入新口令: " + +#: src/cryptsetup.c:1866 +#, fuzzy +msgid "Enter passphrase for keyslot to be converted: " +msgstr "输入密钥槽 %u 的密码:" + +#: src/cryptsetup.c:1890 +#, fuzzy +msgid "Only one device argument for isLuks operation is supported." +msgstr "isLuks 操作仅支持一个设备参数。\n" + +#: src/cryptsetup.c:2074 src/cryptsetup.c:2095 +#, fuzzy +msgid "Option --header-backup-file is required." +msgstr "必须指定 --header-backup-file 选项。\n" + +#: src/cryptsetup.c:2125 +#, c-format +msgid "%s is not cryptsetup managed device." +msgstr "" + +#: src/cryptsetup.c:2136 +#, fuzzy, c-format +msgid "Refresh is not supported for device type %s" +msgstr "设备 %s 不支持恢复。" + +#: src/cryptsetup.c:2174 +#, fuzzy, c-format +msgid "Unrecognized metadata device type %s." +msgstr "无法识别的元数据设备类型 %s。\n" + +#: src/cryptsetup.c:2177 +#, fuzzy +msgid "Command requires device and mapped name as arguments." +msgstr "命令需要设备及映射名作为参数。\n" + +#: src/cryptsetup.c:2199 +#, c-format +msgid "" +"This operation will erase all keyslots on device %s.\n" +"Device will become unusable after this operation." +msgstr "" +"该操作将清空设备 %s 上所有的密钥槽。\n" +"设备在此操作后将不可用。" + +#: src/cryptsetup.c:2206 +msgid "Operation aborted, keyslots were NOT wiped.\n" +msgstr "操作已中止,密钥槽没有被擦除。\n" + +#: src/cryptsetup.c:2243 +msgid "Invalid LUKS type, only luks1 and luks2 are supported." +msgstr "" + +#: src/cryptsetup.c:2261 +#, c-format +msgid "Device is already %s type." +msgstr "设备已为 %s 类型。" + +#: src/cryptsetup.c:2266 +#, fuzzy, c-format +msgid "This operation will convert %s to %s format.\n" +msgstr "不支持在 %s 加密设备上执行此操作。\n" + +#: src/cryptsetup.c:2272 +msgid "Operation aborted, device was NOT converted.\n" +msgstr "" + +#: src/cryptsetup.c:2312 +msgid "Option --priority, --label or --subsystem is missing." +msgstr "选项 --priority、--label 或 --subsystem 缺失。" + +#: src/cryptsetup.c:2346 src/cryptsetup.c:2379 src/cryptsetup.c:2402 +#, fuzzy, c-format +msgid "Token %d is invalid." +msgstr "密钥槽 %d 无效。\n" + +#: src/cryptsetup.c:2349 src/cryptsetup.c:2405 +#, fuzzy, c-format +msgid "Token %d in use." +msgstr "密钥槽 %d 未使用。\n" + +# stat() 主要就是出来一个各种文件信息…… +#: src/cryptsetup.c:2356 +#, fuzzy, c-format +msgid "Failed to add luks2-keyring token %d." +msgstr "获取 (stat) 密钥文件统计数据失败。\n" + +#: src/cryptsetup.c:2365 src/cryptsetup.c:2427 +#, fuzzy, c-format +msgid "Failed to assign token %d to keyslot %d." +msgstr "交换新密钥槽失败。\n" + +#: src/cryptsetup.c:2382 +#, fuzzy, c-format +msgid "Token %d is not in use." +msgstr "密钥槽 %d 未使用。\n" + +#: src/cryptsetup.c:2417 +#, fuzzy +msgid "Failed to import token from file." +msgstr "打开 (open) 密钥文件失败。" + +#: src/cryptsetup.c:2442 +#, fuzzy, c-format +msgid "Failed to get token %d for export." +msgstr "交换新密钥槽失败。\n" + +#: src/cryptsetup.c:2457 +msgid "--key-description parameter is mandatory for token add action." +msgstr "" + +#: src/cryptsetup.c:2463 src/cryptsetup.c:2471 +msgid "Action requires specific token. Use --token-id parameter." +msgstr "" + +#: src/cryptsetup.c:2476 +#, fuzzy, c-format +msgid "Invalid token operation %s." +msgstr "设备 %s 无效。\n" + +#: src/cryptsetup.c:2531 +#, c-format +msgid "Auto-detected active dm device '%s' for data device %s.\n" +msgstr "" + +#: src/cryptsetup.c:2535 +#, fuzzy, c-format +msgid "Device %s is not a block device.\n" +msgstr "%s 不是有效的 LUKS 设备。" + +#: src/cryptsetup.c:2537 +#, fuzzy, c-format +msgid "Failed to auto-detect device %s holders." +msgstr "无法获取设备 %s 上的写入锁。" + +#: src/cryptsetup.c:2539 +#, 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 "" + +#: src/cryptsetup.c:2619 +#, fuzzy +msgid "Invalid LUKS device type." +msgstr "设备 %s 无效。" + +#: src/cryptsetup.c:2624 +msgid "Encryption without detached header (--header) is not possible without data device size reduction (--reduce-device-size)." +msgstr "" + +#: src/cryptsetup.c:2629 +msgid "Requested data offset must be less than or equal to half of --reduce-device-size parameter." +msgstr "" + +#: src/cryptsetup.c:2638 +#, c-format +msgid "Adjusting --reduce-device-size value to twice the --offset % (sectors).\n" +msgstr "" + +#: src/cryptsetup.c:2642 +#, fuzzy +msgid "Encryption is supported only for LUKS2 format." +msgstr "此操作只适用 LUKS2 设备。" + +#: src/cryptsetup.c:2664 +#, c-format +msgid "Detected LUKS device on %s. Do you want to encrypt that LUKS device again?" +msgstr "" + +#: src/cryptsetup.c:2679 +#, fuzzy, c-format +msgid "Temporary header file %s already exists. Aborting." +msgstr "请求的标头备份文件 %s 已存在。" + +#: src/cryptsetup.c:2681 src/cryptsetup.c:2688 +#, fuzzy, c-format +msgid "Cannot create temporary header file %s." +msgstr "无法创建标头文件 %s。" + +#: src/cryptsetup.c:2752 +#, c-format +msgid "%s/%s is now active and ready for online encryption." +msgstr "" + +#: src/cryptsetup.c:2919 src/cryptsetup.c:2925 +#, fuzzy +msgid "Not enough free keyslots for reencryption." +msgstr "不要更改密钥,无数据区重加密" + +#: src/cryptsetup.c:2945 src/cryptsetup_reencrypt.c:1284 +msgid "Key file can be used only with --key-slot or with exactly one key slot active." +msgstr "密钥文件只能在指定 --key-slot 时或有且只有一个槽启用时使用。" + +#: src/cryptsetup.c:2954 src/cryptsetup_reencrypt.c:1325 +#: src/cryptsetup_reencrypt.c:1336 +#, fuzzy, c-format +msgid "Enter passphrase for key slot %d: " +msgstr "输入密钥槽 %u 的口令: " + +#: src/cryptsetup.c:2962 +#, c-format +msgid "Enter passphrase for key slot %u: " +msgstr "输入密钥槽 %u 的口令: " + +#: src/cryptsetup.c:3129 +#, fuzzy +msgid "Command requires device as argument." +msgstr "命令需要设备及映射名作为参数。\n" + +#: src/cryptsetup.c:3151 +msgid "Only LUKS2 format is currently supported. Please use cryptsetup-reencrypt tool for LUKS1." +msgstr "" + +#: src/cryptsetup.c:3163 +msgid "Legacy offline reencryption already in-progress. Use cryptsetup-reencrypt utility." +msgstr "" + +#: src/cryptsetup.c:3173 src/cryptsetup_reencrypt.c:178 +msgid "Reencryption of device with integrity profile is not supported." +msgstr "不支持带有完整性 profile 信息的设备的重加密。" + +#: src/cryptsetup.c:3181 +msgid "LUKS2 reencryption already initialized. Aborting operation." +msgstr "" + +#: src/cryptsetup.c:3185 +#, fuzzy +msgid "LUKS2 device is not in reencryption." +msgstr "日志文件 %s 存在,继续重加密。\n" + +#: src/cryptsetup.c:3212 +msgid " [--type ] []" +msgstr "<设备> [--type <类型>] [<名称>]" + +#: src/cryptsetup.c:3212 src/veritysetup.c:358 src/integritysetup.c:470 +msgid "open device as " +msgstr "以 <名称> 打开设备" + +#: src/cryptsetup.c:3213 src/cryptsetup.c:3214 src/cryptsetup.c:3215 +#: src/veritysetup.c:359 src/veritysetup.c:360 src/integritysetup.c:471 +#: src/integritysetup.c:472 +msgid "" +msgstr "<名称>" + +#: src/cryptsetup.c:3213 src/veritysetup.c:359 src/integritysetup.c:471 +msgid "close device (remove mapping)" +msgstr "关闭设备(移除映射)" + +#: src/cryptsetup.c:3214 +msgid "resize active device" +msgstr "改变活动设备大小。" + +#: src/cryptsetup.c:3215 +msgid "show device status" +msgstr "显示设备状态" + +#: src/cryptsetup.c:3216 +msgid "[--cipher ]" +msgstr "" + +#: src/cryptsetup.c:3216 +msgid "benchmark cipher" +msgstr "测试密文" + +#: src/cryptsetup.c:3217 src/cryptsetup.c:3218 src/cryptsetup.c:3219 +#: src/cryptsetup.c:3220 src/cryptsetup.c:3221 src/cryptsetup.c:3228 +#: src/cryptsetup.c:3229 src/cryptsetup.c:3230 src/cryptsetup.c:3231 +#: src/cryptsetup.c:3232 src/cryptsetup.c:3233 src/cryptsetup.c:3234 +#: src/cryptsetup.c:3235 +msgid "" +msgstr "<设备>" + +#: src/cryptsetup.c:3217 +msgid "try to repair on-disk metadata" +msgstr "尝试修复磁盘上的元数据" + +#: src/cryptsetup.c:3218 +#, fuzzy +msgid "reencrypt LUKS2 device" +msgstr "向 LUKS 设备添加密钥" + +#: src/cryptsetup.c:3219 +msgid "erase all keyslots (remove encryption key)" +msgstr "清空所有密钥槽(移除加密密钥)" + +#: src/cryptsetup.c:3220 +msgid "convert LUKS from/to LUKS2 format" +msgstr "在 LUKS 和 LUKS2 格式之间转换" + +#: src/cryptsetup.c:3221 +msgid "set permanent configuration options for LUKS2" +msgstr "" + +#: src/cryptsetup.c:3222 src/cryptsetup.c:3223 +msgid " []" +msgstr "<设备> [<新密钥文件>]" + +#: src/cryptsetup.c:3222 +msgid "formats a LUKS device" +msgstr "格式化一个 LUKS 设备" + +#: src/cryptsetup.c:3223 +msgid "add key to LUKS device" +msgstr "向 LUKS 设备添加密钥" + +#: src/cryptsetup.c:3224 src/cryptsetup.c:3225 src/cryptsetup.c:3226 +msgid " []" +msgstr "<设备> [<密钥文件>]" + +#: src/cryptsetup.c:3224 +msgid "removes supplied key or key file from LUKS device" +msgstr "移除 LUKS 设备中指定的密钥或密钥文件" + +#: src/cryptsetup.c:3225 +msgid "changes supplied key or key file of LUKS device" +msgstr "更改 LUKS 设备中指定的密钥或密钥文件" + +# stat() 主要就是出来一个各种文件信息…… +#: src/cryptsetup.c:3226 +#, fuzzy +msgid "converts a key to new pbkdf parameters" +msgstr "获取 (stat) 密钥文件统计数据失败。\n" + +#: src/cryptsetup.c:3227 +msgid " " +msgstr "<设备> <密钥槽>" + +#: src/cryptsetup.c:3227 +msgid "wipes key with number from LUKS device" +msgstr "从 LUKS 设备清理标号为 的密钥" + +#: src/cryptsetup.c:3228 +msgid "print UUID of LUKS device" +msgstr "输出 LUKS 设备的 UUID(唯一标识符)" + +#: src/cryptsetup.c:3229 +msgid "tests for LUKS partition header" +msgstr "从 探测 LUKS 分区标头" + +#: src/cryptsetup.c:3230 +msgid "dump LUKS partition information" +msgstr "调出 LUKS 分区信息" + +#: src/cryptsetup.c:3231 +msgid "dump TCRYPT device information" +msgstr "调出 TCRYPT 设备信息" + +#: src/cryptsetup.c:3232 +#, fuzzy +msgid "Suspend LUKS device and wipe key (all IOs are frozen)" +msgstr "挂起 LUKS 设备并清除密钥(冻结所有 IO 操作)。" + +#: src/cryptsetup.c:3233 +msgid "Resume suspended LUKS device" +msgstr "恢复已挂起的 LUKS 设备" + +#: src/cryptsetup.c:3234 +msgid "Backup LUKS device header and keyslots" +msgstr "备份 LUKS 设备标头和密钥槽" + +#: src/cryptsetup.c:3235 +msgid "Restore LUKS device header and keyslots" +msgstr "恢复 LUKS 设备标头和密钥槽" + +#: src/cryptsetup.c:3236 +msgid " " +msgstr "" + +#: src/cryptsetup.c:3236 +msgid "Manipulate LUKS2 tokens" +msgstr "" + +#: src/cryptsetup.c:3254 src/veritysetup.c:376 src/integritysetup.c:488 +msgid "" +"\n" +" is one of:\n" +msgstr "" +"\n" +"<动作> 为其中之一:\n" + +#: src/cryptsetup.c:3260 +msgid "" +"\n" +"You can also use old syntax aliases:\n" +"\topen: create (plainOpen), luksOpen, loopaesOpen, tcryptOpen\n" +"\tclose: remove (plainClose), luksClose, loopaesClose, tcryptClose\n" +msgstr "" +"\n" +"你亦可使用老的 <动作> 语法别名:\n" +"\topen: create (plainOpen), luksOpen, loopaesOpen, tcryptOpen\n" +"\tclose: remove (plainClose), luksClose, loopaesClose, tcryptClose\n" + +#: src/cryptsetup.c:3264 +#, c-format +msgid "" +"\n" +" is the device to create under %s\n" +" is the encrypted device\n" +" is the LUKS key slot number to modify\n" +" optional key file for the new key for luksAddKey action\n" +msgstr "" +"\n" +" 为要在 %s 创建的设备\n" +" 为加密设备\n" +" 为需要更改的 LUKS 密钥槽\n" +" 提供给 luksAddKey 动作的密钥文件\n" + +#: src/cryptsetup.c:3271 +#, c-format +msgid "" +"\n" +"Default compiled-in metadata format is %s (for luksFormat action).\n" +msgstr "" + +#: src/cryptsetup.c:3276 +#, fuzzy, c-format +msgid "" +"\n" +"Default compiled-in key and passphrase parameters:\n" +"\tMaximum keyfile size: %dkB, Maximum interactive passphrase length %d (characters)\n" +"Default PBKDF for LUKS1: %s, iteration time: %d (ms)\n" +"Default PBKDF for LUKS2: %s\n" +"\tIteration time: %d, Memory required: %dkB, Parallel threads: %d\n" +msgstr "" +"\n" +"默认集成的密钥和密码参数:\n" +"\t密钥文件的最大大小:%dkB, 交互式密码的最大长度:%d (字符)\n" +"LUKS 的默认 PBKDF2 迭代时间:%d (毫秒)\n" + +#: src/cryptsetup.c:3287 +#, fuzzy, c-format +msgid "" +"\n" +"Default compiled-in device cipher parameters:\n" +"\tloop-AES: %s, Key %d bits\n" +"\tplain: %s, Key: %d bits, Password hashing: %s\n" +"\tLUKS: %s, Key: %d bits, LUKS header hashing: %s, RNG: %s\n" +msgstr "" +"\n" +"默认集成的设备密文参数:\n" +"\tloop-AES:%s, %d 位密钥\n" +"\tplain:%s, 密钥:%d 位, 密码哈希:%s\n" +"\tLUKS1:%s, 密钥:%d bits, LUKS 数据头哈希:%s, RNG:%s\n" + +#: src/cryptsetup.c:3296 +msgid "\tLUKS: Default keysize with XTS mode (two internal keys) will be doubled.\n" +msgstr "" + +#: src/cryptsetup.c:3312 src/veritysetup.c:532 src/integritysetup.c:630 +#, c-format +msgid "%s: requires %s as arguments" +msgstr "%s: 需要 %s 作为参数" + +#: src/cryptsetup.c:3350 src/veritysetup.c:421 src/integritysetup.c:527 +#: src/cryptsetup_reencrypt.c:1591 +msgid "Show this help message" +msgstr "显示此帮助" + +#: src/cryptsetup.c:3351 src/veritysetup.c:422 src/integritysetup.c:528 +#: src/cryptsetup_reencrypt.c:1592 +msgid "Display brief usage" +msgstr "显示简短用法" + +#: src/cryptsetup.c:3352 src/veritysetup.c:423 src/integritysetup.c:529 +#: src/cryptsetup_reencrypt.c:1593 +msgid "Print package version" +msgstr "打印软件包版本" + +#: src/cryptsetup.c:3356 src/veritysetup.c:427 src/integritysetup.c:533 +#: src/cryptsetup_reencrypt.c:1597 +msgid "Help options:" +msgstr "帮助选项:" + +#: src/cryptsetup.c:3357 src/veritysetup.c:428 src/integritysetup.c:534 +#: src/cryptsetup_reencrypt.c:1598 +msgid "Shows more detailed error messages" +msgstr "显示更详细的错误信息" + +#: src/cryptsetup.c:3358 src/veritysetup.c:429 src/integritysetup.c:535 +#: src/cryptsetup_reencrypt.c:1599 +msgid "Show debug messages" +msgstr "显示调试信息" + +#: src/cryptsetup.c:3359 +#, fuzzy +msgid "Show debug messages including JSON metadata" +msgstr "显示调试信息" + +#: src/cryptsetup.c:3360 src/cryptsetup_reencrypt.c:1601 +msgid "The cipher used to encrypt the disk (see /proc/crypto)" +msgstr "用于加密磁盘的密文(参见 /proc/crypto)" + +#: src/cryptsetup.c:3361 src/cryptsetup_reencrypt.c:1603 +msgid "The hash used to create the encryption key from the passphrase" +msgstr "用于从密码创建加密密钥的哈希值" + +#: src/cryptsetup.c:3362 +msgid "Verifies the passphrase by asking for it twice" +msgstr "两次询问密码以进行验证" + +#: src/cryptsetup.c:3363 src/cryptsetup_reencrypt.c:1605 +msgid "Read the key from a file" +msgstr "从文件读取密钥" + +#: src/cryptsetup.c:3364 +msgid "Read the volume (master) key from file." +msgstr "从文件读取卷(主)密钥。" + +#: src/cryptsetup.c:3365 +#, fuzzy +msgid "Dump volume (master) key instead of keyslots info" +msgstr "转储卷(主)密钥而不是键槽信息。" + +#: src/cryptsetup.c:3366 src/cryptsetup_reencrypt.c:1602 +msgid "The size of the encryption key" +msgstr "加密密钥大小" + +#: src/cryptsetup.c:3366 src/cryptsetup.c:3425 src/integritysetup.c:553 +#: src/integritysetup.c:557 src/integritysetup.c:561 +#: src/cryptsetup_reencrypt.c:1602 +msgid "BITS" +msgstr "位" + +#: src/cryptsetup.c:3367 src/cryptsetup_reencrypt.c:1618 +msgid "Limits the read from keyfile" +msgstr "限制从密钥文件读取" + +#: src/cryptsetup.c:3367 src/cryptsetup.c:3368 src/cryptsetup.c:3369 +#: src/cryptsetup.c:3370 src/cryptsetup.c:3373 src/cryptsetup.c:3422 +#: src/cryptsetup.c:3423 src/cryptsetup.c:3431 src/cryptsetup.c:3432 +#: src/veritysetup.c:432 src/veritysetup.c:433 src/veritysetup.c:434 +#: src/veritysetup.c:437 src/veritysetup.c:438 src/integritysetup.c:542 +#: src/integritysetup.c:548 src/integritysetup.c:549 +#: src/cryptsetup_reencrypt.c:1617 src/cryptsetup_reencrypt.c:1618 +#: src/cryptsetup_reencrypt.c:1619 src/cryptsetup_reencrypt.c:1620 +msgid "bytes" +msgstr "字节" + +#: src/cryptsetup.c:3368 src/cryptsetup_reencrypt.c:1617 +msgid "Number of bytes to skip in keyfile" +msgstr "要从密钥文件跳过的字节数" + +#: src/cryptsetup.c:3369 +msgid "Limits the read from newly added keyfile" +msgstr "限制从新增密钥文件的读取" + +#: src/cryptsetup.c:3370 +msgid "Number of bytes to skip in newly added keyfile" +msgstr "要从新增密钥文件跳过的字节数" + +#: src/cryptsetup.c:3371 +msgid "Slot number for new key (default is first free)" +msgstr "新密钥的槽号(默认为第一个可用的)" + +#: src/cryptsetup.c:3372 +msgid "The size of the device" +msgstr "设备大小" + +#: src/cryptsetup.c:3372 src/cryptsetup.c:3374 src/cryptsetup.c:3375 +#: src/cryptsetup.c:3381 src/integritysetup.c:543 src/integritysetup.c:550 +msgid "SECTORS" +msgstr "扇区" + +#: src/cryptsetup.c:3373 src/cryptsetup_reencrypt.c:1620 +msgid "Use only specified device size (ignore rest of device). DANGEROUS!" +msgstr "只使用指定的设备大小(忽略设备其余部分)。危险!" + +#: src/cryptsetup.c:3374 +msgid "The start offset in the backend device" +msgstr "后端设备的起始偏移量" + +#: src/cryptsetup.c:3375 +msgid "How many sectors of the encrypted data to skip at the beginning" +msgstr "从开头要跳过的加密数据扇区数量" + +#: src/cryptsetup.c:3376 +msgid "Create a readonly mapping" +msgstr "创建只读映射" + +#: src/cryptsetup.c:3377 src/integritysetup.c:536 +#: src/cryptsetup_reencrypt.c:1608 +msgid "Do not ask for confirmation" +msgstr "不要请求确认" + +#: src/cryptsetup.c:3378 +msgid "Timeout for interactive passphrase prompt (in seconds)" +msgstr "交互式密码提示符超时长度(秒)" + +#: src/cryptsetup.c:3378 src/cryptsetup.c:3379 src/integritysetup.c:537 +#: src/cryptsetup_reencrypt.c:1609 +msgid "secs" +msgstr "秒" + +#: src/cryptsetup.c:3379 src/integritysetup.c:537 +#: src/cryptsetup_reencrypt.c:1609 +msgid "Progress line update (in seconds)" +msgstr "" + +#: src/cryptsetup.c:3380 src/cryptsetup_reencrypt.c:1610 +msgid "How often the input of the passphrase can be retried" +msgstr "输入密码的最大重试频率" + +#: src/cryptsetup.c:3381 +msgid "Align payload at sector boundaries - for luksFormat" +msgstr "于 个扇区边界处对其载荷数据 - 供 luks 格式用" + +#: src/cryptsetup.c:3382 +#, fuzzy +msgid "File with LUKS header and keyslots backup" +msgstr "带有 LUKS 数据头和密钥槽备份的文件。" + +#: src/cryptsetup.c:3383 src/cryptsetup_reencrypt.c:1611 +msgid "Use /dev/random for generating volume key" +msgstr "使用 /dev/random 生成卷密钥" + +#: src/cryptsetup.c:3384 src/cryptsetup_reencrypt.c:1612 +msgid "Use /dev/urandom for generating volume key" +msgstr "使用 /dev/urandom 生成卷密钥" + +#: src/cryptsetup.c:3385 +#, fuzzy +msgid "Share device with another non-overlapping crypt segment" +msgstr "与另一个不重合的加密段共享设备。" + +#: src/cryptsetup.c:3386 src/veritysetup.c:441 +#, fuzzy +msgid "UUID for device to use" +msgstr "设备使用的 UUID 已占用。" + +#: src/cryptsetup.c:3387 +#, fuzzy +msgid "Allow discards (aka TRIM) requests for device" +msgstr "允许设备的 discard(或称 TRIM)请求。" + +#: src/cryptsetup.c:3388 src/cryptsetup_reencrypt.c:1629 +#, fuzzy +msgid "Device or file with separated LUKS header" +msgstr "带有分离 LUKS 数据头的设备或文件。" + +#: src/cryptsetup.c:3389 +#, fuzzy +msgid "Do not activate device, just check passphrase" +msgstr "不要激活设备,仅检查密码。" + +#: src/cryptsetup.c:3390 +#, fuzzy +msgid "Use hidden header (hidden TCRYPT device)" +msgstr "使用隐藏数据头(隐藏 TCRYPT 设备)" + +#: src/cryptsetup.c:3391 +#, fuzzy +msgid "Device is system TCRYPT drive (with bootloader)" +msgstr "设备为系统 TCRYPT 驱动器(带有引导器)。" + +#: src/cryptsetup.c:3392 +msgid "Use backup (secondary) TCRYPT header" +msgstr "使用备份(次级)TCRYPT 标头" + +#: src/cryptsetup.c:3393 +#, fuzzy +msgid "Scan also for VeraCrypt compatible device" +msgstr "同时扫描 VeraCrypt 兼容的设备。" + +#: src/cryptsetup.c:3394 +#, fuzzy +msgid "Personal Iteration Multiplier for VeraCrypt compatible device" +msgstr "同时扫描 VeraCrypt 兼容的设备。" + +#: src/cryptsetup.c:3395 +#, fuzzy +msgid "Query Personal Iteration Multiplier for VeraCrypt compatible device" +msgstr "同时扫描 VeraCrypt 兼容的设备。" + +#: src/cryptsetup.c:3396 +#, fuzzy +msgid "Type of device metadata: luks, luks1, luks2, plain, loopaes, tcrypt" +msgstr "设备元数据类型:luks, 纯粹 (plain), loopaes, tcrypt." + +#: src/cryptsetup.c:3397 +#, fuzzy +msgid "Disable password quality check (if enabled)" +msgstr "禁用密码质量检查 (如果已启用)。" + +#: src/cryptsetup.c:3398 +#, fuzzy +msgid "Use dm-crypt same_cpu_crypt performance compatibility option" +msgstr "使用 dm-crypt same_cpu_crypt 性能兼容性选项。" + +#: src/cryptsetup.c:3399 +#, fuzzy +msgid "Use dm-crypt submit_from_crypt_cpus performance compatibility option" +msgstr "使用 dm-crypt submit_from_crypt_cpus 性能兼容性选项。" + +#: src/cryptsetup.c:3400 +msgid "Device removal is deferred until the last user closes it" +msgstr "" + +#: src/cryptsetup.c:3401 +msgid "Use global lock to serialize memory hard PBKDF (OOM workaround)" +msgstr "" + +#: src/cryptsetup.c:3402 +msgid "PBKDF iteration time for LUKS (in ms)" +msgstr "LUKS 默认 PBKDF 迭代时间(毫秒)" + +#: src/cryptsetup.c:3402 src/cryptsetup_reencrypt.c:1607 +msgid "msecs" +msgstr "毫秒" + +#: src/cryptsetup.c:3403 src/cryptsetup_reencrypt.c:1625 +msgid "PBKDF algorithm (for LUKS2): argon2i, argon2id, pbkdf2" +msgstr "" + +#: src/cryptsetup.c:3404 src/cryptsetup_reencrypt.c:1626 +msgid "PBKDF memory cost limit" +msgstr "PBKDF 内存开销限制" + +#: src/cryptsetup.c:3404 src/cryptsetup_reencrypt.c:1626 +msgid "kilobytes" +msgstr "千字节" + +#: src/cryptsetup.c:3405 src/cryptsetup_reencrypt.c:1627 +msgid "PBKDF parallel cost" +msgstr "PBKDF 并行开销" + +#: src/cryptsetup.c:3405 src/cryptsetup_reencrypt.c:1627 +msgid "threads" +msgstr "线程" + +#: src/cryptsetup.c:3406 src/cryptsetup_reencrypt.c:1628 +msgid "PBKDF iterations cost (forced, disables benchmark)" +msgstr "" + +#: src/cryptsetup.c:3407 +msgid "Keyslot priority: ignore, normal, prefer" +msgstr "" + +#: src/cryptsetup.c:3408 +#, fuzzy +msgid "Disable locking of on-disk metadata" +msgstr "尝试修复磁盘上的元数据" + +#: src/cryptsetup.c:3409 +msgid "Disable loading volume keys via kernel keyring" +msgstr "" + +#: src/cryptsetup.c:3410 +msgid "Data integrity algorithm (LUKS2 only)" +msgstr "" + +#: src/cryptsetup.c:3411 src/integritysetup.c:564 +#, fuzzy +msgid "Disable journal for integrity device" +msgstr "为 VERITY 设备提供的大小指标无效。\n" + +#: src/cryptsetup.c:3412 src/integritysetup.c:538 +msgid "Do not wipe device after format" +msgstr "" + +#: src/cryptsetup.c:3413 +msgid "Do not ask for passphrase if activation by token fails" +msgstr "" + +#: src/cryptsetup.c:3414 +msgid "Token number (default: any)" +msgstr "" + +#: src/cryptsetup.c:3415 +msgid "Key description" +msgstr "" + +#: src/cryptsetup.c:3416 +msgid "Encryption sector size (default: 512 bytes)" +msgstr "" + +#: src/cryptsetup.c:3417 +msgid "Set activation flags persistent for device" +msgstr "" + +#: src/cryptsetup.c:3418 +#, fuzzy +msgid "Set label for the LUKS2 device" +msgstr "格式化一个 LUKS 设备" + +#: src/cryptsetup.c:3419 +#, fuzzy +msgid "Set subsystem label for the LUKS2 device" +msgstr "格式化一个 LUKS 设备" + +#: src/cryptsetup.c:3420 +msgid "Create unbound (no assigned data segment) LUKS2 keyslot" +msgstr "" + +#: src/cryptsetup.c:3421 +#, fuzzy +msgid "Read or write the json from or to a file" +msgstr "从文件读取密钥" + +#: src/cryptsetup.c:3422 +msgid "LUKS2 header metadata area size" +msgstr "" + +#: src/cryptsetup.c:3423 +#, fuzzy +msgid "LUKS2 header keyslots area size" +msgstr "带有 LUKS 数据头和密钥槽备份的文件。" + +#: src/cryptsetup.c:3424 +msgid "Refresh (reactivate) device with new parameters" +msgstr "" + +#: src/cryptsetup.c:3425 +#, fuzzy +msgid "LUKS2 keyslot: The size of the encryption key" +msgstr "加密密钥大小" + +#: src/cryptsetup.c:3426 +msgid "LUKS2 keyslot: The cipher used for keyslot encryption" +msgstr "" + +#: src/cryptsetup.c:3427 +#, fuzzy +msgid "Encrypt LUKS2 device (in-place encryption)." +msgstr "永久解密设备(移除加密)" + +#: src/cryptsetup.c:3428 +#, fuzzy +msgid "Decrypt LUKS2 device (remove encryption)." +msgstr "永久解密设备(移除加密)" + +#: src/cryptsetup.c:3429 +msgid "Initialize LUKS2 reencryption in metadata only." +msgstr "" + +#: src/cryptsetup.c:3430 +msgid "Resume initialized LUKS2 reencryption only." +msgstr "" + +#: src/cryptsetup.c:3431 src/cryptsetup_reencrypt.c:1619 +msgid "Reduce data device size (move data offset). DANGEROUS!" +msgstr "减少数据设备大小(移动数据偏移量)。危险!" + +#: src/cryptsetup.c:3432 +#, fuzzy +msgid "Maximal reencryption hotzone size." +msgstr "重加密块大小" + +#: src/cryptsetup.c:3433 +msgid "Reencryption hotzone resilience type (checksum,journal,none)" +msgstr "" + +#: src/cryptsetup.c:3434 +#, fuzzy +msgid "Reencryption hotzone checksums hash" +msgstr "重加密块大小" + +#: src/cryptsetup.c:3435 +msgid "Override device autodetection of dm device to be reencrypted" +msgstr "" + +#: src/cryptsetup.c:3451 src/veritysetup.c:462 src/integritysetup.c:583 +msgid "[OPTION...] " +msgstr "[选项…] <动作> <动作特定参数>" + +#: src/cryptsetup.c:3502 src/veritysetup.c:496 src/integritysetup.c:594 +msgid "Argument missing." +msgstr "缺失参数 <动作>。" + +#: src/cryptsetup.c:3565 src/veritysetup.c:527 src/integritysetup.c:625 +msgid "Unknown action." +msgstr "未知动作。" + +#: src/cryptsetup.c:3575 +#, fuzzy +msgid "Parameter --refresh is only allowed with open or refresh commands.\n" +msgstr "选项 --shared 只适用于打开纯设备。\n" + +#: src/cryptsetup.c:3580 +msgid "Options --refresh and --test-passphrase are mutually exclusive.\n" +msgstr "" + +#: src/cryptsetup.c:3585 +#, fuzzy +msgid "Option --deferred is allowed only for close command.\n" +msgstr "选项 --shared 只适用于打开纯设备。\n" + +#: src/cryptsetup.c:3590 +msgid "Option --shared is allowed only for open of plain device.\n" +msgstr "选项 --shared 只适用于打开纯设备。\n" + +#: src/cryptsetup.c:3595 +msgid "Option --allow-discards is allowed only for open operation.\n" +msgstr "选项 --allow-discards 只适用于打开操作。\n" + +#: src/cryptsetup.c:3600 +#, fuzzy +msgid "Option --persistent is allowed only for open operation.\n" +msgstr "选项 --allow-discards 只适用于打开操作。\n" + +#: src/cryptsetup.c:3605 +#, fuzzy +msgid "Option --serialize-memory-hard-pbkdf is allowed only for open operation.\n" +msgstr "选项 --allow-discards 只适用于打开操作。\n" + +#: src/cryptsetup.c:3610 +msgid "Option --persistent is not allowed with --test-passphrase.\n" +msgstr "" + +#: src/cryptsetup.c:3620 +#, fuzzy +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 "" +"选项 --key-size 只能用于 luksFormat, 打开和性能测试。\n" +"要限制密钥文件读取请使用 --keyfile-size=(字节数)。" + +#: src/cryptsetup.c:3626 +#, fuzzy +msgid "Option --integrity is allowed only for luksFormat (LUKS2).\n" +msgstr "选项 --align-payload 只允许用于 luksFormat。" + +#: src/cryptsetup.c:3631 +msgid "Option --integrity-no-wipe can be used only for format action with integrity extension.\n" +msgstr "" + +#: src/cryptsetup.c:3637 +#, fuzzy +msgid "Options --label and --subsystem are allowed only for luksFormat and config LUKS2 operations.\n" +msgstr "选项 --uuid 只允许用于 luksFormat 和 luksUUID。" + +#: src/cryptsetup.c:3643 +msgid "Option --test-passphrase is allowed only for open of LUKS and TCRYPT devices.\n" +msgstr "选项 --test-passphrase 只能用于打开 LUKS 和 TCRYPT 设备。\n" + +#: src/cryptsetup.c:3648 src/cryptsetup_reencrypt.c:1692 +msgid "Key size must be a multiple of 8 bits" +msgstr "密钥尺寸必须是 8 的倍数" + +#: src/cryptsetup.c:3654 src/cryptsetup_reencrypt.c:1378 +#: src/cryptsetup_reencrypt.c:1697 +msgid "Key slot is invalid." +msgstr "密钥槽无效。" + +#: src/cryptsetup.c:3661 +#, fuzzy +msgid "Option --key-file takes precedence over specified key file argument." +msgstr "选项 --key-file 优先使用指定的密钥文件参数。\n" + +#: src/cryptsetup.c:3668 src/veritysetup.c:539 src/integritysetup.c:649 +#: src/cryptsetup_reencrypt.c:1671 +msgid "Negative number for option not permitted." +msgstr "不允许在选项中填入负数。" + +#: src/cryptsetup.c:3672 +msgid "Only one --key-file argument is allowed." +msgstr "只允许存在一个 --key-file 选项。" + +#: src/cryptsetup.c:3676 src/cryptsetup_reencrypt.c:1663 +#: src/cryptsetup_reencrypt.c:1701 +msgid "Only one of --use-[u]random options is allowed." +msgstr "--use-[u]random 选项只能用一处。" + +#: src/cryptsetup.c:3680 +msgid "Option --use-[u]random is allowed only for luksFormat." +msgstr "选项 --use-[u]random 只适用于 luksFormat。" + +#: src/cryptsetup.c:3684 +msgid "Option --uuid is allowed only for luksFormat and luksUUID." +msgstr "选项 --uuid 只允许用于 luksFormat 和 luksUUID。" + +#: src/cryptsetup.c:3688 +msgid "Option --align-payload is allowed only for luksFormat." +msgstr "选项 --align-payload 只允许用于 luksFormat。" + +#: src/cryptsetup.c:3692 +#, fuzzy +msgid "Options --luks2-metadata-size and --opt-luks2-keyslots-size are allowed only for luksFormat with LUKS2." +msgstr "选项 --uuid 只允许用于 luksFormat 和 luksUUID。" + +#: src/cryptsetup.c:3697 +#, fuzzy +msgid "Invalid LUKS2 metadata size specification." +msgstr "无效的设备大小指标。" + +#: src/cryptsetup.c:3701 +#, fuzzy +msgid "Invalid LUKS2 keyslots size specification." +msgstr "无效的设备大小指标。" + +#: src/cryptsetup.c:3705 +#, fuzzy +msgid "Options --align-payload and --offset cannot be combined." +msgstr "选项 --align-payload 只允许用于 luksFormat。" + +#: src/cryptsetup.c:3711 +msgid "Option --skip is supported only for open of plain and loopaes devices.\n" +msgstr "选项 --skip 只适用于打开纯设备和 loopaes 设备。\n" + +#: src/cryptsetup.c:3718 +#, fuzzy +msgid "Option --offset is supported only for open of plain and loopaes devices, luksFormat and device reencryption.\n" +msgstr "选项 --offset 只适用于打开纯设备和 loopaes 设备。\n" + +#: src/cryptsetup.c:3724 +msgid "Option --tcrypt-hidden, --tcrypt-system or --tcrypt-backup is supported only for TCRYPT device.\n" +msgstr "选项 --tcrypt-hidden, --tcrypt-system 或 --tcrypt-backup 只支持 TCRYPT 设备。\n" + +#: src/cryptsetup.c:3729 +msgid "Option --tcrypt-hidden cannot be combined with --allow-discards.\n" +msgstr "选项 --tcrypt-hidden 不能与 --allow-discards 共用。\n" + +#: src/cryptsetup.c:3734 +msgid "Option --veracrypt is supported only for TCRYPT device type.\n" +msgstr "选项 --veracrypt 只支持 TCRYPT 设备类型。\n" + +#: src/cryptsetup.c:3740 +msgid "Invalid argument for parameter --veracrypt-pim supplied.\n" +msgstr "" + +#: src/cryptsetup.c:3744 +#, fuzzy +msgid "Option --veracrypt-pim is supported only for VeraCrypt compatible devices.\n" +msgstr "选项 --veracrypt 只支持 TCRYPT 设备类型。\n" + +#: src/cryptsetup.c:3752 +#, fuzzy +msgid "Option --veracrypt-query-pim is supported only for VeraCrypt compatible devices.\n" +msgstr "选项 --veracrypt 只支持 TCRYPT 设备类型。\n" + +#: src/cryptsetup.c:3756 +msgid "The options --veracrypt-pim and --veracrypt-query-pim are mutually exclusive.\n" +msgstr "" + +#: src/cryptsetup.c:3763 +msgid "Option --priority can be only ignore/normal/prefer.\n" +msgstr "" + +#: src/cryptsetup.c:3768 +msgid "Keyslot specification is required.\n" +msgstr "" + +#: src/cryptsetup.c:3773 src/cryptsetup_reencrypt.c:1677 +msgid "Password-based key derivation function (PBKDF) can be only pbkdf2 or argon2i/argon2id.\n" +msgstr "" + +#: src/cryptsetup.c:3778 src/cryptsetup_reencrypt.c:1682 +msgid "PBKDF forced iterations cannot be combined with iteration time option.\n" +msgstr "" + +#: src/cryptsetup.c:3784 +#, fuzzy +msgid "Sector size option is not supported for this command.\n" +msgstr "不支持在这类设备上执行此操作。\n" + +#: src/cryptsetup.c:3790 +msgid "Unsupported encryption sector size.\n" +msgstr "不支持的加密扇区大小。\n" + +#: src/cryptsetup.c:3795 +msgid "Key size is required with --unbound option.\n" +msgstr "" + +#: src/cryptsetup.c:3800 +#, fuzzy +msgid "Option --unbound may be used only with luksAddKey action.\n" +msgstr "选项 --new 不可与 --decrypt 共用。" + +#: src/cryptsetup.c:3805 +#, fuzzy +msgid "Option --refresh may be used only with open action.\n" +msgstr "选项 --new 不可与 --decrypt 共用。" + +#: src/cryptsetup.c:3816 +msgid "Cannot disable metadata locking.\n" +msgstr "无法禁用元数据锁定。\n" + +#: src/cryptsetup.c:3826 +#, fuzzy +msgid "Invalid max reencryption hotzone size specification." +msgstr "无效的设备大小指标。" + +#: src/cryptsetup.c:3834 src/cryptsetup_reencrypt.c:1706 +#: src/cryptsetup_reencrypt.c:1711 +msgid "Invalid device size specification." +msgstr "无效的设备大小指标。" + +#: src/cryptsetup.c:3837 +#, fuzzy +msgid "Maximum device reduce size is 1 GiB." +msgstr "最大设备缩减大小为 64 MiB。" + +#: src/cryptsetup.c:3840 src/cryptsetup_reencrypt.c:1717 +msgid "Reduce size must be multiple of 512 bytes sector." +msgstr "缩减大小必须为 512 字节扇区的倍数。" + +#: src/cryptsetup.c:3845 +#, fuzzy +msgid "Invalid data size specification." +msgstr "无效的设备大小指标。" + +#: src/cryptsetup.c:3850 +#, fuzzy +msgid "Reduce size overflow." +msgstr "设备偏移量溢出。" + +#: src/cryptsetup.c:3854 +msgid "LUKS2 decryption requires option --header." +msgstr "" + +#: src/cryptsetup.c:3858 +#, fuzzy +msgid "Device size must be multiple of 512 bytes sector." +msgstr "缩减大小必须为 512 字节扇区的倍数。" + +#: src/cryptsetup.c:3862 +msgid "Options --reduce-device-size and --data-size cannot be combined." +msgstr "" + +#: src/cryptsetup.c:3866 +msgid "Options --device-size and --size cannot be combined." +msgstr "" + +#: src/veritysetup.c:65 +msgid "Invalid salt string specified." +msgstr "指定了无效的盐字串。" + +#: src/veritysetup.c:96 +#, fuzzy, c-format +msgid "Cannot create hash image %s for writing." +msgstr "无法为创建哈希映像 %s 以供写入。\n" + +#: src/veritysetup.c:106 +#, fuzzy, c-format +msgid "Cannot create FEC image %s for writing." +msgstr "无法为创建哈希映像 %s 以供写入。\n" + +#: src/veritysetup.c:176 +#, fuzzy +msgid "Invalid root hash string specified." +msgstr "指定了无效的根哈希值字串。\n" + +#: src/veritysetup.c:356 +msgid " " +msgstr "<数据设备> <哈希设备>" + +#: src/veritysetup.c:356 src/integritysetup.c:469 +msgid "format device" +msgstr "格式化设备" + +#: src/veritysetup.c:357 +msgid " " +msgstr "<数据设备> <哈希设备> <根哈希值>" + +#: src/veritysetup.c:357 +msgid "verify device" +msgstr "验证设备" + +#: src/veritysetup.c:358 +#, fuzzy +msgid " " +msgstr "<数据设备> <哈希设备> <根哈希值>" + +#: src/veritysetup.c:360 src/integritysetup.c:472 +msgid "show active device status" +msgstr "显示已激活的设备信息" + +#: src/veritysetup.c:361 +msgid "" +msgstr "<哈希设备>" + +#: src/veritysetup.c:361 src/integritysetup.c:473 +msgid "show on-disk information" +msgstr "显示磁盘上的信息" + +#: src/veritysetup.c:380 +#, c-format +msgid "" +"\n" +" is the device to create under %s\n" +" is the data device\n" +" is the device containing verification data\n" +" hash of the root node on \n" +msgstr "" +"\n" +"<名称> 是在 %s 下要创建的设备\n" +"<数据设备> 就是数据设备\n" +"<哈希设备> 是含有验证信息的设备\n" +"<根哈希值> 是 <哈希设备> 根节点的哈希值\n" + +#: src/veritysetup.c:387 +#, c-format +msgid "" +"\n" +"Default compiled-in dm-verity parameters:\n" +"\tHash: %s, Data block (bytes): %u, Hash block (bytes): %u, Salt size: %u, Hash format: %u\n" +msgstr "" +"\n" +"编译时决定的默认 dm-verify 参数:\n" +"\t哈希: %s, 数据块 (字节): %u, 哈希块 (字节): %u, 盐大小: %u, 哈希格式: %u\n" + +#: src/veritysetup.c:430 +msgid "Do not use verity superblock" +msgstr "不使用真理超级块" + +#: src/veritysetup.c:431 +msgid "Format type (1 - normal, 0 - original Chrome OS)" +msgstr "格式类型 (1 - 正常, 0 - 原版 Chrome OS)" + +#: src/veritysetup.c:431 +msgid "number" +msgstr "数字" + +#: src/veritysetup.c:432 +msgid "Block size on the data device" +msgstr "数据设备的块大小" + +#: src/veritysetup.c:433 +msgid "Block size on the hash device" +msgstr "哈希设备的块大小" + +#: src/veritysetup.c:434 +msgid "FEC parity bytes" +msgstr "FEC 校验字节" + +#: src/veritysetup.c:435 +msgid "The number of blocks in the data file" +msgstr "数据文件的块数量" + +#: src/veritysetup.c:435 +msgid "blocks" +msgstr "块" + +#: src/veritysetup.c:436 +msgid "Path to device with error correction data" +msgstr "" + +#: src/veritysetup.c:436 src/integritysetup.c:540 +msgid "path" +msgstr "" + +#: src/veritysetup.c:437 +msgid "Starting offset on the hash device" +msgstr "哈希设备开始位置偏移量" + +#: src/veritysetup.c:438 +#, fuzzy +msgid "Starting offset on the FEC device" +msgstr "哈希设备开始位置偏移量" + +#: src/veritysetup.c:439 +msgid "Hash algorithm" +msgstr "哈希算法" + +#: src/veritysetup.c:439 +msgid "string" +msgstr "字符串" + +#: src/veritysetup.c:440 +msgid "Salt" +msgstr "盐" + +#: src/veritysetup.c:440 +msgid "hex string" +msgstr "十六进制字符串" + +#: src/veritysetup.c:442 +msgid "Restart kernel if corruption is detected" +msgstr "" + +#: src/veritysetup.c:443 +msgid "Ignore corruption, log it only" +msgstr "忽略数据损坏,仅对其进行日志记录" + +#: src/veritysetup.c:444 +#, fuzzy +msgid "Do not verify zeroed blocks" +msgstr "不使用真理超级块" + +#: src/veritysetup.c:445 +msgid "Verify data block only the first time it is read" +msgstr "" + +#: src/veritysetup.c:545 +#, fuzzy +msgid "Option --ignore-corruption, --restart-on-corruption or --ignore-zero-blocks is allowed only for open operation.\n" +msgstr "选项 --allow-discards 只适用于打开操作。\n" + +#: src/veritysetup.c:550 +msgid "Option --ignore-corruption and --restart-on-corruption cannot be used together.\n" +msgstr "" + +#: src/integritysetup.c:83 src/utils_password.c:305 +#, fuzzy, c-format +msgid "Cannot read keyfile %s." +msgstr "" +"无法读取密钥文件 %s。\n" +"\n" + +#: src/integritysetup.c:87 src/utils_password.c:310 +#, fuzzy, c-format +msgid "Cannot read %d bytes from keyfile %s." +msgstr "无法从密钥文件 %2$s 读取 %1$d 字节。\n" + +#: src/integritysetup.c:250 +#, c-format +msgid "Formatted with tag size %u, internal integrity %s.\n" +msgstr "" + +#: src/integritysetup.c:469 src/integritysetup.c:473 +#, fuzzy +msgid "" +msgstr "验证设备" + +#: src/integritysetup.c:470 +msgid " " +msgstr "" + +#: src/integritysetup.c:492 +#, fuzzy, c-format +msgid "" +"\n" +" is the device to create under %s\n" +" is the device containing data with integrity tags\n" +msgstr "" +"\n" +"<名称> 是在 %s 下要创建的设备\n" +"<数据设备> 就是数据设备\n" +"<哈希设备> 是含有验证信息的设备\n" +"<根哈希值> 是 <哈希设备> 根节点的哈希值\n" + +#: src/integritysetup.c:497 +#, fuzzy, c-format +msgid "" +"\n" +"Default compiled-in dm-integrity parameters:\n" +"\tTag size: %u bytes, Checksum algorithm: %s\n" +msgstr "" +"\n" +"编译时决定的默认 dm-verify 参数:\n" +"\t哈希: %s, 数据块 (字节): %u, 哈希块 (字节): %u, 盐大小: %u, 哈希格式: %u\n" + +#: src/integritysetup.c:540 +msgid "Path to data device (if separated)" +msgstr "" + +#: src/integritysetup.c:542 +msgid "Journal size" +msgstr "日志大小" + +#: src/integritysetup.c:543 +msgid "Interleave sectors" +msgstr "" + +#: src/integritysetup.c:544 +msgid "Journal watermark" +msgstr "" + +#: src/integritysetup.c:544 +msgid "percent" +msgstr "" + +#: src/integritysetup.c:545 +msgid "Journal commit time" +msgstr "日志提交时间" + +#: src/integritysetup.c:545 src/integritysetup.c:547 +msgid "ms" +msgstr "" + +#: src/integritysetup.c:546 +msgid "Number of 512-byte sectors per bit (bitmap mode)." +msgstr "" + +#: src/integritysetup.c:547 +msgid "Bitmap mode flush time" +msgstr "" + +#: src/integritysetup.c:548 +msgid "Tag size (per-sector)" +msgstr "" + +#: src/integritysetup.c:549 +msgid "Sector size" +msgstr "扇区大小" + +#: src/integritysetup.c:550 +msgid "Buffers size" +msgstr "缓冲大小" + +#: src/integritysetup.c:552 +msgid "Data integrity algorithm" +msgstr "数据完整性校验算法" + +#: src/integritysetup.c:553 +#, fuzzy +msgid "The size of the data integrity key" +msgstr "加密密钥大小" + +#: src/integritysetup.c:554 +#, fuzzy +msgid "Read the integrity key from a file" +msgstr "从文件读取密钥。" + +#: src/integritysetup.c:556 +msgid "Journal integrity algorithm" +msgstr "" + +#: src/integritysetup.c:557 +#, fuzzy +msgid "The size of the journal integrity key" +msgstr "加密密钥大小" + +#: src/integritysetup.c:558 +#, fuzzy +msgid "Read the journal integrity key from a file" +msgstr "从文件读取密钥。" + +#: src/integritysetup.c:560 +msgid "Journal encryption algorithm" +msgstr "日志加密算法" + +#: src/integritysetup.c:561 +#, fuzzy +msgid "The size of the journal encryption key" +msgstr "加密密钥大小" + +#: src/integritysetup.c:562 +#, fuzzy +msgid "Read the journal encryption key from a file" +msgstr "从文件读取密钥。" + +#: src/integritysetup.c:565 +msgid "Recovery mode (no journal, no tag checking)" +msgstr "" + +#: src/integritysetup.c:566 +#, fuzzy +msgid "Use bitmap to track changes and disable journal for integrity device" +msgstr "为 VERITY 设备提供的大小指标无效。\n" + +#: src/integritysetup.c:567 +msgid "Recalculate initial tags automatically." +msgstr "" + +#: src/integritysetup.c:640 +#, fuzzy +msgid "Option --integrity-recalculate can be used only for open action." +msgstr "选项 --allow-discards 只适用于打开操作。\n" + +#: src/integritysetup.c:655 +msgid "Options --journal-size, --interleave-sectors, --sector-size, --tag-size and --no-wipe can be used only for format action.\n" +msgstr "" + +#: src/integritysetup.c:661 +msgid "Invalid journal size specification." +msgstr "无效的日志大小指标。" + +#: src/integritysetup.c:666 +msgid "Both key file and key size options must be specified." +msgstr "密钥文件和密钥大小选项均必须指定。" + +#: src/integritysetup.c:669 +msgid "Integrity algorithm must be specified if integrity key is used." +msgstr "" + +#: src/integritysetup.c:674 +msgid "Both journal integrity key file and key size options must be specified." +msgstr "" + +#: src/integritysetup.c:677 +msgid "Journal integrity algorithm must be specified if journal integrity key is used." +msgstr "如果使用了日志加密密钥,则必须指定日志完整性校验算法。" + +#: src/integritysetup.c:682 +msgid "Both journal encryption key file and key size options must be specified." +msgstr "日志加密密钥文件和密钥大小选项均必须指定。" + +#: src/integritysetup.c:685 +msgid "Journal encryption algorithm must be specified if journal encryption key is used." +msgstr "如果使用了日志加密密钥,则必须指定日志加密算法。" + +#: src/integritysetup.c:689 +msgid "Recovery and bitmap mode options are mutually exclusive." +msgstr "" + +#: src/integritysetup.c:693 +msgid "Journal options cannot be used in bitmap mode." +msgstr "" + +#: src/integritysetup.c:697 +msgid "Bitmap options can be used only in bitmap mode." +msgstr "" + +#: src/cryptsetup_reencrypt.c:172 +msgid "Reencryption already in-progress." +msgstr "重加密已在进行中。" + +#: src/cryptsetup_reencrypt.c:201 +#, c-format +msgid "Cannot exclusively open %s, device in use." +msgstr "无法独占打开 %s,设备正在使用中。" + +#: src/cryptsetup_reencrypt.c:215 src/cryptsetup_reencrypt.c:1127 +msgid "Allocation of aligned memory failed." +msgstr "分配对齐内存失败。" + +#: src/cryptsetup_reencrypt.c:222 +#, c-format +msgid "Cannot read device %s." +msgstr "无法读取设备 %s。" + +#: src/cryptsetup_reencrypt.c:233 +#, c-format +msgid "Marking LUKS1 device %s unusable." +msgstr "正在标记 LUKS1 设备 %s 为不可用状态。" + +#: src/cryptsetup_reencrypt.c:237 +#, c-format +msgid "Setting LUKS2 offline reencrypt flag on device %s." +msgstr "正在设备 %s 上设定 LUKS2 离线重加密旗标。" + +#: src/cryptsetup_reencrypt.c:254 +#, c-format +msgid "Cannot write device %s." +msgstr "无法写入设备 %s。" + +#: src/cryptsetup_reencrypt.c:302 +msgid "Cannot write reencryption log file." +msgstr "无法写入重加密日志文件。" + +#: src/cryptsetup_reencrypt.c:358 +msgid "Cannot read reencryption log file." +msgstr "无法读取重加密日志文件。" + +#: src/cryptsetup_reencrypt.c:396 +#, c-format +msgid "Log file %s exists, resuming reencryption.\n" +msgstr "日志文件 %s 存在,继续重加密。\n" + +#: src/cryptsetup_reencrypt.c:445 +msgid "Activating temporary device using old LUKS header." +msgstr "正使用旧 LUKS 标头激活临时设备。" + +#: src/cryptsetup_reencrypt.c:455 +msgid "Activating temporary device using new LUKS header." +msgstr "正使用新 LUKS 标头激活临时设备。" + +#: src/cryptsetup_reencrypt.c:465 +msgid "Activation of temporary devices failed." +msgstr "激活临时设备失败。" + +# stat() 主要就是出来一个各种文件信息…… +#: src/cryptsetup_reencrypt.c:551 +#, fuzzy +msgid "Failed to set data offset." +msgstr "获取 (stat) 密钥文件信息失败。" + +# stat() 主要就是出来一个各种文件信息…… +#: src/cryptsetup_reencrypt.c:557 +#, fuzzy +msgid "Failed to set metadata size." +msgstr "获取 (stat) 密钥文件信息失败。" + +#: src/cryptsetup_reencrypt.c:565 +#, c-format +msgid "New LUKS header for device %s created." +msgstr "已创建设备 %s 的新 LUKS 标头。" + +#: src/cryptsetup_reencrypt.c:625 +#, c-format +msgid "This version of cryptsetup-reencrypt can't handle new internal token type %s." +msgstr "该版本的 cryptsetup-reencrypt 无法处理新的内部 token 类型 %s。" + +#: src/cryptsetup_reencrypt.c:647 +msgid "Failed to read activation flags from backup header." +msgstr "从备份标头读取活动旗标失败。" + +#: src/cryptsetup_reencrypt.c:651 +msgid "Failed to write activation flags to new header." +msgstr "向新表头写入活动旗标失败。" + +#: src/cryptsetup_reencrypt.c:655 src/cryptsetup_reencrypt.c:659 +msgid "Failed to read requirements from backup header." +msgstr "从备份标头读取需求失败。" + +#: src/cryptsetup_reencrypt.c:697 +#, c-format +msgid "%s header backup of device %s created." +msgstr "已创建 %s 标头备份(对应设备 %s)。" + +#: src/cryptsetup_reencrypt.c:760 +msgid "Creation of LUKS backup headers failed." +msgstr "LUKS 备份标头创建失败。" + +#: src/cryptsetup_reencrypt.c:893 +#, c-format +msgid "Cannot restore %s header on device %s." +msgstr "无法恢复 %s 标头(在设备 %s 上)。" + +#: src/cryptsetup_reencrypt.c:895 +#, c-format +msgid "%s header on device %s restored." +msgstr "已恢复 %s 标头(在设备 %s 上)。" + +#: src/cryptsetup_reencrypt.c:1099 src/cryptsetup_reencrypt.c:1105 +msgid "Cannot open temporary LUKS device." +msgstr "无法打开临时 LUKS 设备。" + +#: src/cryptsetup_reencrypt.c:1110 src/cryptsetup_reencrypt.c:1115 +msgid "Cannot get device size." +msgstr "无法获取设备大小。" + +#: src/cryptsetup_reencrypt.c:1150 +msgid "IO error during reencryption." +msgstr "重加密时发生 IO 错误。" + +#: src/cryptsetup_reencrypt.c:1181 +msgid "Provided UUID is invalid." +msgstr "提供的 UUID 无效。" + +#: src/cryptsetup_reencrypt.c:1407 +msgid "Cannot open reencryption log file." +msgstr "无法打开重加密日志文件。" + +#: src/cryptsetup_reencrypt.c:1413 +msgid "No decryption in progress, provided UUID can be used only to resume suspended decryption process." +msgstr "没有正在进行中的解密操作,提供的 UUID 仅能用于继续已挂起的解密操作。" + +#: src/cryptsetup_reencrypt.c:1488 +#, c-format +msgid "Changed pbkdf parameters in keyslot %i." +msgstr "已在密钥槽 %i 更改 pbkdf 参数。" + +#: src/cryptsetup_reencrypt.c:1600 +msgid "Reencryption block size" +msgstr "重加密块大小" + +#: src/cryptsetup_reencrypt.c:1600 +msgid "MiB" +msgstr "MiB" + +#: src/cryptsetup_reencrypt.c:1604 +msgid "Do not change key, no data area reencryption" +msgstr "不要更改密钥,无数据区重加密" + +#: src/cryptsetup_reencrypt.c:1606 +msgid "Read new volume (master) key from file" +msgstr "从文件读取卷(主)密钥" + +#: src/cryptsetup_reencrypt.c:1607 +msgid "PBKDF2 iteration time for LUKS (in ms)" +msgstr "LUKS 默认 PBKDF2 迭代时间(毫秒)" + +#: src/cryptsetup_reencrypt.c:1613 +msgid "Use direct-io when accessing devices" +msgstr "在访问设备时使用 direct-io" + +#: src/cryptsetup_reencrypt.c:1614 +msgid "Use fsync after each block" +msgstr "在每个数据块后使用 fsync" + +#: src/cryptsetup_reencrypt.c:1615 +msgid "Update log file after every block" +msgstr "在每个数据块后更新日志文件" + +#: src/cryptsetup_reencrypt.c:1616 +msgid "Use only this slot (others will be disabled)" +msgstr "仅使用这个密钥槽(其他的密钥槽将被禁用)" + +#: src/cryptsetup_reencrypt.c:1621 +msgid "Create new header on not encrypted device" +msgstr "在未加密的设备上创建新的标头" + +#: src/cryptsetup_reencrypt.c:1622 +msgid "Permanently decrypt device (remove encryption)" +msgstr "永久解密设备(移除加密)" + +#: src/cryptsetup_reencrypt.c:1623 +msgid "The UUID used to resume decryption" +msgstr "用于继续解密的 UUID" + +#: src/cryptsetup_reencrypt.c:1624 +msgid "Type of LUKS metadata: luks1, luks2" +msgstr "LUKS 元数据类型:luks1、luks2" + +#: src/cryptsetup_reencrypt.c:1643 +msgid "[OPTION...] " +msgstr "[选项...] <设备>" + +#: src/cryptsetup_reencrypt.c:1651 +#, c-format +msgid "Reencryption will change: %s%s%s%s%s%s." +msgstr "重加密会改变:%s%s%s%s%s%s。" + +#: src/cryptsetup_reencrypt.c:1652 +msgid "volume key" +msgstr "卷密钥" + +#: src/cryptsetup_reencrypt.c:1654 +msgid "set hash to " +msgstr "设置哈希值为 " + +#: src/cryptsetup_reencrypt.c:1655 +msgid ", set cipher to " +msgstr ",设定密文为 " + +#: src/cryptsetup_reencrypt.c:1659 +msgid "Argument required." +msgstr "需要参数。" + +#: src/cryptsetup_reencrypt.c:1687 +msgid "Only values between 1 MiB and 64 MiB allowed for reencryption block size." +msgstr "重加密块大小只能是 1 MiB 到 64 MiB 之间的值。" + +#: src/cryptsetup_reencrypt.c:1714 +msgid "Maximum device reduce size is 64 MiB." +msgstr "最大设备缩减大小为 64 MiB。" + +#: src/cryptsetup_reencrypt.c:1721 +msgid "Option --new must be used together with --reduce-device-size or --header." +msgstr "选项 --new 必须与 --reduce-device-size 或 --header 共用。" + +#: src/cryptsetup_reencrypt.c:1725 +msgid "Option --keep-key can be used only with --hash, --iter-time or --pbkdf-force-iterations." +msgstr "选项 --keep-key 只能与 --hash、--iter-time 或 --pbkdf-force-iterations 共用。" + +#: src/cryptsetup_reencrypt.c:1729 +msgid "Option --new cannot be used together with --decrypt." +msgstr "选项 --new 不可与 --decrypt 共用。" + +#: src/cryptsetup_reencrypt.c:1733 +msgid "Option --decrypt is incompatible with specified parameters." +msgstr "选项 --decrypt 与选定参数不兼容。" + +#: src/cryptsetup_reencrypt.c:1737 +msgid "Option --uuid is allowed only together with --decrypt." +msgstr "选项 --uuid 不可与 --decrypt 共用。" + +#: src/cryptsetup_reencrypt.c:1741 +msgid "Invalid luks type. Use one of these: 'luks', 'luks1' or 'luks2'." +msgstr "无效的 luks 类型。请使用下列选项之一:'luks'、'luks1' 或 'luks2'。" + +#: src/utils_tools.c:151 +msgid "Error reading response from terminal." +msgstr "从终端读取响应时失败。" + +#: src/utils_tools.c:186 +msgid "Command successful.\n" +msgstr "命令成功。\n" + +#: src/utils_tools.c:194 +msgid "wrong or missing parameters" +msgstr "错误或缺失的参数" + +#: src/utils_tools.c:196 +msgid "no permission or bad passphrase" +msgstr "无权限或口令错误" + +#: src/utils_tools.c:198 +msgid "out of memory" +msgstr "内存耗尽" + +#: src/utils_tools.c:200 +msgid "wrong device or file specified" +msgstr "指定了错误的设备或文件" + +#: src/utils_tools.c:202 +msgid "device already exists or device is busy" +msgstr "设备已存在或设备正忙" + +#: src/utils_tools.c:204 +msgid "unknown error" +msgstr "未知错误" + +#: src/utils_tools.c:206 +#, c-format +msgid "Command failed with code %i (%s).\n" +msgstr "命令失败,代码 %i(%s)。\n" + +#: src/utils_tools.c:283 +#, fuzzy, c-format +msgid "Key slot %i created." +msgstr "密钥槽 %d 已改变。" + +#: src/utils_tools.c:285 +#, fuzzy, c-format +msgid "Key slot %i unlocked." +msgstr "密钥槽 %d 已解锁。" + +#: src/utils_tools.c:287 +#, fuzzy, c-format +msgid "Key slot %i removed." +msgstr "密钥槽 %d 已解锁。" + +#: src/utils_tools.c:296 +#, fuzzy, c-format +msgid "Token %i created." +msgstr "密钥槽 %d 未使用。\n" + +#: src/utils_tools.c:298 +#, fuzzy, c-format +msgid "Token %i removed." +msgstr "密钥槽 %d 未使用。\n" + +#: src/utils_tools.c:464 +#, fuzzy +msgid "" +"\n" +"Wipe interrupted." +msgstr "测试密文" + +#: src/utils_tools.c:475 +#, c-format +msgid "WARNING: Device %s already contains a '%s' partition signature.\n" +msgstr "" + +#: src/utils_tools.c:483 +#, c-format +msgid "WARNING: Device %s already contains a '%s' superblock signature.\n" +msgstr "" + +#: src/utils_tools.c:504 src/utils_tools.c:568 +#, fuzzy +msgid "Failed to initialize device signature probes." +msgstr "初始化默认 LUKS2 密钥槽参数失败。" + +# stat() 主要就是出来一个各种文件信息…… +#: src/utils_tools.c:548 +#, fuzzy, c-format +msgid "Failed to stat device %s." +msgstr "获取 (stat) 密钥文件信息失败。" + +#: src/utils_tools.c:561 +#, c-format +msgid "Device %s is in use. Can not proceed with format operation." +msgstr "" + +#: src/utils_tools.c:563 +#, fuzzy, c-format +msgid "Failed to open file %s in read/write mode." +msgstr "无法打开密钥文件 %s 以供写入。" + +#: src/utils_tools.c:577 +#, c-format +msgid "Existing '%s' partition signature (offset: % bytes) on device %s will be wiped." +msgstr "" + +#: src/utils_tools.c:580 +#, c-format +msgid "Existing '%s' superblock signature (offset: % bytes) on device %s will be wiped." +msgstr "" + +#: src/utils_tools.c:583 +#, fuzzy +msgid "Failed to wipe device signature." +msgstr "无法获取写入设备锁。" + +#: src/utils_tools.c:590 +#, c-format +msgid "Failed to probe device %s for a signature." +msgstr "" + +#: src/utils_tools.c:629 +#, fuzzy +msgid "" +"\n" +"Reencryption interrupted." +msgstr "测试密文" + +#: src/utils_password.c:43 src/utils_password.c:75 +#, c-format +msgid "Cannot check password quality: %s" +msgstr "无法检查密码质量:%s" + +#: src/utils_password.c:51 +#, c-format +msgid "" +"Password quality check failed:\n" +" %s" +msgstr "" +"密码质量检查失败:\n" +" %s" + +#: src/utils_password.c:83 +#, c-format +msgid "Password quality check failed: Bad passphrase (%s)" +msgstr "密码质量检查失败:无效密码 (%s)" + +#: src/utils_password.c:193 src/utils_password.c:208 +msgid "Error reading passphrase from terminal." +msgstr "从终端读取口令时出错。" + +#: src/utils_password.c:206 +msgid "Verify passphrase: " +msgstr "确认密码:" + +#: src/utils_password.c:213 +msgid "Passphrases do not match." +msgstr "口令不匹配。" + +#: src/utils_password.c:250 +msgid "Cannot use offset with terminal input." +msgstr "不能将偏移量用于终端输入。" + +#: src/utils_password.c:253 +#, c-format +msgid "Enter passphrase: " +msgstr "输入口令:" + +#: src/utils_password.c:256 +#, c-format +msgid "Enter passphrase for %s: " +msgstr "输入 %s 的口令:" + +#: src/utils_password.c:287 +msgid "No key available with this passphrase." +msgstr "此口令无可用的密钥。" + +#: src/utils_password.c:289 +msgid "No usable keyslot is available." +msgstr "" + +#: src/utils_password.c:328 +#, c-format +msgid "Cannot open keyfile %s for write." +msgstr "无法打开密钥文件 %s 以供写入。" + +#: src/utils_password.c:335 +#, c-format +msgid "Cannot write to keyfile %s." +msgstr "无法写入密钥文件 %s。" + +#: src/utils_luks2.c:47 +#, fuzzy, c-format +msgid "Failed to open file %s in read-only mode." +msgstr "打开 (open) 密钥文件失败。" + +#: src/utils_luks2.c:60 +msgid "Provide valid LUKS2 token JSON:\n" +msgstr "" + +#: src/utils_luks2.c:67 +#, fuzzy +msgid "Failed to read JSON file." +msgstr "打开 (open) 密钥文件失败。" + +#: src/utils_luks2.c:72 +#, fuzzy +msgid "" +"\n" +"Read interrupted." +msgstr "测试密文" + +#: src/utils_luks2.c:113 +#, fuzzy, c-format +msgid "Failed to open file %s in write mode." +msgstr "无法打开密钥文件 %s 以供写入。" + +#: src/utils_luks2.c:122 +#, fuzzy +msgid "" +"\n" +"Write interrupted." +msgstr "测试密文" + +#: src/utils_luks2.c:126 +#, fuzzy +msgid "Failed to write JSON file." +msgstr "打开 (open) 密钥文件失败。" + +#~ msgid "Cannot format device %s which is still in use." +#~ msgstr "无法格式化正在使用的设备 %s。" + +#~ msgid "Replaced with key slot %d." +#~ msgstr "替换为密钥槽 %d。" + +#~ msgid "Key slot %d is not used." +#~ msgstr "密钥槽 %d 未使用。" + +#~ msgid "Function not available in FIPS mode." +#~ msgstr "功能在 FIPS 模式无效。" + +#~ msgid "Device %s is too small. (LUKS2 requires at least % bytes.)" +#~ msgstr "设备 %s 过小。(LUKS2 需要至少 % 字节。)" + +#~ msgid "Key slot %d selected for deletion." +#~ msgstr "已选中密钥槽 %d 以供删除。" + +#~ msgid "open device as mapping " +#~ msgstr "以映射 <名称> 打开设备" + +#, fuzzy +#~| msgid "close device (remove mapping)" +#~ msgid "close device (deactivate and remove mapping)" +#~ msgstr "关闭设备(移除映射)" + +# stat() 主要就是出来一个各种文件信息…… +#~ msgid "Failed to set PBKDF parameters." +#~ msgstr "设置 pbkdf 参数失败。" + +#~ msgid "Activated keyslot %i." +#~ msgstr "已激活密钥槽 %i。" + +#~ msgid "Cannot seek to device offset.\n" +#~ msgstr "无法寻找到设备偏移位置。\n" + +#~ msgid "Interrupted by a signal." +#~ msgstr "被信号中断。" + +#~ msgid "memory allocation error in action_luksFormat" +#~ msgstr "在 action_luksFormat 中发生内存分配错误" + +#, fuzzy +#~| msgid "Key slot is invalid." +#~ msgid "Key slot is invalid.\n" +#~ msgstr "密钥槽无效。" + +#~ msgid "Cannot find a free loopback device.\n" +#~ msgstr "找不到空闲的回环设备。\n" + +#~ msgid "Too many tree levels for verity volume.\n" +#~ msgstr "VERITY 卷上的目录树层级过多。\n" + +#~ msgid "Key %d not active. Can't wipe.\n" +#~ msgstr "无法清除未激活的密钥 %d。\n" + +#~ msgid " " +#~ msgstr "<名称> <数据设备> <哈希设备> <根哈希值>" + +#~ msgid "create active device" +#~ msgstr "创建已激活的设备" + +#~ msgid "remove (deactivate) device" +#~ msgstr "移除(禁用)设备" + +#~ msgid "Cannot open device %s\n" +#~ msgstr "无法打开设备 %s。\n" + +#~ msgid "Marking LUKS device %s usable.\n" +#~ msgstr "正将 LUKS 设备 %s 标为可用。\n" + +#~ msgid "Progress: %5.1f%%, ETA %02llu:%02llu, %4llu MiB written, speed %5.1f MiB/s%s" +#~ msgstr "进度:%5.1f%%, 生育 %02llu:%02llu, %4llu MiB 已写入, 速度 %5.1f MiB/s%s" + +#~ msgid "WARNING: this is experimental code, it can completely break your data.\n" +#~ msgstr "警告:此为实验性代码,实验性代码可能完全损毁你的数据。\n" diff --git a/scripts/Makemodule.am b/scripts/Makemodule.am new file mode 100644 index 0000000..5bf6ddf --- /dev/null +++ b/scripts/Makemodule.am @@ -0,0 +1,5 @@ +DISTCLEAN_TARGETS += scripts/cryptsetup.conf + +if CRYPTSETUP_TMPFILE +tmpfilesd_DATA += scripts/cryptsetup.conf +endif diff --git a/scripts/cryptsetup.conf.in b/scripts/cryptsetup.conf.in new file mode 100644 index 0000000..8bbc5af --- /dev/null +++ b/scripts/cryptsetup.conf.in @@ -0,0 +1 @@ +d @DEFAULT_LUKS2_LOCK_PATH@ @DEFAULT_LUKS2_LOCK_DIR_PERMS@ root root - diff --git a/src/Makemodule.am b/src/Makemodule.am new file mode 100644 index 0000000..b77ffb0 --- /dev/null +++ b/src/Makemodule.am @@ -0,0 +1,133 @@ +# cryptsetup +if CRYPTSETUP + +cryptsetup_SOURCES = \ + lib/utils_crypt.c \ + lib/utils_loop.c \ + lib/utils_io.c \ + lib/utils_blkid.c \ + src/utils_tools.c \ + src/utils_password.c \ + src/utils_luks2.c \ + src/utils_blockdev.c \ + src/cryptsetup.c \ + src/cryptsetup.h + +cryptsetup_LDADD = $(LDADD) \ + libcryptsetup.la \ + @POPT_LIBS@ \ + @PWQUALITY_LIBS@ \ + @PASSWDQC_LIBS@ \ + @UUID_LIBS@ \ + @BLKID_LIBS@ + +sbin_PROGRAMS += cryptsetup + +if STATIC_TOOLS +sbin_PROGRAMS += cryptsetup.static +cryptsetup_static_SOURCES = $(cryptsetup_SOURCES) +cryptsetup_static_LDFLAGS = $(AM_LDFLAGS) -all-static +cryptsetup_static_LDADD = \ + $(cryptsetup_LDADD) \ + @CRYPTO_STATIC_LIBS@ \ + @PWQUALITY_STATIC_LIBS@ \ + @DEVMAPPER_STATIC_LIBS@ +endif +endif + +# veritysetup +if VERITYSETUP + +veritysetup_SOURCES = \ + lib/utils_crypt.c \ + lib/utils_loop.c \ + lib/utils_io.c \ + lib/utils_blkid.c \ + src/utils_tools.c \ + src/veritysetup.c \ + src/cryptsetup.h + +veritysetup_LDADD = $(LDADD) \ + libcryptsetup.la \ + @POPT_LIBS@ \ + @BLKID_LIBS@ + +sbin_PROGRAMS += veritysetup + +if STATIC_TOOLS +sbin_PROGRAMS += veritysetup.static +veritysetup_static_SOURCES = $(veritysetup_SOURCES) +veritysetup_static_LDFLAGS = $(AM_LDFLAGS) -all-static +veritysetup_static_LDADD = \ + $(veritysetup_LDADD) \ + @CRYPTO_STATIC_LIBS@ \ + @DEVMAPPER_STATIC_LIBS@ \ + @UUID_LIBS@ +endif +endif + +# integritysetup +if INTEGRITYSETUP + +integritysetup_SOURCES = \ + lib/utils_crypt.c \ + lib/utils_loop.c \ + lib/utils_io.c \ + lib/utils_blkid.c \ + src/utils_tools.c \ + src/integritysetup.c \ + src/cryptsetup.h + +integritysetup_LDADD = $(LDADD) \ + libcryptsetup.la \ + @POPT_LIBS@ \ + @UUID_LIBS@ \ + @BLKID_LIBS@ + +sbin_PROGRAMS += integritysetup + +if STATIC_TOOLS +sbin_PROGRAMS += integritysetup.static +integritysetup_static_SOURCES = $(integritysetup_SOURCES) +integritysetup_static_LDFLAGS = $(AM_LDFLAGS) -all-static +integritysetup_static_LDADD = \ + $(integritysetup_LDADD) \ + @CRYPTO_STATIC_LIBS@ \ + @DEVMAPPER_STATIC_LIBS@ \ + @UUID_LIBS@ +endif +endif + +# reencrypt +if REENCRYPT +cryptsetup_reencrypt_SOURCES = \ + lib/utils_crypt.c \ + lib/utils_io.c \ + lib/utils_blkid.c \ + src/utils_tools.c \ + lib/utils_loop.c \ + src/utils_password.c \ + src/cryptsetup_reencrypt.c \ + src/cryptsetup.h + +cryptsetup_reencrypt_LDADD = $(LDADD) \ + libcryptsetup.la \ + @POPT_LIBS@ \ + @PWQUALITY_LIBS@ \ + @PASSWDQC_LIBS@ \ + @UUID_LIBS@ \ + @BLKID_LIBS@ + +sbin_PROGRAMS += cryptsetup-reencrypt + +if STATIC_TOOLS +sbin_PROGRAMS += cryptsetup-reencrypt.static +cryptsetup_reencrypt_static_SOURCES = $(cryptsetup_reencrypt_SOURCES) +cryptsetup_reencrypt_static_LDFLAGS = $(AM_LDFLAGS) -all-static +cryptsetup_reencrypt_static_LDADD = \ + $(cryptsetup_reencrypt_LDADD) \ + @CRYPTO_STATIC_LIBS@ \ + @PWQUALITY_STATIC_LIBS@ \ + @DEVMAPPER_STATIC_LIBS@ +endif +endif diff --git a/src/cryptsetup.c b/src/cryptsetup.c new file mode 100644 index 0000000..df13df3 --- /dev/null +++ b/src/cryptsetup.c @@ -0,0 +1,3872 @@ +/* + * cryptsetup - setup cryptographic volumes for dm-crypt + * + * Copyright (C) 2004 Jana Saout + * Copyright (C) 2004-2007 Clemens Fruhwirth + * Copyright (C) 2009-2019 Red Hat, Inc. All rights reserved. + * Copyright (C) 2009-2019 Milan Broz + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#include "cryptsetup.h" +#include + +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 int opt_key_size = 0; +static int opt_keyslot_key_size = 0; +static long opt_keyfile_size = 0; +static long opt_new_keyfile_size = 0; +static uint64_t opt_keyfile_offset = 0; +static uint64_t opt_new_keyfile_offset = 0; +static int opt_key_slot = CRYPT_ANY_SLOT; +static int opt_token = CRYPT_ANY_TOKEN; +static int opt_token_only = 0; +static uint64_t opt_size = 0; +static uint64_t opt_offset = 0; +static uint64_t opt_skip = 0; +static int opt_skip_valid = 0; +static int opt_readonly = 0; +static int opt_timeout = 0; +static int opt_tries = 3; +static int opt_align_payload = 0; +static int opt_random = 0; +static int opt_urandom = 0; +static int opt_dump_master_key = 0; +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_test_passphrase = 0; +static int opt_tcrypt_hidden = 0; +static int opt_tcrypt_system = 0; +static int opt_tcrypt_backup = 0; +static int opt_veracrypt = 0; +static int opt_veracrypt_pim = -1; +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 const char *opt_key_description = NULL; +static int opt_sector_size = 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}; + +static const char *uuid_or_device_header(const char **data_device) +{ + if (data_device) + *data_device = opt_header_device ? action_argv[0] : NULL; + + return uuid_or_device(opt_header_device ?: action_argv[0]); +} + +static const char *luksType(const char *type) +{ + if (type && !strcmp(type, "luks2")) + return CRYPT_LUKS2; + + if (type && !strcmp(type, "luks1")) + return CRYPT_LUKS1; + + if (type && !strcmp(type, "luks")) + return CRYPT_LUKS; /* NULL */ + + if (type && *type) + return type; + + return CRYPT_LUKS; /* NULL */ +} + +static int _verify_passphrase(int def) +{ + /* Batch mode switch off verify - if not overridden by -y */ + if (opt_verify_passphrase) + def = 1; + else if (opt_batch_mode) + def = 0; + + /* Non-tty input doesn't allow verify */ + if (def && !isatty(STDIN_FILENO)) { + if (opt_verify_passphrase) + log_err(_("Can't do passphrase verification on non-tty inputs.")); + def = 0; + } + + return def; +} + +static void _set_activation_flags(uint32_t *flags) +{ + if (opt_readonly) + *flags |= CRYPT_ACTIVATE_READONLY; + + if (opt_allow_discards) + *flags |= CRYPT_ACTIVATE_ALLOW_DISCARDS; + + if (opt_perf_same_cpu_crypt) + *flags |= CRYPT_ACTIVATE_SAME_CPU_CRYPT; + + if (opt_perf_submit_from_crypt_cpus) + *flags |= CRYPT_ACTIVATE_SUBMIT_FROM_CRYPT_CPUS; + + if (opt_integrity_nojournal) + *flags |= CRYPT_ACTIVATE_NO_JOURNAL; + + /* In persistent mode, we use what is set on command line */ + if (opt_persistent) + *flags |= CRYPT_ACTIVATE_IGNORE_PERSISTENT; + + /* Only for LUKS2 but ignored elsewhere */ + if (opt_test_passphrase) + *flags |= CRYPT_ACTIVATE_ALLOW_UNBOUND_KEY; + + if (opt_serialize_memory_hard_pbkdf) + *flags |= CRYPT_ACTIVATE_SERIALIZE_MEMORY_HARD_PBKDF; +} + +static void _set_reencryption_flags(uint32_t *flags) +{ + if (opt_reencrypt_init_only) + *flags |= CRYPT_REENCRYPT_INITIALIZE_ONLY; + + if (opt_reencrypt_resume_only) + *flags |= CRYPT_REENCRYPT_RESUME_ONLY; +} + +static int _set_keyslot_encryption_params(struct crypt_device *cd) +{ + const char *type = crypt_get_type(cd); + + if (!opt_keyslot_key_size && !opt_keyslot_cipher) + return 0; + + if (!type || strcmp(type, CRYPT_LUKS2)) { + log_err(_("Keyslot encryption parameters can be set only for LUKS2 device.")); + return -EINVAL; + } + + return crypt_keyslot_set_encryption(cd, opt_keyslot_cipher, opt_keyslot_key_size / 8); +} + +static int action_open_plain(void) +{ + struct crypt_device *cd = NULL, *cd1 = NULL; + const char *pcipher, *pmode; + char *msg, cipher[MAX_CIPHER_LEN], cipher_mode[MAX_CIPHER_LEN]; + struct crypt_active_device cad; + struct crypt_params_plain params = { + .hash = opt_hash ?: DEFAULT_PLAIN_HASH, + .skip = opt_skip, + .offset = opt_offset, + .size = opt_size, + .sector_size = opt_sector_size ?: SECTOR_SIZE + }; + char *password = NULL; + const char *activated_name = NULL; + size_t passwordLen, key_size_max, signatures = 0, + key_size = (opt_key_size ?: DEFAULT_PLAIN_KEYBITS) / 8; + uint32_t activate_flags = 0; + int r; + + r = crypt_parse_name_and_mode(opt_cipher ?: DEFAULT_CIPHER(PLAIN), + cipher, NULL, cipher_mode); + if (r < 0) { + log_err(_("No known cipher specification pattern detected.")); + goto out; + } + + /* FIXME: temporary hack, no hashing for keyfiles in plain mode */ + if (opt_key_file && !tools_is_stdin(opt_key_file)) { + params.hash = NULL; + if (!opt_batch_mode && opt_hash) + log_std(_("WARNING: The --hash parameter is being ignored " + "in plain mode with keyfile specified.\n")); + } + + if (params.hash && !strcmp(params.hash, "plain")) + params.hash = NULL; + + if (!opt_batch_mode && !params.hash && opt_key_file && !tools_is_stdin(opt_key_file) && opt_keyfile_size) + log_std(_("WARNING: The --keyfile-size option is being ignored, " + "the read size is the same as the encryption key size.\n")); + + if (opt_refresh) { + activated_name = action_argc > 1 ? action_argv[1] : action_argv[0]; + r = crypt_init_by_name_and_header(&cd1, activated_name, NULL); + if (r) + goto out; + r = crypt_get_active_device(cd1, activated_name, &cad); + if (r) + goto out; + + /* copy known parameters from existing device */ + params.skip = crypt_get_iv_offset(cd1); + params.offset = crypt_get_data_offset(cd1); + params.size = cad.size; + params.sector_size = crypt_get_sector_size(cd1); + key_size = crypt_get_volume_key_size(cd1); + + if ((r = crypt_init(&cd, crypt_get_device_name(cd1)))) + goto out; + + activate_flags |= CRYPT_ACTIVATE_REFRESH; + + pcipher = crypt_get_cipher(cd1); + pmode = crypt_get_cipher_mode(cd1); + } else { + activated_name = action_argv[1]; + if ((r = crypt_init(&cd, action_argv[0]))) + goto out; + + /* Skip blkid scan when activating plain device with offset */ + if (!opt_offset) { + /* Print all present signatures in read-only mode */ + r = tools_detect_signatures(action_argv[0], 0, &signatures); + if (r < 0) + goto out; + } + + if (signatures) { + r = asprintf(&msg, _("Detected device signature(s) on %s. Proceeding further may damage existing data."), action_argv[0]); + if (r == -1) { + r = -ENOMEM; + goto out; + } + + r = yesDialog(msg, _("Operation aborted.\n")) ? 0 : -EINVAL; + free(msg); + if (r < 0) + goto out; + } + + pcipher = cipher; + pmode = cipher_mode; + } + + r = crypt_format(cd, CRYPT_PLAIN, + pcipher, pmode, + NULL, NULL, + key_size, + ¶ms); + check_signal(&r); + if (r < 0) + goto out; + + if (opt_shared) + activate_flags |= CRYPT_ACTIVATE_SHARED; + + _set_activation_flags(&activate_flags); + + if (!tools_is_stdin(opt_key_file)) { + /* If no hash, key is read directly, read size is always key_size + * (possible opt_keyfile_size is ignored. + * If hash is specified, opt_keyfile_size is applied. + * The opt_keyfile_offset is applied always. + */ + key_size_max = params.hash ? (size_t)opt_keyfile_size : key_size; + r = crypt_activate_by_keyfile_device_offset(cd, action_argv[1], + CRYPT_ANY_SLOT, opt_key_file, key_size_max, + opt_keyfile_offset, activate_flags); + } else { + key_size_max = (opt_key_file && !params.hash) ? key_size : (size_t)opt_keyfile_size; + r = tools_get_key(NULL, &password, &passwordLen, + opt_keyfile_offset, key_size_max, + opt_key_file, opt_timeout, + _verify_passphrase(0), 0, cd); + if (r < 0) + goto out; + + r = crypt_activate_by_passphrase(cd, activated_name, + CRYPT_ANY_SLOT, password, passwordLen, activate_flags); + } +out: + crypt_free(cd); + crypt_free(cd1); + crypt_safe_free(password); + + return r; +} + +static int action_open_loopaes(void) +{ + struct crypt_device *cd = NULL; + struct crypt_params_loopaes params = { + .hash = opt_hash ?: NULL, + .offset = opt_offset, + .skip = opt_skip_valid ? opt_skip : opt_offset, + }; + unsigned int key_size = (opt_key_size ?: DEFAULT_LOOPAES_KEYBITS) / 8; + uint32_t activate_flags = 0; + const char *activated_name = NULL; + int r; + + if (!opt_key_file) { + log_err(_("Option --key-file is required.")); + return -EINVAL; + } + + if (opt_refresh) { + activated_name = action_argc > 1 ? action_argv[1] : action_argv[0]; + if ((r = crypt_init_by_name(&cd, activated_name))) + goto out; + activate_flags |= CRYPT_ACTIVATE_REFRESH; + } else { + activated_name = action_argv[1]; + if ((r = crypt_init(&cd, action_argv[0]))) + goto out; + + r = crypt_format(cd, CRYPT_LOOPAES, opt_cipher ?: DEFAULT_LOOPAES_CIPHER, + NULL, NULL, NULL, key_size, ¶ms); + check_signal(&r); + if (r < 0) + goto out; + } + + _set_activation_flags(&activate_flags); + + r = crypt_activate_by_keyfile_device_offset(cd, activated_name, CRYPT_ANY_SLOT, + tools_is_stdin(opt_key_file) ? "/dev/stdin" : opt_key_file, opt_keyfile_size, + opt_keyfile_offset, activate_flags); +out: + crypt_free(cd); + + return r; +} + +static int tcrypt_load(struct crypt_device *cd, struct crypt_params_tcrypt *params) +{ + int r, tries = opt_tries, eperm = 0; + + if (opt_keyfile_stdin) + tries = 1; + + do { + /* TCRYPT header is encrypted, get passphrase now */ + r = tools_get_key(NULL, CONST_CAST(char**)¶ms->passphrase, + ¶ms->passphrase_size, 0, 0, opt_keyfile_stdin, opt_timeout, + _verify_passphrase(0), 0, cd); + if (r < 0) + continue; + + if (opt_veracrypt_query_pim) { + char *tmp_pim_nptr = NULL; + char *tmp_pim_end = NULL; + size_t tmp_pim_size = 0; + unsigned long long tmp_pim_ull = 0; + + r = tools_get_key(_("Enter VeraCrypt PIM: "), + CONST_CAST(char**)&tmp_pim_nptr, + &tmp_pim_size, 0, 0, opt_keyfile_stdin, opt_timeout, + _verify_passphrase(0), 0, cd); + if (r < 0) + continue; + + tmp_pim_ull = strtoull(tmp_pim_nptr, &tmp_pim_end, 10); + if (*tmp_pim_nptr == '\0' || !tmp_pim_end || *tmp_pim_end != '\0') { + log_err(_("Invalid PIM value: parse error.")); + r = -EINVAL; + } else if (tmp_pim_ull == 0) { + log_err(_("Invalid PIM value: 0.")); + r = -EINVAL; + } else if (tmp_pim_ull > UINT32_MAX) { + log_err(_("Invalid PIM value: outside of range.")); + r = -ERANGE; + } + crypt_safe_free(CONST_CAST(char*)tmp_pim_nptr); + if (r < 0) + continue; + + params->veracrypt_pim = (uint32_t)tmp_pim_ull; + crypt_memzero(&tmp_pim_ull, sizeof(tmp_pim_ull)); + } + + if (opt_tcrypt_hidden) + params->flags |= CRYPT_TCRYPT_HIDDEN_HEADER; + + if (opt_tcrypt_system) + params->flags |= CRYPT_TCRYPT_SYSTEM_HEADER; + + if (opt_tcrypt_backup) + params->flags |= CRYPT_TCRYPT_BACKUP_HEADER; + + r = crypt_load(cd, CRYPT_TCRYPT, params); + + if (r == -EPERM) { + log_err(_("No device header detected with this passphrase.")); + eperm = 1; + } + + if (r < 0) { + crypt_safe_free(CONST_CAST(char*)params->passphrase); + params->passphrase = NULL; + params->passphrase_size = 0; + } + check_signal(&r); + } while ((r == -EPERM || r == -ERANGE) && (--tries > 0)); + + /* Report wrong passphrase if at least one try failed */ + if (eperm && r == -EPIPE) + r = -EPERM; + + return r; +} + +static int action_open_tcrypt(void) +{ + struct crypt_device *cd = NULL; + struct crypt_params_tcrypt params = { + .keyfiles = opt_keyfiles, + .keyfiles_count = opt_keyfiles_count, + .flags = CRYPT_TCRYPT_LEGACY_MODES | + (opt_veracrypt ? CRYPT_TCRYPT_VERA_MODES : 0), + .veracrypt_pim = (opt_veracrypt_pim > 0) ? opt_veracrypt_pim : 0, + }; + const char *activated_name; + uint32_t activate_flags = 0; + int r; + + activated_name = opt_test_passphrase ? NULL : action_argv[1]; + + if ((r = crypt_init(&cd, action_argv[0]))) + goto out; + + r = tcrypt_load(cd, ¶ms); + if (r < 0) + goto out; + + _set_activation_flags(&activate_flags); + + if (activated_name) + r = crypt_activate_by_volume_key(cd, activated_name, NULL, 0, activate_flags); +out: + crypt_free(cd); + crypt_safe_free(CONST_CAST(char*)params.passphrase); + crypt_memzero(¶ms.veracrypt_pim, sizeof(params.veracrypt_pim)); + return r; +} + +static int tcryptDump_with_volume_key(struct crypt_device *cd) +{ + char *vk = NULL; + size_t vk_size; + unsigned i; + int r; + + crypt_set_confirm_callback(cd, yesDialog, NULL); + if (!yesDialog( + _("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."), + NULL)) + return -EPERM; + + vk_size = crypt_get_volume_key_size(cd); + vk = crypt_safe_alloc(vk_size); + if (!vk) + return -ENOMEM; + + r = crypt_volume_key_get(cd, CRYPT_ANY_SLOT, vk, &vk_size, NULL, 0); + if (r < 0) + goto out; + + log_std("TCRYPT header information for %s\n", crypt_get_device_name(cd)); + log_std("Cipher chain: \t%s\n", crypt_get_cipher(cd)); + log_std("Cipher mode: \t%s\n", crypt_get_cipher_mode(cd)); + log_std("Payload offset:\t%d\n", (int)crypt_get_data_offset(cd)); + log_std("MK bits: \t%d\n", (int)vk_size * 8); + log_std("MK dump:\t"); + + for(i = 0; i < vk_size; i++) { + if (i && !(i % 16)) + log_std("\n\t\t"); + log_std("%02hhx ", (char)vk[i]); + } + log_std("\n"); +out: + crypt_safe_free(vk); + return r; +} + +static int action_tcryptDump(void) +{ + struct crypt_device *cd = NULL; + struct crypt_params_tcrypt params = { + .keyfiles = opt_keyfiles, + .keyfiles_count = opt_keyfiles_count, + .flags = CRYPT_TCRYPT_LEGACY_MODES | + (opt_veracrypt ? CRYPT_TCRYPT_VERA_MODES : 0), + .veracrypt_pim = (opt_veracrypt_pim > 0) ? opt_veracrypt_pim : 0, + }; + int r; + + if ((r = crypt_init(&cd, action_argv[0]))) + goto out; + + r = tcrypt_load(cd, ¶ms); + if (r < 0) + goto out; + + if (opt_dump_master_key) + r = tcryptDump_with_volume_key(cd); + else + r = crypt_dump(cd); +out: + crypt_free(cd); + crypt_safe_free(CONST_CAST(char*)params.passphrase); + return r; +} + +static int action_close(void) +{ + struct crypt_device *cd = NULL; + crypt_status_info ci; + uint32_t flags = 0; + int r; + + if (opt_deferred_remove) + flags |= CRYPT_DEACTIVATE_DEFERRED; + + r = crypt_init_by_name(&cd, action_argv[0]); + if (r == 0) + r = crypt_deactivate_by_name(cd, action_argv[0], flags); + + if (!r && opt_deferred_remove) { + ci = crypt_status(cd, action_argv[0]); + if (ci == CRYPT_ACTIVE || ci == CRYPT_BUSY) + log_std(_("Device %s is still active and scheduled for deferred removal.\n"), + action_argv[0]); + } + + crypt_free(cd); + return r; +} + +static int action_resize(void) +{ + int r; + size_t passwordLen; + struct crypt_active_device cad; + char *password = NULL; + struct crypt_device *cd = NULL; + + r = crypt_init_by_name_and_header(&cd, action_argv[0], opt_header_device); + if (r) + goto out; + + /* FIXME: LUKS2 may enforce fixed size and it must not be changed */ + r = crypt_get_active_device(cd, action_argv[0], &cad); + if (r) + goto out; + + if (cad.flags & CRYPT_ACTIVATE_KEYRING_KEY) { + if (opt_disable_keyring) { + r = -EINVAL; + log_err(_("Resize of active device requires volume key " + "in keyring but --disable-keyring option is set.")); + goto out; + } + + /* try load VK in kernel keyring using token */ + 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) + goto out; + + r = tools_get_key(NULL, &password, &passwordLen, + opt_keyfile_offset, opt_keyfile_size, opt_key_file, + opt_timeout, _verify_passphrase(0), 0, cd); + if (r < 0) + goto out; + + r = crypt_activate_by_passphrase(cd, NULL, opt_key_slot, + password, passwordLen, + CRYPT_ACTIVATE_KEYRING_KEY); + tools_passphrase_msg(r); + tools_keyslot_msg(r, UNLOCKED); + crypt_safe_free(password); + } + + if (opt_device_size) + opt_size = opt_device_size / SECTOR_SIZE; + + if (r >= 0) + r = crypt_resize(cd, action_argv[0], opt_size); +out: + crypt_free(cd); + return r; +} + +static int action_status(void) +{ + crypt_status_info ci; + crypt_reencrypt_info ri; + struct crypt_active_device cad; + struct crypt_params_integrity ip = {}; + struct crypt_device *cd = NULL; + char *backing_file; + const char *device; + int path = 0, r = 0; + + /* perhaps a path, not a dm device name */ + if (strchr(action_argv[0], '/')) + path = 1; + + ci = crypt_status(NULL, action_argv[0]); + switch (ci) { + case CRYPT_INVALID: + r = -EINVAL; + break; + case CRYPT_INACTIVE: + if (path) + log_std("%s is inactive.\n", action_argv[0]); + else + log_std("%s/%s is inactive.\n", crypt_get_dir(), action_argv[0]); + r = -ENODEV; + break; + case CRYPT_ACTIVE: + case CRYPT_BUSY: + if (path) + log_std("%s is active%s.\n", action_argv[0], + ci == CRYPT_BUSY ? " and is in use" : ""); + else + log_std("%s/%s is active%s.\n", crypt_get_dir(), action_argv[0], + ci == CRYPT_BUSY ? " and is in use" : ""); + + r = crypt_init_by_name_and_header(&cd, action_argv[0], opt_header_device); + if (r < 0) + goto out; + + log_std(" type: %s\n", crypt_get_type(cd) ?: "n/a"); + + /* Print only CRYPT type devices */ + if (!crypt_get_cipher(cd)) + goto out; + + ri = crypt_reencrypt_status(cd, NULL); + if (ri > CRYPT_REENCRYPT_NONE && ri < CRYPT_REENCRYPT_INVALID) + log_std(" reencryption: in-progress\n"); + + r = crypt_get_active_device(cd, action_argv[0], &cad); + if (r < 0) + goto out; + + r = crypt_get_integrity_info(cd, &ip); + if (r < 0 && r != -ENOTSUP) + goto out; + + log_std(" cipher: %s-%s\n", crypt_get_cipher(cd), crypt_get_cipher_mode(cd)); + log_std(" keysize: %d bits\n", crypt_get_volume_key_size(cd) * 8); + log_std(" key location: %s\n", (cad.flags & CRYPT_ACTIVATE_KEYRING_KEY) ? "keyring" : "dm-crypt"); + if (ip.integrity) + log_std(" integrity: %s\n", ip.integrity); + if (ip.integrity_key_size) + log_std(" integrity keysize: %d bits\n", ip.integrity_key_size * 8); + device = crypt_get_device_name(cd); + log_std(" device: %s\n", device); + if ((backing_file = crypt_loop_backing_file(device))) { + log_std(" loop: %s\n", backing_file); + free(backing_file); + } + log_std(" sector size: %d\n", crypt_get_sector_size(cd)); + log_std(" offset: %" PRIu64 " sectors\n", cad.offset); + log_std(" size: %" PRIu64 " sectors\n", cad.size); + if (cad.iv_offset) + log_std(" skipped: %" PRIu64 " sectors\n", cad.iv_offset); + log_std(" mode: %s\n", cad.flags & CRYPT_ACTIVATE_READONLY ? + "readonly" : "read/write"); + 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", + (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" : ""); + } +out: + crypt_free(cd); + if (r == -ENOTSUP) + r = 0; + return r; +} + +static int benchmark_callback(uint32_t time_ms, void *usrptr) +{ + struct crypt_pbkdf_type *pbkdf = usrptr; + int r = 0; + + check_signal(&r); + if (r) + log_err(_("Benchmark interrupted.")); + else + log_dbg("PBKDF benchmark: memory cost = %u, iterations = %u, " + "threads = %u (took %u ms)", pbkdf->max_memory_kb, + pbkdf->iterations, pbkdf->parallel_threads, time_ms); + return r; +} + +static int action_benchmark_kdf(const char *kdf, const char *hash, size_t key_size) +{ + int r; + if (!strcmp(kdf, CRYPT_KDF_PBKDF2)) { + struct crypt_pbkdf_type pbkdf = { + .type = CRYPT_KDF_PBKDF2, + .hash = hash, + .time_ms = 1000, + }; + + r = crypt_benchmark_pbkdf(NULL, &pbkdf, "foo", 3, "bar", 3, key_size, + &benchmark_callback, &pbkdf); + if (r < 0) + log_std(_("PBKDF2-%-9s N/A\n"), hash); + else + log_std(_("PBKDF2-%-9s %7u iterations per second for %zu-bit key\n"), + hash, pbkdf.iterations, key_size * 8); + } else { + struct crypt_pbkdf_type pbkdf = { + .type = kdf, + .time_ms = opt_iteration_time ?: DEFAULT_LUKS2_ITER_TIME, + .max_memory_kb = opt_pbkdf_memory, + .parallel_threads = opt_pbkdf_parallel, + }; + + r = crypt_benchmark_pbkdf(NULL, &pbkdf, "foo", 3, + "0123456789abcdef0123456789abcdef", 32, + key_size, &benchmark_callback, &pbkdf); + if (r < 0) + log_std(_("%-10s N/A\n"), kdf); + else + log_std(_("%-10s %4u iterations, %5u memory, " + "%1u parallel threads (CPUs) for " + "%zu-bit key (requested %u ms time)\n"), kdf, + pbkdf.iterations, pbkdf.max_memory_kb, pbkdf.parallel_threads, + key_size * 8, pbkdf.time_ms); + } + + return r; +} + +static int benchmark_cipher_loop(const char *cipher, const char *cipher_mode, + size_t volume_key_size, size_t iv_size, + double *encryption_mbs, double *decryption_mbs) +{ + int r, buffer_size = 1024 * 1024; + + do { + r = crypt_benchmark(NULL, cipher, cipher_mode, + volume_key_size, iv_size, buffer_size, + encryption_mbs, decryption_mbs); + if (r == -ERANGE) { + if (buffer_size < 1024 * 1024 * 65) + buffer_size *= 2; + else { + log_err(_("Result of benchmark is not reliable.")); + r = -ENOENT; + } + } + } while (r == -ERANGE); + + return r; +} + +static int action_benchmark(void) +{ + static struct { + const char *cipher; + const char *mode; + size_t key_size; + size_t iv_size; + } bciphers[] = { + { "aes", "cbc", 16, 16 }, + { "serpent", "cbc", 16, 16 }, + { "twofish", "cbc", 16, 16 }, + { "aes", "cbc", 32, 16 }, + { "serpent", "cbc", 32, 16 }, + { "twofish", "cbc", 32, 16 }, + { "aes", "xts", 32, 16 }, + { "serpent", "xts", 32, 16 }, + { "twofish", "xts", 32, 16 }, + { "aes", "xts", 64, 16 }, + { "serpent", "xts", 64, 16 }, + { "twofish", "xts", 64, 16 }, + { NULL, NULL, 0, 0 } + }; + static struct { + const char *type; + const char *hash; + } bkdfs[] = { + { CRYPT_KDF_PBKDF2, "sha1" }, + { CRYPT_KDF_PBKDF2, "sha256" }, + { CRYPT_KDF_PBKDF2, "sha512" }, + { CRYPT_KDF_PBKDF2, "ripemd160" }, + { CRYPT_KDF_PBKDF2, "whirlpool" }, + { CRYPT_KDF_ARGON2I, NULL }, + { CRYPT_KDF_ARGON2ID, NULL }, + { NULL, NULL } + }; + char cipher[MAX_CIPHER_LEN], cipher_mode[MAX_CIPHER_LEN]; + double enc_mbr = 0, dec_mbr = 0; + int key_size = (opt_key_size ?: DEFAULT_PLAIN_KEYBITS) / 8; + int iv_size = 16, skipped = 0, width; + char *c; + 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); + } else if (opt_cipher) { + r = crypt_parse_name_and_mode(opt_cipher, cipher, NULL, cipher_mode); + if (r < 0) { + log_err(_("No known cipher specification pattern detected.")); + return r; + } + if ((c = strchr(cipher_mode, '-'))) + *c = '\0'; + + /* FIXME: not really clever :) */ + if (strstr(cipher, "des") || + strstr(cipher, "blowfish") || + strstr(cipher, "cast5")) + iv_size = 8; + + if (!strcmp(cipher_mode, "ecb")) + iv_size = 0; + + if (!strcmp(cipher_mode, "adiantum")) + iv_size = 32; + + r = benchmark_cipher_loop(cipher, cipher_mode, + key_size, iv_size, + &enc_mbr, &dec_mbr); + if (!r) { + width = strlen(cipher) + strlen(cipher_mode) + 1; + if (width < 11) + width = 11; + /* TRANSLATORS: The string is header of a table and must be exactly (right side) aligned. */ + log_std(_("#%*s Algorithm | Key | Encryption | Decryption\n"), width - 11, ""); + log_std("%*s-%s %9db %10.1f MiB/s %10.1f MiB/s\n", width - (int)strlen(cipher_mode) - 1, + cipher, cipher_mode, key_size*8, enc_mbr, dec_mbr); + } else if (r == -ENOENT) + log_err(_("Cipher %s is not available."), opt_cipher); + } else { + for (i = 0; bkdfs[i].type; i++) { + r = action_benchmark_kdf(bkdfs[i].type, bkdfs[i].hash, key_size); + check_signal(&r); + if (r == -EINTR) + break; + } + + for (i = 0; bciphers[i].cipher; i++) { + r = benchmark_cipher_loop(bciphers[i].cipher, bciphers[i].mode, + bciphers[i].key_size, bciphers[i].iv_size, + &enc_mbr, &dec_mbr); + check_signal(&r); + if (r == -ENOTSUP || r == -EINTR) + break; + if (r == -ENOENT) + skipped++; + if (i == 0) + /* TRANSLATORS: The string is header of a table and must be exactly (right side) aligned. */ + log_std(_("# Algorithm | Key | Encryption | Decryption\n")); + + snprintf(cipher, MAX_CIPHER_LEN, "%s-%s", + bciphers[i].cipher, bciphers[i].mode); + if (!r) + log_std("%15s %9zub %10.1f MiB/s %10.1f MiB/s\n", + cipher, bciphers[i].key_size*8, enc_mbr, dec_mbr); + else + log_std("%15s %9zub %17s %17s\n", cipher, + bciphers[i].key_size*8, _("N/A"), _("N/A")); + } + if (skipped && skipped == i) + r = -ENOTSUP; + } + + if (r == -ENOTSUP) { + log_err(_("Required kernel crypto interface not available.")); +#ifdef ENABLE_AF_ALG + log_err( _("Ensure you have algif_skcipher kernel module loaded.")); +#endif + } + return r; +} + +static int set_pbkdf_params(struct crypt_device *cd, const char *dev_type) +{ + const struct crypt_pbkdf_type *pbkdf_default; + struct crypt_pbkdf_type pbkdf = {}; + + pbkdf_default = crypt_get_pbkdf_default(dev_type); + if (!pbkdf_default) + return -EINVAL; + + pbkdf.type = opt_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)) { + pbkdf.max_memory_kb = (uint32_t)opt_pbkdf_memory ?: pbkdf_default->max_memory_kb; + pbkdf.parallel_threads = (uint32_t)opt_pbkdf_parallel ?: pbkdf_default->parallel_threads; + } + + if (opt_pbkdf_iterations) { + pbkdf.iterations = opt_pbkdf_iterations; + pbkdf.flags |= CRYPT_PBKDF_NO_BENCHMARK; + } + + return crypt_set_pbkdf_type(cd, &pbkdf); +} + +static int set_keyslot_params(struct crypt_device *cd, int keyslot) +{ + const char *cipher; + struct crypt_pbkdf_type pbkdf; + size_t key_size; + + cipher = crypt_keyslot_get_encryption(cd, keyslot, &key_size); + if (!cipher) + return -EINVAL; + + if (crypt_keyslot_set_encryption(cd, cipher, key_size)) + return -EINVAL; + + /* if requested any of those just reinitialize context pbkdf */ + if (opt_pbkdf || opt_hash || opt_pbkdf_iterations || opt_iteration_time) + return set_pbkdf_params(cd, CRYPT_LUKS2); + + if (crypt_keyslot_get_pbkdf(cd, keyslot, &pbkdf)) + return -EINVAL; + + pbkdf.flags |= CRYPT_PBKDF_NO_BENCHMARK; + + return crypt_set_pbkdf_type(cd, &pbkdf); +} + +static int _do_luks2_reencrypt_recovery(struct crypt_device *cd) +{ + int r; + size_t passwordLen; + char *password = NULL; + struct crypt_params_reencrypt recovery_params = { + .flags = CRYPT_REENCRYPT_RECOVERY + }; + + crypt_reencrypt_info ri = crypt_reencrypt_status(cd, NULL); + switch (ri) { + case CRYPT_REENCRYPT_NONE: + /* fall through */ + case CRYPT_REENCRYPT_CLEAN: + r = noDialog(_("Seems device does not require reencryption recovery.\n" + "Do you want to proceed anyway?"), NULL); + if (!r) + return 0; + break; + case CRYPT_REENCRYPT_CRASH: + r = yesDialog(_("Really proceed with LUKS2 reencryption recovery?"), + _("Operation aborted.\n")); + if (!r) + return -EINVAL; + break; + default: + return -EINVAL; + } + + r = tools_get_key(_("Enter passphrase for reencryption recovery: "), + &password, &passwordLen, opt_keyfile_offset, + opt_keyfile_size, opt_key_file, opt_timeout, + _verify_passphrase(0), 0, cd); + if (r < 0) + return r; + + r = crypt_activate_by_passphrase(cd, NULL, opt_key_slot, + password, passwordLen, 0); + if (r < 0) + goto out; + + r = crypt_reencrypt_init_by_passphrase(cd, NULL, password, passwordLen, + opt_key_slot, opt_key_slot, NULL, NULL, &recovery_params); + if (r > 0) + r = 0; +out: + crypt_safe_free(password); + + return r; +} + +static int action_luksRepair(void) +{ + struct crypt_device *cd = NULL; + int r; + + if ((r = crypt_init_data_device(&cd, opt_header_device ?: action_argv[0], + action_argv[0]))) + goto out; + + crypt_set_log_callback(cd, quiet_log, NULL); + r = crypt_load(cd, luksType(opt_type), NULL); + crypt_set_log_callback(cd, tool_log, NULL); + if (r == 0) { + log_verbose(_("No known problems detected for LUKS header.")); + goto skip_repair; + } + + r = tools_detect_signatures(action_argv[0], 1, NULL); + if (r < 0) + goto out; + + 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); +skip_repair: + if (!r && crypt_get_type(cd) && !strcmp(crypt_get_type(cd), CRYPT_LUKS2)) + r = _do_luks2_reencrypt_recovery(cd); +out: + crypt_free(cd); + return r; +} + +static int _wipe_data_device(struct crypt_device *cd) +{ + char tmp_name[64], tmp_path[128], tmp_uuid[40]; + uuid_t tmp_uuid_bin; + int r; + + if (!opt_batch_mode) + log_std(_("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")); + + /* Activate the device a temporary one */ + uuid_generate(tmp_uuid_bin); + uuid_unparse(tmp_uuid_bin, tmp_uuid); + if (snprintf(tmp_name, sizeof(tmp_name), "temporary-cryptsetup-%s", tmp_uuid) < 0) + return -EINVAL; + if (snprintf(tmp_path, sizeof(tmp_path), "%s/%s", crypt_get_dir(), tmp_name) < 0) + return -EINVAL; + + r = crypt_activate_by_volume_key(cd, tmp_name, NULL, 0, + CRYPT_ACTIVATE_PRIVATE | CRYPT_ACTIVATE_NO_JOURNAL); + if (r < 0) + return r; + + /* Wipe the device */ + set_int_handler(0); + r = crypt_wipe(cd, tmp_path, CRYPT_WIPE_ZERO, 0, 0, DEFAULT_WIPE_BLOCK, + 0, &tools_wipe_progress, NULL); + if (crypt_deactivate(cd, tmp_name)) + log_err(_("Cannot deactivate temporary device %s."), tmp_path); + set_int_block(0); + + return r; +} + +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; + struct stat st; + const char *header_device, *type; + char *msg = NULL, *key = NULL, *password = NULL; + char cipher [MAX_CIPHER_LEN], cipher_mode[MAX_CIPHER_LEN], integrity[MAX_CIPHER_LEN]; + size_t passwordLen, signatures; + struct crypt_device *cd = NULL; + struct crypt_params_luks1 params1 = { + .hash = opt_hash ?: DEFAULT_LUKS1_HASH, + .data_alignment = opt_align_payload, + .data_device = opt_header_device ? action_argv[0] : NULL, + }; + struct crypt_params_luks2 params2 = { + .data_alignment = params1.data_alignment, + .data_device = params1.data_device, + .sector_size = opt_sector_size ?: SECTOR_SIZE, + .label = opt_label, + .subsystem = opt_subsystem + }; + void *params; + + type = luksType(opt_type); + if (!type) + type = crypt_get_default_type(); + + if (!strcmp(type, CRYPT_LUKS2)) { + params = ¶ms2; + } else if (!strcmp(type, CRYPT_LUKS1)) { + params = ¶ms1; + + if (opt_sector_size > SECTOR_SIZE) { + log_err(_("Unsupported encryption sector size.")); + return -EINVAL; + } + + if (opt_integrity) { + log_err(_("Integrity option can be used only for LUKS2 format.")); + return -EINVAL; + } + + if (opt_luks2_keyslots_size || opt_luks2_metadata_size) { + log_err(_("Unsupported LUKS2 metadata size options.")); + return -EINVAL; + } + } else + return -EINVAL; + + /* 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"))) + return -EPERM; + + log_dbg("Creating header file."); + /* coverity[toctou] */ + fd = open(opt_header_device, O_CREAT|O_EXCL|O_WRONLY, S_IRUSR|S_IWUSR); + if (fd == -1 || posix_fallocate(fd, 0, 4096)) + log_err(_("Cannot create header file %s."), opt_header_device); + else { + r = 0; + created = 1; + } + if (fd != -1) + close(fd); + if (r < 0) + return r; + } + + header_device = opt_header_device ?: action_argv[0]; + + r = crypt_parse_name_and_mode(opt_cipher ?: DEFAULT_CIPHER(LUKS1), + cipher, NULL, cipher_mode); + if (r < 0) { + log_err(_("No known cipher specification pattern detected.")); + goto out; + } + + if (opt_integrity) { + r = crypt_parse_integrity_mode(opt_integrity, integrity, &integrity_keysize); + if (r < 0) { + log_err(_("No known integrity specification pattern detected.")); + goto out; + } + params2.integrity = integrity; + /* FIXME: we use default integrity_params (set to NULL) */ + } + + /* Never call pwquality if using null cipher */ + if (tools_is_cipher_null(cipher)) + opt_force_password = 1; + + if ((r = crypt_init(&cd, header_device))) { + if (opt_header_device) + log_err(_("Cannot use %s as on-disk header."), header_device); + return r; + } + + if (opt_luks2_keyslots_size || opt_luks2_metadata_size) { + r = crypt_set_metadata_size(cd, opt_luks2_metadata_size, opt_luks2_keyslots_size); + if (r < 0) { + log_err(_("Unsupported LUKS2 metadata size options.")); + goto out; + } + } + + if (opt_offset) { + r = crypt_set_data_offset(cd, opt_offset); + if (r < 0) + goto out; + } + + /* Print all present signatures in read-only mode */ + r = tools_detect_signatures(header_device, 0, &signatures); + if (r < 0) + goto out; + + if (!created) { + r = asprintf(&msg, _("This will overwrite data on %s irrevocably."), header_device); + if (r == -1) { + r = -ENOMEM; + goto out; + } + + r = yesDialog(msg, _("Operation aborted.\n")) ? 0 : -EINVAL; + free(msg); + if (r < 0) + 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; + + if (opt_random) + crypt_set_rng_type(cd, CRYPT_RNG_RANDOM); + else if (opt_urandom) + crypt_set_rng_type(cd, CRYPT_RNG_URANDOM); + + r = tools_get_key(NULL, &password, &passwordLen, + opt_keyfile_offset, opt_keyfile_size, opt_key_file, + opt_timeout, _verify_passphrase(1), 1, cd); + if (r < 0) + goto out; + + if (opt_master_key_file) { + r = tools_read_mk(opt_master_key_file, &key, keysize); + if (r < 0) + goto out; + } + + r = set_pbkdf_params(cd, type); + if (r) { + log_err(_("Failed to set pbkdf parameters.")); + goto out; + } + + /* Signature candidates found */ + if (signatures && ((r = tools_wipe_all_signatures(header_device)) < 0)) + goto out; + + r = crypt_format(cd, type, cipher, cipher_mode, + opt_uuid, key, keysize, params); + check_signal(&r); + if (r < 0) + goto out; + + r = _set_keyslot_encryption_params(cd); + if (r < 0) + goto out; + + r = crypt_keyslot_add_by_volume_key(cd, opt_key_slot, + key, keysize, + password, passwordLen); + if (r < 0) { + (void) tools_wipe_all_signatures(header_device); + goto out; + } + tools_keyslot_msg(r, CREATED); + + if (opt_integrity && !opt_integrity_no_wipe) + r = _wipe_data_device(cd); +out: + if (r == 0 && r_cd && r_password && r_passwordLen) { + *r_cd = cd; + *r_password = password; + *r_passwordLen = passwordLen; + } else { + crypt_free(cd); + crypt_safe_free(password); + } + + crypt_safe_free(key); + + return r; +} + +static int action_luksFormat(void) +{ + return _luksFormat(NULL, NULL, NULL); +} + +static int action_open_luks(void) +{ + struct crypt_active_device cad; + struct crypt_device *cd = NULL; + const char *data_device, *header_device, *activated_name; + char *key = NULL; + uint32_t activate_flags = 0; + int r, keysize, tries; + char *password = NULL; + size_t passwordLen; + + if (opt_refresh) { + activated_name = action_argc > 1 ? action_argv[1] : action_argv[0]; + r = crypt_init_by_name_and_header(&cd, activated_name, opt_header_device); + if (r) + goto out; + activate_flags |= CRYPT_ACTIVATE_REFRESH; + } else { + header_device = uuid_or_device_header(&data_device); + + activated_name = opt_test_passphrase ? NULL : action_argv[1]; + + if ((r = crypt_init_data_device(&cd, header_device, data_device))) + goto out; + + if ((r = crypt_load(cd, luksType(opt_type), NULL))) { + log_err(_("Device %s is not a valid LUKS device."), + header_device); + goto out; + } + + if (!data_device && (crypt_get_data_offset(cd) < 8)) { + log_err(_("Reduced data offset is allowed only for detached LUKS header.")); + r = -EINVAL; + goto out; + } + } + + _set_activation_flags(&activate_flags); + + if (opt_master_key_file) { + keysize = crypt_get_volume_key_size(cd); + if (!keysize && !opt_key_size) { + log_err(_("Cannot determine volume key size for LUKS without keyslots, please use --key-size option.")); + r = -EINVAL; + goto out; + } else if (!keysize) + keysize = opt_key_size / 8; + + r = tools_read_mk(opt_master_key_file, &key, keysize); + if (r < 0) + goto out; + r = crypt_activate_by_volume_key(cd, activated_name, + key, keysize, activate_flags); + } else { + r = crypt_activate_by_token(cd, activated_name, opt_token, NULL, activate_flags); + tools_keyslot_msg(r, UNLOCKED); + if (r >= 0 || opt_token_only) + goto out; + + tries = (tools_is_stdin(opt_key_file) && isatty(STDIN_FILENO)) ? opt_tries : 1; + do { + r = tools_get_key(NULL, &password, &passwordLen, + opt_keyfile_offset, opt_keyfile_size, opt_key_file, + opt_timeout, _verify_passphrase(0), 0, cd); + if (r < 0) + goto out; + + r = crypt_activate_by_passphrase(cd, activated_name, + opt_key_slot, password, passwordLen, activate_flags); + tools_keyslot_msg(r, UNLOCKED); + tools_passphrase_msg(r); + check_signal(&r); + crypt_safe_free(password); + password = NULL; + } while ((r == -EPERM || r == -ERANGE) && (--tries > 0)); + } +out: + if (r >= 0 && opt_persistent && + (crypt_get_active_device(cd, activated_name, &cad) || + crypt_persistent_flags_set(cd, CRYPT_FLAGS_ACTIVATION, cad.flags & activate_flags))) + log_err(_("Device activated but cannot make flags persistent.")); + + crypt_safe_free(key); + crypt_safe_free(password); + crypt_free(cd); + return r; +} + +static int verify_keyslot(struct crypt_device *cd, int key_slot, crypt_keyslot_info ki, + char *msg_last, char *msg_pass, char *msg_fail, + const char *key_file, uint64_t keyfile_offset, + int keyfile_size) +{ + char *password = NULL; + size_t passwordLen; + int i, max, r; + + if (ki == CRYPT_SLOT_ACTIVE_LAST && !opt_batch_mode && !key_file && + msg_last && !yesDialog(msg_last, msg_fail)) + return -EPERM; + + r = tools_get_key(msg_pass, &password, &passwordLen, + keyfile_offset, keyfile_size, key_file, opt_timeout, + _verify_passphrase(0), 0, cd); + if (r < 0) + goto out; + + if (ki == CRYPT_SLOT_ACTIVE_LAST) { + /* check the last keyslot */ + r = crypt_activate_by_passphrase(cd, NULL, key_slot, + password, passwordLen, 0); + } else { + /* try all other keyslots */ + r = crypt_keyslot_max(crypt_get_type(cd)); + if (r < 0) + goto out; + max = r; + + for (i = 0; i < max ; i++) { + if (i == key_slot) + continue; + ki = crypt_keyslot_status(cd, i); + if (ki == CRYPT_SLOT_ACTIVE || ki == CRYPT_SLOT_ACTIVE_LAST) + r = crypt_activate_by_passphrase(cd, NULL, i, + password, passwordLen, 0); + if (r == i) + break; + } + } + + /* Handle inactive keyslots the same as bad password here */ + if (r == -ENOENT) + r = -EPERM; + tools_passphrase_msg(r); +out: + crypt_safe_free(password); + return r; +} + +static int action_luksKillSlot(void) +{ + struct crypt_device *cd = NULL; + crypt_keyslot_info ki; + int r; + + if ((r = crypt_init(&cd, uuid_or_device_header(NULL)))) + goto out; + + crypt_set_confirm_callback(cd, yesDialog, NULL); + + if ((r = crypt_load(cd, luksType(opt_type), NULL))) { + log_err(_("Device %s is not a valid LUKS device."), + uuid_or_device_header(NULL)); + goto out; + } + + ki = crypt_keyslot_status(cd, opt_key_slot); + switch (ki) { + case CRYPT_SLOT_ACTIVE_LAST: + case CRYPT_SLOT_ACTIVE: + case CRYPT_SLOT_UNBOUND: + log_verbose(_("Keyslot %d is selected for deletion."), opt_key_slot); + break; + case CRYPT_SLOT_INACTIVE: + log_err(_("Keyslot %d is not active."), opt_key_slot); + /* fall through */ + case CRYPT_SLOT_INVALID: + r = -EINVAL; + goto out; + } + + if (!opt_batch_mode || opt_key_file || !isatty(STDIN_FILENO)) { + r = verify_keyslot(cd, opt_key_slot, ki, + _("This is the last keyslot. Device will become unusable after purging this key."), + _("Enter any remaining passphrase: "), + _("Operation aborted, the keyslot was NOT wiped.\n"), + opt_key_file, opt_keyfile_offset, opt_keyfile_size); + tools_keyslot_msg(r, UNLOCKED); + + if (r == -EPIPE && (!opt_key_file || tools_is_stdin(opt_key_file))) { + log_dbg("Failed read from input, ignoring passphrase."); + r = 0; + } + + if (r < 0) + goto out; + } + + r = crypt_keyslot_destroy(cd, opt_key_slot); + tools_keyslot_msg(opt_key_slot, REMOVED); +out: + crypt_free(cd); + return r; +} + +static int action_luksRemoveKey(void) +{ + struct crypt_device *cd = NULL; + char *password = NULL; + size_t passwordLen; + int r; + + if ((r = crypt_init(&cd, uuid_or_device_header(NULL)))) + goto out; + + crypt_set_confirm_callback(cd, yesDialog, NULL); + + if ((r = crypt_load(cd, luksType(opt_type), NULL))) { + log_err(_("Device %s is not a valid LUKS device."), + uuid_or_device_header(NULL)); + goto out; + } + + r = tools_get_key(_("Enter passphrase to be deleted: "), + &password, &passwordLen, + opt_keyfile_offset, opt_keyfile_size, opt_key_file, + opt_timeout, + _verify_passphrase(0), 0, + cd); + if(r < 0) + goto out; + + r = crypt_activate_by_passphrase(cd, NULL, CRYPT_ANY_SLOT, + password, passwordLen, 0); + tools_passphrase_msg(r); + check_signal(&r); + if (r < 0) + goto out; + tools_keyslot_msg(r, UNLOCKED); + + opt_key_slot = r; + log_verbose(_("Keyslot %d is selected for deletion."), opt_key_slot); + + if (crypt_keyslot_status(cd, opt_key_slot) == CRYPT_SLOT_ACTIVE_LAST && + !yesDialog(_("This is the last keyslot. " + "Device will become unusable after purging this key."), + _("Operation aborted, the keyslot was NOT wiped.\n"))) { + r = -EPERM; + goto out; + } + + r = crypt_keyslot_destroy(cd, opt_key_slot); + tools_keyslot_msg(opt_key_slot, REMOVED); +out: + crypt_safe_free(password); + crypt_free(cd); + return r; +} + +static int luksAddUnboundKey(void) +{ + int r = -EINVAL, keysize = 0; + char *key = NULL; + const char *opt_new_key_file = (action_argc > 1 ? action_argv[1] : NULL); + char *password_new = NULL; + size_t password_new_size = 0; + struct crypt_device *cd = NULL; + + if ((r = crypt_init(&cd, uuid_or_device_header(NULL)))) + goto out; + + crypt_set_confirm_callback(cd, yesDialog, NULL); + + if ((r = crypt_load(cd, CRYPT_LUKS2, NULL))) { + log_err(_("Device %s is not a valid LUKS device."), + uuid_or_device_header(NULL)); + goto out; + } + + r = _set_keyslot_encryption_params(cd); + if (r < 0) + goto out; + + /* Never call pwquality if using null cipher */ + if (tools_is_cipher_null(crypt_get_cipher(cd))) + opt_force_password = 1; + + keysize = opt_key_size / 8; + r = set_pbkdf_params(cd, crypt_get_type(cd)); + if (r) { + log_err(_("Failed to set pbkdf parameters.")); + goto out; + } + + if (opt_master_key_file) { + r = tools_read_mk(opt_master_key_file, &key, keysize); + if (r < 0) + goto out; + + check_signal(&r); + if (r < 0) + goto out; + } + + r = tools_get_key(_("Enter new passphrase for key slot: "), + &password_new, &password_new_size, + opt_new_keyfile_offset, opt_new_keyfile_size, + opt_new_key_file, opt_timeout, + _verify_passphrase(1), 1, cd); + if (r < 0) + goto out; + + r = crypt_keyslot_add_by_key(cd, opt_key_slot, key, keysize, + password_new, password_new_size, CRYPT_VOLUME_KEY_NO_SEGMENT); + tools_keyslot_msg(r, CREATED); +out: + crypt_safe_free(password_new); + crypt_safe_free(key); + crypt_free(cd); + return r; +} + +static int action_luksAddKey(void) +{ + int r = -EINVAL, keysize = 0; + char *key = NULL; + const char *opt_new_key_file = (action_argc > 1 ? action_argv[1] : NULL); + char *password = NULL, *password_new = NULL; + size_t password_size = 0, password_new_size = 0; + struct crypt_device *cd = NULL; + + /* Unbound keyslot (no assigned data segment) is special case */ + if (opt_unbound) + return luksAddUnboundKey(); + + if ((r = crypt_init(&cd, uuid_or_device_header(NULL)))) + goto out; + + crypt_set_confirm_callback(cd, yesDialog, NULL); + + if ((r = crypt_load(cd, luksType(opt_type), NULL))) { + log_err(_("Device %s is not a valid LUKS device."), + uuid_or_device_header(NULL)); + goto out; + } + + r = _set_keyslot_encryption_params(cd); + if (r < 0) + goto out; + + /* Never call pwquality if using null cipher */ + if (tools_is_cipher_null(crypt_get_cipher(cd))) + opt_force_password = 1; + + keysize = crypt_get_volume_key_size(cd); + r = set_pbkdf_params(cd, crypt_get_type(cd)); + if (r) { + log_err(_("Failed to set pbkdf parameters.")); + goto out; + } + + if (opt_master_key_file) { + if (!keysize && !opt_key_size) { + log_err(_("Cannot determine volume key size for LUKS without keyslots, please use --key-size option.")); + r = -EINVAL; + goto out; + } else if (!keysize) + keysize = opt_key_size / 8; + + r = tools_read_mk(opt_master_key_file, &key, keysize); + if (r < 0) + goto out; + + r = crypt_volume_key_verify(cd, key, keysize); + check_signal(&r); + if (r < 0) + goto out; + + r = tools_get_key(_("Enter new passphrase for key slot: "), + &password_new, &password_new_size, + opt_new_keyfile_offset, opt_new_keyfile_size, + opt_new_key_file, opt_timeout, + _verify_passphrase(1), 1, cd); + if (r < 0) + goto out; + + r = crypt_keyslot_add_by_volume_key(cd, opt_key_slot, key, keysize, + password_new, password_new_size); + } else if (opt_key_file && !tools_is_stdin(opt_key_file) && + opt_new_key_file && !tools_is_stdin(opt_new_key_file)) { + r = crypt_keyslot_add_by_keyfile_device_offset(cd, opt_key_slot, + opt_key_file, opt_keyfile_size, opt_keyfile_offset, + opt_new_key_file, opt_new_keyfile_size, opt_new_keyfile_offset); + tools_passphrase_msg(r); + } else { + r = tools_get_key(_("Enter any existing passphrase: "), + &password, &password_size, + opt_keyfile_offset, opt_keyfile_size, opt_key_file, + opt_timeout, _verify_passphrase(0), 0, cd); + + if (r < 0) + goto out; + + /* Check password before asking for new one */ + r = crypt_activate_by_passphrase(cd, NULL, CRYPT_ANY_SLOT, + password, password_size, 0); + check_signal(&r); + tools_passphrase_msg(r); + if (r < 0) + goto out; + tools_keyslot_msg(r, UNLOCKED); + + r = tools_get_key(_("Enter new passphrase for key slot: "), + &password_new, &password_new_size, + opt_new_keyfile_offset, opt_new_keyfile_size, opt_new_key_file, + opt_timeout, _verify_passphrase(1), 1, cd); + if (r < 0) + goto out; + + r = crypt_keyslot_add_by_passphrase(cd, opt_key_slot, + password, password_size, + password_new, password_new_size); + } +out: + tools_keyslot_msg(r, CREATED); + crypt_safe_free(password); + crypt_safe_free(password_new); + crypt_safe_free(key); + crypt_free(cd); + return r; +} + +static int action_luksChangeKey(void) +{ + const char *opt_new_key_file = (action_argc > 1 ? action_argv[1] : NULL); + struct crypt_device *cd = NULL; + char *password = NULL, *password_new = NULL; + size_t password_size = 0, password_new_size = 0; + int r; + + if ((r = crypt_init(&cd, uuid_or_device_header(NULL)))) + goto out; + + if ((r = crypt_load(cd, luksType(opt_type), NULL))) { + log_err(_("Device %s is not a valid LUKS device."), + uuid_or_device_header(NULL)); + goto out; + } + + r = _set_keyslot_encryption_params(cd); + if (r < 0) + goto out; + + /* Never call pwquality if using null cipher */ + if (tools_is_cipher_null(crypt_get_cipher(cd))) + opt_force_password = 1; + + r = set_pbkdf_params(cd, crypt_get_type(cd)); + if (r) { + log_err(_("Failed to set pbkdf parameters.")); + goto out; + } + + r = tools_get_key(_("Enter passphrase to be changed: "), + &password, &password_size, + opt_keyfile_offset, opt_keyfile_size, opt_key_file, + opt_timeout, _verify_passphrase(0), 0, cd); + if (r < 0) + goto out; + + /* Check password before asking for new one */ + r = crypt_activate_by_passphrase(cd, NULL, opt_key_slot, + password, password_size, CRYPT_ACTIVATE_ALLOW_UNBOUND_KEY); + tools_passphrase_msg(r); + check_signal(&r); + if (r < 0) + goto out; + tools_keyslot_msg(r, UNLOCKED); + + r = tools_get_key(_("Enter new passphrase: "), + &password_new, &password_new_size, + opt_new_keyfile_offset, opt_new_keyfile_size, + opt_new_key_file, + opt_timeout, _verify_passphrase(1), 1, cd); + if (r < 0) + goto out; + + r = crypt_keyslot_change_by_passphrase(cd, opt_key_slot, opt_key_slot, + password, password_size, password_new, password_new_size); + tools_keyslot_msg(r, CREATED); +out: + crypt_safe_free(password); + crypt_safe_free(password_new); + crypt_free(cd); + return r; +} + +static int action_luksConvertKey(void) +{ + struct crypt_device *cd = NULL; + char *password = NULL; + size_t password_size = 0; + int r; + + if ((r = crypt_init(&cd, uuid_or_device_header(NULL)))) + goto out; + + if ((r = crypt_load(cd, CRYPT_LUKS2, NULL))) { + log_err(_("Device %s is not a valid LUKS device."), + uuid_or_device_header(NULL)); + goto out; + } + + r = _set_keyslot_encryption_params(cd); + if (r < 0) + goto out; + + if (crypt_keyslot_status(cd, opt_key_slot) == CRYPT_SLOT_INACTIVE) { + r = -EINVAL; + log_err(_("Keyslot %d is not active."), opt_key_slot); + goto out; + } + + r = set_pbkdf_params(cd, crypt_get_type(cd)); + if (r) { + log_err(_("Failed to set pbkdf parameters.")); + goto out; + } + + r = tools_get_key(_("Enter passphrase for keyslot to be converted: "), + &password, &password_size, + opt_keyfile_offset, opt_keyfile_size, opt_key_file, + opt_timeout, _verify_passphrase(0), 0, cd); + if (r < 0) + goto out; + + r = crypt_keyslot_change_by_passphrase(cd, opt_key_slot, opt_key_slot, + password, password_size, password, password_size); + tools_passphrase_msg(r); + tools_keyslot_msg(r, CREATED); +out: + crypt_safe_free(password); + crypt_free(cd); + return r; +} + +static int action_isLuks(void) +{ + struct crypt_device *cd = NULL; + int r; + + /* FIXME: argc > max should be checked for other operations as well */ + if (action_argc > 1) { + log_err(_("Only one device argument for isLuks operation is supported.")); + return -ENODEV; + } + + if ((r = crypt_init(&cd, uuid_or_device_header(NULL)))) + goto out; + + crypt_set_log_callback(cd, quiet_log, NULL); + r = crypt_load(cd, luksType(opt_type), NULL); +out: + crypt_free(cd); + return r; +} + +static int action_luksUUID(void) +{ + struct crypt_device *cd = NULL; + const char *existing_uuid = NULL; + int r; + + if ((r = crypt_init(&cd, uuid_or_device_header(NULL)))) + goto out; + + crypt_set_confirm_callback(cd, yesDialog, _("Operation aborted.\n")); + + if ((r = crypt_load(cd, luksType(opt_type), NULL))) + goto out; + + if (opt_uuid) + r = crypt_set_uuid(cd, opt_uuid); + else { + existing_uuid = crypt_get_uuid(cd); + log_std("%s\n", existing_uuid ?: ""); + r = existing_uuid ? 0 : 1; + } +out: + crypt_free(cd); + return r; +} + +static int luksDump_with_volume_key(struct crypt_device *cd) +{ + char *vk = NULL, *password = NULL; + size_t passwordLen = 0; + size_t vk_size; + unsigned i; + int r; + + crypt_set_confirm_callback(cd, yesDialog, NULL); + if (!yesDialog( + _("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."), + NULL)) + return -EPERM; + + vk_size = crypt_get_volume_key_size(cd); + vk = crypt_safe_alloc(vk_size); + if (!vk) + return -ENOMEM; + + r = tools_get_key(NULL, &password, &passwordLen, + opt_keyfile_offset, opt_keyfile_size, opt_key_file, + opt_timeout, 0, 0, cd); + if (r < 0) + goto out; + + r = crypt_volume_key_get(cd, CRYPT_ANY_SLOT, vk, &vk_size, + password, passwordLen); + tools_passphrase_msg(r); + check_signal(&r); + if (r < 0) + goto out; + tools_keyslot_msg(r, UNLOCKED); + + if (opt_master_key_file) { + r = tools_write_mk(opt_master_key_file, vk, vk_size); + if (r < 0) + goto out; + } + + log_std("LUKS header information for %s\n", crypt_get_device_name(cd)); + log_std("Cipher name: \t%s\n", crypt_get_cipher(cd)); + log_std("Cipher mode: \t%s\n", crypt_get_cipher_mode(cd)); + log_std("Payload offset:\t%d\n", (int)crypt_get_data_offset(cd)); + log_std("UUID: \t%s\n", crypt_get_uuid(cd)); + log_std("MK bits: \t%d\n", (int)vk_size * 8); + if (opt_master_key_file) { + log_std("Key stored to file %s.\n", opt_master_key_file); + goto out; + } + log_std("MK dump:\t"); + + for(i = 0; i < vk_size; i++) { + if (i && !(i % 16)) + log_std("\n\t\t"); + log_std("%02hhx ", (char)vk[i]); + } + log_std("\n"); + +out: + crypt_safe_free(password); + crypt_safe_free(vk); + return r; +} + +static int action_luksDump(void) +{ + struct crypt_device *cd = NULL; + int r; + + if ((r = crypt_init(&cd, uuid_or_device_header(NULL)))) + goto out; + + if ((r = crypt_load(cd, luksType(opt_type), NULL))) { + log_err(_("Device %s is not a valid LUKS device."), + uuid_or_device_header(NULL)); + goto out; + } + + if (opt_dump_master_key) + r = luksDump_with_volume_key(cd); + else + r = crypt_dump(cd); +out: + crypt_free(cd); + return r; +} + +static int action_luksSuspend(void) +{ + struct crypt_device *cd = NULL; + int r; + + r = crypt_init_by_name_and_header(&cd, action_argv[0], uuid_or_device(opt_header_device)); + if (!r) + r = crypt_suspend(cd, action_argv[0]); + + crypt_free(cd); + return r; +} + +static int action_luksResume(void) +{ + struct crypt_device *cd = NULL; + char *password = NULL; + size_t passwordLen; + int r, tries; + + 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))) + goto out; + + tries = (tools_is_stdin(opt_key_file) && isatty(STDIN_FILENO)) ? opt_tries : 1; + do { + r = tools_get_key(NULL, &password, &passwordLen, + opt_keyfile_offset, opt_keyfile_size, opt_key_file, + opt_timeout, _verify_passphrase(0), 0, cd); + if (r < 0) + goto out; + + r = crypt_resume_by_passphrase(cd, action_argv[0], CRYPT_ANY_SLOT, + password, passwordLen); + tools_passphrase_msg(r); + check_signal(&r); + tools_keyslot_msg(r, UNLOCKED); + + crypt_safe_free(password); + password = NULL; + } while ((r == -EPERM || r == -ERANGE) && (--tries > 0)); +out: + crypt_safe_free(password); + crypt_free(cd); + return r; +} + +static int action_luksBackup(void) +{ + struct crypt_device *cd = NULL; + int r; + + if (!opt_header_backup_file) { + log_err(_("Option --header-backup-file is required.")); + return -EINVAL; + } + + if ((r = crypt_init(&cd, uuid_or_device_header(NULL)))) + goto out; + + crypt_set_confirm_callback(cd, yesDialog, NULL); + + r = crypt_header_backup(cd, NULL, opt_header_backup_file); +out: + crypt_free(cd); + return r; +} + +static int action_luksRestore(void) +{ + struct crypt_device *cd = NULL; + int r = 0; + + if (!opt_header_backup_file) { + log_err(_("Option --header-backup-file is required.")); + return -EINVAL; + } + + if ((r = crypt_init(&cd, uuid_or_device_header(NULL)))) + goto out; + + crypt_set_confirm_callback(cd, yesDialog, NULL); + r = crypt_header_restore(cd, NULL, opt_header_backup_file); +out: + crypt_free(cd); + return r; +} + +static const char *_get_device_type(void) +{ + const char *type, *name = NULL; + struct crypt_device *cd = NULL; + + if (action_argc > 1) + name = action_argv[1]; + else if (action_argc == 1) + name = action_argv[0]; + + if (crypt_init_by_name_and_header(&cd, name, opt_header_device)) + return NULL; + + type = crypt_get_type(cd); + if (!type) { + crypt_free(cd); + log_err(_("%s is not cryptsetup managed device."), name); + return NULL; + } + + if (!strncmp(type, "LUKS", 4)) + type = "luks"; + else if (!strcmp(type, CRYPT_PLAIN)) + type = "plain"; + else if (!strcmp(type, CRYPT_LOOPAES)) + type = "loopaes"; + else { + log_err(_("Refresh is not supported for device type %s"), type); + type = NULL; + } + + crypt_free(cd); + + return type; +} + +static int action_open(void) +{ + if (opt_refresh && !opt_type) + /* read device type from active mapping */ + opt_type = _get_device_type(); + + if (!opt_type) + return -EINVAL; + + if (!strcmp(opt_type, "luks") || + !strcmp(opt_type, "luks1") || + !strcmp(opt_type, "luks2")) { + if (action_argc < 2 && (!opt_test_passphrase && !opt_refresh)) + goto args; + return action_open_luks(); + } else if (!strcmp(opt_type, "plain")) { + if (action_argc < 2 && !opt_refresh) + goto args; + return action_open_plain(); + } else if (!strcmp(opt_type, "loopaes")) { + if (action_argc < 2 && !opt_refresh) + goto args; + return action_open_loopaes(); + } else if (!strcmp(opt_type, "tcrypt")) { + if (action_argc < 2 && !opt_test_passphrase) + goto args; + return action_open_tcrypt(); + } + + log_err(_("Unrecognized metadata device type %s."), opt_type); + return -EINVAL; +args: + log_err(_("Command requires device and mapped name as arguments.")); + return -EINVAL; +} + +static int action_luksErase(void) +{ + struct crypt_device *cd = NULL; + crypt_keyslot_info ki; + char *msg = NULL; + int i, max, r; + + if ((r = crypt_init(&cd, uuid_or_device_header(NULL)))) + goto out; + + crypt_set_confirm_callback(cd, yesDialog, NULL); + + if ((r = crypt_load(cd, luksType(opt_type), NULL))) { + log_err(_("Device %s is not a valid LUKS device."), + uuid_or_device_header(NULL)); + goto out; + } + + if(asprintf(&msg, _("This operation will erase all keyslots on device %s.\n" + "Device will become unusable after this operation."), + uuid_or_device_header(NULL)) == -1) { + r = -ENOMEM; + goto out; + } + + if (!yesDialog(msg, _("Operation aborted, keyslots were NOT wiped.\n"))) { + r = -EPERM; + goto out; + } + + /* Safety check */ + max = crypt_keyslot_max(crypt_get_type(cd)); + if (max <= 0) + return -EINVAL; + + for (i = 0; i < max; i++) { + ki = crypt_keyslot_status(cd, i); + if (ki == CRYPT_SLOT_ACTIVE || ki == CRYPT_SLOT_ACTIVE_LAST) { + r = crypt_keyslot_destroy(cd, i); + if (r < 0) + goto out; + tools_keyslot_msg(i, REMOVED); + } + } +out: + free(msg); + crypt_free(cd); + return r; +} + +static int action_luksConvert(void) +{ + struct crypt_device *cd = NULL; + char *msg = NULL; + const char *to_type, *from_type; + int r; + + if (!strcmp(opt_type, "luks2")) { + to_type = CRYPT_LUKS2; + } else if (!strcmp(opt_type, "luks1")) { + to_type = CRYPT_LUKS1; + } else { + log_err(_("Invalid LUKS type, only luks1 and luks2 are supported.")); + return -EINVAL; + } + + if ((r = crypt_init(&cd, uuid_or_device_header(NULL)))) + return r; + + crypt_set_confirm_callback(cd, yesDialog, NULL); + + if ((r = crypt_load(cd, CRYPT_LUKS, NULL)) || + !(from_type = crypt_get_type(cd))) { + log_err(_("Device %s is not a valid LUKS device."), + uuid_or_device_header(NULL)); + crypt_free(cd); + return r; + } + + if (!strcmp(from_type, to_type)) { + log_err(_("Device is already %s type."), to_type); + crypt_free(cd); + return -EINVAL; + } + + if (asprintf(&msg, _("This operation will convert %s to %s format.\n"), + uuid_or_device_header(NULL), to_type) == -1) { + crypt_free(cd); + return -ENOMEM; + } + + if (yesDialog(msg, _("Operation aborted, device was NOT converted.\n"))) + r = crypt_convert(cd, to_type, NULL); + else + r = -EPERM; + + free(msg); + crypt_free(cd); + return r; +} + +static int _config_priority(struct crypt_device *cd) +{ + crypt_keyslot_info cs; + crypt_keyslot_priority priority = CRYPT_SLOT_PRIORITY_INVALID; + + if (!strcmp("normal", opt_priority)) + priority = CRYPT_SLOT_PRIORITY_NORMAL; + else if (!strcmp("prefer", opt_priority)) + priority = CRYPT_SLOT_PRIORITY_PREFER; + else if (!strcmp("ignore", opt_priority)) + priority = CRYPT_SLOT_PRIORITY_IGNORE; + + cs = crypt_keyslot_status(cd, opt_key_slot); + if (cs != CRYPT_SLOT_INVALID) + return crypt_keyslot_set_priority(cd, opt_key_slot, priority); + + return -EINVAL; +} + +static int _config_labels(struct crypt_device *cd) +{ + return crypt_set_label(cd, opt_label, opt_subsystem); +} + +static int action_luksConfig(void) +{ + struct crypt_device *cd = NULL; + int r; + + if (!opt_priority && !opt_label && !opt_subsystem) { + log_err(_("Option --priority, --label or --subsystem is missing.")); + return -EINVAL; + } + + if ((r = crypt_init(&cd, uuid_or_device_header(NULL)))) + return r; + + if ((r = crypt_load(cd, CRYPT_LUKS2, NULL))) { + log_err(_("Device %s is not a valid LUKS device."), + uuid_or_device_header(NULL)); + goto out; + } + + if (opt_priority && (r = _config_priority(cd))) + goto out; + + if ((opt_label || opt_subsystem) && (r = _config_labels(cd))) + goto out; +out: + crypt_free(cd); + return r; +} + +static int _token_add(struct crypt_device *cd) +{ + int r, token; + crypt_token_info token_info; + const struct crypt_token_params_luks2_keyring params = { + .key_description = opt_key_description + }; + + if (opt_token != CRYPT_ANY_TOKEN) { + token_info = crypt_token_status(cd, opt_token, NULL); + if (token_info < CRYPT_TOKEN_INACTIVE) { + log_err(_("Token %d is invalid."), opt_token); + return -EINVAL; + } else if (token_info > CRYPT_TOKEN_INACTIVE) { + log_err(_("Token %d in use."), opt_token); + return -EINVAL; + } + } + + r = crypt_token_luks2_keyring_set(cd, opt_token, ¶ms); + if (r < 0) { + log_err(_("Failed to add luks2-keyring token %d."), opt_token); + return r; + } + + token = r; + tools_token_msg(token, CREATED); + + r = crypt_token_assign_keyslot(cd, token, opt_key_slot); + if (r < 0) { + log_err(_("Failed to assign token %d to keyslot %d."), token, opt_key_slot); + (void) crypt_token_json_set(cd, token, NULL); + } + + return r; +} + +static int _token_remove(struct crypt_device *cd) +{ + crypt_token_info token_info; + int r; + + token_info = crypt_token_status(cd, opt_token, NULL); + if (token_info < CRYPT_TOKEN_INACTIVE) { + log_err(_("Token %d is invalid."), opt_token); + return -EINVAL; + } else if (token_info == CRYPT_TOKEN_INACTIVE) { + log_err(_("Token %d is not in use."), opt_token); + return -EINVAL; + } + + r = crypt_token_json_set(cd, opt_token, NULL); + tools_token_msg(r, REMOVED); + + return r; +} + +static int _token_import(struct crypt_device *cd) +{ + char *json; + size_t json_length; + crypt_token_info token_info; + int r, token; + + if (opt_token != CRYPT_ANY_TOKEN) { + token_info = crypt_token_status(cd, opt_token, NULL); + if (token_info < CRYPT_TOKEN_INACTIVE) { + log_err(_("Token %d is invalid."), opt_token); + return -EINVAL; + } else if (token_info > CRYPT_TOKEN_INACTIVE) { + log_err(_("Token %d in use."), opt_token); + return -EINVAL; + } + } + + r = tools_read_json_file(cd, opt_json_file, &json, &json_length); + if (r) + return r; + + r = crypt_token_json_set(cd, opt_token, json); + free(json); + if (r < 0) { + log_err(_("Failed to import token from file.")); + return r; + } + + token = r; + tools_token_msg(token, CREATED); + + if (opt_key_slot != CRYPT_ANY_SLOT) { + r = crypt_token_assign_keyslot(cd, token, opt_key_slot); + if (r < 0) { + log_err(_("Failed to assign token %d to keyslot %d."), token, opt_key_slot); + (void) crypt_token_json_set(cd, token, NULL); + } + } + + return r; +} + +static int _token_export(struct crypt_device *cd) +{ + const char *json; + int r; + + r = crypt_token_json_get(cd, opt_token, &json); + if (r < 0) { + log_err(_("Failed to get token %d for export."), opt_token); + return r; + } + + return tools_write_json_file(cd, opt_json_file, json); +} + +static int action_token(void) +{ + int r; + struct crypt_device *cd = NULL; + enum { ADD = 0, REMOVE, IMPORT, EXPORT } action; + + if (!strcmp(action_argv[0], "add")) { + if (!opt_key_description) { + log_err(_("--key-description parameter is mandatory for token add action.")); + return -EINVAL; + } + action = ADD; + } else if (!strcmp(action_argv[0], "remove")) { + if (opt_token == CRYPT_ANY_TOKEN) { + log_err(_("Action requires specific token. Use --token-id parameter.")); + return -EINVAL; + } + action = REMOVE; + } else if (!strcmp(action_argv[0], "import")) { + action = IMPORT; + } else if (!strcmp(action_argv[0], "export")) { + if (opt_token == CRYPT_ANY_TOKEN) { + log_err(_("Action requires specific token. Use --token-id parameter.")); + return -EINVAL; + } + action = EXPORT; + } else { + log_err(_("Invalid token operation %s."), action_argv[0]); + return -EINVAL; + } + + if ((r = crypt_init(&cd, uuid_or_device(opt_header_device ?: action_argv[1])))) + return r; + + if ((r = crypt_load(cd, CRYPT_LUKS2, NULL))) { + log_err(_("Device %s is not a valid LUKS device."), + uuid_or_device(opt_header_device ?: action_argv[1])); + crypt_free(cd); + return r; + } + + if (action == ADD) + r = _token_add(cd); /* adds only luks2-keyring type */ + else if (action == REMOVE) + r = _token_remove(cd); + else if (action == IMPORT) + r = _token_import(cd); + else if (action == EXPORT) + r = _token_export(cd); + else { + log_dbg("Internal token action error."); + r = -EINVAL; + } + + crypt_free(cd); + + return r; +} + +static int auto_detect_active_name(struct crypt_device *cd, const char *data_device, char *dm_name, size_t dm_name_len) +{ + int r; + + r = tools_lookup_crypt_device(cd, crypt_get_type(cd), data_device, dm_name, dm_name_len); + if (r > 0) + log_dbg("Device %s has %d active holders.", data_device, r); + + return r; +} + +static int _get_device_active_name(struct crypt_device *cd, const char *data_device, char *buffer, size_t buffer_size) +{ + char *msg; + int r; + + r = auto_detect_active_name(cd, action_argv[0], buffer, buffer_size); + if (r > 0) { + if (*buffer == '\0') { + log_err(_("Device %s is still in use."), data_device); + return -EINVAL; + } + if (!opt_batch_mode) + log_std(_("Auto-detected active dm device '%s' for data device %s.\n"), buffer, data_device); + } + if (r < 0) { + if (r == -ENOTBLK) + log_std(_("Device %s is not a block device.\n"), data_device); + else + log_err(_("Failed to auto-detect device %s holders."), data_device); + + r = asprintf(&msg, _("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"), data_device); + if (r < 0) + return -ENOMEM; + r = noDialog(msg, _("Operation aborted.\n")) ? 0 : -EINVAL; + free(msg); + } + + return r; +} + +static int action_reencrypt_load(struct crypt_device *cd) +{ + int r; + size_t passwordLen; + 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, + .max_hotzone_size = opt_hotzone_size / SECTOR_SIZE, + .device_size = opt_device_size / SECTOR_SIZE, + .flags = CRYPT_REENCRYPT_RESUME_ONLY + }; + + r = tools_get_key(NULL, &password, &passwordLen, + opt_keyfile_offset, opt_keyfile_size, opt_key_file, + opt_timeout, _verify_passphrase(0), 0, cd); + if (r < 0) + return r; + + if (!opt_active_name) { + r = _get_device_active_name(cd, action_argv[0], dm_name, sizeof(dm_name)); + if (r > 0) + active_name = dm_name; + if (r < 0) { + crypt_safe_free(password); + return -EINVAL; + } + } else + active_name = opt_active_name; + + r = crypt_reencrypt_init_by_passphrase(cd, active_name, password, passwordLen, opt_key_slot, opt_key_slot, NULL, NULL, ¶ms); + + crypt_safe_free(password); + + return r; +} + +static int action_encrypt_luks2(struct crypt_device **cd) +{ + const char *type, *activated_name = NULL; + int keyslot, r, fd; + uuid_t uuid; + size_t passwordLen; + char *msg, uuid_str[37], header_file[PATH_MAX] = { 0 }, *password = NULL; + uint32_t activate_flags = 0; + const struct crypt_params_luks2 luks2_params = { + .sector_size = opt_sector_size ?: SECTOR_SIZE + }; + 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, + .max_hotzone_size = opt_hotzone_size / SECTOR_SIZE, + .device_size = opt_device_size / SECTOR_SIZE, + .luks2 = &luks2_params, + .flags = CRYPT_REENCRYPT_INITIALIZE_ONLY + }; + + _set_reencryption_flags(¶ms.flags); + + type = luksType(opt_type); + if (!type) + type = crypt_get_default_type(); + + if (strcmp(type, CRYPT_LUKS2)) { + log_err(_("Invalid LUKS device type.")); + return -EINVAL; + } + + if (!opt_data_shift && !opt_header_device) { + log_err(_("Encryption without detached header (--header) is not possible without data device size reduction (--reduce-device-size).")); + return -ENOTSUP; + } + + if (!opt_header_device && opt_offset && opt_data_shift && (opt_offset > (imaxabs(opt_data_shift) / (2 * SECTOR_SIZE)))) { + log_err(_("Requested data offset must be less than or equal to half of --reduce-device-size parameter.")); + return -EINVAL; + } + + /* TODO: ask user to confirm. It's useless to do data device reduction and than use smaller value */ + if (!opt_header_device && opt_offset && opt_data_shift && (opt_offset < (imaxabs(opt_data_shift) / (2 * SECTOR_SIZE)))) { + opt_data_shift = -(opt_offset * 2 * SECTOR_SIZE); + if (opt_data_shift >= 0) + return -EINVAL; + log_std(_("Adjusting --reduce-device-size value to twice the --offset %" PRIu64 " (sectors).\n"), opt_offset * 2); + } + + if (strncmp(type, CRYPT_LUKS2, strlen(CRYPT_LUKS2))) { + log_err(_("Encryption is supported only for LUKS2 format.")); + return -EINVAL; + } + + if (opt_uuid && uuid_parse(opt_uuid, uuid) == -1) { + log_err(_("Wrong LUKS UUID format provided.")); + return -EINVAL; + } + + if (!opt_uuid) { + uuid_generate(uuid); + uuid_unparse(uuid, uuid_str); + opt_uuid = uuid_str; + } + + /* Check the data device is not LUKS device already */ + if ((r = crypt_init(cd, action_argv[0]))) + return r; + r = crypt_load(*cd, CRYPT_LUKS, NULL); + crypt_free(*cd); + *cd = NULL; + if (!r) { + r = asprintf(&msg, _("Detected LUKS device on %s. Do you want to encrypt that LUKS device again?"), action_argv[0]); + if (r == -1) + return -ENOMEM; + + r = yesDialog(msg, _("Operation aborted.\n")) ? 0 : -EINVAL; + free(msg); + if (r < 0) + return r; + } + + if (!opt_header_device) { + snprintf(header_file, sizeof(header_file), "LUKS2-temp-%s.new", opt_uuid); + fd = open(header_file, O_CREAT|O_EXCL|O_WRONLY, S_IRUSR|S_IWUSR); + if (fd == -1) { + if (errno == EEXIST) + log_err(_("Temporary header file %s already exists. Aborting."), header_file); + else + log_err(_("Cannot create temporary header file %s."), header_file); + return -EINVAL; + } + + r = posix_fallocate(fd, 0, 4096); + close(fd); + if (r) { + log_err(_("Cannot create temporary header file %s."), header_file); + r = -EINVAL; + goto err; + } + + opt_header_device = header_file; + /* + * FIXME: just override offset here, but we should support both. + * offset and implicit offset via data shift (lvprepend?) + */ + if (!opt_offset) + opt_offset = imaxabs(opt_data_shift) / (2 * SECTOR_SIZE); + opt_data_shift >>= 1; + params.flags |= CRYPT_REENCRYPT_MOVE_FIRST_SEGMENT; + } else if (opt_data_shift < 0) { + if (!opt_luks2_metadata_size) + opt_luks2_metadata_size = 0x4000; /* missing default here */ + if (!opt_luks2_keyslots_size) + opt_luks2_keyslots_size = -opt_data_shift - 2 * opt_luks2_metadata_size; + + if (2 * opt_luks2_metadata_size + opt_luks2_keyslots_size > (uint64_t)-opt_data_shift) { + log_err("LUKS2 metadata size is larger than data shift value."); + return -EINVAL; + } + } + + r = _luksFormat(cd, &password, &passwordLen); + if (r < 0) + goto err; + + if (opt_data_shift) { + params.data_shift = imaxabs(opt_data_shift) / SECTOR_SIZE, + params.resilience = "datashift"; + } + keyslot = opt_key_slot < 0 ? 0 : opt_key_slot; + r = crypt_reencrypt_init_by_passphrase(*cd, NULL, password, passwordLen, + CRYPT_ANY_SLOT, keyslot, crypt_get_cipher(*cd), + crypt_get_cipher_mode(*cd), ¶ms); + if (r < 0) { + crypt_keyslot_destroy(*cd, keyslot); + goto err; + } + + /* Restore temporary header in head of data device */ + if (*header_file) { + crypt_free(*cd); + *cd = NULL; + + r = crypt_init(cd, action_argv[0]); + if (!r) + r = crypt_header_restore(*cd, CRYPT_LUKS2, header_file); + + if (r) { + log_err("Failed to place new header at head of device %s.", action_argv[0]); + goto err; + } + } + + /* activate device */ + if (action_argc > 1) { + activated_name = action_argv[1]; + _set_activation_flags(&activate_flags); + r = crypt_activate_by_passphrase(*cd, activated_name, opt_key_slot, password, passwordLen, activate_flags); + if (r >= 0) { + log_std(_("%s/%s is now active and ready for online encryption."), crypt_get_dir(), activated_name); + /* FIXME: Hotfix for 2.2.2 only. Fix the translated string correctly in next relese. */ + log_std("\n"); + } + } + + if (r < 0) + goto err; + + /* just load reencryption context to continue reencryption */ + if (!opt_reencrypt_init_only) { + params.flags &= ~CRYPT_REENCRYPT_INITIALIZE_ONLY; + r = crypt_reencrypt_init_by_passphrase(*cd, activated_name, password, passwordLen, + CRYPT_ANY_SLOT, keyslot, NULL, NULL, ¶ms); + } +err: + crypt_safe_free(password); + if (*header_file) + unlink(header_file); + return r; +} + +static int action_decrypt_luks2(struct crypt_device *cd) +{ + int r; + char dm_name[PATH_MAX], *password = NULL; + const char *active_name = NULL; + 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, + .data_shift = imaxabs(opt_data_shift) / SECTOR_SIZE, + .device_size = opt_device_size / SECTOR_SIZE, + .max_hotzone_size = opt_hotzone_size / SECTOR_SIZE, + }; + size_t passwordLen; + + _set_reencryption_flags(¶ms.flags); + + r = tools_get_key(NULL, &password, &passwordLen, + opt_keyfile_offset, opt_keyfile_size, opt_key_file, + opt_timeout, _verify_passphrase(0), 0, cd); + if (r < 0) + return r; + + if (!opt_active_name) { + r = _get_device_active_name(cd, action_argv[0], dm_name, sizeof(dm_name)); + if (r > 0) + active_name = dm_name; + if (r < 0) + goto err; + } else + active_name = opt_active_name; + + if (!active_name) + log_dbg("Device %s seems unused. Proceeding with offline operation.", action_argv[0]); + + r = crypt_reencrypt_init_by_passphrase(cd, active_name, password, + passwordLen, opt_key_slot, CRYPT_ANY_SLOT, NULL, NULL, ¶ms); +err: + crypt_safe_free(password); + return r; +} + +struct keyslot_passwords { + char *password; + size_t passwordLen; + int new; +}; + +static struct keyslot_passwords *init_keyslot_passwords(size_t count) +{ + size_t i; + struct keyslot_passwords *tmp = calloc(count, sizeof(struct keyslot_passwords)); + + if (!tmp) + return tmp; + + for (i = 0; i < count; i++) + tmp[i].new = -1; + + return tmp; +} + +static int init_passphrase(struct keyslot_passwords *kp, size_t keyslot_passwords_length, + struct crypt_device *cd, const char *msg, int slot_to_check) +{ + crypt_keyslot_info ki; + char *password; + int r = -EINVAL, retry_count; + size_t passwordLen; + + if (slot_to_check != CRYPT_ANY_SLOT) { + ki = crypt_keyslot_status(cd, slot_to_check); + if (ki < CRYPT_SLOT_ACTIVE || ki == CRYPT_SLOT_UNBOUND) + return -ENOENT; + } + + retry_count = (opt_tries && !opt_key_file) ? opt_tries : 1; + while (retry_count--) { + r = tools_get_key(msg, &password, &passwordLen, 0, 0, + opt_key_file, 0, 0, 0 /*pwquality*/, cd); + if (r < 0) + return r; + if (quit) { + crypt_safe_free(password); + password = NULL; + passwordLen = 0; + return -EAGAIN; + } + + r = crypt_activate_by_passphrase(cd, NULL, slot_to_check, + password, passwordLen, 0); + if (r < 0) { + crypt_safe_free(password); + password = NULL; + passwordLen = 0; + } + if (r < 0 && r != -EPERM) + return r; + + if (r >= 0) { + tools_keyslot_msg(r, UNLOCKED); + if ((size_t)r >= keyslot_passwords_length) { + crypt_safe_free(password); + return -EINVAL; + } + kp[r].password = password; + kp[r].passwordLen = passwordLen; + break; + } + tools_passphrase_msg(r); + } + + password = NULL; + passwordLen = 0; + + return r; +} + +static int _check_luks2_keyslots(struct crypt_device *cd) +{ + int i, max = crypt_keyslot_max(CRYPT_LUKS2), active = 0, unbound = 0; + + if (max < 0) + return max; + + for (i = 0; i < max; i++) { + switch (crypt_keyslot_status(cd, i)) { + case CRYPT_SLOT_INVALID: + return -EINVAL; + case CRYPT_SLOT_ACTIVE: + /* fall-through */ + case CRYPT_SLOT_ACTIVE_LAST: + active++; + break; + case CRYPT_SLOT_UNBOUND: + unbound++; + /* fall-through */ + default: + break; + } + } + + /* at least one keyslot for reencryption plus new volume key */ + if (active + unbound > max - 2) { + log_err(_("Not enough free keyslots for reencryption.")); + return -EINVAL; + } + + if ((opt_key_slot == CRYPT_ANY_SLOT) && + (2 * active + unbound > max - 1)) { + log_err(_("Not enough free keyslots for reencryption.")); + return -EINVAL; + } + + return 0; +} + +static int fill_keyslot_passwords(struct crypt_device *cd, + struct keyslot_passwords *kp, size_t kp_size) +{ + char msg[128]; + crypt_keyslot_info ki; + int i, r = 0; + + if (opt_key_slot == CRYPT_ANY_SLOT && opt_key_file) { + for (i = 0; (size_t)i < kp_size; i++) { + ki = crypt_keyslot_status(cd, i); + if (ki == CRYPT_SLOT_INVALID) + return -EINVAL; + if (ki == CRYPT_SLOT_ACTIVE) { + log_err(_("Key file can be used only with --key-slot or with " + "exactly one key slot active.")); + return -EINVAL; + } + } + } + + if (opt_key_slot == CRYPT_ANY_SLOT) { + for (i = 0; (size_t)i < kp_size; i++) { + snprintf(msg, sizeof(msg), _("Enter passphrase for key slot %d: "), i); + r = init_passphrase(kp, kp_size, cd, msg, i); + if (r == -ENOENT) + r = 0; + if (r < 0) + break; + } + } else { + snprintf(msg, sizeof(msg), _("Enter passphrase for key slot %u: "), opt_key_slot); + r = init_passphrase(kp, kp_size, cd, msg, opt_key_slot); + } + + return r < 0 ? r : 0; +} + +static int assign_tokens(struct crypt_device *cd, int keyslot_old, int keyslot_new) +{ + int token = 0, r = crypt_token_is_assigned(cd, token, keyslot_old); + + while (r != -EINVAL) { + if (!r && (token != crypt_token_assign_keyslot(cd, token, keyslot_new))) + return -EINVAL; + token++; + r = crypt_token_is_assigned(cd, token, keyslot_old); + } + + /* we reached max token number, exit */ + return 0; +} + +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; + const char *active_name = NULL; + struct keyslot_passwords *kp; + struct crypt_params_luks2 luks2_params = {}; + struct crypt_params_reencrypt params = { + .mode = CRYPT_REENCRYPT_REENCRYPT, + .direction = opt_data_shift < 0 ? CRYPT_REENCRYPT_BACKWARD : CRYPT_REENCRYPT_FORWARD, + .resilience = opt_data_shift ? "datashift" : opt_resilience_mode, + .hash = opt_resilience_hash, + .data_shift = imaxabs(opt_data_shift) / SECTOR_SIZE, + .max_hotzone_size = opt_hotzone_size / SECTOR_SIZE, + .device_size = opt_device_size / SECTOR_SIZE, + .luks2 = &luks2_params, + }; + + _set_reencryption_flags(¶ms.flags); + + if (!opt_cipher) { + strncpy(cipher, crypt_get_cipher(cd), MAX_CIPHER_LEN - 1); + strncpy(mode, crypt_get_cipher_mode(cd), MAX_CIPHER_LEN - 1); + cipher[MAX_CIPHER_LEN-1] = '\0'; + mode[MAX_CIPHER_LEN-1] = '\0'; + } else if ((r = crypt_parse_name_and_mode(opt_cipher, cipher, NULL, mode))) { + log_err(_("No known cipher specification pattern detected.")); + return r; + } + + luks2_params.sector_size = opt_sector_size ?: crypt_get_sector_size(cd); + + r = _check_luks2_keyslots(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; + else + key_size = crypt_get_volume_key_size(cd); + + if (!key_size) + return -EINVAL; + + r = crypt_keyslot_max(CRYPT_LUKS2); + if (r < 0) + return r; + kp_size = r; + kp = init_keyslot_passwords(kp_size); + + if (!kp) + return -ENOMEM; + + r = fill_keyslot_passwords(cd, kp, kp_size); + if (r) + goto err; + + vk_size = key_size; + vk = crypt_safe_alloc(vk_size); + if (!vk) { + r = -ENOMEM; + goto err; + } + + r = -ENOENT; + + for (i = 0; i < kp_size; i++) { + if (kp[i].password && keyslot_new < 0) { + r = set_keyslot_params(cd, i); + if (r < 0) + break; + r = crypt_keyslot_add_by_key(cd, CRYPT_ANY_SLOT, NULL, key_size, + kp[i].password, kp[i].passwordLen, CRYPT_VOLUME_KEY_NO_SEGMENT); + tools_keyslot_msg(r, CREATED); + if (r < 0) + break; + + 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; + r = assign_tokens(cd, i, r); + if (r < 0) + break; + } else if (kp[i].password) { + r = set_keyslot_params(cd, i); + if (r < 0) + break; + r = crypt_keyslot_add_by_key(cd, CRYPT_ANY_SLOT, vk, key_size, + kp[i].password, kp[i].passwordLen, CRYPT_VOLUME_KEY_NO_SEGMENT | CRYPT_VOLUME_KEY_DIGEST_REUSE); + tools_keyslot_msg(r, CREATED); + if (r < 0) + break; + kp[i].new = r; + r = assign_tokens(cd, i, r); + if (r < 0) + break; + } + } + + crypt_safe_free(vk); + + if (r < 0) + goto err; + + if (!opt_active_name && !opt_reencrypt_init_only) { + r = _get_device_active_name(cd, action_argv[0], dm_name, sizeof(dm_name)); + if (r > 0) + active_name = dm_name; + if (r < 0) + goto err; + } else if (opt_active_name) + active_name = opt_active_name; + + if (!active_name && !opt_reencrypt_init_only) + log_dbg("Device %s seems unused. Proceeding with offline operation.", action_argv[0]); + + r = crypt_reencrypt_init_by_passphrase(cd, active_name, kp[keyslot_old].password, + kp[keyslot_old].passwordLen, keyslot_old, kp[keyslot_old].new, + cipher, mode, ¶ms); +err: + for (i = 0; i < kp_size; i++) { + crypt_safe_free(kp[i].password); + if (r < 0 && kp[i].new >= 0 && + crypt_reencrypt_status(cd, NULL) == CRYPT_REENCRYPT_NONE && + crypt_keyslot_destroy(cd, kp[i].new)) + log_dbg("Failed to remove keyslot %d with unbound key.", kp[i].new); + } + free(kp); + return r; +} + +static int action_reencrypt(void) +{ + uint32_t flags; + struct crypt_device *cd = NULL; + struct crypt_params_integrity ip = { 0 }; + int r = 0; + + if (action_argc < 1 && (!opt_active_name || opt_encrypt)) { + log_err(_("Command requires device as argument.")); + return -EINVAL; + } + + if (!opt_encrypt || opt_reencrypt_resume_only) { + if (opt_active_name) { + r = crypt_init_by_name_and_header(&cd, opt_active_name, opt_header_device); + if (r || !crypt_get_type(cd) || strcmp(crypt_get_type(cd), CRYPT_LUKS2)) { + log_err(_("Device %s is not a valid LUKS device."), opt_active_name); + r = -EINVAL; + goto out; + } + } else { + if ((r = crypt_init_data_device(&cd, uuid_or_device(opt_header_device ?: action_argv[0]), action_argv[0]))) + return r; + + if ((r = crypt_load(cd, CRYPT_LUKS, NULL))) { + log_err(_("Device %s is not a valid LUKS device."), + uuid_or_device(opt_header_device ?: action_argv[0])); + goto out; + } + if (strcmp(crypt_get_type(cd), CRYPT_LUKS2)) { + log_err(_("Only LUKS2 format is currently supported. Please use cryptsetup-reencrypt tool for LUKS1.")); + r = -EINVAL; + goto out; + } + } + + if (crypt_persistent_flags_get(cd, CRYPT_FLAGS_REQUIREMENTS, &flags)) { + r = -EINVAL; + goto out; + } + + if (flags & CRYPT_REQUIREMENT_OFFLINE_REENCRYPT) { + log_err(_("Legacy offline reencryption already in-progress. Use cryptsetup-reencrypt utility.")); + r = -EINVAL; + goto out; + } + + if (flags & CRYPT_REQUIREMENT_ONLINE_REENCRYPT) + r = -EBUSY; + + /* raw integrity info is available since 2.0 */ + if (crypt_get_integrity_info(cd, &ip) || ip.tag_size) { + log_err(_("Reencryption of device with integrity profile is not supported.")); + r = -ENOTSUP; + goto out; + } + } + + if (r == -EBUSY) { + if (opt_reencrypt_init_only) + log_err(_("LUKS2 reencryption already initialized. Aborting operation.")); + else + r = action_reencrypt_load(cd); + } else if (!r && opt_reencrypt_resume_only) { + log_err(_("LUKS2 device is not in reencryption.")); + r = -EINVAL; + } else if (opt_decrypt) + r = action_decrypt_luks2(cd); + else if (opt_encrypt && !opt_reencrypt_resume_only) + r = action_encrypt_luks2(&cd); + else + r = action_reencrypt_luks2(cd); + + if (r >= 0 && !opt_reencrypt_init_only) { + set_int_handler(0); + r = crypt_reencrypt(cd, tools_reencrypt_progress); + } +out: + crypt_free(cd); + + return r; +} + +static struct action_type { + const char *type; + int (*handler)(void); + int required_action_argc; + int required_memlock; + const char *arg_desc; + const char *desc; +} action_types[] = { + { "open", action_open, 1, 1, N_(" [--type ] []"),N_("open device as ") }, + { "close", action_close, 1, 1, N_(""), N_("close device (remove mapping)") }, + { "resize", action_resize, 1, 1, N_(""), N_("resize active device") }, + { "status", action_status, 1, 0, N_(""), N_("show device status") }, + { "benchmark", action_benchmark, 0, 0, N_("[--cipher ]"), N_("benchmark cipher") }, + { "repair", action_luksRepair, 1, 1, N_(""), N_("try to repair on-disk metadata") }, + { "reencrypt", action_reencrypt, 0, 0, N_(""), N_("reencrypt LUKS2 device") }, + { "erase", action_luksErase , 1, 1, N_(""), N_("erase all keyslots (remove encryption key)") }, + { "convert", action_luksConvert, 1, 1, N_(""), N_("convert LUKS from/to LUKS2 format") }, + { "config", action_luksConfig, 1, 1, N_(""), N_("set permanent configuration options for LUKS2") }, + { "luksFormat", action_luksFormat, 1, 1, N_(" []"), N_("formats a LUKS device") }, + { "luksAddKey", action_luksAddKey, 1, 1, N_(" []"), N_("add key to LUKS device") }, + { "luksRemoveKey",action_luksRemoveKey,1, 1, N_(" []"), N_("removes supplied key or key file from LUKS device") }, + { "luksChangeKey",action_luksChangeKey,1, 1, N_(" []"), N_("changes supplied key or key file of LUKS device") }, + { "luksConvertKey",action_luksConvertKey,1, 1, N_(" []"), N_("converts a key to new pbkdf parameters") }, + { "luksKillSlot", action_luksKillSlot, 2, 1, N_(" "), N_("wipes key with number from LUKS device") }, + { "luksUUID", action_luksUUID, 1, 0, N_(""), N_("print UUID of LUKS device") }, + { "isLuks", action_isLuks, 1, 0, N_(""), N_("tests for LUKS partition header") }, + { "luksDump", action_luksDump, 1, 1, N_(""), N_("dump LUKS partition information") }, + { "tcryptDump", action_tcryptDump, 1, 1, N_(""), N_("dump TCRYPT device information") }, + { "luksSuspend", action_luksSuspend, 1, 1, N_(""), N_("Suspend LUKS device and wipe key (all IOs are frozen)") }, + { "luksResume", action_luksResume, 1, 1, N_(""), N_("Resume suspended LUKS device") }, + { "luksHeaderBackup", action_luksBackup,1,1, N_(""), N_("Backup LUKS device header and keyslots") }, + { "luksHeaderRestore",action_luksRestore,1,1,N_(""), N_("Restore LUKS device header and keyslots") }, + { "token", action_token, 2, 0, N_(" "), N_("Manipulate LUKS2 tokens") }, + {} +}; + +static void help(poptContext popt_context, + enum poptCallbackReason reason __attribute__((unused)), + struct poptOption *key, + const char *arg __attribute__((unused)), + void *data __attribute__((unused))) +{ + if (key->shortName == '?') { + struct action_type *action; + const struct crypt_pbkdf_type *pbkdf_luks1, *pbkdf_luks2; + + log_std("%s\n",PACKAGE_STRING); + + poptPrintHelp(popt_context, stdout, 0); + + log_std(_("\n" + " is one of:\n")); + + for(action = action_types; action->type; action++) + log_std("\t%s %s - %s\n", action->type, _(action->arg_desc), _(action->desc)); + + log_std(_("\n" + "You can also use old syntax aliases:\n" + "\topen: create (plainOpen), luksOpen, loopaesOpen, tcryptOpen\n" + "\tclose: remove (plainClose), luksClose, loopaesClose, tcryptClose\n")); + log_std(_("\n" + " is the device to create under %s\n" + " is the encrypted device\n" + " is the LUKS key slot number to modify\n" + " optional key file for the new key for luksAddKey action\n"), + crypt_get_dir()); + + log_std(_("\nDefault compiled-in metadata format is %s (for luksFormat action).\n"), + crypt_get_default_type()); + + pbkdf_luks1 = crypt_get_pbkdf_default(CRYPT_LUKS1); + pbkdf_luks2 = crypt_get_pbkdf_default(CRYPT_LUKS2); + log_std(_("\nDefault compiled-in key and passphrase parameters:\n" + "\tMaximum keyfile size: %dkB, " + "Maximum interactive passphrase length %d (characters)\n" + "Default PBKDF for LUKS1: %s, iteration time: %d (ms)\n" + "Default PBKDF for LUKS2: %s\n" + "\tIteration time: %d, Memory required: %dkB, Parallel threads: %d\n"), + DEFAULT_KEYFILE_SIZE_MAXKB, DEFAULT_PASSPHRASE_SIZE_MAX, + pbkdf_luks1->type, pbkdf_luks1->time_ms, + pbkdf_luks2->type, pbkdf_luks2->time_ms, pbkdf_luks2->max_memory_kb, + pbkdf_luks2->parallel_threads); + + log_std(_("\nDefault compiled-in device cipher parameters:\n" + "\tloop-AES: %s, Key %d bits\n" + "\tplain: %s, Key: %d bits, Password hashing: %s\n" + "\tLUKS: %s, Key: %d bits, LUKS header hashing: %s, RNG: %s\n"), + DEFAULT_LOOPAES_CIPHER, DEFAULT_LOOPAES_KEYBITS, + DEFAULT_CIPHER(PLAIN), DEFAULT_PLAIN_KEYBITS, DEFAULT_PLAIN_HASH, + DEFAULT_CIPHER(LUKS1), DEFAULT_LUKS1_KEYBITS, DEFAULT_LUKS1_HASH, + DEFAULT_RNG); +#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 + poptFreeContext(popt_context); + exit(EXIT_SUCCESS); + } else if (key->shortName == 'V') { + log_std("%s %s\n", PACKAGE_NAME, PACKAGE_VERSION); + poptFreeContext(popt_context); + exit(EXIT_SUCCESS); + } else + usage(popt_context, EXIT_SUCCESS, NULL, NULL); +} + +static void help_args(struct action_type *action, poptContext popt_context) +{ + char buf[128]; + + snprintf(buf, sizeof(buf), _("%s: requires %s as arguments"), action->type, action->arg_desc); + usage(popt_context, EXIT_FAILURE, buf, poptGetInvocationName(popt_context)); +} + +static int run_action(struct action_type *action) +{ + int r; + + log_dbg("Running command %s.", action->type); + + if (action->required_memlock) + crypt_memory_lock(NULL, 1); + + set_int_handler(0); + r = action->handler(); + + if (action->required_memlock) + crypt_memory_lock(NULL, 0); + + /* Some functions returns keyslot # */ + if (r > 0) + r = 0; + check_signal(&r); + + show_status(r); + return translate_errno(r); +} + +static int strcmp_or_null(const char *str, const char *expected) +{ + return !str ? 0 : strcmp(str, expected); +} + +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 }, + { "usage", '\0', POPT_ARG_NONE, NULL, 0, N_("Display brief usage"), NULL }, + { "version",'V', POPT_ARG_NONE, NULL, 0, N_("Print package version"), NULL }, + POPT_TABLEEND + }; + static struct poptOption popt_options[] = { + { 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 }, + { "debug-json", '\0', POPT_ARG_NONE, &opt_debug_json, 0, N_("Show debug messages including JSON metadata"), NULL }, + { "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 }, + { "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") }, + { "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") }, + { "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") }, + { "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") }, + { "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") }, + { "progress-frequency",'\0', POPT_ARG_INT, &opt_progress_frequency, 0, N_("Progress line update (in seconds)"), N_("secs") }, + { "tries", 'T', POPT_ARG_INT, &opt_tries, 0, N_("How often the input of the passphrase can be retried"), NULL }, + { "align-payload", '\0', POPT_ARG_INT, &opt_align_payload, 0, N_("Align payload at sector boundaries - for luksFormat"), N_("SECTORS") }, + { "header-backup-file",'\0', POPT_ARG_STRING, &opt_header_backup_file, 0, N_("File with LUKS header and keyslots backup"), NULL }, + { "use-random", '\0', POPT_ARG_NONE, &opt_random, 0, N_("Use /dev/random for generating volume key"), NULL }, + { "use-urandom", '\0', POPT_ARG_NONE, &opt_urandom, 0, N_("Use /dev/urandom for generating volume key"), NULL }, + { "shared", '\0', POPT_ARG_NONE, &opt_shared, 0, N_("Share device with another non-overlapping crypt segment"), NULL }, + { "uuid", '\0', POPT_ARG_STRING, &opt_uuid, 0, N_("UUID for device to use"), NULL }, + { "allow-discards", '\0', POPT_ARG_NONE, &opt_allow_discards, 0, N_("Allow discards (aka TRIM) requests for device"), NULL }, + { "header", '\0', POPT_ARG_STRING, &opt_header_device, 0, N_("Device or file with separated LUKS header"), NULL }, + { "test-passphrase", '\0', POPT_ARG_NONE, &opt_test_passphrase, 0, N_("Do not activate device, just check passphrase"), NULL }, + { "tcrypt-hidden", '\0', POPT_ARG_NONE, &opt_tcrypt_hidden, 0, N_("Use hidden header (hidden TCRYPT device)"), NULL }, + { "tcrypt-system", '\0', POPT_ARG_NONE, &opt_tcrypt_system, 0, N_("Device is system TCRYPT drive (with bootloader)"), NULL }, + { "tcrypt-backup", '\0', POPT_ARG_NONE, &opt_tcrypt_backup, 0, N_("Use backup (secondary) TCRYPT header"), NULL }, + { "veracrypt", '\0', POPT_ARG_NONE, &opt_veracrypt, 0, N_("Scan also for VeraCrypt compatible device"), NULL }, + { "veracrypt-pim", '\0', POPT_ARG_INT, &opt_veracrypt_pim, 0, N_("Personal Iteration Multiplier for VeraCrypt compatible device"), NULL }, + { "veracrypt-query-pim", '\0', POPT_ARG_NONE, &opt_veracrypt_query_pim, 0, N_("Query Personal Iteration Multiplier for VeraCrypt compatible device"), NULL }, + { "type", 'M', POPT_ARG_STRING, &opt_type, 0, N_("Type of device metadata: luks, luks1, luks2, plain, loopaes, tcrypt"), NULL }, + { "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 }, + { "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") }, + { "pbkdf", '\0', POPT_ARG_STRING, &opt_pbkdf, 0, N_("PBKDF algorithm (for LUKS2): argon2i, argon2id, pbkdf2"), NULL }, + { "pbkdf-memory", '\0', POPT_ARG_LONG, &opt_pbkdf_memory, 0, N_("PBKDF memory cost limit"), N_("kilobytes") }, + { "pbkdf-parallel", '\0', POPT_ARG_LONG, &opt_pbkdf_parallel, 0, N_("PBKDF parallel cost"), N_("threads") }, + { "pbkdf-force-iterations",'\0',POPT_ARG_LONG, &opt_pbkdf_iterations, 0, N_("PBKDF iterations cost (forced, disables benchmark)"), NULL }, + { "priority", '\0', POPT_ARG_STRING, &opt_priority, 0, N_("Keyslot priority: ignore, normal, prefer"), NULL }, + { "disable-locks", '\0', POPT_ARG_NONE, &opt_disable_locks, 0, N_("Disable locking of on-disk metadata"), NULL }, + { "disable-keyring", '\0', POPT_ARG_NONE, &opt_disable_keyring, 0, N_("Disable loading volume keys via kernel keyring"), NULL }, + { "integrity", 'I', POPT_ARG_STRING, &opt_integrity, 0, N_("Data integrity algorithm (LUKS2 only)"), NULL }, + { "integrity-no-journal",'\0',POPT_ARG_NONE, &opt_integrity_nojournal, 0, N_("Disable journal for integrity device"), NULL }, + { "integrity-no-wipe", '\0', POPT_ARG_NONE, &opt_integrity_no_wipe, 0, N_("Do not wipe device after format"), NULL }, + { "token-only", '\0', POPT_ARG_NONE, &opt_token_only, 0, N_("Do not ask for passphrase if activation by token fails"), NULL }, + { "token-id", '\0', POPT_ARG_INT, &opt_token, 0, N_("Token number (default: any)"), NULL }, + { "key-description", '\0', POPT_ARG_STRING, &opt_key_description, 0, N_("Key description"), NULL }, + { "sector-size", '\0', POPT_ARG_INT, &opt_sector_size, 0, N_("Encryption sector size (default: 512 bytes)"), NULL }, + { "persistent", '\0', POPT_ARG_NONE, &opt_persistent, 0, N_("Set activation flags persistent for device"), NULL }, + { "label", '\0', POPT_ARG_STRING, &opt_label, 0, N_("Set label for the LUKS2 device"), NULL }, + { "subsystem", '\0', POPT_ARG_STRING, &opt_subsystem, 0, N_("Set subsystem label for the LUKS2 device"), NULL }, + { "unbound", '\0', POPT_ARG_NONE, &opt_unbound, 0, N_("Create unbound (no assigned data segment) LUKS2 keyslot"), NULL }, + { "json-file", '\0', POPT_ARG_STRING, &opt_json_file, 0, N_("Read or write the json from or to a file"), NULL }, + { "luks2-metadata-size",'\0',POPT_ARG_STRING,&opt_luks2_metadata_size_str,0,N_("LUKS2 header metadata area size"), N_("bytes") }, + { "luks2-keyslots-size",'\0',POPT_ARG_STRING,&opt_luks2_keyslots_size_str,0,N_("LUKS2 header keyslots area size"), N_("bytes") }, + { "refresh", '\0', POPT_ARG_NONE, &opt_refresh, 0, N_("Refresh (reactivate) device with new parameters"), NULL }, + { "keyslot-key-size", '\0', POPT_ARG_INT, &opt_keyslot_key_size, 0, N_("LUKS2 keyslot: The size of the encryption key"), N_("BITS") }, + { "keyslot-cipher", '\0', POPT_ARG_STRING, &opt_keyslot_cipher, 0, N_("LUKS2 keyslot: The cipher used for keyslot encryption"), NULL }, + { "encrypt", '\0', POPT_ARG_NONE, &opt_encrypt, 0, N_("Encrypt LUKS2 device (in-place encryption)."), NULL }, + { "decrypt", '\0', POPT_ARG_NONE, &opt_decrypt, 0, N_("Decrypt LUKS2 device (remove encryption)."), NULL }, + { "init-only", '\0', POPT_ARG_NONE, &opt_reencrypt_init_only, 0, N_("Initialize LUKS2 reencryption in metadata only."), NULL }, + { "resume-only", '\0', POPT_ARG_NONE, &opt_reencrypt_resume_only, 0, N_("Resume initialized LUKS2 reencryption only."), NULL }, + { "reduce-device-size",'\0', POPT_ARG_STRING, &opt_reduce_size_str, 0, N_("Reduce data device size (move data offset). DANGEROUS!"), N_("bytes") }, + { "hotzone-size", '\0', POPT_ARG_STRING, &opt_hotzone_size_str, 0, N_("Maximal reencryption hotzone size."), N_("bytes") }, + { "resilience", '\0', POPT_ARG_STRING, &opt_resilience_mode, 0, N_("Reencryption hotzone resilience type (checksum,journal,none)"), NULL }, + { "resilience-hash", '\0', POPT_ARG_STRING, &opt_resilience_hash, 0, N_("Reencryption hotzone checksums hash"), NULL }, + { "active-name", '\0', POPT_ARG_STRING, &opt_active_name, 0, N_("Override device autodetection of dm device to be reencrypted"), NULL }, + POPT_TABLEEND + }; + poptContext popt_context; + struct action_type *action; + const char *aname; + int r, total_keyfiles = 0; + + crypt_set_log_callback(NULL, tool_log, NULL); + + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, LOCALEDIR); + textdomain(PACKAGE); + + popt_context = poptGetContext(PACKAGE, argc, argv, popt_options, 0); + poptSetOtherOptionHelp(popt_context, + _("[OPTION...] ")); + + while((r = poptGetNextOpt(popt_context)) > 0) { + unsigned long long ull_value; + char *endp; + + if (r == 6) { + const char *kf = poptGetOptArg(popt_context); + if (tools_is_stdin(kf)) + opt_keyfile_stdin = kf; + else if (opt_keyfiles_count < MAX_KEYFILES) + opt_keyfiles[opt_keyfiles_count++] = kf; + total_keyfiles++; + continue; + } + + errno = 0; + ull_value = strtoull(popt_tmp, &endp, 0); + if (*endp || !*popt_tmp || !isdigit(*popt_tmp) || + (errno == ERANGE && ull_value == ULLONG_MAX) || + (errno != 0 && ull_value == 0)) + r = POPT_ERROR_BADNUMBER; + + switch(r) { + case 1: + opt_size = ull_value; + break; + case 2: + opt_offset = ull_value; + break; + case 3: + opt_skip = ull_value; + opt_skip_valid = 1; + break; + case 4: + opt_keyfile_offset = ull_value; + break; + case 5: + opt_new_keyfile_offset = ull_value; + break; + } + + if (r < 0) + break; + } + + if (r < -1) + usage(popt_context, EXIT_FAILURE, poptStrerror(r), + poptBadOption(popt_context, POPT_BADOPTION_NOALIAS)); + + if (!(aname = poptGetArg(popt_context))) + usage(popt_context, EXIT_FAILURE, _("Argument missing."), + poptGetInvocationName(popt_context)); + + action_argc = 0; + action_argv = poptGetArgs(popt_context); + /* Make return values of poptGetArgs more consistent in case of remaining argc = 0 */ + if(!action_argv) + action_argv = null_action_argv; + + /* Count args, somewhat unnice, change? */ + while(action_argv[action_argc] != NULL) + action_argc++; + + /* Handle aliases */ + if (!strcmp(aname, "create")) { + /* create command had historically switched arguments */ + if (action_argv[0] && action_argv[1]) { + const char *tmp = action_argv[0]; + action_argv[0] = action_argv[1]; + action_argv[1] = tmp; + } + aname = "open"; + opt_type = "plain"; + } else if (!strcmp(aname, "plainOpen")) { + aname = "open"; + opt_type = "plain"; + } else if (!strcmp(aname, "luksOpen")) { + aname = "open"; + opt_type = "luks"; + } else if (!strcmp(aname, "loopaesOpen")) { + aname = "open"; + opt_type = "loopaes"; + } else if (!strcmp(aname, "tcryptOpen")) { + aname = "open"; + opt_type = "tcrypt"; + } else if (!strcmp(aname, "tcryptDump")) { + opt_type = "tcrypt"; + } else if (!strcmp(aname, "remove") || + !strcmp(aname, "plainClose") || + !strcmp(aname, "luksClose") || + !strcmp(aname, "loopaesClose") || + !strcmp(aname, "tcryptClose")) { + aname = "close"; + } else if (!strcmp(aname, "luksErase")) { + aname = "erase"; + opt_type = "luks"; + } else if (!strcmp(aname, "luksConfig")) { + aname = "config"; + opt_type = "luks2"; + } else if (!strcmp(aname, "refresh")) { + aname = "open"; + opt_refresh = 1; + } + + /* ignore user supplied type and query device type instead */ + if (opt_refresh) + opt_type = NULL; + + for(action = action_types; action->type; action++) + if (strcmp(action->type, aname) == 0) + break; + + if (!action->type) + usage(popt_context, EXIT_FAILURE, _("Unknown action."), + poptGetInvocationName(popt_context)); + + if (action_argc < action->required_action_argc) + help_args(action, popt_context); + + /* FIXME: rewrite this from scratch */ + + if (opt_refresh && strcmp(aname, "open")) + usage(popt_context, EXIT_FAILURE, + _("Parameter --refresh is only allowed with open or refresh commands.\n"), + poptGetInvocationName(popt_context)); + + if (opt_refresh && opt_test_passphrase) + usage(popt_context, EXIT_FAILURE, + _("Options --refresh and --test-passphrase are mutually exclusive.\n"), + poptGetInvocationName(popt_context)); + + if (opt_deferred_remove && strcmp(aname, "close")) + usage(popt_context, EXIT_FAILURE, + _("Option --deferred is allowed only for close command.\n"), + poptGetInvocationName(popt_context)); + + if (opt_shared && (strcmp(aname, "open") || strcmp_or_null(opt_type, "plain"))) + usage(popt_context, EXIT_FAILURE, + _("Option --shared is allowed only for open of plain device.\n"), + poptGetInvocationName(popt_context)); + + if (opt_allow_discards && strcmp(aname, "open")) + usage(popt_context, EXIT_FAILURE, + _("Option --allow-discards is allowed only for open operation.\n"), + poptGetInvocationName(popt_context)); + + if (opt_persistent && strcmp(aname, "open")) + usage(popt_context, EXIT_FAILURE, + _("Option --persistent is allowed only for open operation.\n"), + poptGetInvocationName(popt_context)); + + if (opt_serialize_memory_hard_pbkdf && strcmp(aname, "open")) + usage(popt_context, EXIT_FAILURE, + _("Option --serialize-memory-hard-pbkdf is allowed only for open operation.\n"), + poptGetInvocationName(popt_context)); + + if (opt_persistent && opt_test_passphrase) + usage(popt_context, EXIT_FAILURE, + _("Option --persistent is not allowed with --test-passphrase.\n"), + poptGetInvocationName(popt_context)); + + if (opt_key_size && + strcmp(aname, "reencrypt") && + strcmp(aname, "luksFormat") && + strcmp(aname, "open") && + strcmp(aname, "benchmark") && + strcmp(aname, "luksAddKey")) + usage(popt_context, EXIT_FAILURE, + _("Option --key-size is allowed only for luksFormat, luksAddKey,\n" + "open and benchmark actions. To limit read from keyfile use --keyfile-size=(bytes)."), + poptGetInvocationName(popt_context)); + + if (opt_integrity && strcmp(aname, "luksFormat")) + usage(popt_context, EXIT_FAILURE, + _("Option --integrity is allowed only for luksFormat (LUKS2).\n"), + poptGetInvocationName(popt_context)); + + if (opt_integrity_no_wipe && !opt_integrity) + usage(popt_context, EXIT_FAILURE, + _("Option --integrity-no-wipe" + " can be used only for format action with integrity extension.\n"), + poptGetInvocationName(popt_context)); + + if ((opt_label || opt_subsystem) && strcmp(aname, "luksFormat") && strcmp(aname, "config")) + usage(popt_context, EXIT_FAILURE, + _("Options --label and --subsystem are allowed only for luksFormat and config LUKS2 operations.\n"), + poptGetInvocationName(popt_context)); + + if (opt_test_passphrase && (strcmp(aname, "open") || !opt_type || + (strncmp(opt_type, "luks", 4) && strcmp(opt_type, "tcrypt")))) + usage(popt_context, EXIT_FAILURE, + _("Option --test-passphrase is allowed only for open of LUKS and TCRYPT devices.\n"), + poptGetInvocationName(popt_context)); + + if (opt_key_size % 8 || opt_keyslot_key_size % 8) + usage(popt_context, EXIT_FAILURE, + _("Key size must be a multiple of 8 bits"), + poptGetInvocationName(popt_context)); + + if (!strcmp(aname, "luksKillSlot") && action_argc > 1) + opt_key_slot = atoi(action_argv[1]); + if (opt_key_slot != CRYPT_ANY_SLOT && opt_key_slot < 0) + usage(popt_context, EXIT_FAILURE, _("Key slot is invalid."), + poptGetInvocationName(popt_context)); + + if ((!strcmp(aname, "luksRemoveKey") || + !strcmp(aname, "luksFormat")) && + action_argc > 1) { + if (opt_key_file) + log_err(_("Option --key-file takes precedence over specified key file argument.")); + else + opt_key_file = action_argv[1]; + } + + if (opt_keyfile_size < 0 || opt_new_keyfile_size < 0 || opt_key_size < 0) + usage(popt_context, EXIT_FAILURE, + _("Negative number for option not permitted."), + poptGetInvocationName(popt_context)); + + if (total_keyfiles > 1 && (strcmp_or_null(opt_type, "tcrypt"))) + usage(popt_context, EXIT_FAILURE, _("Only one --key-file argument is allowed."), + poptGetInvocationName(popt_context)); + + if (opt_random && opt_urandom) + usage(popt_context, EXIT_FAILURE, _("Only one of --use-[u]random options is allowed."), + poptGetInvocationName(popt_context)); + + if ((opt_random || opt_urandom) && strcmp(aname, "luksFormat")) + usage(popt_context, EXIT_FAILURE, _("Option --use-[u]random is allowed only for luksFormat."), + poptGetInvocationName(popt_context)); + + if (opt_uuid && strcmp(aname, "luksFormat") && strcmp(aname, "luksUUID")) + usage(popt_context, EXIT_FAILURE, _("Option --uuid is allowed only for luksFormat and luksUUID."), + poptGetInvocationName(popt_context)); + + if (opt_align_payload && strcmp(aname, "luksFormat")) + usage(popt_context, EXIT_FAILURE, _("Option --align-payload is allowed only for luksFormat."), + poptGetInvocationName(popt_context)); + + if ((opt_luks2_metadata_size_str || opt_luks2_keyslots_size_str) && strcmp(aname, "luksFormat") && strcmp(aname, "reencrypt")) + usage(popt_context, EXIT_FAILURE, _("Options --luks2-metadata-size and --opt-luks2-keyslots-size " + "are allowed only for luksFormat with LUKS2."), + poptGetInvocationName(popt_context)); + if (opt_luks2_metadata_size_str && + tools_string_to_size(NULL, opt_luks2_metadata_size_str, &opt_luks2_metadata_size)) + usage(popt_context, EXIT_FAILURE, _("Invalid LUKS2 metadata size specification."), + poptGetInvocationName(popt_context)); + if (opt_luks2_keyslots_size_str && + tools_string_to_size(NULL, opt_luks2_keyslots_size_str, &opt_luks2_keyslots_size)) + usage(popt_context, EXIT_FAILURE, _("Invalid LUKS2 keyslots size specification."), + poptGetInvocationName(popt_context)); + + if (opt_align_payload && opt_offset) + usage(popt_context, EXIT_FAILURE, _("Options --align-payload and --offset cannot be combined."), + poptGetInvocationName(popt_context)); + + if (opt_skip && (strcmp(aname, "open") || + (strcmp_or_null(opt_type, "plain") && strcmp(opt_type, "loopaes")))) + usage(popt_context, EXIT_FAILURE, + _("Option --skip is supported only for open of plain and loopaes devices.\n"), + 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)))) + usage(popt_context, EXIT_FAILURE, + _("Option --offset is supported only for open of plain and loopaes devices, luksFormat and device reencryption.\n"), + 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"))) + usage(popt_context, EXIT_FAILURE, + _("Option --tcrypt-hidden, --tcrypt-system or --tcrypt-backup is supported only for TCRYPT device.\n"), + poptGetInvocationName(popt_context)); + + if (opt_tcrypt_hidden && opt_allow_discards) + usage(popt_context, EXIT_FAILURE, + _("Option --tcrypt-hidden cannot be combined with --allow-discards.\n"), + poptGetInvocationName(popt_context)); + + if (opt_veracrypt && (!opt_type || strcmp(opt_type, "tcrypt"))) + usage(popt_context, EXIT_FAILURE, + _("Option --veracrypt is supported only for TCRYPT device type.\n"), + poptGetInvocationName(popt_context)); + + if (opt_veracrypt_pim != -1) { + if (opt_veracrypt_pim < -1) { + usage(popt_context, EXIT_FAILURE, + _("Invalid argument for parameter --veracrypt-pim supplied.\n"), + poptGetInvocationName(popt_context)); + } else if (!opt_veracrypt) { + usage(popt_context, EXIT_FAILURE, + _("Option --veracrypt-pim is supported only for VeraCrypt compatible devices.\n"), + poptGetInvocationName(popt_context)); + } + } + + if (opt_veracrypt_query_pim) { + if (!opt_veracrypt) { + usage(popt_context, EXIT_FAILURE, + _("Option --veracrypt-query-pim is supported only for VeraCrypt compatible devices.\n"), + poptGetInvocationName(popt_context)); + } else if (opt_veracrypt_pim != -1) { + usage(popt_context, EXIT_FAILURE, + _("The options --veracrypt-pim and --veracrypt-query-pim are mutually exclusive.\n"), + poptGetInvocationName(popt_context)); + } + } + + if (opt_priority && strcmp(opt_priority, "normal") && strcmp(opt_priority, "prefer") && strcmp(opt_priority, "ignore")) + usage(popt_context, EXIT_FAILURE, + _("Option --priority can be only ignore/normal/prefer.\n"), + poptGetInvocationName(popt_context)); + + if (!strcmp(aname, "config") && opt_priority && opt_key_slot == CRYPT_ANY_SLOT) + usage(popt_context, EXIT_FAILURE, + _("Keyslot specification is required.\n"), + poptGetInvocationName(popt_context)); + + if (opt_pbkdf && crypt_parse_pbkdf(opt_pbkdf, &opt_pbkdf)) + usage(popt_context, EXIT_FAILURE, + _("Password-based key derivation function (PBKDF) can be only pbkdf2 or argon2i/argon2id.\n"), + poptGetInvocationName(popt_context)); + + if (opt_pbkdf_iterations && opt_iteration_time) + usage(popt_context, EXIT_FAILURE, + _("PBKDF forced iterations cannot be combined with iteration time option.\n"), + poptGetInvocationName(popt_context)); + + if (opt_sector_size && strcmp(aname, "reencrypt") && strcmp(aname, "luksFormat") && + (strcmp(aname, "open") || strcmp_or_null(opt_type, "plain"))) + usage(popt_context, EXIT_FAILURE, + _("Sector size option is not supported for this command.\n"), + poptGetInvocationName(popt_context)); + + if (opt_sector_size && (opt_sector_size < SECTOR_SIZE || opt_sector_size > MAX_SECTOR_SIZE || + (opt_sector_size & (opt_sector_size - 1)))) + usage(popt_context, EXIT_FAILURE, + _("Unsupported encryption sector size.\n"), + poptGetInvocationName(popt_context)); + + if (opt_unbound && !opt_key_size) + usage(popt_context, EXIT_FAILURE, + _("Key size is required with --unbound option.\n"), + poptGetInvocationName(popt_context)); + + if (opt_unbound && strcmp(aname, "luksAddKey")) + usage(popt_context, EXIT_FAILURE, + _("Option --unbound may be used only with luksAddKey action.\n"), + poptGetInvocationName(popt_context)); + + if (opt_refresh && strcmp(aname, "open")) + usage(popt_context, EXIT_FAILURE, + _("Option --refresh may be used only with open action.\n"), + poptGetInvocationName(popt_context)); + + if (opt_debug || opt_debug_json) { + opt_debug = 1; + opt_verbose = 1; + crypt_set_debug_level(opt_debug_json? CRYPT_DEBUG_JSON : CRYPT_DEBUG_ALL); + dbg_version_and_cmd(argc, argv); + } + + if (opt_disable_locks && crypt_metadata_locking(NULL, 0)) { + log_std(_("Cannot disable metadata locking.\n")); + poptFreeContext(popt_context); + exit(EXIT_FAILURE); + } + + if (opt_disable_keyring) + (void) crypt_volume_key_keyring(NULL, 0); + + if (opt_hotzone_size_str && + (tools_string_to_size(NULL, opt_hotzone_size_str, &opt_hotzone_size) || !opt_hotzone_size)) + usage(popt_context, EXIT_FAILURE, _("Invalid max reencryption hotzone size specification."), + poptGetInvocationName(popt_context)); + + if (!opt_hotzone_size && opt_resilience_mode && !strcmp(opt_resilience_mode, "none")) + opt_hotzone_size = 50 * 1024 * 1024; + + if (opt_reduce_size_str && + tools_string_to_size(NULL, opt_reduce_size_str, &opt_reduce_size)) + usage(popt_context, EXIT_FAILURE, _("Invalid device size specification."), + poptGetInvocationName(popt_context)); + if (opt_reduce_size > 1024 * 1024 * 1024) + usage(popt_context, EXIT_FAILURE, _("Maximum device reduce size is 1 GiB."), + poptGetInvocationName(popt_context)); + if (opt_reduce_size % SECTOR_SIZE) + usage(popt_context, EXIT_FAILURE, _("Reduce size must be multiple of 512 bytes sector."), + poptGetInvocationName(popt_context)); + + if (opt_device_size_str && + tools_string_to_size(NULL, opt_device_size_str, &opt_device_size)) + usage(popt_context, EXIT_FAILURE, _("Invalid data size specification."), + poptGetInvocationName(popt_context)); + + opt_data_shift = -(int64_t)opt_reduce_size; + if (opt_data_shift > 0) + usage(popt_context, EXIT_FAILURE, _("Reduce size overflow."), + poptGetInvocationName(popt_context)); + + if (opt_decrypt && !opt_header_device) + usage(popt_context, EXIT_FAILURE, _("LUKS2 decryption requires option --header."), + poptGetInvocationName(popt_context)); + + if (opt_device_size % SECTOR_SIZE) + usage(popt_context, EXIT_FAILURE, _("Device size must be multiple of 512 bytes sector."), + poptGetInvocationName(popt_context)); + + if (opt_data_shift && opt_device_size) + usage(popt_context, EXIT_FAILURE, _("Options --reduce-device-size and --data-size cannot be combined."), + poptGetInvocationName(popt_context)); + + if (opt_device_size && opt_size) + usage(popt_context, EXIT_FAILURE, _("Options --device-size and --size cannot be combined."), + poptGetInvocationName(popt_context)); + + r = run_action(action); + poptFreeContext(popt_context); + return r; +} diff --git a/src/cryptsetup.h b/src/cryptsetup.h new file mode 100644 index 0000000..c32536a --- /dev/null +++ b/src/cryptsetup.h @@ -0,0 +1,125 @@ +/* + * cryptsetup - setup cryptographic volumes for dm-crypt + * + * Copyright (C) 2004 Jana Saout + * Copyright (C) 2004-2007 Clemens Fruhwirth + * Copyright (C) 2009-2019 Red Hat, Inc. All rights reserved. + * Copyright (C) 2009-2019 Milan Broz + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#ifndef CRYPTSETUP_H +#define CRYPTSETUP_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "lib/nls.h" +#include "lib/utils_crypt.h" +#include "lib/utils_loop.h" +#include "lib/utils_fips.h" +#include "lib/utils_io.h" +#include "lib/utils_blkid.h" + +#include "libcryptsetup.h" + +#define CONST_CAST(x) (x)(uintptr_t) +#define DEFAULT_CIPHER(type) (DEFAULT_##type##_CIPHER "-" DEFAULT_##type##_MODE) +#define SECTOR_SIZE 512 +#define MAX_SECTOR_SIZE 4096 +#define ROUND_SECTOR(x) (((x) + SECTOR_SIZE - 1) / SECTOR_SIZE) + +#define DEFAULT_WIPE_BLOCK 1048576 /* 1 MiB */ + +extern int opt_debug; +extern int opt_debug_json; +extern int opt_verbose; +extern int opt_batch_mode; +extern int opt_force_password; +extern int opt_progress_frequency; + +/* Common tools */ +void clogger(struct crypt_device *cd, int level, const char *file, int line, + const char *format, ...) __attribute__ ((format (printf, 5, 6))); +void tool_log(int level, const char *msg, void *usrptr __attribute__((unused))); +void quiet_log(int level, const char *msg, void *usrptr); + +int yesDialog(const char *msg, void *usrptr); +int noDialog(const char *msg, void *usrptr); +void show_status(int errcode); +const char *uuid_or_device(const char *spec); +__attribute__ ((noreturn)) \ +void usage(poptContext popt_context, int exitcode, const char *error, const char *more); +void dbg_version_and_cmd(int argc, const char **argv); +int translate_errno(int r); + +typedef enum { CREATED, UNLOCKED, REMOVED } crypt_object_op; +void tools_keyslot_msg(int keyslot, crypt_object_op op); +void tools_token_msg(int token, crypt_object_op op); + +extern volatile int quit; +void set_int_block(int block); +void set_int_handler(int block); +void check_signal(int *r); +int tools_signals_blocked(void); + +int tools_get_key(const char *prompt, + char **key, size_t *key_size, + uint64_t keyfile_offset, size_t keyfile_size_max, + const char *key_file, + int timeout, int verify, int pwquality, + struct crypt_device *cd); +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); + +int tools_wipe_progress(uint64_t size, uint64_t offset, void *usrptr); +int tools_reencrypt_progress(uint64_t size, uint64_t offset, void *usrptr); + +int tools_read_mk(const char *file, char **key, int keysize); +int tools_write_mk(const char *file, const char *key, int keysize); + +int tools_read_json_file(struct crypt_device *cd, const char *file, char **json, size_t *json_size); +int tools_write_json_file(struct crypt_device *cd, const char *file, const char *json); + +int tools_detect_signatures(const char *device, int ignore_luks, size_t *count); +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); + +/* 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) +#define log_verbose(x...) clogger(NULL, CRYPT_LOG_VERBOSE, __FILE__, __LINE__, x) +#define log_err(x...) clogger(NULL, CRYPT_LOG_ERROR, __FILE__, __LINE__, x) + +#endif /* CRYPTSETUP_H */ diff --git a/src/cryptsetup_reencrypt.c b/src/cryptsetup_reencrypt.c new file mode 100644 index 0000000..9c01b33 --- /dev/null +++ b/src/cryptsetup_reencrypt.c @@ -0,0 +1,1755 @@ +/* + * cryptsetup-reencrypt - crypt utility for offline re-encryption + * + * Copyright (C) 2012-2019 Red Hat, Inc. All rights reserved. + * Copyright (C) 2012-2019 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 + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#include "cryptsetup.h" +#include +#include +#include +#include + +#define PACKAGE_REENC "cryptsetup-reencrypt" + +#define NO_UUID "cafecafe-cafe-cafe-cafe-cafecafeeeee" + +static const char *opt_cipher = NULL; +static const char *opt_hash = NULL; +static const char *opt_key_file = NULL; +static const char *opt_master_key_file = NULL; +static const char *opt_uuid = NULL; +static const char *opt_type = "luks"; +static 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; +static int opt_random = 0; +static int opt_urandom = 0; +static int opt_bsize = 4; +static int opt_directio = 0; +static int opt_fsync = 0; +static int opt_write_log = 0; +static int opt_tries = 3; +static int opt_key_slot = CRYPT_ANY_SLOT; +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; + +#define MAX_SLOT 32 +#define MAX_TOKEN 32 +struct reenc_ctx { + char *device; + char *device_header; + char *device_uuid; + const char *type; + uint64_t device_size; /* overridden by parameter */ + uint64_t device_size_new_real; + uint64_t device_size_org_real; + uint64_t device_offset; + uint64_t device_shift; + uint64_t data_offset; + + unsigned int stained:1; + unsigned int in_progress:1; + enum { FORWARD = 0, BACKWARD = 1 } reencrypt_direction; + enum { REENCRYPT = 0, ENCRYPT = 1, DECRYPT = 2 } reencrypt_mode; + + char header_file_org[PATH_MAX]; + char header_file_tmp[PATH_MAX]; + char header_file_new[PATH_MAX]; + char log_file[PATH_MAX]; + + char crypt_path_org[PATH_MAX]; + char crypt_path_new[PATH_MAX]; + int log_fd; + char log_buf[SECTOR_SIZE]; + + struct { + char *password; + size_t passwordLen; + } p[MAX_SLOT]; + int keyslot; + + uint64_t resume_bytes; +}; + +char MAGIC[] = {'L','U','K','S', 0xba, 0xbe}; +char NOMAGIC[] = {'L','U','K','S', 0xde, 0xad}; +int MAGIC_L = 6; + +typedef enum { + MAKE_UNUSABLE, + MAKE_USABLE, + CHECK_UNUSABLE, + CHECK_OPEN, +} header_magic; + +static void _quiet_log(int level, const char *msg, void *usrptr) +{ + if (!opt_debug) + return; + tool_log(level, msg, usrptr); +} + +static int alignment(int fd) +{ + int alignment; + + alignment = fpathconf(fd, _PC_REC_XFER_ALIGN); + if (alignment < 0) + alignment = 4096; + return alignment; +} + +static size_t pagesize(void) +{ + long r = sysconf(_SC_PAGESIZE); + return r < 0 ? 4096 : (size_t)r; +} + +static const char *luksType(const char *type) +{ + if (type && !strcmp(type, "luks2")) + return CRYPT_LUKS2; + + if (type && !strcmp(type, "luks1")) + return CRYPT_LUKS1; + + if (!type || !strcmp(type, "luks")) + return crypt_get_default_type(); + + return NULL; +} + +static const char *hdr_device(const struct reenc_ctx *rc) +{ + return rc->device_header ?: rc->device; +} + +static int set_reencrypt_requirement(const struct reenc_ctx *rc) +{ + uint32_t reqs; + int r = -EINVAL; + struct crypt_device *cd = NULL; + struct crypt_params_integrity ip = { 0 }; + + if (crypt_init(&cd, hdr_device(rc)) || + crypt_load(cd, CRYPT_LUKS2, NULL) || + crypt_persistent_flags_get(cd, CRYPT_FLAGS_REQUIREMENTS, &reqs)) + goto out; + + /* reencrypt already in-progress */ + if (reqs & CRYPT_REQUIREMENT_OFFLINE_REENCRYPT) { + log_err(_("Reencryption already in-progress.")); + goto out; + } + + /* raw integrity info is available since 2.0 */ + if (crypt_get_integrity_info(cd, &ip) || ip.tag_size) { + log_err(_("Reencryption of device with integrity profile is not supported.")); + r = -ENOTSUP; + goto out; + } + + r = crypt_persistent_flags_set(cd, CRYPT_FLAGS_REQUIREMENTS, reqs | CRYPT_REQUIREMENT_OFFLINE_REENCRYPT); +out: + crypt_free(cd); + return r; +} + +/* Depends on the first two fields of LUKS1 header format, magic and version */ +static int device_check(struct reenc_ctx *rc, const char *device, header_magic set_magic) +{ + char *buf = NULL; + int r, devfd; + ssize_t s; + uint16_t version; + size_t buf_size = pagesize(); + + devfd = open(device, O_RDWR | O_EXCL | O_DIRECT); + if (devfd == -1) { + if (errno == EBUSY) { + log_err(_("Cannot exclusively open %s, device in use."), + device); + return -EBUSY; + } + log_err(_("Cannot open device %s."), device); + return -EINVAL; + } + + if (set_magic == CHECK_OPEN) { + r = 0; + goto out; + } + + if (posix_memalign((void *)&buf, alignment(devfd), buf_size)) { + log_err(_("Allocation of aligned memory failed.")); + r = -ENOMEM; + goto out; + } + + s = read(devfd, buf, buf_size); + if (s < 0 || s != (ssize_t)buf_size) { + log_err(_("Cannot read device %s."), device); + r = -EIO; + goto out; + } + + /* Be sure that we do not process new version of header */ + memcpy((void*)&version, &buf[MAGIC_L], sizeof(uint16_t)); + version = ntohs(version); + + if (set_magic == MAKE_UNUSABLE && !memcmp(buf, MAGIC, MAGIC_L) && + version == 1) { + log_verbose(_("Marking LUKS1 device %s unusable."), device); + memcpy(buf, NOMAGIC, MAGIC_L); + r = 0; + } else if (set_magic == MAKE_UNUSABLE && version == 2) { + log_verbose(_("Setting LUKS2 offline reencrypt flag on device %s."), device); + r = set_reencrypt_requirement(rc); + if (!r) + rc->stained = 1; + } else if (set_magic == CHECK_UNUSABLE && version == 1) { + r = memcmp(buf, NOMAGIC, MAGIC_L) ? -EINVAL : 0; + if (!r) + rc->device_uuid = strndup(&buf[0xa8], 40); + goto out; + } else + r = -EINVAL; + + if (!r && version == 1) { + if (lseek(devfd, 0, SEEK_SET) == -1) + goto out; + s = write(devfd, buf, buf_size); + if (s < 0 || s != (ssize_t)buf_size) { + log_err(_("Cannot write device %s."), device); + r = -EIO; + } + if (s > 0 && set_magic == MAKE_UNUSABLE) + rc->stained = 1; + } + if (r) + log_dbg("LUKS signature check failed for %s.", device); +out: + if (buf) + memset(buf, 0, buf_size); + free(buf); + close(devfd); + return r; +} + +static int create_empty_header(const char *new_file) +{ + int fd, r = 0; + + log_dbg("Creating empty file %s of size 4096.", new_file); + + /* coverity[toctou] */ + fd = open(new_file, O_CREAT|O_EXCL|O_WRONLY, S_IRUSR|S_IWUSR); + if (fd == -1 || posix_fallocate(fd, 0, 4096)) + r = -EINVAL; + if (fd >= 0) + close(fd); + + return r; +} + +static int write_log(struct reenc_ctx *rc) +{ + ssize_t r; + + memset(rc->log_buf, 0, SECTOR_SIZE); + snprintf(rc->log_buf, SECTOR_SIZE, "# LUKS reencryption log, DO NOT EDIT OR DELETE.\n" + "version = %d\nUUID = %s\ndirection = %d\nmode = %d\n" + "offset = %" PRIu64 "\nshift = %" PRIu64 "\n# EOF\n", + 2, rc->device_uuid, rc->reencrypt_direction, rc->reencrypt_mode, + rc->device_offset, rc->device_shift); + + if (lseek(rc->log_fd, 0, SEEK_SET) == -1) + return -EIO; + + r = write(rc->log_fd, rc->log_buf, SECTOR_SIZE); + if (r < 0 || r != SECTOR_SIZE) { + log_err(_("Cannot write reencryption log file.")); + return -EIO; + } + + return 0; +} + +static int parse_line_log(struct reenc_ctx *rc, const char *line) +{ + uint64_t u64; + int i; + char s[64]; + + /* whole line is comment */ + if (*line == '#') + return 0; + + if (sscanf(line, "version = %d", &i) == 1) { + if (i < 1 || i > 2) { + log_dbg("Log: Unexpected version = %i", i); + return -EINVAL; + } + } else if (sscanf(line, "UUID = %40s", s) == 1) { + if (!rc->device_uuid || strcmp(rc->device_uuid, s)) { + log_dbg("Log: Unexpected UUID %s", s); + return -EINVAL; + } + } else if (sscanf(line, "direction = %d", &i) == 1) { + log_dbg("Log: direction = %i", i); + rc->reencrypt_direction = i; + } else if (sscanf(line, "offset = %" PRIu64, &u64) == 1) { + log_dbg("Log: offset = %" PRIu64, u64); + rc->device_offset = u64; + } else if (sscanf(line, "shift = %" PRIu64, &u64) == 1) { + log_dbg("Log: shift = %" PRIu64, u64); + rc->device_shift = u64; + } else if (sscanf(line, "mode = %d", &i) == 1) { /* added in v2 */ + log_dbg("Log: mode = %i", i); + rc->reencrypt_mode = i; + if (rc->reencrypt_mode != REENCRYPT && + rc->reencrypt_mode != ENCRYPT && + rc->reencrypt_mode != DECRYPT) + return -EINVAL; + } else + return -EINVAL; + + return 0; +} + +static int parse_log(struct reenc_ctx *rc) +{ + char *start, *end; + ssize_t s; + + s = read(rc->log_fd, rc->log_buf, SECTOR_SIZE); + if (s == -1) { + log_err(_("Cannot read reencryption log file.")); + return -EIO; + } + + rc->log_buf[SECTOR_SIZE - 1] = '\0'; + start = rc->log_buf; + do { + end = strchr(start, '\n'); + if (end) { + *end++ = '\0'; + if (parse_line_log(rc, start)) { + log_err("Wrong log format."); + return -EINVAL; + } + } + + start = end; + } while (start); + + return 0; +} + +static void close_log(struct reenc_ctx *rc) +{ + log_dbg("Closing LUKS reencryption log file %s.", rc->log_file); + if (rc->log_fd != -1) + close(rc->log_fd); +} + +static int open_log(struct reenc_ctx *rc) +{ + int flags = opt_fsync ? O_SYNC : 0; + + rc->log_fd = open(rc->log_file, O_RDWR|O_EXCL|O_CREAT|flags, S_IRUSR|S_IWUSR); + if (rc->log_fd != -1) { + log_dbg("Created LUKS reencryption log file %s.", rc->log_file); + rc->stained = 0; + } else if (errno == EEXIST) { + log_std(_("Log file %s exists, resuming reencryption.\n"), rc->log_file); + rc->log_fd = open(rc->log_file, O_RDWR|flags); + rc->in_progress = 1; + } + + if (rc->log_fd == -1) + return -EINVAL; + + if (!rc->in_progress && write_log(rc) < 0) { + close_log(rc); + return -EIO; + } + + /* Be sure it is correct format */ + return parse_log(rc); +} + +static int activate_luks_headers(struct reenc_ctx *rc) +{ + struct crypt_device *cd = NULL, *cd_new = NULL; + const char *pwd_old, *pwd_new, pwd_empty[] = ""; + size_t pwd_old_len, pwd_new_len; + int r; + + log_dbg("Activating LUKS devices from headers."); + + /* Never use real password for empty header processing */ + if (rc->reencrypt_mode == REENCRYPT) { + pwd_old = rc->p[rc->keyslot].password; + pwd_old_len = rc->p[rc->keyslot].passwordLen; + pwd_new = pwd_old; + pwd_new_len = pwd_old_len; + } else if (rc->reencrypt_mode == DECRYPT) { + pwd_old = rc->p[rc->keyslot].password; + pwd_old_len = rc->p[rc->keyslot].passwordLen; + pwd_new = pwd_empty; + pwd_new_len = 0; + } else if (rc->reencrypt_mode == ENCRYPT) { + pwd_old = pwd_empty; + pwd_old_len = 0; + pwd_new = rc->p[rc->keyslot].password; + pwd_new_len = rc->p[rc->keyslot].passwordLen; + } else + return -EINVAL; + + if ((r = crypt_init_data_device(&cd, rc->header_file_org, rc->device)) || + (r = crypt_load(cd, CRYPT_LUKS, NULL))) + goto out; + + log_verbose(_("Activating temporary device using old LUKS header.")); + if ((r = crypt_activate_by_passphrase(cd, rc->header_file_org, + opt_key_slot, pwd_old, pwd_old_len, + CRYPT_ACTIVATE_READONLY|CRYPT_ACTIVATE_PRIVATE)) < 0) + goto out; + + if ((r = crypt_init_data_device(&cd_new, rc->header_file_new, rc->device)) || + (r = crypt_load(cd_new, CRYPT_LUKS, NULL))) + goto out; + + log_verbose(_("Activating temporary device using new LUKS header.")); + if ((r = crypt_activate_by_passphrase(cd_new, rc->header_file_new, + opt_key_slot, pwd_new, pwd_new_len, + CRYPT_ACTIVATE_SHARED|CRYPT_ACTIVATE_PRIVATE)) < 0) + goto out; + r = 0; +out: + crypt_free(cd); + crypt_free(cd_new); + if (r < 0) + log_err(_("Activation of temporary devices failed.")); + return r; +} + +static int set_pbkdf_params(struct crypt_device *cd, const char *dev_type) +{ + const struct crypt_pbkdf_type *pbkdf_default; + struct crypt_pbkdf_type pbkdf = {}; + + pbkdf_default = crypt_get_pbkdf_default(dev_type); + if (!pbkdf_default) + return -EINVAL; + + pbkdf.type = opt_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)) { + pbkdf.max_memory_kb = (uint32_t)opt_pbkdf_memory ?: pbkdf_default->max_memory_kb; + pbkdf.parallel_threads = (uint32_t)opt_pbkdf_parallel ?: pbkdf_default->parallel_threads; + } + + if (opt_pbkdf_iterations) { + pbkdf.iterations = opt_pbkdf_iterations; + pbkdf.flags |= CRYPT_PBKDF_NO_BENCHMARK; + } + + return crypt_set_pbkdf_type(cd, &pbkdf); +} + +static int create_new_keyslot(struct reenc_ctx *rc, int keyslot, + struct crypt_device *cd_old, + struct crypt_device *cd_new) +{ + int r; + char *key = NULL; + size_t key_size; + + if (cd_old && crypt_keyslot_status(cd_old, keyslot) == CRYPT_SLOT_UNBOUND) { + key_size = 4096; + key = crypt_safe_alloc(key_size); + if (!key) + return -ENOMEM; + r = crypt_volume_key_get(cd_old, keyslot, key, &key_size, + rc->p[keyslot].password, rc->p[keyslot].passwordLen); + if (r == keyslot) { + r = crypt_keyslot_add_by_key(cd_new, keyslot, key, key_size, + rc->p[keyslot].password, rc->p[keyslot].passwordLen, + CRYPT_VOLUME_KEY_NO_SEGMENT); + } else + r = -EINVAL; + crypt_safe_free(key); + } else + r = crypt_keyslot_add_by_volume_key(cd_new, keyslot, NULL, 0, + rc->p[keyslot].password, rc->p[keyslot].passwordLen); + + return r; +} + +static int create_new_header(struct reenc_ctx *rc, struct crypt_device *cd_old, + const char *cipher, const char *cipher_mode, + const char *uuid, + const char *key, int key_size, + const char *type, + uint64_t metadata_size, + uint64_t keyslots_size, + void *params) +{ + struct crypt_device *cd_new = NULL; + int i, r; + + if ((r = crypt_init(&cd_new, rc->header_file_new))) + goto out; + + if (opt_random) + crypt_set_rng_type(cd_new, CRYPT_RNG_RANDOM); + else if (opt_urandom) + crypt_set_rng_type(cd_new, CRYPT_RNG_URANDOM); + + r = set_pbkdf_params(cd_new, type); + if (r) { + log_err(_("Failed to set pbkdf parameters.")); + goto out; + } + + r = crypt_set_data_offset(cd_new, rc->data_offset); + if (r) { + log_err(_("Failed to set data offset.")); + goto out; + } + + r = crypt_set_metadata_size(cd_new, metadata_size, keyslots_size); + if (r) { + log_err(_("Failed to set metadata size.")); + goto out; + } + + r = crypt_format(cd_new, type, cipher, cipher_mode, uuid, key, key_size, params); + check_signal(&r); + if (r < 0) + goto out; + log_verbose(_("New LUKS header for device %s created."), rc->device); + + for (i = 0; i < crypt_keyslot_max(type); i++) { + if (!rc->p[i].password) + continue; + + r = create_new_keyslot(rc, i, cd_old, cd_new); + check_signal(&r); + if (r < 0) + goto out; + tools_keyslot_msg(r, CREATED); + r = 0; + } +out: + crypt_free(cd_new); + return r; +} + +static int isLUKS2(const char *type) +{ + return (type && !strcmp(type, CRYPT_LUKS2)); +} + +static int luks2_metadata_copy(struct reenc_ctx *rc) +{ + const char *json, *type; + crypt_token_info ti; + uint32_t flags; + int i, r = -EINVAL; + struct crypt_device *cd_old = NULL, *cd_new = NULL; + + if (crypt_init(&cd_old, rc->header_file_tmp) || + crypt_load(cd_old, CRYPT_LUKS2, NULL)) + goto out; + + if (crypt_init(&cd_new, rc->header_file_new) || + crypt_load(cd_new, CRYPT_LUKS2, NULL)) + goto out; + + /* + * we have to erase keyslots missing in new header so that we can + * transfer tokens from old header to new one + */ + for (i = 0; i < crypt_keyslot_max(CRYPT_LUKS2); i++) + if (!rc->p[i].password && crypt_keyslot_status(cd_old, i) == CRYPT_SLOT_ACTIVE) { + r = crypt_keyslot_destroy(cd_old, i); + if (r < 0) + goto out; + } + + for (i = 0; i < MAX_TOKEN; i++) { + ti = crypt_token_status(cd_old, i, &type); + switch (ti) { + case CRYPT_TOKEN_INVALID: + log_dbg("Internal error."); + r = -EINVAL; + goto out; + case CRYPT_TOKEN_INACTIVE: + break; + case CRYPT_TOKEN_INTERNAL_UNKNOWN: + log_err(_("This version of cryptsetup-reencrypt can't handle new internal token type %s."), type); + r = -EINVAL; + goto out; + case CRYPT_TOKEN_INTERNAL: + /* fallthrough */ + case CRYPT_TOKEN_EXTERNAL: + /* fallthrough */ + case CRYPT_TOKEN_EXTERNAL_UNKNOWN: + if (crypt_token_json_get(cd_old, i, &json) != i) { + log_dbg("Failed to get %s token (%d).", type, i); + r = -EINVAL; + goto out; + } + if (crypt_token_json_set(cd_new, i, json) != i) { + log_dbg("Failed to create %s token (%d).", type, i); + r = -EINVAL; + goto out; + } + } + } + + if ((r = crypt_persistent_flags_get(cd_old, CRYPT_FLAGS_ACTIVATION, &flags))) { + log_err(_("Failed to read activation flags from backup header.")); + goto out; + } + if ((r = crypt_persistent_flags_set(cd_new, CRYPT_FLAGS_ACTIVATION, flags))) { + log_err(_("Failed to write activation flags to new header.")); + goto out; + } + if ((r = crypt_persistent_flags_get(cd_old, CRYPT_FLAGS_REQUIREMENTS, &flags))) { + log_err(_("Failed to read requirements from backup header.")); + goto out; + } + if ((r = crypt_persistent_flags_set(cd_new, CRYPT_FLAGS_REQUIREMENTS, flags))) + log_err(_("Failed to read requirements from backup header.")); +out: + crypt_free(cd_old); + crypt_free(cd_new); + unlink(rc->header_file_tmp); + + return r; +} + +static int backup_luks_headers(struct reenc_ctx *rc) +{ + struct crypt_device *cd = NULL; + struct crypt_params_luks1 params = {0}; + struct crypt_params_luks2 params2 = {0}; + struct stat st; + char cipher [MAX_CIPHER_LEN], cipher_mode[MAX_CIPHER_LEN]; + char *key = NULL; + size_t key_size; + uint64_t mdata_size = 0, keyslots_size = 0; + int r; + + log_dbg("Creating LUKS header backup for device %s.", hdr_device(rc)); + + if ((r = crypt_init(&cd, hdr_device(rc))) || + (r = crypt_load(cd, CRYPT_LUKS, NULL))) + goto out; + + if ((r = crypt_header_backup(cd, CRYPT_LUKS, rc->header_file_org))) + goto out; + if (isLUKS2(rc->type)) { + if ((r = crypt_header_backup(cd, CRYPT_LUKS2, rc->header_file_tmp))) + goto out; + if ((r = stat(rc->header_file_tmp, &st))) + goto out; + /* coverity[toctou] */ + if ((r = chmod(rc->header_file_tmp, st.st_mode | S_IWUSR))) + goto out; + } + log_verbose(_("%s header backup of device %s created."), isLUKS2(rc->type) ? "LUKS2" : "LUKS1", rc->device); + + /* For decrypt, new header will be fake one, so we are done here. */ + if (rc->reencrypt_mode == DECRYPT) + goto out; + + rc->data_offset = crypt_get_data_offset(cd) + ROUND_SECTOR(opt_reduce_size); + + if ((r = create_empty_header(rc->header_file_new))) + goto out; + + params.hash = opt_hash ?: DEFAULT_LUKS1_HASH; + params2.data_device = params.data_device = rc->device; + params2.sector_size = crypt_get_sector_size(cd); + + if (opt_cipher) { + r = crypt_parse_name_and_mode(opt_cipher, cipher, NULL, cipher_mode); + if (r < 0) { + log_err(_("No known cipher specification pattern detected.")); + goto out; + } + } + + key_size = opt_key_size ? opt_key_size / 8 : crypt_get_volume_key_size(cd); + + if (opt_keep_key) { + log_dbg("Keeping key from old header."); + key_size = crypt_get_volume_key_size(cd); + key = crypt_safe_alloc(key_size); + if (!key) { + r = -ENOMEM; + goto out; + } + r = crypt_volume_key_get(cd, CRYPT_ANY_SLOT, key, &key_size, + rc->p[rc->keyslot].password, rc->p[rc->keyslot].passwordLen); + } else if (opt_master_key_file) { + log_dbg("Loading new key from file."); + r = tools_read_mk(opt_master_key_file, &key, key_size); + } + + if (r < 0) + goto out; + + if (isLUKS2(crypt_get_type(cd)) && crypt_get_metadata_size(cd, &mdata_size, &keyslots_size)) + goto out; + + r = create_new_header(rc, cd, + opt_cipher ? cipher : crypt_get_cipher(cd), + opt_cipher ? cipher_mode : crypt_get_cipher_mode(cd), + crypt_get_uuid(cd), + key, + key_size, + rc->type, + mdata_size, + keyslots_size, + isLUKS2(rc->type) ? (void*)¶ms2 : (void*)¶ms); + + if (!r && isLUKS2(rc->type)) + r = luks2_metadata_copy(rc); +out: + crypt_free(cd); + crypt_safe_free(key); + if (r) + log_err(_("Creation of LUKS backup headers failed.")); + return r; +} + +/* Create fake header for original device */ +static int backup_fake_header(struct reenc_ctx *rc) +{ + struct crypt_device *cd_new = NULL; + struct crypt_params_luks1 params = {0}; + struct crypt_params_luks2 params2 = {0}; + char cipher [MAX_CIPHER_LEN], cipher_mode[MAX_CIPHER_LEN]; + const char *header_file_fake; + int r; + + log_dbg("Creating fake (cipher_null) header for %s device.", + (rc->reencrypt_mode == DECRYPT) ? "new" : "original"); + + header_file_fake = (rc->reencrypt_mode == DECRYPT) ? rc->header_file_new : rc->header_file_org; + + if (!opt_key_size) + opt_key_size = DEFAULT_LUKS1_KEYBITS; + + if (opt_cipher) { + r = crypt_parse_name_and_mode(opt_cipher, cipher, NULL, cipher_mode); + if (r < 0) { + log_err(_("No known cipher specification pattern detected.")); + goto out; + } + } + + r = create_empty_header(header_file_fake); + if (r < 0) + return r; + + params.hash = opt_hash ?: DEFAULT_LUKS1_HASH; + params2.data_alignment = params.data_alignment = 0; + params2.data_device = params.data_device = rc->device; + params2.sector_size = crypt_get_sector_size(NULL); + params2.pbkdf = crypt_get_pbkdf_default(CRYPT_LUKS2); + + r = crypt_init(&cd_new, header_file_fake); + if (r < 0) + return r; + + r = crypt_format(cd_new, CRYPT_LUKS1, "cipher_null", "ecb", + NO_UUID, NULL, opt_key_size / 8, ¶ms); + check_signal(&r); + if (r < 0) + goto out; + + r = crypt_keyslot_add_by_volume_key(cd_new, rc->keyslot, NULL, 0, + rc->p[rc->keyslot].password, rc->p[rc->keyslot].passwordLen); + check_signal(&r); + if (r < 0) + goto out; + + /* The real header is backup header created in backup_luks_headers() */ + if (rc->reencrypt_mode == DECRYPT) { + r = 0; + goto out; + } + + r = create_empty_header(rc->header_file_new); + if (r < 0) + goto out; + + params2.data_alignment = params.data_alignment = ROUND_SECTOR(opt_reduce_size); + r = create_new_header(rc, NULL, + opt_cipher ? cipher : DEFAULT_LUKS1_CIPHER, + opt_cipher ? cipher_mode : DEFAULT_LUKS1_MODE, + NULL, NULL, + (opt_key_size ? opt_key_size : DEFAULT_LUKS1_KEYBITS) / 8, + rc->type, + 0, + 0, + isLUKS2(rc->type) ? (void*)¶ms2 : (void*)¶ms); +out: + crypt_free(cd_new); + return r; +} + +static void remove_headers(struct reenc_ctx *rc) +{ + struct crypt_device *cd = NULL; + + log_dbg("Removing headers."); + + if (crypt_init(&cd, NULL)) + return; + crypt_set_log_callback(cd, _quiet_log, NULL); + if (*rc->header_file_org) + (void)crypt_deactivate(cd, rc->header_file_org); + if (*rc->header_file_new) + (void)crypt_deactivate(cd, rc->header_file_new); + crypt_free(cd); +} + +static int restore_luks_header(struct reenc_ctx *rc) +{ + struct stat st; + struct crypt_device *cd = NULL; + int fd, r; + + log_dbg("Restoring header for %s from %s.", hdr_device(rc), rc->header_file_new); + + /* + * For new encryption and new detached header in file just move it. + * For existing file try to ensure we have preallocated space for restore. + */ + if (opt_new && rc->device_header) { + r = stat(rc->device_header, &st); + if (r == -1) { + r = rename(rc->header_file_new, rc->device_header); + goto out; + } else if ((st.st_mode & S_IFMT) == S_IFREG && + stat(rc->header_file_new, &st) != -1) { + /* coverity[toctou] */ + fd = open(rc->device_header, O_WRONLY); + if (fd != -1) { + if (posix_fallocate(fd, 0, st.st_size)) {}; + close(fd); + } + } + } + + r = crypt_init(&cd, hdr_device(rc)); + if (r == 0) { + r = crypt_header_restore(cd, rc->type, rc->header_file_new); + } + + crypt_free(cd); +out: + if (r) + log_err(_("Cannot restore %s header on device %s."), isLUKS2(rc->type) ? "LUKS2" : "LUKS1", hdr_device(rc)); + else { + log_verbose(_("%s header on device %s restored."), isLUKS2(rc->type) ? "LUKS2" : "LUKS1", hdr_device(rc)); + rc->stained = 0; + } + return r; +} + +static ssize_t read_buf(int fd, void *buf, size_t count) +{ + size_t read_size = 0; + ssize_t s; + + do { + /* This expects that partial read is aligned in buffer */ + s = read(fd, buf, count - read_size); + if (s == -1 && errno != EINTR) + return s; + if (s == 0) + return (ssize_t)read_size; + if (s > 0) { + if (s != (ssize_t)count) + log_dbg("Partial read %zd / %zu.", s, count); + read_size += (size_t)s; + buf = (uint8_t*)buf + s; + } + } while (read_size != count); + + return (ssize_t)count; +} + +static int copy_data_forward(struct reenc_ctx *rc, int fd_old, int fd_new, + size_t block_size, void *buf, uint64_t *bytes) +{ + ssize_t s1, s2; + + log_dbg("Reencrypting in forward direction."); + + if (lseek64(fd_old, rc->device_offset, SEEK_SET) < 0 || + lseek64(fd_new, rc->device_offset, SEEK_SET) < 0) { + log_err(_("Cannot seek to device offset.")); + return -EIO; + } + + rc->resume_bytes = *bytes = rc->device_offset; + + tools_reencrypt_progress(rc->device_size, *bytes, NULL); + + if (write_log(rc) < 0) + return -EIO; + + while (!quit && rc->device_offset < rc->device_size) { + s1 = read_buf(fd_old, buf, block_size); + if (s1 < 0 || ((size_t)s1 != block_size && + (rc->device_offset + s1) != rc->device_size)) { + log_dbg("Read error, expecting %zu, got %zd.", + block_size, s1); + return -EIO; + } + + /* If device_size is forced, never write more than limit */ + if ((s1 + rc->device_offset) > rc->device_size) + s1 = rc->device_size - rc->device_offset; + + s2 = write(fd_new, buf, s1); + if (s2 < 0) { + log_dbg("Write error, expecting %zu, got %zd.", + block_size, s2); + return -EIO; + } + + rc->device_offset += s1; + if (opt_write_log && write_log(rc) < 0) + return -EIO; + + if (opt_fsync && fsync(fd_new) < 0) { + log_dbg("Write error, fsync."); + return -EIO; + } + + *bytes += (uint64_t)s2; + + tools_reencrypt_progress(rc->device_size, *bytes, NULL); + } + + return quit ? -EAGAIN : 0; +} + +static int copy_data_backward(struct reenc_ctx *rc, int fd_old, int fd_new, + size_t block_size, void *buf, uint64_t *bytes) +{ + ssize_t s1, s2, working_block; + off64_t working_offset; + + log_dbg("Reencrypting in backward direction."); + + if (!rc->in_progress) { + rc->device_offset = rc->device_size; + rc->resume_bytes = 0; + *bytes = 0; + } else { + rc->resume_bytes = rc->device_size - rc->device_offset; + *bytes = rc->resume_bytes; + } + + tools_reencrypt_progress(rc->device_size, *bytes, NULL); + + if (write_log(rc) < 0) + return -EIO; + + /* dirty the device during ENCRYPT mode */ + rc->stained = 1; + + while (!quit && rc->device_offset) { + if (rc->device_offset < block_size) { + working_offset = 0; + working_block = rc->device_offset; + } else { + working_offset = rc->device_offset - block_size; + working_block = block_size; + } + + if (lseek64(fd_old, working_offset, SEEK_SET) < 0 || + lseek64(fd_new, working_offset, SEEK_SET) < 0) { + log_err(_("Cannot seek to device offset.")); + return -EIO; + } + + s1 = read_buf(fd_old, buf, working_block); + if (s1 < 0 || (s1 != working_block)) { + log_dbg("Read error, expecting %zu, got %zd.", + block_size, s1); + return -EIO; + } + + s2 = write(fd_new, buf, working_block); + if (s2 < 0) { + log_dbg("Write error, expecting %zu, got %zd.", + block_size, s2); + return -EIO; + } + + rc->device_offset -= s1; + if (opt_write_log && write_log(rc) < 0) + return -EIO; + + if (opt_fsync && fsync(fd_new) < 0) { + log_dbg("Write error, fsync."); + return -EIO; + } + + *bytes += (uint64_t)s2; + + tools_reencrypt_progress(rc->device_size, *bytes, NULL); + } + + return quit ? -EAGAIN : 0; +} + +static void zero_rest_of_device(int fd, size_t block_size, void *buf, + uint64_t *bytes, uint64_t offset) +{ + ssize_t s1, s2; + + log_dbg("Zeroing rest of device."); + + if (lseek64(fd, offset, SEEK_SET) < 0) { + log_dbg("Cannot seek to device offset."); + return; + } + + memset(buf, 0, block_size); + s1 = block_size; + + while (!quit && *bytes) { + if (*bytes < (uint64_t)s1) + s1 = *bytes; + + s2 = write(fd, buf, s1); + if (s2 != s1) { + log_dbg("Write error, expecting %zd, got %zd.", + s1, s2); + return; + } + + if (opt_fsync && fsync(fd) < 0) { + log_dbg("Write error, fsync."); + return; + } + + *bytes -= s2; + } +} + +static int copy_data(struct reenc_ctx *rc) +{ + size_t block_size = opt_bsize * 1024 * 1024; + int fd_old = -1, fd_new = -1; + int r = -EINVAL; + void *buf = NULL; + uint64_t bytes = 0; + + log_dbg("Data copy preparation."); + + fd_old = open(rc->crypt_path_org, O_RDONLY | (opt_directio ? O_DIRECT : 0)); + if (fd_old == -1) { + log_err(_("Cannot open temporary LUKS device.")); + goto out; + } + + fd_new = open(rc->crypt_path_new, O_WRONLY | (opt_directio ? O_DIRECT : 0)); + if (fd_new == -1) { + log_err(_("Cannot open temporary LUKS device.")); + goto out; + } + + if (ioctl(fd_old, BLKGETSIZE64, &rc->device_size_org_real) < 0) { + log_err(_("Cannot get device size.")); + goto out; + } + + if (ioctl(fd_new, BLKGETSIZE64, &rc->device_size_new_real) < 0) { + log_err(_("Cannot get device size.")); + goto out; + } + + if (opt_device_size) + rc->device_size = opt_device_size; + else if (rc->reencrypt_mode == DECRYPT) + rc->device_size = rc->device_size_org_real; + else + rc->device_size = rc->device_size_new_real; + + if (posix_memalign((void *)&buf, alignment(fd_new), block_size)) { + log_err(_("Allocation of aligned memory failed.")); + r = -ENOMEM; + goto out; + } + + set_int_handler(0); + + if (rc->reencrypt_direction == FORWARD) + r = copy_data_forward(rc, fd_old, fd_new, block_size, buf, &bytes); + else + r = copy_data_backward(rc, fd_old, fd_new, block_size, buf, &bytes); + + /* Zero (wipe) rest of now plain-only device when decrypting. + * (To not leave any sign of encryption here.) */ + if (!r && rc->reencrypt_mode == DECRYPT && + rc->device_size_new_real > rc->device_size_org_real) { + bytes = rc->device_size_new_real - rc->device_size_org_real; + zero_rest_of_device(fd_new, block_size, buf, &bytes, rc->device_size_org_real); + } + + set_int_block(1); + + if (r < 0 && r != -EAGAIN) + log_err(_("IO error during reencryption.")); + + (void)write_log(rc); +out: + if (fd_old != -1) + close(fd_old); + if (fd_new != -1) + close(fd_new); + free(buf); + return r; +} + +static int initialize_uuid(struct reenc_ctx *rc) +{ + struct crypt_device *cd = NULL; + int r; + uuid_t device_uuid; + + log_dbg("Initialising UUID."); + + if (opt_new) { + rc->device_uuid = strdup(NO_UUID); + rc->type = luksType(opt_type); + return 0; + } + + if (opt_decrypt && opt_uuid) { + r = uuid_parse(opt_uuid, device_uuid); + if (!r) + rc->device_uuid = strdup(opt_uuid); + else + log_err(_("Provided UUID is invalid.")); + + return r; + } + + /* Try to load LUKS from device */ + if ((r = crypt_init(&cd, hdr_device(rc)))) + return r; + crypt_set_log_callback(cd, _quiet_log, NULL); + r = crypt_load(cd, CRYPT_LUKS, NULL); + if (!r) + rc->device_uuid = strdup(crypt_get_uuid(cd)); + else + /* Reencryption already in progress - magic header? */ + r = device_check(rc, hdr_device(rc), CHECK_UNUSABLE); + + if (!r) + rc->type = isLUKS2(crypt_get_type(cd)) ? CRYPT_LUKS2 : CRYPT_LUKS1; + + crypt_free(cd); + return r; +} + +static int init_passphrase1(struct reenc_ctx *rc, struct crypt_device *cd, + const char *msg, int slot_to_check, int check, int verify) +{ + crypt_keyslot_info ki; + char *password; + int r = -EINVAL, retry_count; + size_t passwordLen; + + /* mode ENCRYPT call this without header */ + if (cd && slot_to_check != CRYPT_ANY_SLOT) { + ki = crypt_keyslot_status(cd, slot_to_check); + if (ki < CRYPT_SLOT_ACTIVE) + return -ENOENT; + } else + ki = CRYPT_SLOT_ACTIVE; + + retry_count = opt_tries ?: 1; + while (retry_count--) { + r = tools_get_key(msg, &password, &passwordLen, 0, 0, + NULL /*opt_key_file*/, 0, verify, 0 /*pwquality*/, cd); + if (r < 0) + return r; + if (quit) { + crypt_safe_free(password); + password = NULL; + passwordLen = 0; + return -EAGAIN; + } + + if (check) + r = crypt_activate_by_passphrase(cd, NULL, slot_to_check, + password, passwordLen, CRYPT_ACTIVATE_ALLOW_UNBOUND_KEY); + else + r = (slot_to_check == CRYPT_ANY_SLOT) ? 0 : slot_to_check; + + if (r < 0) { + crypt_safe_free(password); + password = NULL; + passwordLen = 0; + } + if (r < 0 && r != -EPERM) + return r; + + if (r >= 0) { + tools_keyslot_msg(r, UNLOCKED); + rc->p[r].password = password; + rc->p[r].passwordLen = passwordLen; + if (ki != CRYPT_SLOT_UNBOUND) + rc->keyslot = r; + break; + } + tools_passphrase_msg(r); + } + + password = NULL; + passwordLen = 0; + + return r; +} + +static int init_keyfile(struct reenc_ctx *rc, struct crypt_device *cd, int slot_check) +{ + char *password; + int r; + size_t passwordLen; + + r = tools_get_key(NULL, &password, &passwordLen, opt_keyfile_offset, + opt_keyfile_size, opt_key_file, 0, 0, 0, cd); + if (r < 0) + return r; + + r = crypt_activate_by_passphrase(cd, NULL, slot_check, password, + passwordLen, 0); + + /* + * Allow keyslot only if it is last slot or if user explicitly + * specify which slot to use (IOW others will be disabled). + */ + if (r >= 0 && opt_key_slot == CRYPT_ANY_SLOT && + crypt_keyslot_status(cd, r) != CRYPT_SLOT_ACTIVE_LAST) { + log_err(_("Key file can be used only with --key-slot or with " + "exactly one key slot active.")); + r = -EINVAL; + } + + if (r < 0) { + crypt_safe_free(password); + tools_passphrase_msg(r); + } else { + rc->keyslot = r; + rc->p[r].password = password; + rc->p[r].passwordLen = passwordLen; + } + + password = NULL; + passwordLen = 0; + + return r; +} + +static int initialize_passphrase(struct reenc_ctx *rc, const char *device) +{ + struct crypt_device *cd = NULL; + char msg[256]; + int i, r; + + log_dbg("Passphrases initialization."); + + if (rc->reencrypt_mode == ENCRYPT && !rc->in_progress) { + r = init_passphrase1(rc, cd, _("Enter new passphrase: "), opt_key_slot, 0, 1); + return r > 0 ? 0 : r; + } + + if ((r = crypt_init_data_device(&cd, device, rc->device)) || + (r = crypt_load(cd, CRYPT_LUKS, NULL))) { + crypt_free(cd); + return r; + } + + if (opt_key_slot != CRYPT_ANY_SLOT) + snprintf(msg, sizeof(msg), + _("Enter passphrase for key slot %d: "), opt_key_slot); + else + snprintf(msg, sizeof(msg), _("Enter any existing passphrase: ")); + + if (opt_key_file) { + r = init_keyfile(rc, cd, opt_key_slot); + } else if (rc->in_progress || + opt_key_slot != CRYPT_ANY_SLOT || + rc->reencrypt_mode == DECRYPT) { + r = init_passphrase1(rc, cd, msg, opt_key_slot, 1, 0); + } else for (i = 0; i < crypt_keyslot_max(crypt_get_type(cd)); i++) { + snprintf(msg, sizeof(msg), _("Enter passphrase for key slot %d: "), i); + r = init_passphrase1(rc, cd, msg, i, 1, 0); + if (r == -ENOENT) { + r = 0; + continue; + } + if (r < 0) + break; + } + + crypt_free(cd); + return r > 0 ? 0 : r; +} + +static int initialize_context(struct reenc_ctx *rc, const char *device) +{ + log_dbg("Initialising reencryption context."); + + rc->log_fd = -1; + + /* FIXME: replace MAX_KEYSLOT with crypt_keyslot_max(CRYPT_LUKS2) */ + if (crypt_keyslot_max(CRYPT_LUKS2) > MAX_SLOT) { + log_dbg("Internal error"); + return -EINVAL; + } + + if (!(rc->device = strndup(device, PATH_MAX))) + return -ENOMEM; + + if (opt_header_device && !(rc->device_header = strndup(opt_header_device, PATH_MAX))) + return -ENOMEM; + + if (device_check(rc, rc->device, CHECK_OPEN) < 0) + return -EINVAL; + + if (initialize_uuid(rc)) { + log_err(_("Device %s is not a valid LUKS device."), device); + return -EINVAL; + } + + if (opt_key_slot != CRYPT_ANY_SLOT && + opt_key_slot >= crypt_keyslot_max(rc->type)) { + log_err(_("Key slot is invalid.")); + return -EINVAL; + } + + /* Prepare device names */ + if (snprintf(rc->log_file, PATH_MAX, + "LUKS-%s.log", rc->device_uuid) < 0) + return -ENOMEM; + if (snprintf(rc->header_file_org, PATH_MAX, + "LUKS-%s.org", rc->device_uuid) < 0) + return -ENOMEM; + if (snprintf(rc->header_file_new, PATH_MAX, + "LUKS-%s.new", rc->device_uuid) < 0) + return -ENOMEM; + if (snprintf(rc->header_file_tmp, PATH_MAX, + "LUKS-%s.tmp", rc->device_uuid) < 0) + return -ENOMEM; + + /* Paths to encrypted devices */ + if (snprintf(rc->crypt_path_org, PATH_MAX, + "%s/%s", crypt_get_dir(), rc->header_file_org) < 0) + return -ENOMEM; + if (snprintf(rc->crypt_path_new, PATH_MAX, + "%s/%s", crypt_get_dir(), rc->header_file_new) < 0) + return -ENOMEM; + + remove_headers(rc); + + if (open_log(rc) < 0) { + log_err(_("Cannot open reencryption log file.")); + return -EINVAL; + } + + if (!rc->in_progress) { + if (opt_uuid) { + log_err(_("No decryption in progress, provided UUID can " + "be used only to resume suspended decryption process.")); + return -EINVAL; + } + + if (!opt_reduce_size) + rc->reencrypt_direction = FORWARD; + else { + rc->reencrypt_direction = BACKWARD; + rc->device_offset = (uint64_t)~0; + } + + if (opt_new) + rc->reencrypt_mode = ENCRYPT; + else if (opt_decrypt) + rc->reencrypt_mode = DECRYPT; + else + rc->reencrypt_mode = REENCRYPT; + } + + return 0; +} + +static void destroy_context(struct reenc_ctx *rc) +{ + int i; + + log_dbg("Destroying reencryption context."); + + close_log(rc); + remove_headers(rc); + + if (!rc->stained) { + unlink(rc->log_file); + unlink(rc->header_file_org); + unlink(rc->header_file_new); + unlink(rc->header_file_tmp); + } + + for (i = 0; i < MAX_SLOT; i++) + crypt_safe_free(rc->p[i].password); + + free(rc->device); + free(rc->device_header); + free(rc->device_uuid); +} + +static int luks2_change_pbkdf_params(struct reenc_ctx *rc) +{ + int i, r; + struct crypt_device *cd = NULL; + + if ((r = initialize_passphrase(rc, hdr_device(rc)))) + return r; + + if (crypt_init(&cd, hdr_device(rc)) || + crypt_load(cd, CRYPT_LUKS2, NULL)) { + r = -EINVAL; + goto out; + } + + if ((r = set_pbkdf_params(cd, CRYPT_LUKS2))) + goto out; + + log_dbg("LUKS2 keyslot pbkdf params change."); + + r = -EINVAL; + + for (i = 0; i < crypt_keyslot_max(CRYPT_LUKS2); i++) { + if (!rc->p[i].password) + continue; + if ((r = crypt_keyslot_change_by_passphrase(cd, i, i, + rc->p[i].password, rc->p[i].passwordLen, + rc->p[i].password, rc->p[i].passwordLen)) < 0) + goto out; + log_verbose(_("Changed pbkdf parameters in keyslot %i."), r); + r = 0; + } + + if (r) + goto out; + + /* see create_new_header */ + for (i = 0; i < crypt_keyslot_max(CRYPT_LUKS2); i++) + if (!rc->p[i].password) + (void)crypt_keyslot_destroy(cd, i); +out: + crypt_free(cd); + return r; +} + +static int run_reencrypt(const char *device) +{ + int r = -EINVAL; + static struct reenc_ctx rc = { + .stained = 1 + }; + + set_int_handler(0); + + if (initialize_context(&rc, device)) + goto out; + + /* short-circuit LUKS2 keyslot parameters change */ + if (opt_keep_key && isLUKS2(rc.type)) { + r = luks2_change_pbkdf_params(&rc); + goto out; + } + + log_dbg("Running reencryption."); + + if (!rc.in_progress) { + if ((r = initialize_passphrase(&rc, hdr_device(&rc)))) + goto out; + + log_dbg("Storing backup of LUKS headers."); + if (rc.reencrypt_mode == ENCRYPT) { + /* Create fake header for existing device */ + if ((r = backup_fake_header(&rc))) + goto out; + } else { + if ((r = backup_luks_headers(&rc))) + goto out; + /* Create fake header for decrypted device */ + if (rc.reencrypt_mode == DECRYPT && + (r = backup_fake_header(&rc))) + goto out; + if ((r = device_check(&rc, hdr_device(&rc), MAKE_UNUSABLE))) + goto out; + } + } else { + if ((r = initialize_passphrase(&rc, opt_decrypt ? rc.header_file_org : rc.header_file_new))) + goto out; + } + + if (!opt_keep_key) { + log_dbg("Running data area reencryption."); + if ((r = activate_luks_headers(&rc))) + goto out; + + if ((r = copy_data(&rc))) + goto out; + } else + log_dbg("Keeping existing key, skipping data area reencryption."); + + // FIXME: fix error path above to not skip this + if (rc.reencrypt_mode != DECRYPT) + r = restore_luks_header(&rc); + else + rc.stained = 0; +out: + destroy_context(&rc); + return r; +} + +static void help(poptContext popt_context, + enum poptCallbackReason reason __attribute__((unused)), + struct poptOption *key, + const char *arg __attribute__((unused)), + void *data __attribute__((unused))) +{ + if (key->shortName == '?') { + log_std("%s %s\n", PACKAGE_REENC, PACKAGE_VERSION); + poptPrintHelp(popt_context, stdout, 0); + poptFreeContext(popt_context); + exit(EXIT_SUCCESS); + } else if (key->shortName == 'V') { + log_std("%s %s\n", PACKAGE_REENC, PACKAGE_VERSION); + poptFreeContext(popt_context); + exit(EXIT_SUCCESS); + } else + usage(popt_context, EXIT_SUCCESS, NULL, NULL); +} + +int main(int argc, const char **argv) +{ + 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 }, + { "usage", '\0', POPT_ARG_NONE, NULL, 0, N_("Display brief usage"), NULL }, + { "version",'V', POPT_ARG_NONE, NULL, 0, N_("Print package version"), NULL }, + POPT_TABLEEND + }; + static struct poptOption popt_options[] = { + { 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 }, + { "block-size", 'B', POPT_ARG_INT, &opt_bsize, 0, N_("Reencryption block size"), N_("MiB") }, + { "cipher", 'c', POPT_ARG_STRING, &opt_cipher, 0, N_("The cipher used to encrypt the disk (see /proc/crypto)"), NULL }, + { "key-size", 's', POPT_ARG_INT, &opt_key_size, 0, N_("The size of the encryption key"), N_("BITS") }, + { "hash", 'h', POPT_ARG_STRING, &opt_hash, 0, N_("The hash used to create the encryption key from the passphrase"), NULL }, + { "keep-key", '\0', POPT_ARG_NONE, &opt_keep_key, 0, N_("Do not change key, no data area reencryption"), NULL }, + { "key-file", 'd', POPT_ARG_STRING, &opt_key_file, 0, N_("Read the key from a file"), NULL }, + { "master-key-file", '\0', POPT_ARG_STRING, &opt_master_key_file, 0, N_("Read new volume (master) key from file"), NULL }, + { "iter-time", 'i', POPT_ARG_INT, &opt_iteration_time, 0, N_("PBKDF2 iteration time for LUKS (in ms)"), N_("msecs") }, + { "batch-mode", 'q', POPT_ARG_NONE, &opt_batch_mode, 0, N_("Do not ask for confirmation"), NULL }, + { "progress-frequency",'\0', POPT_ARG_INT, &opt_progress_frequency, 0, N_("Progress line update (in seconds)"), N_("secs") }, + { "tries", 'T', POPT_ARG_INT, &opt_tries, 0, N_("How often the input of the passphrase can be retried"), NULL }, + { "use-random", '\0', POPT_ARG_NONE, &opt_random, 0, N_("Use /dev/random for generating volume key"), NULL }, + { "use-urandom", '\0', POPT_ARG_NONE, &opt_urandom, 0, N_("Use /dev/urandom for generating volume key"), NULL }, + { "use-directio", '\0', POPT_ARG_NONE, &opt_directio, 0, N_("Use direct-io when accessing devices"), NULL }, + { "use-fsync", '\0', POPT_ARG_NONE, &opt_fsync, 0, N_("Use fsync after each block"), NULL }, + { "write-log", '\0', POPT_ARG_NONE, &opt_write_log, 0, N_("Update log file after every block"), NULL }, + { "key-slot", 'S', POPT_ARG_INT, &opt_key_slot, 0, N_("Use only this slot (others will be disabled)"), NULL }, + { "keyfile-offset", '\0', POPT_ARG_LONG, &opt_keyfile_offset, 0, N_("Number of bytes to skip in keyfile"), N_("bytes") }, + { "keyfile-size", 'l', POPT_ARG_LONG, &opt_keyfile_size, 0, N_("Limits the read from keyfile"), N_("bytes") }, + { "reduce-device-size",'\0', POPT_ARG_STRING, &opt_reduce_size_str, 0, N_("Reduce data device size (move data offset). DANGEROUS!"), N_("bytes") }, + { "device-size", '\0', POPT_ARG_STRING, &opt_device_size_str, 0, N_("Use only specified device size (ignore rest of device). DANGEROUS!"), N_("bytes") }, + { "new", 'N', POPT_ARG_NONE, &opt_new, 0, N_("Create new header on not encrypted device"), NULL }, + { "decrypt", '\0', POPT_ARG_NONE, &opt_decrypt, 0, N_("Permanently decrypt device (remove encryption)"), NULL }, + { "uuid", '\0', POPT_ARG_STRING, &opt_uuid, 0, N_("The UUID used to resume decryption"), NULL }, + { "type", '\0', POPT_ARG_STRING, &opt_type, 0, N_("Type of LUKS metadata: luks1, luks2"), NULL }, + { "pbkdf", '\0', POPT_ARG_STRING, &opt_pbkdf, 0, N_("PBKDF algorithm (for LUKS2): argon2i, argon2id, pbkdf2"), NULL }, + { "pbkdf-memory", '\0', POPT_ARG_LONG, &opt_pbkdf_memory, 0, N_("PBKDF memory cost limit"), N_("kilobytes") }, + { "pbkdf-parallel", '\0', POPT_ARG_LONG, &opt_pbkdf_parallel, 0, N_("PBKDF parallel cost"), N_("threads") }, + { "pbkdf-force-iterations",'\0',POPT_ARG_LONG, &opt_pbkdf_iterations, 0, N_("PBKDF iterations cost (forced, disables benchmark)"), NULL }, + { "header", '\0', POPT_ARG_STRING, &opt_header_device, 0, N_("Device or file with separated LUKS header"), NULL }, + POPT_TABLEEND + }; + poptContext popt_context; + int r; + + crypt_set_log_callback(NULL, tool_log, NULL); + + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, LOCALEDIR); + textdomain(PACKAGE); + + popt_context = poptGetContext(PACKAGE, argc, argv, popt_options, 0); + poptSetOtherOptionHelp(popt_context, + _("[OPTION...] ")); + + while((r = poptGetNextOpt(popt_context)) > 0) ; + if (r < -1) + usage(popt_context, EXIT_FAILURE, poptStrerror(r), + poptBadOption(popt_context, POPT_BADOPTION_NOALIAS)); + + if (!opt_batch_mode) + log_verbose(_("Reencryption will change: %s%s%s%s%s%s."), + opt_keep_key ? "" : _("volume key"), + (!opt_keep_key && opt_hash) ? ", " : "", + opt_hash ? _("set hash to ") : "", opt_hash ?: "", + opt_cipher ? _(", set cipher to "): "", opt_cipher ?: ""); + + action_argv = poptGetArgs(popt_context); + if(!action_argv) + usage(popt_context, EXIT_FAILURE, _("Argument required."), + poptGetInvocationName(popt_context)); + + if (opt_random && opt_urandom) + usage(popt_context, EXIT_FAILURE, _("Only one of --use-[u]random options is allowed."), + poptGetInvocationName(popt_context)); + + if (opt_bsize < 0 || opt_key_size < 0 || opt_iteration_time < 0 || + opt_tries < 0 || opt_keyfile_offset < 0 || opt_key_size < 0 || + opt_pbkdf_iterations < 0 || opt_pbkdf_memory < 0 || + opt_pbkdf_parallel < 0) { + usage(popt_context, EXIT_FAILURE, + _("Negative number for option not permitted."), + poptGetInvocationName(popt_context)); + } + + if (opt_pbkdf && crypt_parse_pbkdf(opt_pbkdf, &opt_pbkdf)) + usage(popt_context, EXIT_FAILURE, + _("Password-based key derivation function (PBKDF) can be only pbkdf2 or argon2i/argon2id.\n"), + poptGetInvocationName(popt_context)); + + if (opt_pbkdf_iterations && opt_iteration_time) + usage(popt_context, EXIT_FAILURE, + _("PBKDF forced iterations cannot be combined with iteration time option.\n"), + poptGetInvocationName(popt_context)); + + if (opt_bsize < 1 || opt_bsize > 64) + usage(popt_context, EXIT_FAILURE, + _("Only values between 1 MiB and 64 MiB allowed for reencryption block size."), + poptGetInvocationName(popt_context)); + + if (opt_key_size % 8) + usage(popt_context, EXIT_FAILURE, + _("Key size must be a multiple of 8 bits"), + poptGetInvocationName(popt_context)); + + if (opt_key_slot != CRYPT_ANY_SLOT && + (opt_key_slot < 0 || opt_key_slot >= crypt_keyslot_max(CRYPT_LUKS2))) + usage(popt_context, EXIT_FAILURE, _("Key slot is invalid."), + poptGetInvocationName(popt_context)); + + if (opt_random && opt_urandom) + usage(popt_context, EXIT_FAILURE, _("Only one of --use-[u]random options is allowed."), + poptGetInvocationName(popt_context)); + + if (opt_device_size_str && + tools_string_to_size(NULL, opt_device_size_str, &opt_device_size)) + usage(popt_context, EXIT_FAILURE, _("Invalid device size specification."), + poptGetInvocationName(popt_context)); + + if (opt_reduce_size_str && + tools_string_to_size(NULL, opt_reduce_size_str, &opt_reduce_size)) + usage(popt_context, EXIT_FAILURE, _("Invalid device size specification."), + poptGetInvocationName(popt_context)); + if (opt_reduce_size > 64 * 1024 * 1024) + usage(popt_context, EXIT_FAILURE, _("Maximum device reduce size is 64 MiB."), + poptGetInvocationName(popt_context)); + if (opt_reduce_size % SECTOR_SIZE) + usage(popt_context, EXIT_FAILURE, _("Reduce size must be multiple of 512 bytes sector."), + poptGetInvocationName(popt_context)); + + if (opt_new && (!opt_reduce_size && !opt_header_device)) + usage(popt_context, EXIT_FAILURE, _("Option --new must be used together with --reduce-device-size or --header."), + poptGetInvocationName(popt_context)); + + if (opt_keep_key && (opt_cipher || opt_new || opt_master_key_file)) + usage(popt_context, EXIT_FAILURE, _("Option --keep-key can be used only with --hash, --iter-time or --pbkdf-force-iterations."), + poptGetInvocationName(popt_context)); + + if (opt_new && opt_decrypt) + usage(popt_context, EXIT_FAILURE, _("Option --new cannot be used together with --decrypt."), + poptGetInvocationName(popt_context)); + + if (opt_decrypt && (opt_cipher || opt_hash || opt_reduce_size || opt_keep_key || opt_device_size)) + usage(popt_context, EXIT_FAILURE, _("Option --decrypt is incompatible with specified parameters."), + poptGetInvocationName(popt_context)); + + if (opt_uuid && !opt_decrypt) + usage(popt_context, EXIT_FAILURE, _("Option --uuid is allowed only together with --decrypt."), + poptGetInvocationName(popt_context)); + + if (!luksType(opt_type)) + usage(popt_context, EXIT_FAILURE, _("Invalid luks type. Use one of these: 'luks', 'luks1' or 'luks2'."), + poptGetInvocationName(popt_context)); + + if (opt_debug) { + opt_verbose = 1; + crypt_set_debug_level(-1); + dbg_version_and_cmd(argc, argv); + } + + r = run_reencrypt(action_argv[0]); + + poptFreeContext(popt_context); + + return translate_errno(r); +} diff --git a/src/integritysetup.c b/src/integritysetup.c new file mode 100644 index 0000000..2a9dccc --- /dev/null +++ b/src/integritysetup.c @@ -0,0 +1,709 @@ +/* + * integritysetup - setup integrity protected volumes for dm-integrity + * + * Copyright (C) 2017-2019 Red Hat, Inc. All rights reserved. + * Copyright (C) 2017-2019 Milan Broz + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#include "cryptsetup.h" +#include + +#define PACKAGE_INTEGRITY "integritysetup" + +#define DEFAULT_TAG_SIZE 4 +#define DEFAULT_ALG_NAME "crc32c" +#define MAX_KEY_SIZE 4096 + +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; +static int opt_journal_commit_time = 0; +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_recalculate = 0; + +static const char **action_argv; +static int action_argc; + +// FIXME: move this to tools and handle EINTR +static int _read_mk(const char *file, char **key, int keysize) +{ + int fd; + + if (keysize <= 0 || keysize > MAX_KEY_SIZE) { + log_err(_("Invalid key size.")); + return -EINVAL; + } + + *key = crypt_safe_alloc(keysize); + if (!*key) + return -ENOMEM; + + fd = open(file, O_RDONLY); + if (fd == -1) { + log_err(_("Cannot read keyfile %s."), file); + goto fail; + } + if ((read(fd, *key, keysize) != keysize)) { + log_err(_("Cannot read %d bytes from keyfile %s."), keysize, file); + close(fd); + goto fail; + } + close(fd); + return 0; +fail: + crypt_safe_free(*key); + *key = NULL; + return -EINVAL; +} + +static int _read_keys(char **integrity_key, struct crypt_params_integrity *params) +{ + char *int_key = NULL, *journal_integrity_key = NULL, *journal_crypt_key = NULL; + int r; + + if (integrity_key && opt_integrity_key_file) { + r = _read_mk(opt_integrity_key_file, &int_key, opt_integrity_key_size); + if (r < 0) + return r; + params->integrity_key_size = opt_integrity_key_size; + } + + if (opt_journal_integrity_key_file) { + r = _read_mk(opt_journal_integrity_key_file, &journal_integrity_key, opt_journal_integrity_key_size); + if (r < 0) { + crypt_safe_free(int_key); + return r; + } + params->journal_integrity_key = journal_integrity_key; + params->journal_integrity_key_size = opt_journal_integrity_key_size; + } + + if (opt_journal_crypt_key_file) { + r = _read_mk(opt_journal_crypt_key_file, &journal_crypt_key, opt_journal_crypt_key_size); + if (r < 0) { + crypt_safe_free(int_key); + crypt_safe_free(journal_integrity_key); + return r; + } + params->journal_crypt_key = journal_crypt_key; + params->journal_crypt_key_size = opt_journal_crypt_key_size; + } + + if (integrity_key) + *integrity_key = int_key; + + return 0; +} + +static int _wipe_data_device(struct crypt_device *cd, const char *integrity_key) +{ + char tmp_name[64], tmp_path[128], tmp_uuid[40]; + uuid_t tmp_uuid_bin; + int r; + + if (!opt_batch_mode) + log_std(_("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")); + + /* Activate the device a temporary one */ + uuid_generate(tmp_uuid_bin); + uuid_unparse(tmp_uuid_bin, tmp_uuid); + if (snprintf(tmp_name, sizeof(tmp_name), "temporary-cryptsetup-%s", tmp_uuid) < 0) + return -EINVAL; + if (snprintf(tmp_path, sizeof(tmp_path), "%s/%s", crypt_get_dir(), tmp_name) < 0) + return -EINVAL; + + r = crypt_activate_by_volume_key(cd, tmp_name, integrity_key, + opt_integrity_key_size, CRYPT_ACTIVATE_PRIVATE | CRYPT_ACTIVATE_NO_JOURNAL); + if (r < 0) + return r; + + /* Wipe the device */ + set_int_handler(0); + r = crypt_wipe(cd, tmp_path, CRYPT_WIPE_ZERO, 0, 0, DEFAULT_WIPE_BLOCK, + 0, &tools_wipe_progress, NULL); + if (crypt_deactivate(cd, tmp_name)) + log_err(_("Cannot deactivate temporary device %s."), tmp_path); + set_int_block(0); + + return r; +} + +static int action_format(int arg) +{ + struct crypt_device *cd = NULL; + struct crypt_params_integrity params = { + .journal_size = opt_journal_size, + .interleave_sectors = opt_interleave_sectors, + /* in bitmap mode we have to overload these values... */ + .journal_watermark = opt_integrity_bitmap ? opt_bitmap_sectors_per_bit : opt_journal_watermark, + .journal_commit_time = opt_integrity_bitmap ? opt_bitmap_flush_time : opt_journal_commit_time, + .buffer_sectors = opt_buffer_sectors, + .tag_size = opt_tag_size, + .sector_size = opt_sector_size ?: SECTOR_SIZE, + }; + char integrity[MAX_CIPHER_LEN], journal_integrity[MAX_CIPHER_LEN], journal_crypt[MAX_CIPHER_LEN]; + char *integrity_key = NULL, *msg = NULL; + int r; + size_t signatures; + + if (opt_integrity) { + r = crypt_parse_hash_integrity_mode(opt_integrity, integrity); + if (r < 0) { + log_err(_("No known integrity specification pattern detected.")); + return r; + } + params.integrity = integrity; + } + + if (opt_journal_integrity) { + r = crypt_parse_hash_integrity_mode(opt_journal_integrity, journal_integrity); + if (r < 0) { + log_err(_("No known integrity specification pattern detected.")); + return r; + } + params.journal_integrity = journal_integrity; + } + + if (opt_journal_crypt) { + r = crypt_parse_hash_integrity_mode(opt_journal_crypt, journal_crypt); + if (r < 0) { + log_err(_("No known integrity specification pattern detected.")); + return r; + } + params.journal_crypt = journal_crypt; + } + + r = _read_keys(&integrity_key, ¶ms); + if (r) + goto out; + + r = crypt_init_data_device(&cd, action_argv[0], opt_data_device); + if (r < 0) + goto out; + + r = asprintf(&msg, _("This will overwrite data on %s irrevocably."), action_argv[0]); + if (r == -1) { + r = -ENOMEM; + goto out; + } + + r = yesDialog(msg, _("Operation aborted.\n")) ? 0 : -EINVAL; + free(msg); + if (r < 0) + goto out; + + r = tools_detect_signatures(action_argv[0], 0, &signatures); + if (r < 0) + goto out; + + /* Signature candidates found */ + if (signatures && ((r = tools_wipe_all_signatures(action_argv[0])) < 0)) + goto out; + + r = crypt_format(cd, CRYPT_INTEGRITY, NULL, NULL, NULL, NULL, 0, ¶ms); + if (r < 0) /* FIXME: call wipe signatures again */ + goto out; + + if (!opt_batch_mode) + log_std(_("Formatted with tag size %u, internal integrity %s.\n"), opt_tag_size, opt_integrity); + + if (!opt_no_wipe) + r = _wipe_data_device(cd, integrity_key); +out: + crypt_safe_free(integrity_key); + crypt_safe_free(CONST_CAST(void*)params.journal_integrity_key); + crypt_safe_free(CONST_CAST(void*)params.journal_crypt_key); + crypt_free(cd); + return r; +} + +static int action_open(int arg) +{ + struct crypt_device *cd = NULL; + struct crypt_params_integrity params = { + /* in bitmap mode we have to overload these values... */ + .journal_watermark = opt_integrity_bitmap ? opt_bitmap_sectors_per_bit : opt_journal_watermark, + .journal_commit_time = opt_integrity_bitmap ? opt_bitmap_flush_time : opt_journal_commit_time, + .buffer_sectors = opt_buffer_sectors, + }; + uint32_t activate_flags = 0; + char integrity[MAX_CIPHER_LEN], journal_integrity[MAX_CIPHER_LEN], journal_crypt[MAX_CIPHER_LEN]; + char *integrity_key = NULL; + int r; + + if (opt_integrity) { + r = crypt_parse_hash_integrity_mode(opt_integrity, integrity); + if (r < 0) { + log_err(_("No known integrity specification pattern detected.")); + return r; + } + params.integrity = integrity; + } + + if (opt_journal_integrity) { + r = crypt_parse_hash_integrity_mode(opt_journal_integrity, journal_integrity); + if (r < 0) { + log_err(_("No known integrity specification pattern detected.")); + return r; + + } + params.journal_integrity = journal_integrity; + } + + if (opt_journal_crypt) { + r = crypt_parse_hash_integrity_mode(opt_journal_crypt, journal_crypt); + if (r < 0) { + log_err(_("No known integrity specification pattern detected.")); + return r; + } + params.journal_crypt = journal_crypt; + } + + if (opt_integrity_nojournal || opt_integrity_bitmap) + activate_flags |= CRYPT_ACTIVATE_NO_JOURNAL; + if (opt_integrity_recovery) + activate_flags |= CRYPT_ACTIVATE_RECOVERY; + if (opt_integrity_bitmap) + activate_flags |= CRYPT_ACTIVATE_NO_JOURNAL_BITMAP; + + if (opt_integrity_recalculate) + activate_flags |= CRYPT_ACTIVATE_RECALCULATE; + + r = _read_keys(&integrity_key, ¶ms); + if (r) + goto out; + + if ((r = crypt_init_data_device(&cd, action_argv[0], opt_data_device))) + goto out; + + r = crypt_load(cd, CRYPT_INTEGRITY, ¶ms); + if (r) + goto out; + + r = crypt_activate_by_volume_key(cd, action_argv[1], integrity_key, + opt_integrity_key_size, activate_flags); +out: + crypt_safe_free(integrity_key); + crypt_safe_free(CONST_CAST(void*)params.journal_integrity_key); + crypt_safe_free(CONST_CAST(void*)params.journal_crypt_key); + crypt_free(cd); + return r; +} + +static int action_close(int arg) +{ + struct crypt_device *cd = NULL; + int r; + + r = crypt_init_by_name(&cd, action_argv[0]); + if (r == 0) + r = crypt_deactivate(cd, action_argv[0]); + + crypt_free(cd); + return r; +} + +static int action_status(int arg) +{ + crypt_status_info ci; + struct crypt_active_device cad; + struct crypt_params_integrity ip = {}; + struct crypt_device *cd = NULL; + char *backing_file; + const char *device, *metadata_device; + int path = 0, r = 0; + + /* perhaps a path, not a dm device name */ + if (strchr(action_argv[0], '/')) + path = 1; + + ci = crypt_status(NULL, action_argv[0]); + switch (ci) { + case CRYPT_INVALID: + r = -EINVAL; + break; + case CRYPT_INACTIVE: + if (path) + log_std("%s is inactive.\n", action_argv[0]); + else + log_std("%s/%s is inactive.\n", crypt_get_dir(), action_argv[0]); + r = -ENODEV; + break; + case CRYPT_ACTIVE: + case CRYPT_BUSY: + if (path) + log_std("%s is active%s.\n", action_argv[0], + ci == CRYPT_BUSY ? " and is in use" : ""); + else + log_std("%s/%s is active%s.\n", crypt_get_dir(), action_argv[0], + ci == CRYPT_BUSY ? " and is in use" : ""); + + r = crypt_init_by_name_and_header(&cd, action_argv[0], NULL); + if (r < 0) + goto out; + + log_std(" type: %s\n", crypt_get_type(cd) ?: "n/a"); + + r = crypt_get_active_device(cd, action_argv[0], &cad); + if (r < 0) + goto out; + + /* Print only INTEGRITY (and LUKS2 with integrity) info */ + r = crypt_get_integrity_info(cd, &ip); + if (r < 0) + goto out; + + log_std(" tag size: %u\n", ip.tag_size); + log_std(" integrity: %s\n", ip.integrity ?: "(none)"); + device = crypt_get_device_name(cd); + metadata_device = crypt_get_metadata_device_name(cd); + log_std(" device: %s%s\n", device, metadata_device ? " (detached)" : ""); + if ((backing_file = crypt_loop_backing_file(device))) { + log_std(" loop: %s\n", backing_file); + free(backing_file); + } + if (metadata_device) { + log_std(" metadata device: %s\n", metadata_device); + if ((backing_file = crypt_loop_backing_file(metadata_device))) { + log_std(" loop: %s\n", backing_file); + free(backing_file); + } + } + log_std(" sector size: %u bytes\n", crypt_get_sector_size(cd)); + log_std(" interleave sectors: %u\n", ip.interleave_sectors); + log_std(" size: %" PRIu64 " sectors\n", cad.size); + log_std(" mode: %s%s\n", + cad.flags & CRYPT_ACTIVATE_READONLY ? "readonly" : "read/write", + cad.flags & CRYPT_ACTIVATE_RECOVERY ? " recovery" : ""); + log_std(" failures: %" PRIu64 "\n", + crypt_get_active_integrity_failures(cd, action_argv[0])); + if (cad.flags & CRYPT_ACTIVATE_NO_JOURNAL_BITMAP) { + log_std(" bitmap 512-byte sectors per bit: %u\n", ip.journal_watermark); + log_std(" bitmap flush interval: %u ms\n", ip.journal_commit_time); + } if (cad.flags & CRYPT_ACTIVATE_NO_JOURNAL) { + log_std(" journal: not active\n"); + } else { + log_std(" journal size: %" PRIu64 " bytes\n", ip.journal_size); + log_std(" journal watermark: %u%%\n", ip.journal_watermark); + log_std(" journal commit time: %u ms\n", ip.journal_commit_time); + if (ip.journal_integrity) + log_std(" journal integrity MAC: %s\n", ip.journal_integrity); + if (ip.journal_crypt) + log_std(" journal encryption: %s\n", ip.journal_crypt); + } + } +out: + crypt_free(cd); + if (r == -ENOTSUP) + r = 0; + return r; + return -EINVAL; +} + +static int action_dump(int arg) +{ + struct crypt_device *cd = NULL; + struct crypt_params_integrity params = {}; + int r; + + if ((r = crypt_init(&cd, action_argv[0]))) + return r; + + r = crypt_load(cd, CRYPT_INTEGRITY, ¶ms); + if (!r) + crypt_dump(cd); + + crypt_free(cd); + return r; +} + +static struct action_type { + const char *type; + int (*handler)(int); + int required_action_argc; + const char *arg_desc; + const char *desc; +} action_types[] = { + { "format", action_format, 1, N_(""),N_("format device") }, + { "open", action_open, 2, N_(" "),N_("open device as ") }, + { "close", action_close, 1, N_(""),N_("close device (remove mapping)") }, + { "status", action_status, 1, N_(""),N_("show active device status") }, + { "dump", action_dump, 1, N_(""),N_("show on-disk information") }, + { NULL, NULL, 0, NULL, NULL } +}; + +static void help(poptContext popt_context, + enum poptCallbackReason reason __attribute__((unused)), + struct poptOption *key, + const char *arg __attribute__((unused)), + void *data __attribute__((unused))) +{ + struct action_type *action; + + if (key->shortName == '?') { + log_std("%s %s\n", PACKAGE_INTEGRITY, PACKAGE_VERSION); + poptPrintHelp(popt_context, stdout, 0); + log_std(_("\n" + " is one of:\n")); + for(action = action_types; action->type; action++) + log_std("\t%s %s - %s\n", action->type, _(action->arg_desc), _(action->desc)); + log_std(_("\n" + " is the device to create under %s\n" + " is the device containing data with integrity tags\n"), + crypt_get_dir()); + + log_std(_("\nDefault compiled-in dm-integrity parameters:\n" + "\tTag size: %u bytes, Checksum algorithm: %s\n"), + DEFAULT_TAG_SIZE, DEFAULT_ALG_NAME); + poptFreeContext(popt_context); + exit(EXIT_SUCCESS); + } else if (key->shortName == 'V') { + log_std("%s %s\n", PACKAGE_INTEGRITY, PACKAGE_VERSION); + poptFreeContext(popt_context); + exit(EXIT_SUCCESS); + } else + usage(popt_context, EXIT_SUCCESS, NULL, NULL); +} + +static int run_action(struct action_type *action) +{ + int r; + + log_dbg("Running command %s.", action->type); + + r = action->handler(0); + + show_status(r); + return translate_errno(r); +} + +int main(int argc, const char **argv) +{ + static const char *null_action_argv[] = {NULL}; + 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 }, + { "usage", '\0', POPT_ARG_NONE, NULL, 0, N_("Display brief usage"), NULL }, + { "version",'V', POPT_ARG_NONE, NULL, 0, N_("Print package version"), NULL }, + POPT_TABLEEND + }; + static struct poptOption popt_options[] = { + { 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 }, + { "batch-mode", 'q', POPT_ARG_NONE, &opt_batch_mode, 0, N_("Do not ask for confirmation"), NULL }, + { "progress-frequency", '\0', POPT_ARG_INT, &opt_progress_frequency, 0, N_("Progress line update (in seconds)"), N_("secs") }, + { "no-wipe", '\0', POPT_ARG_NONE, &opt_no_wipe, 0, N_("Do not wipe device after format"), NULL }, + + { "data-device", '\0', POPT_ARG_STRING, &opt_data_device, 0, N_("Path to data device (if separated)"), N_("path") }, + + { "journal-size", 'j', POPT_ARG_STRING,&opt_journal_size_str, 0, N_("Journal size"), N_("bytes") }, + { "interleave-sectors", '\0', POPT_ARG_INT, &opt_interleave_sectors, 0, N_("Interleave sectors"), N_("SECTORS") }, + { "journal-watermark", '\0', POPT_ARG_INT, &opt_journal_watermark, 0, N_("Journal watermark"),N_("percent") }, + { "journal-commit-time",'\0', POPT_ARG_INT, &opt_journal_commit_time,0, N_("Journal commit time"), N_("ms") }, + { "bitmap-sectors-per-bit",'\0', POPT_ARG_INT,&opt_bitmap_sectors_per_bit, 0, N_("Number of 512-byte sectors per bit (bitmap mode)."), NULL }, + { "bitmap-flush-time", '\0', POPT_ARG_INT, &opt_bitmap_flush_time, 0, N_("Bitmap mode flush time"), N_("ms") }, + { "tag-size", 't', POPT_ARG_INT, &opt_tag_size, 0, N_("Tag size (per-sector)"), N_("bytes") }, + { "sector-size", 's', POPT_ARG_INT, &opt_sector_size, 0, N_("Sector size"), N_("bytes") }, + { "buffer-sectors", '\0', POPT_ARG_INT, &opt_buffer_sectors, 0, N_("Buffers size"), N_("SECTORS") }, + + { "integrity", 'I', POPT_ARG_STRING, &opt_integrity, 0, N_("Data integrity algorithm"), NULL }, + { "integrity-key-size", '\0', POPT_ARG_INT, &opt_integrity_key_size, 0, N_("The size of the data integrity key"), N_("BITS") }, + { "integrity-key-file", '\0', POPT_ARG_STRING, &opt_integrity_key_file, 0, N_("Read the integrity key from a file"), NULL }, + + { "journal-integrity", '\0', POPT_ARG_STRING, &opt_journal_integrity, 0, N_("Journal integrity algorithm"), NULL }, + { "journal-integrity-key-size",'\0', POPT_ARG_INT, &opt_journal_integrity_key_size,0, N_("The size of the journal integrity key"), N_("BITS") }, + { "journal-integrity-key-file",'\0', POPT_ARG_STRING, &opt_journal_integrity_key_file,0, N_("Read the journal integrity key from a file"), NULL }, + + { "journal-crypt", '\0', POPT_ARG_STRING, &opt_journal_crypt, 0, N_("Journal encryption algorithm"), NULL }, + { "journal-crypt-key-size", '\0', POPT_ARG_INT, &opt_journal_crypt_key_size, 0, N_("The size of the journal encryption key"), N_("BITS") }, + { "journal-crypt-key-file", '\0', POPT_ARG_STRING, &opt_journal_crypt_key_file, 0, N_("Read the journal encryption key from a file"), NULL }, + + { "integrity-no-journal", 'D', POPT_ARG_NONE, &opt_integrity_nojournal, 0, N_("Disable journal for integrity device"), NULL }, + { "integrity-recovery-mode", 'R', POPT_ARG_NONE, &opt_integrity_recovery, 0, N_("Recovery mode (no journal, no tag checking)"), NULL }, + { "integrity-bitmap-mode", 'B', POPT_ARG_NONE, &opt_integrity_bitmap, 0, N_("Use bitmap to track changes and disable journal for integrity device"), NULL }, + { "integrity-recalculate", '\0', POPT_ARG_NONE, &opt_integrity_recalculate, 0, N_("Recalculate initial tags automatically."), NULL }, + POPT_TABLEEND + }; + poptContext popt_context; + struct action_type *action; + const char *aname; + int r; + + crypt_set_log_callback(NULL, tool_log, NULL); + + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, LOCALEDIR); + textdomain(PACKAGE); + + popt_context = poptGetContext("integrity", argc, argv, popt_options, 0); + poptSetOtherOptionHelp(popt_context, + _("[OPTION...] ")); + + + while ((r = poptGetNextOpt(popt_context)) >= 0) { + } + + if (r < -1) + usage(popt_context, EXIT_FAILURE, poptStrerror(r), + poptBadOption(popt_context, POPT_BADOPTION_NOALIAS)); + + if (!(aname = poptGetArg(popt_context))) + usage(popt_context, EXIT_FAILURE, _("Argument missing."), + poptGetInvocationName(popt_context)); + + action_argc = 0; + action_argv = poptGetArgs(popt_context); + /* Make return values of poptGetArgs more consistent in case of remaining argc = 0 */ + if (!action_argv) + action_argv = null_action_argv; + + /* Count args, somewhat unnice, change? */ + while (action_argv[action_argc] != NULL) + action_argc++; + + /* Handle aliases */ + if (!strcmp(aname, "create") && action_argc > 1) { + /* create command had historically switched arguments */ + if (action_argv[0] && action_argv[1]) { + const char *tmp = action_argv[0]; + action_argv[0] = action_argv[1]; + action_argv[1] = tmp; + } + aname = "open"; + } else if (!strcmp(aname, "remove")) { + aname = "close"; + } + + for (action = action_types; action->type; action++) + if (strcmp(action->type, aname) == 0) + break; + + if (!action->type) + usage(popt_context, EXIT_FAILURE, _("Unknown action."), + poptGetInvocationName(popt_context)); + + if (action_argc < action->required_action_argc) { + char buf[128]; + snprintf(buf, 128,_("%s: requires %s as arguments"), action->type, action->arg_desc); + usage(popt_context, EXIT_FAILURE, buf, + poptGetInvocationName(popt_context)); + } + + if (!strcmp(aname, "format") && opt_tag_size == 0) + opt_tag_size = DEFAULT_TAG_SIZE; + + if (opt_integrity_recalculate && strcmp(aname, "open")) + usage(popt_context, EXIT_FAILURE, + _("Option --integrity-recalculate can be used only for open action."), + poptGetInvocationName(popt_context)); + + if (opt_interleave_sectors < 0 || opt_journal_watermark < 0 || + opt_journal_commit_time < 0 || opt_tag_size < 0 || + opt_sector_size < 0 || opt_buffer_sectors < 0 || + opt_integrity_key_size < 0 || opt_journal_integrity_key_size < 0 || + opt_journal_crypt_key_size < 0 || opt_bitmap_flush_time < 0 || opt_bitmap_sectors_per_bit < 0) + usage(popt_context, EXIT_FAILURE, + _("Negative number for option not permitted."), + poptGetInvocationName(popt_context)); + + if (strcmp(aname, "format") && (opt_journal_size_str || opt_interleave_sectors || + opt_sector_size || opt_tag_size || opt_no_wipe )) + usage(popt_context, EXIT_FAILURE, + _("Options --journal-size, --interleave-sectors, --sector-size, --tag-size" + " and --no-wipe can be used only for format action.\n"), + poptGetInvocationName(popt_context)); + + if (opt_journal_size_str && + tools_string_to_size(NULL, opt_journal_size_str, &opt_journal_size)) + usage(popt_context, EXIT_FAILURE, _("Invalid journal size specification."), + poptGetInvocationName(popt_context)); + + if ((opt_integrity_key_file && !opt_integrity_key_size) || + (!opt_integrity_key_file && opt_integrity_key_size)) + usage(popt_context, EXIT_FAILURE, _("Both key file and key size options must be specified."), + poptGetInvocationName(popt_context)); + if (!opt_integrity && opt_integrity_key_file) + usage(popt_context, EXIT_FAILURE, _("Integrity algorithm must be specified if integrity key is used."), + poptGetInvocationName(popt_context)); + + if ((opt_journal_integrity_key_file && !opt_journal_integrity_key_size) || + (!opt_journal_integrity_key_file && opt_journal_integrity_key_size)) + usage(popt_context, EXIT_FAILURE, _("Both journal integrity key file and key size options must be specified."), + poptGetInvocationName(popt_context)); + if (!opt_journal_integrity && opt_journal_integrity_key_file) + usage(popt_context, EXIT_FAILURE, _("Journal integrity algorithm must be specified if journal integrity key is used."), + poptGetInvocationName(popt_context)); + + if ((opt_journal_crypt_key_file && !opt_journal_crypt_key_size) || + (!opt_journal_crypt_key_file && opt_journal_crypt_key_size)) + usage(popt_context, EXIT_FAILURE, _("Both journal encryption key file and key size options must be specified."), + poptGetInvocationName(popt_context)); + if (!opt_journal_crypt && opt_journal_crypt_key_file) + usage(popt_context, EXIT_FAILURE, _("Journal encryption algorithm must be specified if journal encryption key is used."), + poptGetInvocationName(popt_context)); + + if (opt_integrity_recovery && opt_integrity_bitmap) + usage(popt_context, EXIT_FAILURE, _("Recovery and bitmap mode options are mutually exclusive."), + poptGetInvocationName(popt_context)); + + if (opt_integrity_bitmap && (opt_journal_integrity_key_file || opt_journal_crypt || opt_journal_watermark || opt_journal_commit_time)) + usage(popt_context, EXIT_FAILURE, _("Journal options cannot be used in bitmap mode."), + poptGetInvocationName(popt_context)); + + if (!opt_integrity_bitmap && (opt_bitmap_flush_time || opt_bitmap_sectors_per_bit)) + usage(popt_context, EXIT_FAILURE, _("Bitmap options can be used only in bitmap mode."), + poptGetInvocationName(popt_context)); + + if (opt_debug) { + opt_verbose = 1; + crypt_set_debug_level(-1); + dbg_version_and_cmd(argc, argv); + } + + r = run_action(action); + poptFreeContext(popt_context); + return r; +} diff --git a/src/utils_blockdev.c b/src/utils_blockdev.c new file mode 100644 index 0000000..abd75fe --- /dev/null +++ b/src/utils_blockdev.c @@ -0,0 +1,189 @@ +/* + * Linux block devices helpers + * + * Copyright (C) 2018-2019 Red Hat, Inc. All rights reserved. + * Copyright (C) 2018-2019 Ondrej Kozina + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#include "cryptsetup.h" +#include +#ifdef HAVE_SYS_SYSMACROS_H +# include /* for major, minor */ +#endif +#include + +#define DM_UUID_LEN 129 +#define DM_BY_ID_PREFIX "dm-uuid-" +#define DM_BY_ID_PREFIX_LEN 8 +#define DM_UUID_PREFIX "CRYPT-" +#define DM_UUID_PREFIX_LEN 6 +#define UUID_LEN 37 /* 36 + \0, libuuid ... */ + +static int dm_prepare_uuid(const char *type, const char *uuid, char *buf, size_t buflen) +{ + char *ptr, uuid2[UUID_LEN] = {0}; + uuid_t uu; + unsigned i = 0; + + /* Remove '-' chars */ + if (uuid) { + if (uuid_parse(uuid, uu) < 0) { + log_dbg("Requested UUID %s has invalid format.", uuid); + return 0; + } + + for (ptr = uuid2, i = 0; i < UUID_LEN; i++) + if (uuid[i] != '-') { + *ptr = uuid[i]; + ptr++; + } + } + + snprintf(buf, buflen, DM_UUID_PREFIX "%s%s%s%s", + type ?: "", type ? "-" : "", + uuid2[0] ? uuid2 : "", uuid2[0] ? "-" : ""); + + return 1; +} + +/* return number of holders in general, if matched dm_uuid prefix it's returned via dm_name */ +/* negative value is error */ +static int lookup_holder_dm_name(const char *dm_uuid, size_t max_len, dev_t devno, char *dm_name, size_t dm_name_length) +{ + struct dirent *entry; + char dm_subpath[PATH_MAX], data_dev_dir[PATH_MAX], uuid[max_len]; + ssize_t s; + struct stat st; + int dmfd, fd, len, r = 0; /* not found */ + DIR *dir; + + if (!dm_name || !dm_name_length) + return -EINVAL; + + *dm_name = '\0'; + + len = snprintf(data_dev_dir, PATH_MAX, "/sys/dev/block/%u:%u/holders", major(devno), minor(devno)); + if (len < 0 || len >= PATH_MAX) + return -EINVAL; + + if (!(dir = opendir(data_dev_dir))) + /* map ENOTDIR to ENOENT we'll handle both errors same */ + return errno == ENOTDIR ? -ENOENT : -errno; + + while (r != 1 && (entry = readdir(dir))) { + if (entry->d_name[0] == '.' || + !strncmp(entry->d_name, "..", 2)) + continue; + + /* there's a holder */ + r++; + + /* we already have a dm_name, just count remaining holders */ + if (*dm_name != '\0') + continue; + + len = snprintf(dm_subpath, PATH_MAX, "%s/%s", entry->d_name, "dm"); + if (len < 0 || len >= PATH_MAX) { + r = -EINVAL; + break; + } + + /* looking for dm-X/dm directory, symlinks are fine */ + dmfd = openat(dirfd(dir), dm_subpath, O_DIRECTORY | O_RDONLY | O_CLOEXEC); + if (dmfd < 0) + continue; + + fd = openat(dmfd, "uuid", O_RDONLY | O_CLOEXEC); + if (fd < 0) { + close(dmfd); + continue; + } + + if (fstat(fd, &st) || !S_ISREG(st.st_mode)) { + close(fd); + close(dmfd); + continue; + } + + /* reads binary data */ + s = read_buffer(fd, uuid, max_len - 1); + close(fd); + uuid[s > 0 ? s : 0] = '\0'; + if (!strncmp(uuid, dm_uuid, strlen(dm_uuid))) + log_dbg("Found candidate device %s", entry->d_name); + else { + close(dmfd); + continue; + } + + fd = openat(dmfd, "name", O_RDONLY | O_CLOEXEC); + if (fd < 0) { + close(dmfd); + continue; + } + + if (fstat(fd, &st) || !S_ISREG(st.st_mode)) { + close(fd); + close(dmfd); + continue; + } + + /* reads binary data */ + s = read_buffer(fd, dm_name, dm_name_length - 1); + close(fd); + close(dmfd); + if (s > 1) { + dm_name[s-1] = '\0'; + log_dbg("Found dm device %s", dm_name); + } + } + + closedir(dir); + + return r; +} + +int tools_lookup_crypt_device(struct crypt_device *cd, const char *type, + const char *data_device_path, char *name, size_t name_length) +{ + int r; + char *c; + struct stat st; + char dev_uuid[DM_UUID_LEN + DM_BY_ID_PREFIX_LEN] = DM_BY_ID_PREFIX; + + if (!dm_prepare_uuid(type, crypt_get_uuid(cd), dev_uuid + DM_BY_ID_PREFIX_LEN, DM_UUID_LEN)) + return -EINVAL; + + c = strrchr(dev_uuid, '-'); + if (!c) + return -EINVAL; + + /* cut of dm name */ + *c = '\0'; + + log_dbg("Looking for any dm device with prefix: %s", dev_uuid); + + if (stat(data_device_path, &st) < 0) + return -ENODEV; + + if (!S_ISBLK(st.st_mode)) + return -ENOTBLK; + + r = lookup_holder_dm_name(dev_uuid + DM_BY_ID_PREFIX_LEN, DM_UUID_LEN, + st.st_rdev, name, name_length); + return r; +} diff --git a/src/utils_luks2.c b/src/utils_luks2.c new file mode 100644 index 0000000..d61c430 --- /dev/null +++ b/src/utils_luks2.c @@ -0,0 +1,139 @@ +/* + * Helper utilities for LUKS2 features + * + * Copyright (C) 2018-2019 Red Hat, Inc. All rights reserved. + * Copyright (C) 2018-2019 Milan Broz + * Copyright (C) 2018-2019 Ondrej Kozina + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#include "cryptsetup.h" + +/* + * FIXME: 4MiBs is max LUKS2 mda length (including binary header). + * In future, read max allowed JSON size from config section. + */ +#define LUKS2_MAX_MDA_SIZE 0x400000 +int tools_read_json_file(struct crypt_device *cd, const char *file, char **json, size_t *json_size) +{ + ssize_t ret; + int fd, block, r; + void *buf = NULL; + + block = tools_signals_blocked(); + if (block) + set_int_block(0); + + if (tools_is_stdin(file)) { + fd = STDIN_FILENO; + log_dbg("STDIN descriptor JSON read requested."); + } else { + log_dbg("File descriptor JSON read requested."); + fd = open(file, O_RDONLY); + if (fd < 0) { + log_err(_("Failed to open file %s in read-only mode."), file); + r = -EINVAL; + goto out; + } + } + + buf = malloc(LUKS2_MAX_MDA_SIZE); + if (!buf) { + r = -ENOMEM; + goto out; + } + + if (isatty(fd) && !opt_batch_mode) + log_std(_("Provide valid LUKS2 token JSON:\n")); + + /* we expect JSON (string) */ + r = 0; + ret = read_buffer_intr(fd, buf, LUKS2_MAX_MDA_SIZE - 1, &quit); + if (ret < 0) { + r = -EIO; + log_err(_("Failed to read JSON file.")); + goto out; + } + check_signal(&r); + if (r) { + log_err(_("\nRead interrupted.")); + goto out; + } + + *json_size = (size_t)ret; + *json = buf; + *(*json + ret) = '\0'; +out: + if (block && !quit) + set_int_block(1); + if (fd >= 0 && fd != STDIN_FILENO) + close(fd); + if (r && buf) { + memset(buf, 0, LUKS2_MAX_MDA_SIZE); + free(buf); + } + return r; +} + +int tools_write_json_file(struct crypt_device *cd, const char *file, const char *json) +{ + int block, fd, r; + size_t json_len; + ssize_t ret; + + if (!json || !(json_len = strlen(json)) || json_len >= LUKS2_MAX_MDA_SIZE) + return -EINVAL; + + block = tools_signals_blocked(); + if (block) + set_int_block(0); + + if (tools_is_stdin(file)) { + fd = STDOUT_FILENO; + log_dbg("STDOUT descriptor JSON write requested."); + } else { + log_dbg("File descriptor JSON write requested."); + fd = open(file, O_CREAT | O_WRONLY, S_IRUSR | S_IWUSR); + } + + if (fd < 0) { + log_err(_("Failed to open file %s in write mode."), file ?: ""); + r = -EINVAL; + goto out; + } + + r = 0; + ret = write_buffer_intr(fd, json, json_len, &quit); + check_signal(&r); + if (r) { + log_err(_("\nWrite interrupted.")); + goto out; + } + if (ret < 0 || (size_t)ret != json_len) { + log_err(_("Failed to write JSON file.")); + r = -EIO; + goto out; + } + + if (isatty(fd)) + (void) write_buffer_intr(fd, "\n", 1, &quit); +out: + if (block && !quit) + set_int_block(1); + if (fd >=0 && fd != STDOUT_FILENO) + close(fd); + return r; +} diff --git a/src/utils_password.c b/src/utils_password.c new file mode 100644 index 0000000..56eb623 --- /dev/null +++ b/src/utils_password.c @@ -0,0 +1,339 @@ +/* + * Password quality check wrapper + * + * Copyright (C) 2012-2019 Red Hat, Inc. All rights reserved. + * Copyright (C) 2012-2019 Milan Broz + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#include "cryptsetup.h" +#include + +int opt_force_password = 0; + +#if defined ENABLE_PWQUALITY +#include + +static int tools_check_pwquality(const char *password) +{ + int r; + void *auxerror; + pwquality_settings_t *pwq; + + log_dbg("Checking new password using default pwquality settings."); + pwq = pwquality_default_settings(); + if (!pwq) + return -EINVAL; + + r = pwquality_read_config(pwq, NULL, &auxerror); + if (r) { + log_err(_("Cannot check password quality: %s"), + pwquality_strerror(NULL, 0, r, auxerror)); + pwquality_free_settings(pwq); + return -EINVAL; + } + + r = pwquality_check(pwq, password, NULL, NULL, &auxerror); + if (r < 0) { + log_err(_("Password quality check failed:\n %s"), + pwquality_strerror(NULL, 0, r, auxerror)); + r = -EPERM; + } else { + log_dbg("New password libpwquality score is %d.", r); + r = 0; + } + + pwquality_free_settings(pwq); + return r; +} +#elif defined ENABLE_PASSWDQC +#include + +static int tools_check_pwquality(const char *password) +{ + passwdqc_params_t params; + char *parse_reason; + const char *check_reason; + const char *config = PASSWDQC_CONFIG_FILE; + + passwdqc_params_reset(¶ms); + + if (*config && passwdqc_params_load(¶ms, &parse_reason, config)) { + log_err(_("Cannot check password quality: %s"), + (parse_reason ? parse_reason : "Out of memory")); + free(parse_reason); + return -EINVAL; + } + + check_reason = passwdqc_check(¶ms.qc, password, NULL, NULL); + if (check_reason) { + log_err(_("Password quality check failed: Bad passphrase (%s)"), + check_reason); + return -EPERM; + } + + return 0; +} +#else /* !(ENABLE_PWQUALITY || ENABLE_PASSWDQC) */ +static int tools_check_pwquality(const char *password) +{ + return 0; +} +#endif /* ENABLE_PWQUALITY || ENABLE_PASSWDQC */ + +/* Password reading helpers */ +static int untimed_read(int fd, char *pass, size_t maxlen) +{ + ssize_t i; + + i = read(fd, pass, maxlen); + if (i > 0) { + pass[i-1] = '\0'; + i = 0; + } else if (i == 0) { /* EOF */ + *pass = 0; + i = -1; + } + return i; +} + +static int timed_read(int fd, char *pass, size_t maxlen, long timeout) +{ + struct timeval t; + fd_set fds = {}; /* Just to avoid scan-build false report for FD_SET */ + int failed = -1; + + FD_ZERO(&fds); + FD_SET(fd, &fds); + t.tv_sec = timeout; + t.tv_usec = 0; + + if (select(fd+1, &fds, NULL, NULL, &t) > 0) + failed = untimed_read(fd, pass, maxlen); + + return failed; +} + +static int interactive_pass(const char *prompt, char *pass, size_t maxlen, + long timeout) +{ + struct termios orig, tmp; + int failed = -1; + int infd, outfd; + + if (maxlen < 1) + return failed; + + /* Read and write to /dev/tty if available */ + infd = open("/dev/tty", O_RDWR); + if (infd == -1) { + infd = STDIN_FILENO; + outfd = STDERR_FILENO; + } else + outfd = infd; + + if (tcgetattr(infd, &orig)) + goto out_err; + + memcpy(&tmp, &orig, sizeof(tmp)); + tmp.c_lflag &= ~ECHO; + + if (prompt && write(outfd, prompt, strlen(prompt)) < 0) + goto out_err; + + tcsetattr(infd, TCSAFLUSH, &tmp); + if (timeout) + failed = timed_read(infd, pass, maxlen, timeout); + else + failed = untimed_read(infd, pass, maxlen); + tcsetattr(infd, TCSAFLUSH, &orig); + +out_err: + if (!failed && write(outfd, "\n", 1)) {}; + + if (infd != STDIN_FILENO) + close(infd); + return failed; +} + +static int crypt_get_key_tty(const char *prompt, + char **key, size_t *key_size, + int timeout, int verify, + struct crypt_device *cd) +{ + int key_size_max = DEFAULT_PASSPHRASE_SIZE_MAX; + int r = -EINVAL; + char *pass = NULL, *pass_verify = NULL; + + *key = NULL; + *key_size = 0; + + log_dbg("Interactive passphrase entry requested."); + + pass = crypt_safe_alloc(key_size_max + 1); + if (!pass) { + log_err( _("Out of memory while reading passphrase.")); + return -ENOMEM; + } + + if (interactive_pass(prompt, pass, key_size_max, timeout)) { + log_err(_("Error reading passphrase from terminal.")); + goto out_err; + } + pass[key_size_max] = '\0'; + + if (verify) { + pass_verify = crypt_safe_alloc(key_size_max); + if (!pass_verify) { + log_err(_("Out of memory while reading passphrase.")); + r = -ENOMEM; + goto out_err; + } + + if (interactive_pass(_("Verify passphrase: "), + pass_verify, key_size_max, timeout)) { + log_err(_("Error reading passphrase from terminal.")); + goto out_err; + } + + if (strncmp(pass, pass_verify, key_size_max)) { + log_err(_("Passphrases do not match.")); + r = -EPERM; + goto out_err; + } + } + + *key = pass; + *key_size = strlen(pass); + r = 0; +out_err: + crypt_safe_free(pass_verify); + if (r) + crypt_safe_free(pass); + return r; +} + +/* + * Note: --key-file=- is interpreted as a read from a binary file (stdin) + * key_size_max == 0 means detect maximum according to input type (tty/file) + */ +int tools_get_key(const char *prompt, + char **key, size_t *key_size, + uint64_t keyfile_offset, size_t keyfile_size_max, + const char *key_file, + int timeout, int verify, int pwquality, + struct crypt_device *cd) +{ + char tmp[PATH_MAX], *backing_file; + int r = -EINVAL, block; + + block = tools_signals_blocked(); + if (block) + set_int_block(0); + + if (tools_is_stdin(key_file)) { + if (isatty(STDIN_FILENO)) { + if (keyfile_offset) { + log_err(_("Cannot use offset with terminal input.")); + } else { + if (!prompt && !crypt_get_device_name(cd)) + snprintf(tmp, sizeof(tmp), _("Enter passphrase: ")); + else if (!prompt) { + backing_file = crypt_loop_backing_file(crypt_get_device_name(cd)); + snprintf(tmp, sizeof(tmp), _("Enter passphrase for %s: "), backing_file ?: crypt_get_device_name(cd)); + free(backing_file); + } + r = crypt_get_key_tty(prompt ?: tmp, key, key_size, timeout, verify, cd); + } + } else { + log_dbg("STDIN descriptor passphrase entry requested."); + /* No keyfile means STDIN with EOL handling (\n will end input)). */ + r = crypt_keyfile_device_read(cd, NULL, key, key_size, + keyfile_offset, keyfile_size_max, + key_file ? 0 : CRYPT_KEYFILE_STOP_EOL); + } + } else { + log_dbg("File descriptor passphrase entry requested."); + r = crypt_keyfile_device_read(cd, key_file, key, key_size, + keyfile_offset, keyfile_size_max, 0); + } + + if (block && !quit) + set_int_block(1); + + /* Check pwquality for password (not keyfile) */ + if (pwquality && !opt_force_password && !key_file && !r) + r = tools_check_pwquality(*key); + + return r; +} + +void tools_passphrase_msg(int r) +{ + if (r == -EPERM) + log_err(_("No key available with this passphrase.")); + else if (r == -ENOENT) + log_err(_("No usable keyslot is available.")); +} + +int tools_read_mk(const char *file, char **key, int keysize) +{ + int fd; + + if (!keysize || !key) + return -EINVAL; + + *key = crypt_safe_alloc(keysize); + if (!*key) + return -ENOMEM; + + fd = open(file, O_RDONLY); + if (fd == -1) { + log_err(_("Cannot read keyfile %s."), file); + goto fail; + } + + if (read_buffer(fd, *key, keysize) != keysize) { + log_err(_("Cannot read %d bytes from keyfile %s."), keysize, file); + close(fd); + goto fail; + } + close(fd); + return 0; +fail: + crypt_safe_free(*key); + *key = NULL; + return -EINVAL; +} + +int tools_write_mk(const char *file, const char *key, int keysize) +{ + int fd, r = -EINVAL; + + fd = open(file, O_CREAT|O_EXCL|O_WRONLY, S_IRUSR); + if (fd < 0) { + log_err(_("Cannot open keyfile %s for write."), file); + return r; + } + + if (write_buffer(fd, key, keysize) == keysize) + r = 0; + else + log_err(_("Cannot write to keyfile %s."), file); + + close(fd); + return r; +} diff --git a/src/utils_tools.c b/src/utils_tools.c new file mode 100644 index 0000000..3fd2c50 --- /dev/null +++ b/src/utils_tools.c @@ -0,0 +1,633 @@ +/* + * cryptsetup - setup cryptographic volumes for dm-crypt + * + * Copyright (C) 2004 Jana Saout + * Copyright (C) 2004-2007 Clemens Fruhwirth + * Copyright (C) 2009-2019 Red Hat, Inc. All rights reserved. + * Copyright (C) 2009-2019 Milan Broz + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#include "cryptsetup.h" +#include +#include + +int opt_verbose = 0; +int opt_debug = 0; +int opt_debug_json = 0; +int opt_batch_mode = 0; +int opt_progress_frequency = 0; + +/* interrupt handling */ +volatile int quit = 0; +static int signals_blocked = 0; + +static void int_handler(int sig __attribute__((__unused__))) +{ + quit++; +} + +int tools_signals_blocked(void) +{ + return signals_blocked; +} + +void set_int_block(int block) +{ + sigset_t signals_open; + + log_dbg("%slocking interruption on signal.", block ? "B" : "Unb"); + + sigemptyset(&signals_open); + sigaddset(&signals_open, SIGINT); + sigaddset(&signals_open, SIGTERM); + sigprocmask(block ? SIG_SETMASK : SIG_UNBLOCK, &signals_open, NULL); + signals_blocked = block; + quit = 0; +} + +void set_int_handler(int block) +{ + struct sigaction sigaction_open; + + log_dbg("Installing SIGINT/SIGTERM handler."); + memset(&sigaction_open, 0, sizeof(struct sigaction)); + sigaction_open.sa_handler = int_handler; + sigaction(SIGINT, &sigaction_open, 0); + sigaction(SIGTERM, &sigaction_open, 0); + set_int_block(block); +} + +void check_signal(int *r) +{ + if (quit && !*r) + *r = -EINTR; +} + +#define LOG_MAX_LEN 4096 + +__attribute__((format(printf, 5, 6))) +void clogger(struct crypt_device *cd, int level, const char *file, int line, + const char *format, ...) +{ + va_list argp; + char target[LOG_MAX_LEN + 2]; + + va_start(argp, format); + + if (vsnprintf(&target[0], LOG_MAX_LEN, format, argp) > 0) { + /* All verbose and error messages in tools end with EOL. */ + if (level == CRYPT_LOG_VERBOSE || level == CRYPT_LOG_ERROR || + level == CRYPT_LOG_DEBUG || level == CRYPT_LOG_DEBUG_JSON) + strncat(target, "\n", LOG_MAX_LEN); + + crypt_log(cd, level, target); + } + + va_end(argp); +} + +void tool_log(int level, const char *msg, void *usrptr __attribute__((unused))) +{ + switch(level) { + + case CRYPT_LOG_NORMAL: + fprintf(stdout, "%s", msg); + break; + case CRYPT_LOG_VERBOSE: + if (opt_verbose) + fprintf(stdout, "%s", msg); + break; + case CRYPT_LOG_ERROR: + fprintf(stderr, "%s", msg); + break; + case CRYPT_LOG_DEBUG_JSON: + case CRYPT_LOG_DEBUG: + if (opt_debug) + fprintf(stdout, "# %s", msg); + break; + } +} + +void quiet_log(int level, const char *msg, void *usrptr) +{ + if (!opt_verbose && (level == CRYPT_LOG_ERROR || level == CRYPT_LOG_NORMAL)) + level = CRYPT_LOG_VERBOSE; + tool_log(level, msg, usrptr); +} + +static int _dialog(const char *msg, void *usrptr, int default_answer) +{ + const char *fail_msg = (const char *)usrptr; + char *answer = NULL; + size_t size = 0; + int r = default_answer, block; + + block = tools_signals_blocked(); + if (block) + set_int_block(0); + + if (isatty(STDIN_FILENO) && !opt_batch_mode) { + log_std("\nWARNING!\n========\n"); + log_std("%s\n\nAre you sure? (Type uppercase yes): ", msg); + fflush(stdout); + if(getline(&answer, &size, stdin) == -1) { + r = 0; + /* Aborted by signal */ + if (!quit) + log_err(_("Error reading response from terminal.")); + else + log_dbg("Query interrupted on signal."); + } else { + r = !strcmp(answer, "YES\n"); + if (!r && fail_msg) + log_err("%s", fail_msg); + } + } + + if (block && !quit) + set_int_block(1); + + free(answer); + return r; +} + +int yesDialog(const char *msg, void *usrptr) +{ + return _dialog(msg, usrptr, 1); +} + +int noDialog(const char *msg, void *usrptr) +{ + return _dialog(msg, usrptr, 0); +} + +void show_status(int errcode) +{ + char *crypt_error; + + if(!opt_verbose) + return; + + if(!errcode) { + log_std(_("Command successful.\n")); + return; + } + + if (errcode < 0) + errcode = translate_errno(errcode); + + if (errcode == 1) + crypt_error = _("wrong or missing parameters"); + else if (errcode == 2) + crypt_error = _("no permission or bad passphrase"); + else if (errcode == 3) + crypt_error = _("out of memory"); + else if (errcode == 4) + crypt_error = _("wrong device or file specified"); + else if (errcode == 5) + crypt_error = _("device already exists or device is busy"); + else + crypt_error = _("unknown error"); + + log_std(_("Command failed with code %i (%s).\n"), -errcode, crypt_error); +} + +const char *uuid_or_device(const char *spec) +{ + static char device[PATH_MAX]; + char s, *ptr; + int i = 0, uuid_len = 5; + + /* Check if it is correct UUID= format */ + if (spec && !strncmp(spec, "UUID=", uuid_len)) { + strcpy(device, "/dev/disk/by-uuid/"); + ptr = &device[strlen(device)]; + i = uuid_len; + while ((s = spec[i++]) && i < (PATH_MAX - 13)) { + if (!isxdigit(s) && s != '-') + return spec; /* Bail it out */ + if (isalpha(s)) + s = tolower(s); + *ptr++ = s; + } + *ptr = '\0'; + return device; + } + + return spec; +} + +__attribute__ ((noreturn)) void usage(poptContext popt_context, + int exitcode, const char *error, + const char *more) +{ + poptPrintUsage(popt_context, stderr, 0); + if (error) + log_err("%s: %s", more, error); + poptFreeContext(popt_context); + exit(exitcode); +} + +void dbg_version_and_cmd(int argc, const char **argv) +{ + int i; + + log_std("# %s %s processing \"", PACKAGE_NAME, PACKAGE_VERSION); + for (i = 0; i < argc; i++) { + if (i) + log_std(" "); + log_std("%s", argv[i]); + } + log_std("\"\n"); +} + +/* Translate exit code to simple codes */ +int translate_errno(int r) +{ + switch (r) { + case 0: r = EXIT_SUCCESS; break; + case -EEXIST: + case -EBUSY: r = 5; break; + case -ENOTBLK: + case -ENODEV: r = 4; break; + case -ENOMEM: r = 3; break; + case -EPERM: r = 2; break; + case -EINVAL: + case -ENOENT: + case -ENOSYS: + default: r = EXIT_FAILURE; + } + return r; +} + +void tools_keyslot_msg(int keyslot, crypt_object_op op) +{ + if (keyslot < 0) + return; + + if (op == CREATED) + log_verbose(_("Key slot %i created."), keyslot); + else if (op == UNLOCKED) + log_verbose(_("Key slot %i unlocked."), keyslot); + else if (op == REMOVED) + log_verbose(_("Key slot %i removed."), keyslot); +} + +void tools_token_msg(int token, crypt_object_op op) +{ + if (token < 0) + return; + + if (op == CREATED) + log_verbose(_("Token %i created."), token); + else if (op == REMOVED) + log_verbose(_("Token %i removed."), token); +} + +/* + * Device size string parsing, suffixes: + * s|S - 512 bytes sectors + * k |K |m |M |g |G |t |T - 1024 base + * kiB|KiB|miB|MiB|giB|GiB|tiB|TiB - 1024 base + * kb |KB |mM |MB |gB |GB |tB |TB - 1000 base + */ +int tools_string_to_size(struct crypt_device *cd, const char *s, uint64_t *size) +{ + char *endp = NULL; + size_t len; + uint64_t mult_base, mult, tmp; + + *size = strtoull(s, &endp, 10); + if (!isdigit(s[0]) || + (errno == ERANGE && *size == ULLONG_MAX) || + (errno != 0 && *size == 0)) + return -EINVAL; + + if (!endp || !*endp) + return 0; + + len = strlen(endp); + /* Allow "B" and "iB" suffixes */ + if (len > 3 || + (len == 3 && (endp[1] != 'i' || endp[2] != 'B')) || + (len == 2 && endp[1] != 'B')) + return -EINVAL; + + if (len == 1 || len == 3) + mult_base = 1024; + else + mult_base = 1000; + + mult = 1; + switch (endp[0]) { + case 's': + case 'S': mult = 512; + break; + case 't': + case 'T': mult *= mult_base; + /* Fall through */ + case 'g': + case 'G': mult *= mult_base; + /* Fall through */ + case 'm': + case 'M': mult *= mult_base; + /* Fall through */ + case 'k': + case 'K': mult *= mult_base; + break; + default: + return -EINVAL; + } + + tmp = *size * mult; + if (*size && (tmp / *size) != mult) { + log_dbg("Device size overflow."); + return -EINVAL; + } + + *size = tmp; + return 0; +} + +/* Time progress helper */ + +/* The difference in seconds between two times in "timeval" format. */ +static double time_diff(struct timeval *start, struct timeval *end) +{ + return (end->tv_sec - start->tv_sec) + + (end->tv_usec - start->tv_usec) / 1E6; +} + +void tools_clear_line(void) +{ + if (opt_progress_frequency) + return; + /* vt100 code clear line */ + log_std("\33[2K\r"); +} + +static void tools_time_progress(uint64_t device_size, uint64_t bytes, uint64_t *start_bytes, + struct timeval *start_time, struct timeval *end_time) +{ + struct timeval now_time; + unsigned long long mbytes, eta; + double tdiff, uib, frequency; + int final = (bytes == device_size); + const char *eol, *ustr = ""; + + if (opt_batch_mode) + return; + + gettimeofday(&now_time, NULL); + if (start_time->tv_sec == 0 && start_time->tv_usec == 0) { + *start_time = now_time; + *end_time = now_time; + *start_bytes = bytes; + return; + } + + if (opt_progress_frequency) { + frequency = (double)opt_progress_frequency; + eol = "\n"; + } else { + frequency = 0.5; + eol = ""; + } + + if (!final && time_diff(end_time, &now_time) < frequency) + return; + + *end_time = now_time; + + tdiff = time_diff(start_time, end_time); + if (!tdiff) + return; + + mbytes = bytes / 1024 / 1024; + uib = (double)(bytes - *start_bytes) / tdiff; + + /* FIXME: calculate this from last minute only. */ + eta = (unsigned long long)(device_size / uib - tdiff); + + if (uib > 1073741824.0f) { + uib /= 1073741824.0f; + ustr = "Gi"; + } else if (uib > 1048576.0f) { + uib /= 1048576.0f; + ustr = "Mi"; + } else if (uib > 1024.0f) { + uib /= 1024.0f; + ustr = "Ki"; + } + + tools_clear_line(); + if (final) + log_std("Finished, time %02llu:%02llu.%03llu, " + "%4llu MiB written, speed %5.1f %sB/s\n", + (unsigned long long)tdiff / 60, + (unsigned long long)tdiff % 60, + (unsigned long long)((tdiff - floor(tdiff)) * 1000.0), + mbytes, uib, ustr); + else + log_std("Progress: %5.1f%%, ETA %02llu:%02llu, " + "%4llu MiB written, speed %5.1f %sB/s%s", + (double)bytes / device_size * 100, + eta / 60, eta % 60, mbytes, uib, ustr, eol); + fflush(stdout); +} + +int tools_wipe_progress(uint64_t size, uint64_t offset, void *usrptr) +{ + static struct timeval start_time = {}, end_time = {}; + static uint64_t start_offset = 0; + int r = 0; + + tools_time_progress(size, offset, &start_offset, &start_time, &end_time); + + check_signal(&r); + if (r) { + tools_clear_line(); + log_err(_("\nWipe interrupted.")); + } + + return r; +} + +static void report_partition(const char *value, const char *device) +{ + if (opt_batch_mode) + log_dbg("Device %s already contains a '%s' partition signature.", device, value); + else + log_std(_("WARNING: Device %s already contains a '%s' partition signature.\n"), device, value); +} + +static void report_superblock(const char *value, const char *device) +{ + if (opt_batch_mode) + log_dbg("Device %s already contains a '%s' superblock signature.", device, value); + else + log_std(_("WARNING: Device %s already contains a '%s' superblock signature.\n"), device, value); +} + +int tools_detect_signatures(const char *device, int ignore_luks, size_t *count) +{ + int r; + size_t tmp_count; + struct blkid_handle *h; + blk_probe_status pr; + + if (!count) + count = &tmp_count; + + *count = 0; + + if (!blk_supported()) { + log_dbg("Blkid support disabled."); + return 0; + } + + if ((r = blk_init_by_path(&h, device))) { + log_err(_("Failed to initialize device signature probes.")); + return -EINVAL; + } + + blk_set_chains_for_full_print(h); + + if (ignore_luks && blk_superblocks_filter_luks(h)) { + r = -EINVAL; + goto out; + } + + while ((pr = blk_probe(h)) < PRB_EMPTY) { + if (blk_is_partition(h)) + report_partition(blk_get_partition_type(h), device); + else if (blk_is_superblock(h)) + report_superblock(blk_get_superblock_type(h), device); + else { + log_dbg("Internal tools_detect_signatures() error."); + r = -EINVAL; + goto out; + } + (*count)++; + } + + if (pr == PRB_FAIL) + r = -EINVAL; +out: + blk_free(h); + return r; +} + +int tools_wipe_all_signatures(const char *path) +{ + int fd, flags, r; + blk_probe_status pr; + struct stat st; + struct blkid_handle *h = NULL; + + if (!blk_supported()) { + log_dbg("Blkid support disabled."); + return 0; + } + + if (stat(path, &st)) { + log_err(_("Failed to stat device %s."), path); + return -EINVAL; + } + + flags = O_RDWR; + if (S_ISBLK(st.st_mode)) + flags |= O_EXCL; + + /* better than opening regular file with O_EXCL (undefined) */ + /* coverity[toctou] */ + fd = open(path, flags); + if (fd < 0) { + if (errno == EBUSY) + log_err(_("Device %s is in use. Can not proceed with format operation."), path); + else + log_err(_("Failed to open file %s in read/write mode."), path); + return -EINVAL; + } + + if ((r = blk_init_by_fd(&h, fd))) { + log_err(_("Failed to initialize device signature probes.")); + r = -EINVAL; + goto out; + } + + blk_set_chains_for_wipes(h); + + while ((pr = blk_probe(h)) < PRB_EMPTY) { + if (blk_is_partition(h)) + log_verbose(_("Existing '%s' partition signature (offset: %" PRIi64 " bytes) on device %s will be wiped."), + blk_get_partition_type(h), blk_get_offset(h), path); + if (blk_is_superblock(h)) + log_verbose(_("Existing '%s' superblock signature (offset: %" PRIi64 " bytes) on device %s will be wiped."), + blk_get_superblock_type(h), blk_get_offset(h), path); + if (blk_do_wipe(h)) { + log_err(_("Failed to wipe device signature.")); + r = -EINVAL; + goto out; + } + } + + if (pr != PRB_EMPTY) { + log_err(_("Failed to probe device %s for a signature."), path); + r = -EINVAL; + } +out: + close(fd); + blk_free(h); + 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). + */ +int tools_is_stdin(const char *key_file) +{ + if (!key_file) + return 1; + + return strcmp(key_file, "-") ? 0 : 1; +} + +int tools_reencrypt_progress(uint64_t size, uint64_t offset, void *usrptr) +{ + static struct timeval start_time = {}, end_time = {}; + static uint64_t start_offset = 0; + int r = 0; + + tools_time_progress(size, offset, &start_offset, &start_time, &end_time); + + check_signal(&r); + if (r) { + tools_clear_line(); + log_err(_("\nReencryption interrupted.")); + } + + return r; +} diff --git a/src/veritysetup.c b/src/veritysetup.c new file mode 100644 index 0000000..c2fde06 --- /dev/null +++ b/src/veritysetup.c @@ -0,0 +1,562 @@ +/* + * veritysetup - setup cryptographic volumes for dm-verity + * + * Copyright (C) 2012-2019 Red Hat, Inc. All rights reserved. + * Copyright (C) 2012-2019 Milan Broz + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#include "cryptsetup.h" + +#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 uint64_t data_blocks = 0; +static const char *salt_string = NULL; +static uint64_t hash_offset = 0; +static uint64_t fec_offset = 0; +static const char *opt_uuid = NULL; +static int opt_restart_on_corruption = 0; +static int opt_ignore_corruption = 0; +static int opt_ignore_zero_blocks = 0; +static int opt_check_at_most_once = 0; + +static const char **action_argv; +static int action_argc; + +static int _prepare_format(struct crypt_params_verity *params, + const char *data_device, + uint32_t flags) +{ + char *salt = NULL; + int len; + + params->hash_name = hash_algorithm ?: DEFAULT_VERITY_HASH; + params->data_device = data_device; + params->fec_device = fec_device; + params->fec_roots = fec_roots; + + if (salt_string && !strcmp(salt_string, "-")) { + params->salt_size = 0; + params->salt = NULL; + } else if (salt_string) { + len = crypt_hex_to_bytes(salt_string, &salt, 0); + if (len < 0) { + log_err(_("Invalid salt string specified.")); + return -EINVAL; + } + params->salt_size = len; + params->salt = salt; + } else { + params->salt_size = DEFAULT_VERITY_SALT_SIZE; + params->salt = NULL; + } + + params->data_block_size = data_block_size; + params->hash_block_size = 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->flags = flags; + + return 0; +} + +static int action_format(int arg) +{ + struct crypt_device *cd = NULL; + struct crypt_params_verity params = {}; + uint32_t flags = CRYPT_VERITY_CREATE_HASH; + int r; + + /* Try to create hash image if doesn't exist */ + r = open(action_argv[1], O_WRONLY | O_EXCL | O_CREAT, S_IRUSR | S_IWUSR); + if (r < 0 && errno != EEXIST) { + log_err(_("Cannot create hash image %s for writing."), action_argv[1]); + return -EINVAL; + } else if (r >= 0) { + log_dbg("Created hash image %s.", action_argv[1]); + 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 (r < 0 && errno != EEXIST) { + log_err(_("Cannot create FEC image %s for writing."), fec_device); + return -EINVAL; + } else if (r >= 0) { + log_dbg("Created FEC image %s.", fec_device); + close(r); + } + } + + if ((r = crypt_init(&cd, action_argv[1]))) + goto out; + + if (!use_superblock) + flags |= CRYPT_VERITY_NO_HEADER; + + r = _prepare_format(¶ms, action_argv[0], flags); + if (r < 0) + goto out; + + r = crypt_format(cd, CRYPT_VERITY, NULL, NULL, opt_uuid, NULL, 0, ¶ms); + if (!r) + crypt_dump(cd); +out: + crypt_free(cd); + free(CONST_CAST(char*)params.salt); + return r; +} + +static int _activate(const char *dm_device, + const char *data_device, + const char *hash_device, + const char *root_hash, + uint32_t flags) +{ + struct crypt_device *cd = NULL; + struct crypt_params_verity params = {}; + uint32_t activate_flags = CRYPT_ACTIVATE_READONLY; + char *root_hash_bytes = NULL; + ssize_t hash_size; + int r; + + if ((r = crypt_init_data_device(&cd, hash_device, data_device))) + goto out; + + if (opt_ignore_corruption) + activate_flags |= CRYPT_ACTIVATE_IGNORE_CORRUPTION; + if (opt_restart_on_corruption) + activate_flags |= CRYPT_ACTIVATE_RESTART_ON_CORRUPTION; + if (opt_ignore_zero_blocks) + activate_flags |= CRYPT_ACTIVATE_IGNORE_ZERO_BLOCKS; + if (opt_check_at_most_once) + activate_flags |= CRYPT_ACTIVATE_CHECK_AT_MOST_ONCE; + + if (use_superblock) { + 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; + r = crypt_load(cd, CRYPT_VERITY, ¶ms); + } else { + r = _prepare_format(¶ms, data_device, flags | CRYPT_VERITY_NO_HEADER); + if (r < 0) + goto out; + r = crypt_format(cd, CRYPT_VERITY, NULL, NULL, NULL, NULL, 0, ¶ms); + } + if (r < 0) + goto out; + + hash_size = crypt_get_volume_key_size(cd); + if (crypt_hex_to_bytes(root_hash, &root_hash_bytes, 0) != hash_size) { + log_err(_("Invalid root hash string specified.")); + r = -EINVAL; + goto out; + } + r = crypt_activate_by_volume_key(cd, dm_device, + root_hash_bytes, + hash_size, + activate_flags); +out: + crypt_free(cd); + free(root_hash_bytes); + free(CONST_CAST(char*)params.salt); + return r; +} + +static int action_open(int arg) +{ + return _activate(action_argv[1], + action_argv[0], + action_argv[2], + action_argv[3], 0); +} + +static int action_verify(int arg) +{ + return _activate(NULL, + action_argv[0], + action_argv[1], + action_argv[2], + CRYPT_VERITY_CHECK_HASH); +} + +static int action_close(int arg) +{ + struct crypt_device *cd = NULL; + int r; + + r = crypt_init_by_name(&cd, action_argv[0]); + if (r == 0) + r = crypt_deactivate(cd, action_argv[0]); + + crypt_free(cd); + return r; +} + +static int action_status(int arg) +{ + crypt_status_info ci; + struct crypt_active_device cad; + struct crypt_params_verity vp = {}; + struct crypt_device *cd = NULL; + struct stat st; + char *backing_file; + unsigned i, path = 0; + int r = 0; + + /* perhaps a path, not a dm device name */ + if (strchr(action_argv[0], '/') && !stat(action_argv[0], &st)) + path = 1; + + ci = crypt_status(NULL, action_argv[0]); + switch (ci) { + case CRYPT_INVALID: + r = -EINVAL; + break; + case CRYPT_INACTIVE: + if (path) + log_std("%s is inactive.\n", action_argv[0]); + else + log_std("%s/%s is inactive.\n", crypt_get_dir(), action_argv[0]); + r = -ENODEV; + break; + case CRYPT_ACTIVE: + case CRYPT_BUSY: + if (path) + log_std("%s is active%s.\n", action_argv[0], + ci == CRYPT_BUSY ? " and is in use" : ""); + else + log_std("%s/%s is active%s.\n", crypt_get_dir(), action_argv[0], + ci == CRYPT_BUSY ? " and is in use" : ""); + + r = crypt_init_by_name_and_header(&cd, action_argv[0], NULL); + if (r < 0) + goto out; + + log_std(" type: %s\n", crypt_get_type(cd) ?: "n/a"); + + r = crypt_get_active_device(cd, action_argv[0], &cad); + if (r < 0) + goto out; + + /* Print only VERITY type devices */ + r = crypt_get_verity_info(cd, &vp); + if (r < 0) + goto out; + + log_std(" status: %s\n", + cad.flags & CRYPT_ACTIVATE_CORRUPTED ? "corrupted" : "verified"); + + log_std(" hash type: %u\n", vp.hash_type); + log_std(" data block: %u\n", vp.data_block_size); + log_std(" hash block: %u\n", vp.hash_block_size); + log_std(" hash name: %s\n", vp.hash_name); + log_std(" salt: "); + if (vp.salt_size) + for(i = 0; i < vp.salt_size; i++) + log_std("%02hhx", (const char)vp.salt[i]); + else + log_std("-"); + log_std("\n"); + + log_std(" data device: %s\n", vp.data_device); + if ((backing_file = crypt_loop_backing_file(vp.data_device))) { + log_std(" data loop: %s\n", backing_file); + free(backing_file); + } + log_std(" size: %" PRIu64 " sectors\n", cad.size); + log_std(" mode: %s\n", cad.flags & CRYPT_ACTIVATE_READONLY ? + "readonly" : "read/write"); + + log_std(" hash device: %s\n", vp.hash_device); + if ((backing_file = crypt_loop_backing_file(vp.hash_device))) { + log_std(" hash loop: %s\n", backing_file); + free(backing_file); + } + log_std(" hash offset: %" PRIu64 " sectors\n", + vp.hash_area_offset * vp.hash_block_size / 512); + + if (vp.fec_device) { + log_std(" FEC device: %s\n", vp.fec_device); + if ((backing_file = crypt_loop_backing_file(vp.fec_device))) { + log_std(" FEC loop: %s\n", backing_file); + free(backing_file); + } + log_std(" FEC offset: %" PRIu64 " sectors\n", + vp.fec_area_offset * vp.hash_block_size / 512); + log_std(" FEC roots: %u\n", vp.fec_roots); + } + if (cad.flags & (CRYPT_ACTIVATE_IGNORE_CORRUPTION| + CRYPT_ACTIVATE_RESTART_ON_CORRUPTION| + CRYPT_ACTIVATE_IGNORE_ZERO_BLOCKS| + CRYPT_ACTIVATE_CHECK_AT_MOST_ONCE)) + log_std(" flags: %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_IGNORE_ZERO_BLOCKS) ? "ignore_zero_blocks " : "", + (cad.flags & CRYPT_ACTIVATE_CHECK_AT_MOST_ONCE) ? "check_at_most_once" : ""); + } +out: + crypt_free(cd); + if (r == -ENOTSUP) + r = 0; + return r; +} + +static int action_dump(int arg) +{ + struct crypt_device *cd = NULL; + struct crypt_params_verity params = {}; + int r; + + if ((r = crypt_init(&cd, action_argv[0]))) + return r; + + params.hash_area_offset = hash_offset; + params.fec_area_offset = fec_offset; + r = crypt_load(cd, CRYPT_VERITY, ¶ms); + if (!r) + crypt_dump(cd); + crypt_free(cd); + return r; +} + +static struct action_type { + const char *type; + int (*handler)(int); + int required_action_argc; + const char *arg_desc; + const char *desc; +} action_types[] = { + { "format", action_format, 2, N_(" "),N_("format device") }, + { "verify", action_verify, 3, N_(" "),N_("verify device") }, + { "open", action_open, 4, N_(" "),N_("open device as ") }, + { "close", action_close, 1, N_(""),N_("close device (remove mapping)") }, + { "status", action_status, 1, N_(""),N_("show active device status") }, + { "dump", action_dump, 1, N_(""),N_("show on-disk information") }, + { NULL, NULL, 0, NULL, NULL } +}; + +static void help(poptContext popt_context, + enum poptCallbackReason reason __attribute__((unused)), + struct poptOption *key, + const char *arg __attribute__((unused)), + void *data __attribute__((unused))) +{ + struct action_type *action; + + if (key->shortName == '?') { + log_std("%s %s\n", PACKAGE_VERITY, PACKAGE_VERSION); + poptPrintHelp(popt_context, stdout, 0); + log_std(_("\n" + " is one of:\n")); + for(action = action_types; action->type; action++) + log_std("\t%s %s - %s\n", action->type, _(action->arg_desc), _(action->desc)); + log_std(_("\n" + " is the device to create under %s\n" + " is the data device\n" + " is the device containing verification data\n" + " hash of the root node on \n"), + crypt_get_dir()); + + log_std(_("\nDefault compiled-in dm-verity parameters:\n" + "\tHash: %s, Data block (bytes): %u, " + "Hash block (bytes): %u, Salt size: %u, Hash format: %u\n"), + DEFAULT_VERITY_HASH, DEFAULT_VERITY_DATA_BLOCK, + DEFAULT_VERITY_HASH_BLOCK, DEFAULT_VERITY_SALT_SIZE, + 1); + poptFreeContext(popt_context); + exit(EXIT_SUCCESS); + } else if (key->shortName == 'V') { + log_std("%s %s\n", PACKAGE_VERITY, PACKAGE_VERSION); + poptFreeContext(popt_context); + exit(EXIT_SUCCESS); + } else + usage(popt_context, EXIT_SUCCESS, NULL, NULL); +} + +static int run_action(struct action_type *action) +{ + int r; + + log_dbg("Running command %s.", action->type); + + r = action->handler(0); + + show_status(r); + return translate_errno(r); +} + +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 }, + { "help", '?', POPT_ARG_NONE, NULL, 0, N_("Show this help message"), NULL }, + { "usage", '\0', POPT_ARG_NONE, NULL, 0, N_("Display brief usage"), NULL }, + { "version",'V', POPT_ARG_NONE, NULL, 0, N_("Print package version"), NULL }, + POPT_TABLEEND + }; + static struct poptOption popt_options[] = { + { NULL, '\0', POPT_ARG_INCLUDE_TABLE, popt_help_options, 0, N_("Help options:"), NULL }, + { "verbose", 'v', POPT_ARG_NONE, &opt_verbose, 0, N_("Shows more detailed error messages"), NULL }, + { "debug", '\0', POPT_ARG_NONE, &opt_debug, 0, N_("Show debug messages"), NULL }, + { "no-superblock", 0, POPT_ARG_VAL, &use_superblock, 0, N_("Do not use verity superblock"), NULL }, + { "format", 0, POPT_ARG_INT, &hash_type, 0, N_("Format type (1 - normal, 0 - original Chrome OS)"), N_("number") }, + { "data-block-size", 0, POPT_ARG_INT, &data_block_size, 0, N_("Block size on the data device"), N_("bytes") }, + { "hash-block-size", 0, POPT_ARG_INT, &hash_block_size, 0, N_("Block size on the hash device"), N_("bytes") }, + { "fec-roots", 0, POPT_ARG_INT, &fec_roots, 0, N_("FEC parity bytes"), N_("bytes") }, + { "data-blocks", 0, POPT_ARG_STRING, &popt_tmp, 1, N_("The number of blocks in the data file"), N_("blocks") }, + { "fec-device", 0, POPT_ARG_STRING, &fec_device, 0, N_("Path to device with error correction data"), N_("path") }, + { "hash-offset", 0, POPT_ARG_STRING, &popt_tmp, 2, N_("Starting offset on the hash device"), N_("bytes") }, + { "fec-offset", 0, POPT_ARG_STRING, &popt_tmp, 3, N_("Starting offset on the FEC device"), N_("bytes") }, + { "hash", 'h', POPT_ARG_STRING, &hash_algorithm, 0, N_("Hash algorithm"), N_("string") }, + { "salt", 's', POPT_ARG_STRING, &salt_string, 0, N_("Salt"), N_("hex string") }, + { "uuid", '\0', POPT_ARG_STRING, &opt_uuid, 0, N_("UUID for device to use"), NULL }, + { "restart-on-corruption", 0,POPT_ARG_NONE,&opt_restart_on_corruption, 0, N_("Restart 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 }, + POPT_TABLEEND + }; + + poptContext popt_context; + struct action_type *action; + const char *aname; + int r; + + crypt_set_log_callback(NULL, tool_log, NULL); + + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, LOCALEDIR); + textdomain(PACKAGE); + + popt_context = poptGetContext("verity", argc, argv, popt_options, 0); + poptSetOtherOptionHelp(popt_context, + _("[OPTION...] ")); + + while((r = poptGetNextOpt(popt_context)) > 0) { + unsigned long long ull_value; + char *endp; + + errno = 0; + ull_value = strtoull(popt_tmp, &endp, 10); + if (*endp || !*popt_tmp || !isdigit(*popt_tmp) || + (errno == ERANGE && ull_value == ULLONG_MAX) || + (errno != 0 && ull_value == 0)) + r = POPT_ERROR_BADNUMBER; + + switch(r) { + case 1: + data_blocks = ull_value; + break; + case 2: + hash_offset = ull_value; + break; + case 3: + fec_offset = ull_value; + break; + } + + if (r < 0) + break; + } + + if (r < -1) + usage(popt_context, EXIT_FAILURE, poptStrerror(r), + poptBadOption(popt_context, POPT_BADOPTION_NOALIAS)); + + if (!(aname = poptGetArg(popt_context))) + usage(popt_context, EXIT_FAILURE, _("Argument missing."), + poptGetInvocationName(popt_context)); + + action_argc = 0; + action_argv = poptGetArgs(popt_context); + /* Make return values of poptGetArgs more consistent in case of remaining argc = 0 */ + if(!action_argv) + action_argv = null_action_argv; + + /* Count args, somewhat unnice, change? */ + while(action_argv[action_argc] != NULL) + action_argc++; + + /* Handle aliases */ + if (!strcmp(aname, "create") && action_argc > 1) { + /* create command had historically switched arguments */ + if (action_argv[0] && action_argv[1]) { + const char *tmp = action_argv[0]; + action_argv[0] = action_argv[1]; + action_argv[1] = tmp; + } + aname = "open"; + } else if (!strcmp(aname, "remove")) { + aname = "close"; + } + + for (action = action_types; action->type; action++) + if (strcmp(action->type, aname) == 0) + break; + + if (!action->type) + usage(popt_context, EXIT_FAILURE, _("Unknown action."), + poptGetInvocationName(popt_context)); + + if (action_argc < action->required_action_argc) { + char buf[128]; + snprintf(buf, 128,_("%s: requires %s as arguments"), action->type, action->arg_desc); + usage(popt_context, EXIT_FAILURE, buf, + poptGetInvocationName(popt_context)); + } + + if (data_block_size < 0 || hash_block_size < 0 || hash_type < 0) { + usage(popt_context, EXIT_FAILURE, + _("Negative number for option not permitted."), + poptGetInvocationName(popt_context)); + } + + if ((opt_ignore_corruption || opt_restart_on_corruption || opt_ignore_zero_blocks) && strcmp(aname, "open")) + usage(popt_context, EXIT_FAILURE, + _("Option --ignore-corruption, --restart-on-corruption or --ignore-zero-blocks is allowed only for open operation.\n"), + poptGetInvocationName(popt_context)); + + if (opt_ignore_corruption && opt_restart_on_corruption) + usage(popt_context, EXIT_FAILURE, + _("Option --ignore-corruption and --restart-on-corruption cannot be used together.\n"), + poptGetInvocationName(popt_context)); + + if (opt_debug) { + opt_verbose = 1; + crypt_set_debug_level(-1); + dbg_version_and_cmd(argc, argv); + } + + r = run_action(action); + poptFreeContext(popt_context); + return r; +} diff --git a/tests/00modules-test b/tests/00modules-test new file mode 100755 index 0000000..64e054a --- /dev/null +++ b/tests/00modules-test @@ -0,0 +1,45 @@ +#!/bin/bash + +[ -z "$CRYPTSETUP_PATH" ] && CRYPTSETUP_PATH=".." + +function pversion() { + if [ ! -x $CRYPTSETUP_PATH/$1 ] ; then + return + fi + + echo -n "$CRYPTSETUP_PATH/" + $CRYPTSETUP_PATH/$1 --version +} + +echo "Cryptsetup test environment ($(date))" +uname -a +if [ "$(cat /proc/sys/crypto/fips_enabled 2>/dev/null)" = "1" ] ; then + echo "Kernel running in FIPS mode." +fi + +if [ -f /etc/os-release ] ; then + source /etc/os-release + echo "$PRETTY_NAME ($NAME) $VERSION" +fi + +echo "Memory" +free -h + +pversion cryptsetup +pversion veritysetup +pversion integritysetup +pversion cryptsetup-reencrypt + +[ $(id -u) != 0 ] && exit 77 + +modprobe dm-crypt >/dev/null 2>&1 +modprobe dm-verity >/dev/null 2>&1 +modprobe dm-integrity >/dev/null 2>&1 +modprobe dm-zero >/dev/null 2>&1 + +dmsetup version + +echo "Device mapper targets:" +dmsetup targets + +exit 0 diff --git a/tests/Makefile.am b/tests/Makefile.am new file mode 100644 index 0000000..70e4d07 --- /dev/null +++ b/tests/Makefile.am @@ -0,0 +1,121 @@ +TESTS = 00modules-test \ + api-test \ + api-test-2 \ + compat-test \ + compat-test2 \ + loopaes-test \ + align-test \ + align-test2 \ + discards-test \ + mode-test \ + password-hash-test \ + tcrypt-compat-test \ + luks1-compat-test \ + device-test \ + keyring-test \ + keyring-compat-test \ + luks2-validation-test \ + luks2-integrity-test \ + vectors-test \ + blockwise-compat + +if VERITYSETUP +TESTS += verity-compat-test +endif + +if REENCRYPT +TESTS += reencryption-compat-test reencryption-compat-test2 luks2-reencryption-test +endif + +if INTEGRITYSETUP +TESTS += integrity-compat-test +endif + +EXTRA_DIST = compatimage.img.xz compatv10image.img.xz \ + compatimage2.img.xz \ + conversion_imgs.tar.xz \ + luks2_keyslot_unassigned.img.xz \ + img_fs_ext4.img.xz img_fs_vfat.img.xz img_fs_xfs.img.xz \ + valid_header_file.xz \ + luks2_valid_hdr.img.xz \ + luks2_header_requirements.xz \ + luks2_header_requirements_free.xz \ + luks2_mda_images.tar.xz \ + evil_hdr-payload_overwrite.xz \ + evil_hdr-stripes_payload_dmg.xz \ + evil_hdr-luks_hdr_damage.xz \ + evil_hdr-small_luks_device.xz \ + evil_hdr-keyslot_overlap.xz \ + tcrypt-images.tar.xz \ + luks1-images.tar.xz \ + 00modules-test \ + compat-test \ + compat-test2 \ + loopaes-test align-test discards-test mode-test password-hash-test \ + align-test2 verity-compat-test \ + reencryption-compat-test \ + reencryption-compat-test2 \ + luks2-reencryption-test \ + tcrypt-compat-test \ + luks1-compat-test \ + luks2-validation-test generators \ + luks2-integrity-test \ + device-test \ + keyring-test \ + keyring-compat-test \ + integrity-compat-test \ + cryptsetup-valg-supps valg.sh valg-api.sh \ + blockwise-compat \ + blkid-luks2-pv.img.xz \ + Makefile.localtest + +CLEANFILES = cryptsetup-tst* valglog* *-fail-*.log +clean-local: + -rm -rf tcrypt-images luks1-images luks2-images conversion_imgs luks2_valid_hdr.img blkid-luks2-pv-img blkid-luks2-pv-img.bcp + +differ_SOURCES = differ.c +differ_CFLAGS = $(AM_CFLAGS) -Wall -O2 + +api_test_SOURCES = api-test.c api_test.h test_utils.c +api_test_LDADD = $(LDADD) ../libcryptsetup.la +api_test_LDFLAGS = $(AM_LDFLAGS) -static +api_test_CFLAGS = -g -Wall -O0 $(AM_CFLAGS) -I$(top_srcdir)/lib/ -I$(top_srcdir)/lib/luks1 +api_test_CPPFLAGS = $(AM_CPPFLAGS) -include config.h + +api_test_2_SOURCES = api-test-2.c api_test.h test_utils.c +api_test_2_LDADD = $(LDADD) ../libcryptsetup.la +api_test_2_LDFLAGS = $(AM_LDFLAGS) -static +api_test_2_CFLAGS = -g -Wall -O0 $(AM_CFLAGS) -I$(top_srcdir)/lib/ -I$(top_srcdir)/lib/luks1 +api_test_2_CPPFLAGS = $(AM_CPPFLAGS) -include config.h + +vectors_test_SOURCES = crypto-vectors.c +vectors_test_LDADD = ../libcrypto_backend.la @CRYPTO_LIBS@ @LIBARGON2_LIBS@ +vectors_test_LDFLAGS = $(AM_LDFLAGS) -static +vectors_test_CFLAGS = $(AM_CFLAGS) -I$(top_srcdir)/lib/crypto_backend/ @CRYPTO_CFLAGS@ +vectors_test_CPPFLAGS = $(AM_CPPFLAGS) -include config.h + +unit_utils_io_SOURCES = unit-utils-io.c +unit_utils_io_LDADD = ../libutils_io.la +unit_utils_io_LDFLAGS = $(AM_LDFLAGS) -static +unit_utils_io_CFLAGS = $(AM_CFLAGS) -I$(top_srcdir)/lib +unit_utils_io_CPPFLAGS = $(AM_CPPFLAGS) -include config.h + +check_PROGRAMS = api-test api-test-2 differ vectors-test unit-utils-io + +conversion_imgs: + @tar xJf conversion_imgs.tar.xz + +compatimage.img: + @xz -k -d compatimage.img.xz + +valgrind-check: api-test api-test-2 differ + @VALG=1 ./compat-test2 + @VALG=1 ./luks2-validation-test + @VALG=1 ./verity-compat-test + @VALG=1 ./integrity-compat-test + @INFOSTRING="api-test-000" ./valg-api.sh ./api-test + @INFOSTRING="api-test-002" ./valg-api.sh ./api-test-2 + @VALG=1 ./luks2-reencryption-test + @VALG=1 ./compat-test + +.PHONY: valgrind-check diff --git a/tests/Makefile.in b/tests/Makefile.in new file mode 100644 index 0000000..4f3f2bf --- /dev/null +++ b/tests/Makefile.in @@ -0,0 +1,1030 @@ +# Makefile.in generated by automake 1.16.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2018 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +TESTS = 00modules-test api-test$(EXEEXT) api-test-2$(EXEEXT) \ + compat-test compat-test2 loopaes-test align-test align-test2 \ + discards-test mode-test password-hash-test tcrypt-compat-test \ + luks1-compat-test device-test keyring-test keyring-compat-test \ + luks2-validation-test luks2-integrity-test \ + vectors-test$(EXEEXT) blockwise-compat $(am__append_1) \ + $(am__append_2) $(am__append_3) +@VERITYSETUP_TRUE@am__append_1 = verity-compat-test +@REENCRYPT_TRUE@am__append_2 = reencryption-compat-test reencryption-compat-test2 luks2-reencryption-test +@INTEGRITYSETUP_TRUE@am__append_3 = integrity-compat-test +check_PROGRAMS = api-test$(EXEEXT) api-test-2$(EXEEXT) differ$(EXEEXT) \ + vectors-test$(EXEEXT) unit-utils-io$(EXEEXT) +subdir = tests +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ + $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \ + $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ + $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ + $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ + $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ + $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \ + $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am_api_test_OBJECTS = api_test-api-test.$(OBJEXT) \ + api_test-test_utils.$(OBJEXT) +api_test_OBJECTS = $(am_api_test_OBJECTS) +api_test_DEPENDENCIES = ../libcryptsetup.la +AM_V_lt = $(am__v_lt_@AM_V@) +am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) +am__v_lt_0 = --silent +am__v_lt_1 = +api_test_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(api_test_CFLAGS) \ + $(CFLAGS) $(api_test_LDFLAGS) $(LDFLAGS) -o $@ +am_api_test_2_OBJECTS = api_test_2-api-test-2.$(OBJEXT) \ + api_test_2-test_utils.$(OBJEXT) +api_test_2_OBJECTS = $(am_api_test_2_OBJECTS) +api_test_2_DEPENDENCIES = ../libcryptsetup.la +api_test_2_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(api_test_2_CFLAGS) \ + $(CFLAGS) $(api_test_2_LDFLAGS) $(LDFLAGS) -o $@ +am_differ_OBJECTS = differ-differ.$(OBJEXT) +differ_OBJECTS = $(am_differ_OBJECTS) +differ_LDADD = $(LDADD) +differ_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(differ_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +am_unit_utils_io_OBJECTS = unit_utils_io-unit-utils-io.$(OBJEXT) +unit_utils_io_OBJECTS = $(am_unit_utils_io_OBJECTS) +unit_utils_io_DEPENDENCIES = ../libutils_io.la +unit_utils_io_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(unit_utils_io_CFLAGS) \ + $(CFLAGS) $(unit_utils_io_LDFLAGS) $(LDFLAGS) -o $@ +am_vectors_test_OBJECTS = vectors_test-crypto-vectors.$(OBJEXT) +vectors_test_OBJECTS = $(am_vectors_test_OBJECTS) +vectors_test_DEPENDENCIES = ../libcrypto_backend.la +vectors_test_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(vectors_test_CFLAGS) \ + $(CFLAGS) $(vectors_test_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__maybe_remake_depfiles = depfiles +am__depfiles_remade = ./$(DEPDIR)/api_test-api-test.Po \ + ./$(DEPDIR)/api_test-test_utils.Po \ + ./$(DEPDIR)/api_test_2-api-test-2.Po \ + ./$(DEPDIR)/api_test_2-test_utils.Po \ + ./$(DEPDIR)/differ-differ.Po \ + ./$(DEPDIR)/unit_utils_io-unit-utils-io.Po \ + ./$(DEPDIR)/vectors_test-crypto-vectors.Po +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_@AM_V@) +am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) +am__v_CC_0 = @echo " CC " $@; +am__v_CC_1 = +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_@AM_V@) +am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) +am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_1 = +SOURCES = $(api_test_SOURCES) $(api_test_2_SOURCES) $(differ_SOURCES) \ + $(unit_utils_io_SOURCES) $(vectors_test_SOURCES) +DIST_SOURCES = $(api_test_SOURCES) $(api_test_2_SOURCES) \ + $(differ_SOURCES) $(unit_utils_io_SOURCES) \ + $(vectors_test_SOURCES) +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +am__tty_colors_dummy = \ + mgn= red= grn= lgn= blu= brg= std=; \ + am__color_tests=no +am__tty_colors = { \ + $(am__tty_colors_dummy); \ + if test "X$(AM_COLOR_TESTS)" = Xno; then \ + am__color_tests=no; \ + elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ + am__color_tests=yes; \ + elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ + am__color_tests=yes; \ + fi; \ + if test $$am__color_tests = yes; then \ + red=''; \ + grn=''; \ + lgn=''; \ + blu=''; \ + mgn=''; \ + brg=''; \ + std=''; \ + fi; \ +} +am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BLKID_CFLAGS = @BLKID_CFLAGS@ +BLKID_LIBS = @BLKID_LIBS@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CRYPTO_CFLAGS = @CRYPTO_CFLAGS@ +CRYPTO_LIBS = @CRYPTO_LIBS@ +CRYPTO_STATIC_LIBS = @CRYPTO_STATIC_LIBS@ +CYGPATH_W = @CYGPATH_W@ +DEFAULT_LUKS2_LOCK_DIR_PERMS = @DEFAULT_LUKS2_LOCK_DIR_PERMS@ +DEFAULT_LUKS2_LOCK_PATH = @DEFAULT_LUKS2_LOCK_PATH@ +DEFAULT_TMPFILESDIR = @DEFAULT_TMPFILESDIR@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DEVMAPPER_CFLAGS = @DEVMAPPER_CFLAGS@ +DEVMAPPER_LIBS = @DEVMAPPER_LIBS@ +DEVMAPPER_STATIC_CFLAGS = @DEVMAPPER_STATIC_CFLAGS@ +DEVMAPPER_STATIC_LIBS = @DEVMAPPER_STATIC_LIBS@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ +GMSGFMT = @GMSGFMT@ +GMSGFMT_015 = @GMSGFMT_015@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTLLIBS = @INTLLIBS@ +INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +JSON_C_CFLAGS = @JSON_C_CFLAGS@ +JSON_C_LIBS = @JSON_C_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBARGON2_CFLAGS = @LIBARGON2_CFLAGS@ +LIBARGON2_LIBS = @LIBARGON2_LIBS@ +LIBCRYPTSETUP_VERSION = @LIBCRYPTSETUP_VERSION@ +LIBCRYPTSETUP_VERSION_INFO = @LIBCRYPTSETUP_VERSION_INFO@ +LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@ +LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@ +LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +MSGFMT = @MSGFMT@ +MSGFMT_015 = @MSGFMT_015@ +MSGMERGE = @MSGMERGE@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NSS_CFLAGS = @NSS_CFLAGS@ +NSS_LIBS = @NSS_LIBS@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OPENSSL_CFLAGS = @OPENSSL_CFLAGS@ +OPENSSL_LIBS = @OPENSSL_LIBS@ +OPENSSL_STATIC_CFLAGS = @OPENSSL_STATIC_CFLAGS@ +OPENSSL_STATIC_LIBS = @OPENSSL_STATIC_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PASSWDQC_LIBS = @PASSWDQC_LIBS@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +POPT_LIBS = @POPT_LIBS@ +POSUB = @POSUB@ +PWQUALITY_CFLAGS = @PWQUALITY_CFLAGS@ +PWQUALITY_LIBS = @PWQUALITY_LIBS@ +PWQUALITY_STATIC_LIBS = @PWQUALITY_STATIC_LIBS@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +USE_NLS = @USE_NLS@ +UUID_LIBS = @UUID_LIBS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +XGETTEXT_015 = @XGETTEXT_015@ +XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +runstatedir = @runstatedir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +systemd_tmpfilesdir = @systemd_tmpfilesdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +EXTRA_DIST = compatimage.img.xz compatv10image.img.xz \ + compatimage2.img.xz \ + conversion_imgs.tar.xz \ + luks2_keyslot_unassigned.img.xz \ + img_fs_ext4.img.xz img_fs_vfat.img.xz img_fs_xfs.img.xz \ + valid_header_file.xz \ + luks2_valid_hdr.img.xz \ + luks2_header_requirements.xz \ + luks2_header_requirements_free.xz \ + luks2_mda_images.tar.xz \ + evil_hdr-payload_overwrite.xz \ + evil_hdr-stripes_payload_dmg.xz \ + evil_hdr-luks_hdr_damage.xz \ + evil_hdr-small_luks_device.xz \ + evil_hdr-keyslot_overlap.xz \ + tcrypt-images.tar.xz \ + luks1-images.tar.xz \ + 00modules-test \ + compat-test \ + compat-test2 \ + loopaes-test align-test discards-test mode-test password-hash-test \ + align-test2 verity-compat-test \ + reencryption-compat-test \ + reencryption-compat-test2 \ + luks2-reencryption-test \ + tcrypt-compat-test \ + luks1-compat-test \ + luks2-validation-test generators \ + luks2-integrity-test \ + device-test \ + keyring-test \ + keyring-compat-test \ + integrity-compat-test \ + cryptsetup-valg-supps valg.sh valg-api.sh \ + blockwise-compat \ + blkid-luks2-pv.img.xz \ + Makefile.localtest + +CLEANFILES = cryptsetup-tst* valglog* *-fail-*.log +differ_SOURCES = differ.c +differ_CFLAGS = $(AM_CFLAGS) -Wall -O2 +api_test_SOURCES = api-test.c api_test.h test_utils.c +api_test_LDADD = $(LDADD) ../libcryptsetup.la +api_test_LDFLAGS = $(AM_LDFLAGS) -static +api_test_CFLAGS = -g -Wall -O0 $(AM_CFLAGS) -I$(top_srcdir)/lib/ -I$(top_srcdir)/lib/luks1 +api_test_CPPFLAGS = $(AM_CPPFLAGS) -include config.h +api_test_2_SOURCES = api-test-2.c api_test.h test_utils.c +api_test_2_LDADD = $(LDADD) ../libcryptsetup.la +api_test_2_LDFLAGS = $(AM_LDFLAGS) -static +api_test_2_CFLAGS = -g -Wall -O0 $(AM_CFLAGS) -I$(top_srcdir)/lib/ -I$(top_srcdir)/lib/luks1 +api_test_2_CPPFLAGS = $(AM_CPPFLAGS) -include config.h +vectors_test_SOURCES = crypto-vectors.c +vectors_test_LDADD = ../libcrypto_backend.la @CRYPTO_LIBS@ @LIBARGON2_LIBS@ +vectors_test_LDFLAGS = $(AM_LDFLAGS) -static +vectors_test_CFLAGS = $(AM_CFLAGS) -I$(top_srcdir)/lib/crypto_backend/ @CRYPTO_CFLAGS@ +vectors_test_CPPFLAGS = $(AM_CPPFLAGS) -include config.h +unit_utils_io_SOURCES = unit-utils-io.c +unit_utils_io_LDADD = ../libutils_io.la +unit_utils_io_LDFLAGS = $(AM_LDFLAGS) -static +unit_utils_io_CFLAGS = $(AM_CFLAGS) -I$(top_srcdir)/lib +unit_utils_io_CPPFLAGS = $(AM_CPPFLAGS) -include config.h +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu tests/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +clean-checkPROGRAMS: + @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list + +api-test$(EXEEXT): $(api_test_OBJECTS) $(api_test_DEPENDENCIES) $(EXTRA_api_test_DEPENDENCIES) + @rm -f api-test$(EXEEXT) + $(AM_V_CCLD)$(api_test_LINK) $(api_test_OBJECTS) $(api_test_LDADD) $(LIBS) + +api-test-2$(EXEEXT): $(api_test_2_OBJECTS) $(api_test_2_DEPENDENCIES) $(EXTRA_api_test_2_DEPENDENCIES) + @rm -f api-test-2$(EXEEXT) + $(AM_V_CCLD)$(api_test_2_LINK) $(api_test_2_OBJECTS) $(api_test_2_LDADD) $(LIBS) + +differ$(EXEEXT): $(differ_OBJECTS) $(differ_DEPENDENCIES) $(EXTRA_differ_DEPENDENCIES) + @rm -f differ$(EXEEXT) + $(AM_V_CCLD)$(differ_LINK) $(differ_OBJECTS) $(differ_LDADD) $(LIBS) + +unit-utils-io$(EXEEXT): $(unit_utils_io_OBJECTS) $(unit_utils_io_DEPENDENCIES) $(EXTRA_unit_utils_io_DEPENDENCIES) + @rm -f unit-utils-io$(EXEEXT) + $(AM_V_CCLD)$(unit_utils_io_LINK) $(unit_utils_io_OBJECTS) $(unit_utils_io_LDADD) $(LIBS) + +vectors-test$(EXEEXT): $(vectors_test_OBJECTS) $(vectors_test_DEPENDENCIES) $(EXTRA_vectors_test_DEPENDENCIES) + @rm -f vectors-test$(EXEEXT) + $(AM_V_CCLD)$(vectors_test_LINK) $(vectors_test_OBJECTS) $(vectors_test_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/api_test-api-test.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/api_test-test_utils.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/api_test_2-api-test-2.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/api_test_2-test_utils.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/differ-differ.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit_utils_io-unit-utils-io.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vectors_test-crypto-vectors.Po@am__quote@ # am--include-marker + +$(am__depfiles_remade): + @$(MKDIR_P) $(@D) + @echo '# dummy' >$@-t && $(am__mv) $@-t $@ + +am--depfiles: $(am__depfiles_remade) + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ +@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ +@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ +@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ +@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< + +api_test-api-test.o: api-test.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(api_test_CPPFLAGS) $(CPPFLAGS) $(api_test_CFLAGS) $(CFLAGS) -MT api_test-api-test.o -MD -MP -MF $(DEPDIR)/api_test-api-test.Tpo -c -o api_test-api-test.o `test -f 'api-test.c' || echo '$(srcdir)/'`api-test.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/api_test-api-test.Tpo $(DEPDIR)/api_test-api-test.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='api-test.c' object='api_test-api-test.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(api_test_CPPFLAGS) $(CPPFLAGS) $(api_test_CFLAGS) $(CFLAGS) -c -o api_test-api-test.o `test -f 'api-test.c' || echo '$(srcdir)/'`api-test.c + +api_test-api-test.obj: api-test.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(api_test_CPPFLAGS) $(CPPFLAGS) $(api_test_CFLAGS) $(CFLAGS) -MT api_test-api-test.obj -MD -MP -MF $(DEPDIR)/api_test-api-test.Tpo -c -o api_test-api-test.obj `if test -f 'api-test.c'; then $(CYGPATH_W) 'api-test.c'; else $(CYGPATH_W) '$(srcdir)/api-test.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/api_test-api-test.Tpo $(DEPDIR)/api_test-api-test.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='api-test.c' object='api_test-api-test.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(api_test_CPPFLAGS) $(CPPFLAGS) $(api_test_CFLAGS) $(CFLAGS) -c -o api_test-api-test.obj `if test -f 'api-test.c'; then $(CYGPATH_W) 'api-test.c'; else $(CYGPATH_W) '$(srcdir)/api-test.c'; fi` + +api_test-test_utils.o: test_utils.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(api_test_CPPFLAGS) $(CPPFLAGS) $(api_test_CFLAGS) $(CFLAGS) -MT api_test-test_utils.o -MD -MP -MF $(DEPDIR)/api_test-test_utils.Tpo -c -o api_test-test_utils.o `test -f 'test_utils.c' || echo '$(srcdir)/'`test_utils.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/api_test-test_utils.Tpo $(DEPDIR)/api_test-test_utils.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test_utils.c' object='api_test-test_utils.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(api_test_CPPFLAGS) $(CPPFLAGS) $(api_test_CFLAGS) $(CFLAGS) -c -o api_test-test_utils.o `test -f 'test_utils.c' || echo '$(srcdir)/'`test_utils.c + +api_test-test_utils.obj: test_utils.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(api_test_CPPFLAGS) $(CPPFLAGS) $(api_test_CFLAGS) $(CFLAGS) -MT api_test-test_utils.obj -MD -MP -MF $(DEPDIR)/api_test-test_utils.Tpo -c -o api_test-test_utils.obj `if test -f 'test_utils.c'; then $(CYGPATH_W) 'test_utils.c'; else $(CYGPATH_W) '$(srcdir)/test_utils.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/api_test-test_utils.Tpo $(DEPDIR)/api_test-test_utils.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test_utils.c' object='api_test-test_utils.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(api_test_CPPFLAGS) $(CPPFLAGS) $(api_test_CFLAGS) $(CFLAGS) -c -o api_test-test_utils.obj `if test -f 'test_utils.c'; then $(CYGPATH_W) 'test_utils.c'; else $(CYGPATH_W) '$(srcdir)/test_utils.c'; fi` + +api_test_2-api-test-2.o: api-test-2.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(api_test_2_CPPFLAGS) $(CPPFLAGS) $(api_test_2_CFLAGS) $(CFLAGS) -MT api_test_2-api-test-2.o -MD -MP -MF $(DEPDIR)/api_test_2-api-test-2.Tpo -c -o api_test_2-api-test-2.o `test -f 'api-test-2.c' || echo '$(srcdir)/'`api-test-2.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/api_test_2-api-test-2.Tpo $(DEPDIR)/api_test_2-api-test-2.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='api-test-2.c' object='api_test_2-api-test-2.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(api_test_2_CPPFLAGS) $(CPPFLAGS) $(api_test_2_CFLAGS) $(CFLAGS) -c -o api_test_2-api-test-2.o `test -f 'api-test-2.c' || echo '$(srcdir)/'`api-test-2.c + +api_test_2-api-test-2.obj: api-test-2.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(api_test_2_CPPFLAGS) $(CPPFLAGS) $(api_test_2_CFLAGS) $(CFLAGS) -MT api_test_2-api-test-2.obj -MD -MP -MF $(DEPDIR)/api_test_2-api-test-2.Tpo -c -o api_test_2-api-test-2.obj `if test -f 'api-test-2.c'; then $(CYGPATH_W) 'api-test-2.c'; else $(CYGPATH_W) '$(srcdir)/api-test-2.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/api_test_2-api-test-2.Tpo $(DEPDIR)/api_test_2-api-test-2.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='api-test-2.c' object='api_test_2-api-test-2.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(api_test_2_CPPFLAGS) $(CPPFLAGS) $(api_test_2_CFLAGS) $(CFLAGS) -c -o api_test_2-api-test-2.obj `if test -f 'api-test-2.c'; then $(CYGPATH_W) 'api-test-2.c'; else $(CYGPATH_W) '$(srcdir)/api-test-2.c'; fi` + +api_test_2-test_utils.o: test_utils.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(api_test_2_CPPFLAGS) $(CPPFLAGS) $(api_test_2_CFLAGS) $(CFLAGS) -MT api_test_2-test_utils.o -MD -MP -MF $(DEPDIR)/api_test_2-test_utils.Tpo -c -o api_test_2-test_utils.o `test -f 'test_utils.c' || echo '$(srcdir)/'`test_utils.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/api_test_2-test_utils.Tpo $(DEPDIR)/api_test_2-test_utils.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test_utils.c' object='api_test_2-test_utils.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(api_test_2_CPPFLAGS) $(CPPFLAGS) $(api_test_2_CFLAGS) $(CFLAGS) -c -o api_test_2-test_utils.o `test -f 'test_utils.c' || echo '$(srcdir)/'`test_utils.c + +api_test_2-test_utils.obj: test_utils.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(api_test_2_CPPFLAGS) $(CPPFLAGS) $(api_test_2_CFLAGS) $(CFLAGS) -MT api_test_2-test_utils.obj -MD -MP -MF $(DEPDIR)/api_test_2-test_utils.Tpo -c -o api_test_2-test_utils.obj `if test -f 'test_utils.c'; then $(CYGPATH_W) 'test_utils.c'; else $(CYGPATH_W) '$(srcdir)/test_utils.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/api_test_2-test_utils.Tpo $(DEPDIR)/api_test_2-test_utils.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test_utils.c' object='api_test_2-test_utils.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(api_test_2_CPPFLAGS) $(CPPFLAGS) $(api_test_2_CFLAGS) $(CFLAGS) -c -o api_test_2-test_utils.obj `if test -f 'test_utils.c'; then $(CYGPATH_W) 'test_utils.c'; else $(CYGPATH_W) '$(srcdir)/test_utils.c'; fi` + +differ-differ.o: differ.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(differ_CFLAGS) $(CFLAGS) -MT differ-differ.o -MD -MP -MF $(DEPDIR)/differ-differ.Tpo -c -o differ-differ.o `test -f 'differ.c' || echo '$(srcdir)/'`differ.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/differ-differ.Tpo $(DEPDIR)/differ-differ.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='differ.c' object='differ-differ.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(differ_CFLAGS) $(CFLAGS) -c -o differ-differ.o `test -f 'differ.c' || echo '$(srcdir)/'`differ.c + +differ-differ.obj: differ.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(differ_CFLAGS) $(CFLAGS) -MT differ-differ.obj -MD -MP -MF $(DEPDIR)/differ-differ.Tpo -c -o differ-differ.obj `if test -f 'differ.c'; then $(CYGPATH_W) 'differ.c'; else $(CYGPATH_W) '$(srcdir)/differ.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/differ-differ.Tpo $(DEPDIR)/differ-differ.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='differ.c' object='differ-differ.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(differ_CFLAGS) $(CFLAGS) -c -o differ-differ.obj `if test -f 'differ.c'; then $(CYGPATH_W) 'differ.c'; else $(CYGPATH_W) '$(srcdir)/differ.c'; fi` + +unit_utils_io-unit-utils-io.o: unit-utils-io.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_utils_io_CPPFLAGS) $(CPPFLAGS) $(unit_utils_io_CFLAGS) $(CFLAGS) -MT unit_utils_io-unit-utils-io.o -MD -MP -MF $(DEPDIR)/unit_utils_io-unit-utils-io.Tpo -c -o unit_utils_io-unit-utils-io.o `test -f 'unit-utils-io.c' || echo '$(srcdir)/'`unit-utils-io.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/unit_utils_io-unit-utils-io.Tpo $(DEPDIR)/unit_utils_io-unit-utils-io.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unit-utils-io.c' object='unit_utils_io-unit-utils-io.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_utils_io_CPPFLAGS) $(CPPFLAGS) $(unit_utils_io_CFLAGS) $(CFLAGS) -c -o unit_utils_io-unit-utils-io.o `test -f 'unit-utils-io.c' || echo '$(srcdir)/'`unit-utils-io.c + +unit_utils_io-unit-utils-io.obj: unit-utils-io.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_utils_io_CPPFLAGS) $(CPPFLAGS) $(unit_utils_io_CFLAGS) $(CFLAGS) -MT unit_utils_io-unit-utils-io.obj -MD -MP -MF $(DEPDIR)/unit_utils_io-unit-utils-io.Tpo -c -o unit_utils_io-unit-utils-io.obj `if test -f 'unit-utils-io.c'; then $(CYGPATH_W) 'unit-utils-io.c'; else $(CYGPATH_W) '$(srcdir)/unit-utils-io.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/unit_utils_io-unit-utils-io.Tpo $(DEPDIR)/unit_utils_io-unit-utils-io.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unit-utils-io.c' object='unit_utils_io-unit-utils-io.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_utils_io_CPPFLAGS) $(CPPFLAGS) $(unit_utils_io_CFLAGS) $(CFLAGS) -c -o unit_utils_io-unit-utils-io.obj `if test -f 'unit-utils-io.c'; then $(CYGPATH_W) 'unit-utils-io.c'; else $(CYGPATH_W) '$(srcdir)/unit-utils-io.c'; fi` + +vectors_test-crypto-vectors.o: crypto-vectors.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(vectors_test_CPPFLAGS) $(CPPFLAGS) $(vectors_test_CFLAGS) $(CFLAGS) -MT vectors_test-crypto-vectors.o -MD -MP -MF $(DEPDIR)/vectors_test-crypto-vectors.Tpo -c -o vectors_test-crypto-vectors.o `test -f 'crypto-vectors.c' || echo '$(srcdir)/'`crypto-vectors.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/vectors_test-crypto-vectors.Tpo $(DEPDIR)/vectors_test-crypto-vectors.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='crypto-vectors.c' object='vectors_test-crypto-vectors.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(vectors_test_CPPFLAGS) $(CPPFLAGS) $(vectors_test_CFLAGS) $(CFLAGS) -c -o vectors_test-crypto-vectors.o `test -f 'crypto-vectors.c' || echo '$(srcdir)/'`crypto-vectors.c + +vectors_test-crypto-vectors.obj: crypto-vectors.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(vectors_test_CPPFLAGS) $(CPPFLAGS) $(vectors_test_CFLAGS) $(CFLAGS) -MT vectors_test-crypto-vectors.obj -MD -MP -MF $(DEPDIR)/vectors_test-crypto-vectors.Tpo -c -o vectors_test-crypto-vectors.obj `if test -f 'crypto-vectors.c'; then $(CYGPATH_W) 'crypto-vectors.c'; else $(CYGPATH_W) '$(srcdir)/crypto-vectors.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/vectors_test-crypto-vectors.Tpo $(DEPDIR)/vectors_test-crypto-vectors.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='crypto-vectors.c' object='vectors_test-crypto-vectors.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(vectors_test_CPPFLAGS) $(CPPFLAGS) $(vectors_test_CFLAGS) $(CFLAGS) -c -o vectors_test-crypto-vectors.obj `if test -f 'crypto-vectors.c'; then $(CYGPATH_W) 'crypto-vectors.c'; else $(CYGPATH_W) '$(srcdir)/crypto-vectors.c'; fi` + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +check-TESTS: $(TESTS) + @failed=0; all=0; xfail=0; xpass=0; skip=0; \ + srcdir=$(srcdir); export srcdir; \ + list=' $(TESTS) '; \ + $(am__tty_colors); \ + if test -n "$$list"; then \ + for tst in $$list; do \ + if test -f ./$$tst; then dir=./; \ + elif test -f $$tst; then dir=; \ + else dir="$(srcdir)/"; fi; \ + if $(TESTS_ENVIRONMENT) $${dir}$$tst $(AM_TESTS_FD_REDIRECT); then \ + all=`expr $$all + 1`; \ + case " $(XFAIL_TESTS) " in \ + *[\ \ ]$$tst[\ \ ]*) \ + xpass=`expr $$xpass + 1`; \ + failed=`expr $$failed + 1`; \ + col=$$red; res=XPASS; \ + ;; \ + *) \ + col=$$grn; res=PASS; \ + ;; \ + esac; \ + elif test $$? -ne 77; then \ + all=`expr $$all + 1`; \ + case " $(XFAIL_TESTS) " in \ + *[\ \ ]$$tst[\ \ ]*) \ + xfail=`expr $$xfail + 1`; \ + col=$$lgn; res=XFAIL; \ + ;; \ + *) \ + failed=`expr $$failed + 1`; \ + col=$$red; res=FAIL; \ + ;; \ + esac; \ + else \ + skip=`expr $$skip + 1`; \ + col=$$blu; res=SKIP; \ + fi; \ + echo "$${col}$$res$${std}: $$tst"; \ + done; \ + if test "$$all" -eq 1; then \ + tests="test"; \ + All=""; \ + else \ + tests="tests"; \ + All="All "; \ + fi; \ + if test "$$failed" -eq 0; then \ + if test "$$xfail" -eq 0; then \ + banner="$$All$$all $$tests passed"; \ + else \ + if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ + banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \ + fi; \ + else \ + if test "$$xpass" -eq 0; then \ + banner="$$failed of $$all $$tests failed"; \ + else \ + if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ + banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ + fi; \ + fi; \ + dashes="$$banner"; \ + skipped=""; \ + if test "$$skip" -ne 0; then \ + if test "$$skip" -eq 1; then \ + skipped="($$skip test was not run)"; \ + else \ + skipped="($$skip tests were not run)"; \ + fi; \ + test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \ + dashes="$$skipped"; \ + fi; \ + report=""; \ + if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \ + report="Please report to $(PACKAGE_BUGREPORT)"; \ + test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \ + dashes="$$report"; \ + fi; \ + dashes=`echo "$$dashes" | sed s/./=/g`; \ + if test "$$failed" -eq 0; then \ + col="$$grn"; \ + else \ + col="$$red"; \ + fi; \ + echo "$${col}$$dashes$${std}"; \ + echo "$${col}$$banner$${std}"; \ + test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \ + test -z "$$report" || echo "$${col}$$report$${std}"; \ + echo "$${col}$$dashes$${std}"; \ + test "$$failed" -eq 0; \ + else :; fi + +distdir: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) distdir-am + +distdir-am: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am + $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) + $(MAKE) $(AM_MAKEFLAGS) check-TESTS +check: check-am +all-am: Makefile +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-checkPROGRAMS clean-generic clean-libtool clean-local \ + mostlyclean-am + +distclean: distclean-am + -rm -f ./$(DEPDIR)/api_test-api-test.Po + -rm -f ./$(DEPDIR)/api_test-test_utils.Po + -rm -f ./$(DEPDIR)/api_test_2-api-test-2.Po + -rm -f ./$(DEPDIR)/api_test_2-test_utils.Po + -rm -f ./$(DEPDIR)/differ-differ.Po + -rm -f ./$(DEPDIR)/unit_utils_io-unit-utils-io.Po + -rm -f ./$(DEPDIR)/vectors_test-crypto-vectors.Po + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f ./$(DEPDIR)/api_test-api-test.Po + -rm -f ./$(DEPDIR)/api_test-test_utils.Po + -rm -f ./$(DEPDIR)/api_test_2-api-test-2.Po + -rm -f ./$(DEPDIR)/api_test_2-test_utils.Po + -rm -f ./$(DEPDIR)/differ-differ.Po + -rm -f ./$(DEPDIR)/unit_utils_io-unit-utils-io.Po + -rm -f ./$(DEPDIR)/vectors_test-crypto-vectors.Po + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: check-am install-am install-strip + +.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-TESTS \ + check-am clean clean-checkPROGRAMS clean-generic clean-libtool \ + clean-local cscopelist-am ctags ctags-am distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ + pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am + +.PRECIOUS: Makefile + +clean-local: + -rm -rf tcrypt-images luks1-images luks2-images conversion_imgs luks2_valid_hdr.img blkid-luks2-pv-img blkid-luks2-pv-img.bcp + +conversion_imgs: + @tar xJf conversion_imgs.tar.xz + +compatimage.img: + @xz -k -d compatimage.img.xz + +valgrind-check: api-test api-test-2 differ + @VALG=1 ./compat-test2 + @VALG=1 ./luks2-validation-test + @VALG=1 ./verity-compat-test + @VALG=1 ./integrity-compat-test + @INFOSTRING="api-test-000" ./valg-api.sh ./api-test + @INFOSTRING="api-test-002" ./valg-api.sh ./api-test-2 + @VALG=1 ./luks2-reencryption-test + @VALG=1 ./compat-test + +.PHONY: valgrind-check + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/tests/Makefile.localtest b/tests/Makefile.localtest new file mode 100644 index 0000000..29a62f3 --- /dev/null +++ b/tests/Makefile.localtest @@ -0,0 +1,30 @@ +# +# Makefile to run tests with system binaries +# USE: make -f Makefile.localtest tests CRYPTSETUP_PATH=/sbin +# +CPPFLAGS=-I../lib/ -I../lib/luks1 -DHAVE_DECL_DM_TASK_RETRY_REMOVE -DKERNEL_KEYRING -DHAVE_SYS_SYSMACROS_H -DNO_CRYPTSETUP_PATH +CFLAGS=-O2 -g -Wall +LDLIBS=-lcryptsetup -ldevmapper +TESTS=$(wildcard *-test *-test2) api-test api-test-2 + +differ: differ.o + $(CC) -o $@ $^ + +api-test: api-test.o test_utils.o + $(CC) -o $@ $^ $(LDLIBS) + +api-test-2: api-test-2.o test_utils.o + $(CC) -o $@ $^ $(LDLIBS) + +tests: differ $(TESTS) + @for test in $(sort $(TESTS)); do \ + echo [$$test]; \ + ./$$test; \ + [ $$? -ne 77 -a $$? -ne 0 ] && exit 1; \ + true; \ + done; + +clean: + rm -f *.o differ api-test api-test-2 + +.PHONY: clean diff --git a/tests/align-test b/tests/align-test new file mode 100755 index 0000000..ac3af88 --- /dev/null +++ b/tests/align-test @@ -0,0 +1,320 @@ +#!/bin/bash + +[ -z "$CRYPTSETUP_PATH" ] && CRYPTSETUP_PATH=".." +CRYPTSETUP=$CRYPTSETUP_PATH/cryptsetup +DEV="" +DEV_STACKED="luks0xbabe" +DEV_NAME="dummyalign" +MNT_DIR="./mnt_luks" +PWD1="93R4P4pIqAH8" +PWD2="mymJeD8ivEhE" +FAST_PBKDF="--pbkdf-force-iterations 1000" + +cleanup() { + udevadm settle >/dev/null 2>&1 + if [ -d "$MNT_DIR" ] ; then + umount -f $MNT_DIR 2>/dev/null + rmdir $MNT_DIR 2>/dev/null + fi + [ -b /dev/mapper/$DEV_STACKED ] && dmsetup remove --retry $DEV_STACKED >/dev/null 2>&1 + [ -b /dev/mapper/$DEV_NAME ] && dmsetup remove --retry $DEV_NAME >/dev/null 2>&1 + # FIXME scsi_debug sometimes in-use here + sleep 1 + rmmod scsi_debug 2>/dev/null + sleep 1 +} + +fail() +{ + if [ -n "$1" ] ; then echo "FAIL $1" ; fi + echo "FAILED backtrace:" + while caller $frame; do ((frame++)); done + cleanup + exit 100 +} + +skip() +{ + echo "TEST SKIPPED: $1" + cleanup + exit 0 +} + +function dm_crypt_features() +{ + VER_STR=$(dmsetup targets | grep crypt | cut -f2 -dv) + [ -z "$VER_STR" ] && fail "Failed to parse dm-crypt version." + + VER_MAJ=$(echo $VER_STR | cut -f 1 -d.) + VER_MIN=$(echo $VER_STR | cut -f 2 -d.) + VER_PTC=$(echo $VER_STR | cut -f 3 -d.) + + [ $VER_MAJ -lt 1 ] && return + [ $VER_MAJ -gt 1 ] && { + DM_PERF_CPU=1 + DM_SECTOR_SIZE=1 + return + } + + [ $VER_MIN -lt 14 ] && return + DM_PERF_CPU=1 + if [ $VER_MIN -ge 17 -o \( $VER_MIN -eq 14 -a $VER_PTC -ge 5 \) ]; then + DM_SECTOR_SIZE=1 + fi +} + +add_device() { + modprobe scsi_debug $@ delay=0 + if [ $? -ne 0 ] ; then + echo "This kernel seems to not support proper scsi_debug module, test skipped." + exit 77 + fi + + sleep 2 + DEV=$(grep -l -e scsi_debug /sys/block/*/device/model | cut -f4 -d /) + + if [ ! -e /sys/block/$DEV/alignment_offset ] ; then + echo "This kernel seems to not support topology info, test skipped." + cleanup + exit 77 + fi + + DEV="/dev/$DEV" + [ -b $DEV ] || fail "Cannot find $DEV." +} + +format() # key_bits expected [forced] +{ + if [ -z "$3" ] ; then + echo -n "Formatting using topology info ($1 bits key)..." + echo $PWD1 | $CRYPTSETUP luksFormat --type luks1 $DEV -q $FAST_PBKDF -c aes-cbc-essiv:sha256 -s $1 || fail + else + echo -n "Formatting using forced sector alignment $3 ($1 bits key)..." + echo $PWD1 | $CRYPTSETUP luksFormat --type luks1 $DEV -q $FAST_PBKDF -s $1 -c aes-cbc-essiv:sha256 --align-payload=$3 ||fail + fi + + # check the device can be activated + echo $PWD1 | $CRYPTSETUP luksOpen $DEV $DEV_NAME || fail + $CRYPTSETUP close $DEV_NAME || fail + + ALIGN=$($CRYPTSETUP luksDump $DEV |grep "Payload offset" | sed -e s/.*\\t//) + #echo "ALIGN = $ALIGN" + + [ -z "$ALIGN" ] && fail + [ $ALIGN -ne $2 ] && fail "Expected alignment differs: expected $2 != detected $ALIGN" + + # test some operation, just in case + echo -e "$PWD1\n$PWD2" | $CRYPTSETUP luksAddKey $DEV $FAST_PBKDF --key-slot 1 + [ $? -ne 0 ] && fail "Keyslot add failed." + + $CRYPTSETUP -q luksKillSlot $DEV 1 + [ $? -ne 0 ] && fail "Keyslot removal failed." + + echo "PASSED" +} + +get_offsets() +{ + $CRYPTSETUP luksDump $DEV | grep "$1" | cut -s -d ':' -f 2 | sed -e 's/\s//g' -e :a -e N -e 's/\n/:/g' -e 's/\s//g' -e ta +} + +format_null() +{ + if [ $3 -eq 0 ] ; then + echo -n "Formatting using topology info ($1 bits key) [slot 0" + echo | $CRYPTSETUP luksFormat --type luks1 $DEV -q $FAST_PBKDF -c null -s $1 || fail + else + echo -n "Formatting using forced sector alignment $3 ($1 bits key) [slot 0" + echo | $CRYPTSETUP luksFormat --type luks1 $DEV -q $FAST_PBKDF -c null -s $1 --align-payload=$3 || fail + fi + + # check the device can be activated + echo | $CRYPTSETUP luksOpen $DEV $DEV_NAME || fail + $CRYPTSETUP close $DEV_NAME || fail + + POFF=$(get_offsets "Payload offset") + [ -z "$POFF" ] && fail + [ $POFF != $2 ] && fail "Expected data offset differs: expected $2 != detected $POFF" + if [ -n "$4" ] ; then + for j in 1 2 3 4 5 6 7 ; do + echo -e "\n" | $CRYPTSETUP luksAddKey $DEV -q $FAST_PBKDF --key-slot $j -c null $PARAMS + echo -n $j + [ $? -ne 0 ] && fail + done + + KOFF=$(get_offsets "Key material offset") + [ -z "$KOFF" ] && fail + [ $KOFF != $4 ] && fail "Expected keyslots offsets differ: expected $4 != detected $KOFF" + fi + + echo "]...PASSED" +} + +format_plain() # sector size +{ + echo -n "Formatting plain device (sector size $1)..." + if [ -n "$DM_SECTOR_SIZE" ] ; then + echo $PWD1 | $CRYPTSETUP open --type plain --hash sha256 --sector-size $1 $DEV $DEV_NAME || fail + $CRYPTSETUP close $DEV_NAME || fail + echo "PASSED" + else + echo "N/A" + fi +} + +format_plain_fail() # sector size +{ + echo -n "Formatting plain device (sector size $1, must fail)..." + if [ -n "$DM_SECTOR_SIZE" ] ; then + echo $PWD1 | $CRYPTSETUP open --type plain --hash sha256 --sector-size $1 $DEV $DEV_NAME >/dev/null 2>&1 && fail + echo "PASSED" + else + echo "N/A" + fi +} + +if [ $(id -u) != 0 ]; then + echo "WARNING: You must be root to run this test, test skipped." + exit 77 +fi + +dm_crypt_features +modprobe --dry-run scsi_debug || exit 77 +cleanup + +echo "# Create desktop-class 4K drive" +echo "# (logical_block_size=512, physical_block_size=4096, alignment_offset=0)" +add_device dev_size_mb=16 sector_size=512 physblk_exp=3 num_tgts=1 +format 256 4096 +format 256 2056 8 +format 128 2048 +format 128 1032 8 +format 256 8192 8192 +format 128 8192 8192 +cleanup + +echo "# Create desktop-class 4K drive with misaligned opt-io (some bad USB enclosures)" +echo "# (logical_block_size=512, physical_block_size=4096, alignment_offset=0, opt-io=1025)" +add_device dev_size_mb=16 sector_size=512 physblk_exp=3 num_tgts=1 opt_blks=1025 +format 256 4096 +format 256 2056 8 +format 128 2048 +format 128 1032 8 +format 256 8192 8192 +format 128 8192 8192 +cleanup + +echo "# Create desktop-class 4K drive w/ 63-sector DOS partition compensation" +echo "# (logical_block_size=512, physical_block_size=4096, alignment_offset=3584)" +add_device dev_size_mb=16 sector_size=512 physblk_exp=3 lowest_aligned=7 num_tgts=1 +format 256 4103 +format 256 2056 8 +format 128 2055 +format 128 1032 8 +cleanup + +echo "# Create enterprise-class 4K drive" +echo "# (logical_block_size=4096, physical_block_size=4096, alignment_offset=0)" +add_device dev_size_mb=16 sector_size=4096 num_tgts=1 opt_blks=64 +format 256 4096 +format 256 2056 8 +format 128 2048 +format 128 1032 8 +cleanup + +echo "# Create classic 512B drive and stack dm-linear" +echo "# (logical_block_size=512, physical_block_size=512, alignment_offset=0)" +add_device dev_size_mb=16 sector_size=512 num_tgts=1 +DEV2=$DEV +DEV=/dev/mapper/$DEV_STACKED +dmsetup create $DEV_STACKED --table "0 32768 linear $DEV2 0" +format 256 4096 +format 256 2056 8 +format 128 2048 +format 128 1032 8 +format 128 8192 8192 +cleanup + +echo "# Create classic 512B drive and stack dm-linear (plain mode)" +add_device dev_size_mb=16 sector_size=512 num_tgts=1 +DEV2=$DEV +DEV=/dev/mapper/$DEV_STACKED +dmsetup create $DEV_STACKED --table "0 32768 linear $DEV2 0" +format_plain 512 +format_plain 1024 +format_plain 2048 +format_plain 4096 +format_plain_fail 1111 +format_plain_fail 8192 +echo "# Create classic 512B drive, unaligned to 4096 and stack dm-linear (plain mode)" +dmsetup remove --retry $DEV_STACKED >/dev/null 2>&1 +dmsetup create $DEV_STACKED --table "0 32762 linear $DEV2 0" +format_plain 512 +format_plain 1024 +format_plain_fail 2048 +format_plain_fail 4096 +cleanup + +echo "# Offset check: 512B sector drive" +add_device dev_size_mb=16 sector_size=512 num_tgts=1 +# |k| expO reqO expected slot offsets +format_null 64 2048 0 8:72:136:200:264:328:392:456 +format_null 64 520 1 +format_null 64 520 8 +format_null 64 640 128 +format_null 64 2048 2048 +format_null 128 2048 0 8:136:264:392:520:648:776:904 +format_null 128 1032 1 +format_null 128 1032 8 +format_null 128 1152 128 +format_null 128 2048 2048 +format_null 256 4096 0 8:264:520:776:1032:1288:1544:1800 +format_null 256 2056 1 +format_null 256 2056 8 +format_null 256 2176 128 +format_null 256 4096 2048 +format_null 512 4096 0 8:512:1016:1520:2024:2528:3032:3536 +format_null 512 4040 1 +format_null 512 4040 8 +format_null 512 4096 128 +format_null 512 4096 2048 +cleanup + +echo "# Offset check: 4096B sector drive" +add_device dev_size_mb=16 sector_size=4096 num_tgts=1 opt_blks=64 +format_null 64 2048 0 8:72:136:200:264:328:392:456 +format_null 64 520 1 +format_null 64 520 8 +format_null 64 640 128 +format_null 64 2048 2048 +format_null 128 2048 0 8:136:264:392:520:648:776:904 +format_null 128 1032 1 +format_null 128 1032 8 +format_null 128 1152 128 +format_null 128 2048 2048 +format_null 256 4096 0 8:264:520:776:1032:1288:1544:1800 +format_null 256 2056 1 +format_null 256 2056 8 +format_null 256 2176 128 +format_null 256 4096 2048 +format_null 512 4096 0 8:512:1016:1520:2024:2528:3032:3536 +format_null 512 4040 1 +format_null 512 4040 8 +format_null 512 4096 128 +format_null 512 4096 2048 +cleanup + +echo "# Create enterprise-class 4K drive with fs and LUKS images." +# loop device here presents 512 block but images have 4k block +# cryptsetup should properly use 4k block on direct-io +add_device dev_size_mb=32 sector_size=4096 physblk_exp=0 num_tgts=1 opt_blks=64 +for file in $(ls img_fs_*.img.xz) ; do + echo "Format using fs image $file." + xz -d -c $file | dd of=$DEV bs=1M 2>/dev/null || fail "bad image" + [ ! -d $MNT_DIR ] && mkdir $MNT_DIR + mount $DEV $MNT_DIR || skip "Mounting image is not available." + echo $PWD1 | $CRYPTSETUP luksFormat --type luks1 --key-size 256 $FAST_PBKDF $MNT_DIR/luks.img || fail + echo $PWD2 | $CRYPTSETUP luksFormat --type luks1 --key-size 256 $FAST_PBKDF $MNT_DIR/luks.img --header $MNT_DIR/luks_header.img || fail + umount $MNT_DIR +done +cleanup diff --git a/tests/align-test2 b/tests/align-test2 new file mode 100755 index 0000000..f1b387e --- /dev/null +++ b/tests/align-test2 @@ -0,0 +1,342 @@ +#!/bin/bash + +[ -z "$CRYPTSETUP_PATH" ] && CRYPTSETUP_PATH=".." +CRYPTSETUP=$CRYPTSETUP_PATH/cryptsetup +DEV="" +DEV_STACKED="luks0xbabe" +DEV_NAME="dummyalign" +MNT_DIR="./mnt_luks" +PWD1="93R4P4pIqAH8" +PWD2="mymJeD8ivEhE" +FAST_PBKDF="--pbkdf pbkdf2 --pbkdf-force-iterations 1000" + +cleanup() { + udevadm settle >/dev/null 2>&1 + if [ -d "$MNT_DIR" ] ; then + umount -f $MNT_DIR 2>/dev/null + rmdir $MNT_DIR 2>/dev/null + fi + [ -b /dev/mapper/$DEV_STACKED ] && dmsetup remove --retry $DEV_STACKED >/dev/null 2>&1 + [ -b /dev/mapper/$DEV_NAME ] && dmsetup remove --retry $DEV_NAME >/dev/null 2>&1 + # FIXME scsi_debug sometimes in-use here + sleep 1 + rmmod scsi_debug 2>/dev/null + sleep 1 +} + +fail() +{ + if [ -n "$1" ] ; then echo "FAIL $1" ; fi + echo "FAILED backtrace:" + while caller $frame; do ((frame++)); done + cleanup + exit 100 +} + +skip() +{ + echo "TEST SKIPPED: $1" + cleanup + exit 0 +} + +function dm_crypt_features() +{ + VER_STR=$(dmsetup targets | grep crypt | cut -f2 -dv) + [ -z "$VER_STR" ] && fail "Failed to parse dm-crypt version." + + VER_MAJ=$(echo $VER_STR | cut -f 1 -d.) + VER_MIN=$(echo $VER_STR | cut -f 2 -d.) + VER_PTC=$(echo $VER_STR | cut -f 3 -d.) + + [ $VER_MAJ -lt 1 ] && return + [ $VER_MAJ -gt 1 ] && { + DM_PERF_CPU=1 + DM_SECTOR_SIZE=1 + return + } + + [ $VER_MIN -lt 14 ] && return + DM_PERF_CPU=1 + if [ $VER_MIN -ge 17 -o \( $VER_MIN -eq 14 -a $VER_PTC -ge 5 \) ]; then + DM_SECTOR_SIZE=1 + fi +} + +add_device() { + modprobe scsi_debug $@ delay=0 + if [ $? -ne 0 ] ; then + echo "This kernel seems to not support proper scsi_debug module, test skipped." + exit 77 + fi + + sleep 2 + DEV=$(grep -l -e scsi_debug /sys/block/*/device/model | cut -f4 -d /) + + if [ ! -e /sys/block/$DEV/alignment_offset ] ; then + echo "This kernel seems to not support topology info, test skipped." + cleanup + exit 77 + fi + + DEV="/dev/$DEV" + [ -b $DEV ] || fail "Cannot find $DEV." +} + +format() # expected [forced] [encryption_sector_size] +{ + local _sec_size=512 + + local _exp=$1 + + if [ "${2:0:1}" = "s" ]; then + _sec_size=${2:1} + shift + fi + + test "${3:0:1}" = "s" && _sec_size=${3:1} + + test $_sec_size -eq 512 || local _smsg=" (encryption sector size $_sec_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 + 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 + fi + + # check the device can be activated + if [ -n "$DM_SECTOR_SIZE" ] ; then + echo $PWD1 | $CRYPTSETUP luksOpen $DEV $DEV_NAME || fail + $CRYPTSETUP close $DEV_NAME || fail + fi + + ALIGN=$($CRYPTSETUP luksDump $DEV | tee /tmp/last_dump | grep -A1 "0: crypt" | grep "offset:" | cut -d ' ' -f2) + # echo "ALIGN = $ALIGN" + + [ -z "$ALIGN" ] && fail + ALIGN=$((ALIGN/512)) + [ $ALIGN -ne $_exp ] && fail "Expected alignment differs: expected $_exp != detected $ALIGN" + + # test some operation, just in case + echo -e "$PWD1\n$PWD2" | $CRYPTSETUP luksAddKey $DEV $FAST_PBKDF --key-slot 1 + [ $? -ne 0 ] && fail "Keyslot add failed." + + $CRYPTSETUP -q luksKillSlot $DEV 1 + [ $? -ne 0 ] && fail "Keyslot removal failed." + + echo "PASSED" +} + +format_fail() # expected [forced] [encryption_sector_size] +{ + local _sec_size=512 + + local _exp=$1 + + if [ "${2:0:1}" = "s" ]; then + _sec_size=${2:1} + shift + fi + + test "${3:0:1}" = "s" && _sec_size=${3:1} + + test $_sec_size -eq 512 || local _smsg=" (encryption sector size $_sec_size)" + + if [ -z "$2" ] ; then + echo -n "Formatting using topology info$_smsg (must 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 (must fail)..." + echo $PWD1 | $CRYPTSETUP luksFormat $FAST_PBKDF --type luks2 $DEV -q -c aes-cbc-essiv:sha256 --align-payload=$2 --sector-size $_sec_size >/dev/null 2>&1 && fail + fi + + echo "PASSED" +} + +if [ $(id -u) != 0 ]; then + echo "WARNING: You must be root to run this test, test skipped." + exit 77 +fi + +dm_crypt_features +modprobe --dry-run scsi_debug || exit 77 +cleanup + +add_device dev_size_mb=32 +echo $PWD1 | $CRYPTSETUP luksFormat $FAST_PBKDF --type luks2 $DEV -q >/dev/null || fail +EXPCT=$($CRYPTSETUP luksDump $DEV | grep "offset: " | cut -f 2 -d ' ') +test "$EXPCT" -gt 512 || fail +EXPCT=$((EXPCT/512)) +echo "Default alignment detected: $EXPCT sectors" +cleanup + +echo "# Create desktop-class 4K drive" +echo "# (logical_block_size=512, physical_block_size=4096, alignment_offset=0)" +add_device dev_size_mb=32 sector_size=512 physblk_exp=3 num_tgts=1 +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 with misaligned opt-io (some bad USB enclosures)" +echo "# (logical_block_size=512, physical_block_size=4096, alignment_offset=0, opt-io=1025)" +add_device dev_size_mb=32 sector_size=512 physblk_exp=3 num_tgts=1 opt_blks=1025 +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 +format $((EXPCT+1)) +format_fail $((EXPCT+1)) s1024 +format_fail $((EXPCT+1)) s2048 +format_fail $((EXPCT+1)) 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/ 63-sector DOS partition compensation" +echo "# (logical_block_size=512, physical_block_size=4096, alignment_offset=3584)" +add_device dev_size_mb=32 sector_size=512 physblk_exp=3 lowest_aligned=7 num_tgts=1 +format $((EXPCT+7)) +format_fail $((EXPCT+7)) s1024 +format_fail $((EXPCT+7)) s2048 +format_fail $((EXPCT+7)) 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 enterprise-class 4K drive" +echo "# (logical_block_size=4096, physical_block_size=4096, alignment_offset=0)" +add_device dev_size_mb=32 sector_size=4096 num_tgts=1 opt_blks=64 +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 +#FIXME: kernel limits issue? +##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 classic 512B drive and stack dm-linear" +echo "# (logical_block_size=512, physical_block_size=512, alignment_offset=0)" +add_device dev_size_mb=32 sector_size=512 num_tgts=1 +DEV2=$DEV +DEV=/dev/mapper/$DEV_STACKED +dmsetup create $DEV_STACKED --table "0 65536 linear $DEV2 0" +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 enterprise-class 4K drive with fs and LUKS images." +# loop device here presents 512 block but images have 4k block +# cryptsetup should properly use 4k block on direct-io +add_device dev_size_mb=32 sector_size=4096 physblk_exp=0 num_tgts=1 opt_blks=64 +for file in $(ls img_fs_*.img.xz) ; do + echo "Format using fs image $file." + xz -d -c $file | dd of=$DEV bs=1M 2>/dev/null || fail "bad image" + [ ! -d $MNT_DIR ] && mkdir $MNT_DIR + mount $DEV $MNT_DIR || skip "Mounting image is not available." + echo $PWD1 | $CRYPTSETUP luksFormat $FAST_PBKDF --type luks2 $MNT_DIR/luks.img --offset 8192 || fail + echo $PWD2 | $CRYPTSETUP luksFormat $FAST_PBKDF --type luks2 $MNT_DIR/luks.img --header $MNT_DIR/luks_header.img || fail + umount $MNT_DIR +done +cleanup diff --git a/tests/api-test-2.c b/tests/api-test-2.c new file mode 100644 index 0000000..b3cce66 --- /dev/null +++ b/tests/api-test-2.c @@ -0,0 +1,4427 @@ +/* + * cryptsetup library LUKS2 API check functions + * + * Copyright (C) 2009-2019 Red Hat, Inc. All rights reserved. + * Copyright (C) 2009-2019 Milan Broz + * Copyright (C) 2016-2019 Ondrej Kozina + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#ifdef KERNEL_KEYRING +#include +#include +#ifndef HAVE_KEY_SERIAL_T +#define HAVE_KEY_SERIAL_T +#include +typedef int32_t key_serial_t; +#endif +#endif + +#include "api_test.h" +#include "luks.h" +#include "libcryptsetup.h" + +#define DMDIR "/dev/mapper/" + +#define DEVICE_1_UUID "28632274-8c8a-493f-835b-da802e1c576b" +#define DEVICE_EMPTY_name "crypt_zero" +#define DEVICE_EMPTY DMDIR DEVICE_EMPTY_name +#define DEVICE_ERROR_name "crypt_error" +#define DEVICE_ERROR DMDIR DEVICE_ERROR_name + +#define CDEVICE_1 "ctest1" +#define CDEVICE_2 "ctest2" +#define CDEVICE_WRONG "O_o" +#define H_DEVICE "head_ok" +#define H_DEVICE_WRONG "head_wr" +#define L_DEVICE_1S "luks_onesec" +#define L_DEVICE_0S "luks_zerosec" +#define L_DEVICE_WRONG "luks_wr" +#define L_DEVICE_OK "luks_ok" +#define REQS_LUKS2_HEADER "luks2_header_requirements" +#define NO_REQS_LUKS2_HEADER "luks2_header_requirements_free" +#define BACKUP_FILE "csetup_backup_file" +#define IMAGE1 "compatimage2.img" +#define IMAGE_EMPTY "empty.img" +#define IMAGE_EMPTY_SMALL "empty_small.img" +#define IMAGE_EMPTY_SMALL_2 "empty_small2.img" +#define IMAGE_PV_LUKS2_SEC "blkid-luks2-pv.img" + +#define KEYFILE1 "key1.file" +#define KEY1 "compatkey" + +#define KEYFILE2 "key2.file" +#define KEY2 "0123456789abcdef" + +#define PASSPHRASE "blabla" +#define PASSPHRASE1 "albalb" + +#define DEVICE_TEST_UUID "12345678-1234-1234-1234-123456789abc" + +#define DEVICE_WRONG "/dev/Ooo_" +#define DEVICE_CHAR "/dev/zero" +#define THE_LFILE_TEMPLATE "cryptsetup-tstlp.XXXXXX" + +#define KEY_DESC_TEST0 "cs_token_test:test_key0" +#define KEY_DESC_TEST1 "cs_token_test:test_key1" + +#define CONV_DIR "conversion_imgs" +#define CONV_L1_128 "l1_128b" +#define CONV_L1_256 "l1_256b" +#define CONV_L1_512 "l1_512b" +#define CONV_L2_128 "l2_128b" +#define CONV_L2_128_FULL "l2_128b_full" +#define CONV_L2_256 "l2_256b" +#define CONV_L2_256_FULL "l2_256b_full" +#define CONV_L2_512 "l2_512b" +#define CONV_L2_512_FULL "l2_512b_full" +#define CONV_L1_128_DET "l1_128b_det" +#define CONV_L1_256_DET "l1_256b_det" +#define CONV_L1_512_DET "l1_512b_det" +#define CONV_L2_128_DET "l2_128b_det" +#define CONV_L2_128_DET_FULL "l2_128b_det_full" +#define CONV_L2_256_DET "l2_256b_det" +#define CONV_L2_256_DET_FULL "l2_256b_det_full" +#define CONV_L2_512_DET "l2_512b_det" +#define CONV_L2_512_DET_FULL "l2_512b_det_full" +#define CONV_L1_256_LEGACY "l1_256b_legacy_offset" +#define CONV_L1_256_UNMOVABLE "l1_256b_unmovable" +#define PASS0 "aaa" +#define PASS1 "hhh" +#define PASS2 "ccc" +#define PASS3 "ddd" +#define PASS4 "eee" +#define PASS5 "fff" +#define PASS6 "ggg" +#define PASS7 "bbb" +#define PASS8 "iii" + +/* Allow to run without config.h */ +#ifndef DEFAULT_LUKS1_HASH + #define DEFAULT_LUKS1_HASH "sha256" + #define DEFAULT_LUKS1_ITER_TIME 2000 + #define DEFAULT_LUKS2_ITER_TIME 2000 + #define DEFAULT_LUKS2_MEMORY_KB 1048576 + #define DEFAULT_LUKS2_PARALLEL_THREADS 4 + #define DEFAULT_LUKS2_PBKDF "argon2i" +#endif + +static int _fips_mode = 0; + +static char *DEVICE_1 = NULL; +static char *DEVICE_2 = NULL; +static char *DEVICE_3 = NULL; +static char *DEVICE_4 = NULL; +static char *DEVICE_5 = NULL; +static char *DEVICE_6 = NULL; + +static char *tmp_file_1 = NULL; +static char *test_loop_file = NULL; + +unsigned int test_progress_steps; + +struct crypt_device *cd = NULL, *cd2 = NULL; + +// Helpers + +static unsigned cpus_online(void) +{ + static long r = -1; + + if (r < 0) { + r = sysconf(_SC_NPROCESSORS_ONLN); + if (r < 0) + r = 1; + } + + return r; +} + +static uint32_t adjusted_pbkdf_memory(void) +{ + long pagesize = sysconf(_SC_PAGESIZE); + long pages = sysconf(_SC_PHYS_PAGES); + uint64_t memory_kb; + + if (pagesize <= 0 || pages <= 0) + return DEFAULT_LUKS2_MEMORY_KB; + + memory_kb = pagesize / 1024 * pages / 2; + + if (memory_kb < DEFAULT_LUKS2_MEMORY_KB) + return (uint32_t)memory_kb; + + return DEFAULT_LUKS2_MEMORY_KB; +} + +static unsigned _min(unsigned a, unsigned b) +{ + return a < b ? a : b; +} + +static int get_luks2_offsets(int metadata_device, + unsigned int alignpayload_sec, + unsigned int sector_size, + uint64_t *r_header_size, + uint64_t *r_payload_offset) +{ + struct crypt_device *cd = NULL; + static uint64_t default_header_size = 0; + + if (!default_header_size) { + if (crypt_init(&cd, THE_LOOP_DEV)) + return -EINVAL; + if (crypt_format(cd, CRYPT_LUKS2, "aes", "xts-plain64", NULL, NULL, 64, NULL)) { + crypt_free(cd); + return -EINVAL; + } + + default_header_size = crypt_get_data_offset(cd); + + crypt_free(cd); + } + + if (!sector_size) + sector_size = 512; /* default? */ + + if ((sector_size % 512) && (sector_size % 4096)) + return -1; + + 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; + + *r_payload_offset /= sector_size; + } + + if (r_header_size) + *r_header_size = default_header_size; + + return 0; +} + +static void _remove_keyfiles(void) +{ + remove(KEYFILE1); + remove(KEYFILE2); +} + +#if HAVE_DECL_DM_TASK_RETRY_REMOVE +#define DM_RETRY "--retry " +#else +#define DM_RETRY "" +#endif + +#define DM_NOSTDERR " 2>/dev/null" + +static void _cleanup_dmdevices(void) +{ + struct stat st; + + if (!stat(DMDIR H_DEVICE, &st)) + _system("dmsetup remove " DM_RETRY H_DEVICE DM_NOSTDERR, 0); + + if (!stat(DMDIR H_DEVICE_WRONG, &st)) + _system("dmsetup remove " DM_RETRY H_DEVICE_WRONG DM_NOSTDERR, 0); + + if (!stat(DMDIR L_DEVICE_0S, &st)) + _system("dmsetup remove " DM_RETRY L_DEVICE_0S DM_NOSTDERR, 0); + + if (!stat(DMDIR L_DEVICE_1S, &st)) + _system("dmsetup remove " DM_RETRY L_DEVICE_1S DM_NOSTDERR, 0); + + if (!stat(DMDIR L_DEVICE_WRONG, &st)) + _system("dmsetup remove " DM_RETRY L_DEVICE_WRONG DM_NOSTDERR, 0); + + if (!stat(DMDIR L_DEVICE_OK, &st)) + _system("dmsetup remove " DM_RETRY L_DEVICE_OK DM_NOSTDERR, 0); + + t_dev_offset = 0; +} + +static void _cleanup(void) +{ + struct stat st; + + CRYPT_FREE(cd); + CRYPT_FREE(cd2); + + //_system("udevadm settle", 0); + + if (!stat(DMDIR CDEVICE_1, &st)) + _system("dmsetup remove " DM_RETRY CDEVICE_1 DM_NOSTDERR, 0); + + if (!stat(DMDIR CDEVICE_2, &st)) + _system("dmsetup remove " DM_RETRY CDEVICE_2 DM_NOSTDERR, 0); + + if (!stat(DEVICE_EMPTY, &st)) + _system("dmsetup remove " DM_RETRY DEVICE_EMPTY_name DM_NOSTDERR, 0); + + if (!stat(DEVICE_ERROR, &st)) + _system("dmsetup remove " DM_RETRY DEVICE_ERROR_name DM_NOSTDERR, 0); + + _cleanup_dmdevices(); + + if (loop_device(THE_LOOP_DEV)) + loop_detach(THE_LOOP_DEV); + + if (loop_device(DEVICE_1)) + loop_detach(DEVICE_1); + + if (loop_device(DEVICE_2)) + loop_detach(DEVICE_2); + + if (loop_device(DEVICE_3)) + loop_detach(DEVICE_3); + + if (loop_device(DEVICE_4)) + loop_detach(DEVICE_4); + + if (loop_device(DEVICE_5)) + loop_detach(DEVICE_5); + + if (loop_device(DEVICE_6)) + loop_detach(DEVICE_6); + + _system("rm -f " IMAGE_EMPTY, 0); + _system("rm -f " IMAGE1, 0); + _system("rm -rf " CONV_DIR, 0); + + if (test_loop_file) + remove(test_loop_file); + if (tmp_file_1) + remove(tmp_file_1); + + remove(REQS_LUKS2_HEADER); + remove(NO_REQS_LUKS2_HEADER); + remove(BACKUP_FILE); + remove(IMAGE_PV_LUKS2_SEC); + remove(IMAGE_PV_LUKS2_SEC ".bcp"); + remove(IMAGE_EMPTY_SMALL); + remove(IMAGE_EMPTY_SMALL_2); + + _remove_keyfiles(); + + free(tmp_file_1); + free(test_loop_file); + free(THE_LOOP_DEV); + free(DEVICE_1); + free(DEVICE_2); + free(DEVICE_3); + free(DEVICE_4); + free(DEVICE_5); + free(DEVICE_6); +} + +static int _setup(void) +{ + int fd, ro = 0; + char cmd[128]; + + test_loop_file = strdup(THE_LFILE_TEMPLATE); + if ((fd=mkstemp(test_loop_file)) == -1) { + printf("cannot create temporary file with template %s\n", test_loop_file); + return 1; + } + close(fd); + snprintf(cmd, sizeof(cmd), "dd if=/dev/zero of=%s bs=%d count=%d 2>/dev/null", + test_loop_file, SECTOR_SIZE, TST_LOOP_FILE_SIZE); + if (_system(cmd, 1)) + return 1; + + fd = loop_attach(&THE_LOOP_DEV, test_loop_file, 0, 0, &ro); + close(fd); + + tmp_file_1 = strdup(THE_LFILE_TEMPLATE); + if ((fd=mkstemp(tmp_file_1)) == -1) { + printf("cannot create temporary file with template %s\n", tmp_file_1); + return 1; + } + close(fd); + snprintf(cmd, sizeof(cmd), "dd if=/dev/zero of=%s bs=%d count=%d 2>/dev/null", + tmp_file_1, SECTOR_SIZE, 10); + if (_system(cmd, 1)) + return 1; + + _system("dmsetup create " DEVICE_EMPTY_name " --table \"0 10000 zero\"", 1); + _system("dmsetup create " DEVICE_ERROR_name " --table \"0 10000 error\"", 1); + + _system(" [ ! -e " IMAGE1 " ] && xz -dk " IMAGE1 ".xz", 1); + fd = loop_attach(&DEVICE_1, IMAGE1, 0, 0, &ro); + close(fd); + + _system("dd if=/dev/zero of=" IMAGE_EMPTY " bs=1M count=32 2>/dev/null", 1); + fd = loop_attach(&DEVICE_2, IMAGE_EMPTY, 0, 0, &ro); + close(fd); + + _system("dd if=/dev/zero of=" IMAGE_EMPTY_SMALL " bs=1M count=7 2>/dev/null", 1); + + _system("dd if=/dev/zero of=" IMAGE_EMPTY_SMALL_2 " bs=512 count=2050 2>/dev/null", 1); + + _system(" [ ! -e " NO_REQS_LUKS2_HEADER " ] && xz -dk " NO_REQS_LUKS2_HEADER ".xz", 1); + fd = loop_attach(&DEVICE_4, NO_REQS_LUKS2_HEADER, 0, 0, &ro); + close(fd); + + _system(" [ ! -e " REQS_LUKS2_HEADER " ] && xz -dk " REQS_LUKS2_HEADER ".xz", 1); + fd = loop_attach(&DEVICE_5, REQS_LUKS2_HEADER, 0, 0, &ro); + close(fd); + + _system(" [ ! -e " IMAGE_PV_LUKS2_SEC " ] && xz -dk " IMAGE_PV_LUKS2_SEC ".xz", 1); + _system(" [ ! -e " IMAGE_PV_LUKS2_SEC ".bcp ] && cp " IMAGE_PV_LUKS2_SEC " " IMAGE_PV_LUKS2_SEC ".bcp", 1); + fd = loop_attach(&DEVICE_6, IMAGE_PV_LUKS2_SEC, 0, 0, &ro); + close(fd); + + _system(" [ ! -d " CONV_DIR " ] && tar xJf " CONV_DIR ".tar.xz 2>/dev/null", 1); + + if (_system("modprobe dm-crypt", 1)) + return 1; + + if (t_dm_check_versions()) + return 1; + + _system("rmmod dm-crypt", 0); + + _fips_mode = fips_mode(); + if (_debug) + printf("FIPS MODE: %d\n", _fips_mode); + + /* Use default log callback */ + crypt_set_log_callback(NULL, &global_log_callback, NULL); + + return 0; +} + +#ifdef KERNEL_KEYRING +static key_serial_t add_key(const char *type, const char *description, const void *payload, size_t plen, key_serial_t keyring) +{ + return syscall(__NR_add_key, type, description, payload, plen, keyring); +} + +static key_serial_t keyctl_unlink(key_serial_t key, key_serial_t keyring) +{ + return syscall(__NR_keyctl, KEYCTL_UNLINK, key, keyring); +} + +static key_serial_t request_key(const char *type, + const char *description, + const char *callout_info, + key_serial_t keyring) +{ + return syscall(__NR_request_key, type, description, callout_info, keyring); +} + +static key_serial_t _kernel_key_by_segment(struct crypt_device *cd, int segment) +{ + char key_description[1024]; + + if (snprintf(key_description, sizeof(key_description), "cryptsetup:%s-d%u", crypt_get_uuid(cd), segment) < 1) + return -1; + + return request_key("logon", key_description, NULL, 0); +} + +static int _volume_key_in_keyring(struct crypt_device *cd, int segment) +{ + return _kernel_key_by_segment(cd, segment) >= 0 ? 0 : -1; +} + +static int _drop_keyring_key(struct crypt_device *cd, int segment) +{ + key_serial_t kid = _kernel_key_by_segment(cd, segment); + + if (kid < 0) + return -1; + + return keyctl_unlink(kid, KEY_SPEC_THREAD_KEYRING); +} +#endif + +static int test_open(struct crypt_device *cd, + int token, + char **buffer, + size_t *buffer_len, + void *usrptr) +{ + const char *str = (const char *)usrptr; + + *buffer = strdup(str); + if (!*buffer) + return -ENOMEM; + *buffer_len = strlen(*buffer); + + return 0; +} + +static int test_validate(struct crypt_device *cd, const char *json) +{ + return (strstr(json, "magic_string") == NULL); +} + +static void UseLuks2Device(void) +{ + char key[128]; + size_t key_size; + + OK_(crypt_init(&cd, DEVICE_1)); + OK_(crypt_load(cd, CRYPT_LUKS2, NULL)); + EQ_(crypt_status(cd, CDEVICE_1), CRYPT_INACTIVE); + OK_(crypt_activate_by_passphrase(cd, NULL, CRYPT_ANY_SLOT, KEY1, strlen(KEY1), 0)); + OK_(crypt_activate_by_passphrase(cd, CDEVICE_1, CRYPT_ANY_SLOT, KEY1, strlen(KEY1), 0)); + FAIL_(crypt_activate_by_passphrase(cd, CDEVICE_1, CRYPT_ANY_SLOT, KEY1, strlen(KEY1), 0), "already open"); + EQ_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE); + OK_(crypt_deactivate(cd, CDEVICE_1)); + FAIL_(crypt_deactivate(cd, CDEVICE_1), "no such device"); + +#if KERNEL_KEYRING + // repeat previous tests and check kernel keyring is released when not needed + if (t_dm_crypt_keyring_support()) { + OK_(crypt_activate_by_passphrase(cd, NULL, CRYPT_ANY_SLOT, KEY1, strlen(KEY1), 0)); + FAIL_(_drop_keyring_key(cd, 0), ""); + OK_(crypt_activate_by_passphrase(cd, NULL, CRYPT_ANY_SLOT, KEY1, strlen(KEY1), CRYPT_ACTIVATE_KEYRING_KEY)); + OK_(_drop_keyring_key(cd, 0)); + OK_(crypt_activate_by_passphrase(cd, CDEVICE_1, CRYPT_ANY_SLOT, KEY1, strlen(KEY1), 0)); + OK_(_drop_keyring_key(cd, 0)); + FAIL_(crypt_activate_by_passphrase(cd, CDEVICE_1, CRYPT_ANY_SLOT, KEY1, strlen(KEY1), 0), "already open"); + FAIL_(_volume_key_in_keyring(cd, 0), ""); + OK_(crypt_activate_by_passphrase(cd, NULL, CRYPT_ANY_SLOT, KEY1, strlen(KEY1), 0)); + OK_(crypt_deactivate(cd, CDEVICE_1)); + FAIL_(_volume_key_in_keyring(cd, 0), ""); + } +#endif + + key_size = 16; + OK_(strcmp("aes", crypt_get_cipher(cd))); + OK_(strcmp("cbc-essiv:sha256", crypt_get_cipher_mode(cd))); + OK_(strcmp(DEVICE_1_UUID, crypt_get_uuid(cd))); + EQ_((int)key_size, crypt_get_volume_key_size(cd)); + EQ_(8192, crypt_get_data_offset(cd)); + + EQ_(0, crypt_volume_key_get(cd, CRYPT_ANY_SLOT, key, &key_size, KEY1, strlen(KEY1))); + OK_(crypt_volume_key_verify(cd, key, key_size)); + OK_(crypt_activate_by_volume_key(cd, NULL, key, key_size, 0)); + OK_(crypt_activate_by_volume_key(cd, CDEVICE_1, key, key_size, 0)); + EQ_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE); + OK_(crypt_deactivate(cd, CDEVICE_1)); + + key[1] = ~key[1]; + FAIL_(crypt_volume_key_verify(cd, key, key_size), "key mismatch"); + FAIL_(crypt_activate_by_volume_key(cd, CDEVICE_1, key, key_size, 0), "key mismatch"); + + CRYPT_FREE(cd); +} + +static void SuspendDevice(void) +{ + int suspend_status; + + OK_(crypt_init(&cd, DEVICE_1)); + OK_(crypt_load(cd, CRYPT_LUKS2, NULL)); + OK_(crypt_activate_by_passphrase(cd, CDEVICE_1, CRYPT_ANY_SLOT, KEY1, strlen(KEY1), 0)); + + suspend_status = crypt_suspend(cd, CDEVICE_1); + if (suspend_status == -ENOTSUP) { + printf("WARNING: Suspend/Resume not supported, skipping test.\n"); + OK_(crypt_deactivate(cd, CDEVICE_1)); + CRYPT_FREE(cd); + return; + } + + OK_(suspend_status); +#ifdef KERNEL_KEYRING + FAIL_(_volume_key_in_keyring(cd, 0), ""); +#endif + FAIL_(crypt_suspend(cd, CDEVICE_1), "already suspended"); + + FAIL_(crypt_resume_by_passphrase(cd, CDEVICE_1, CRYPT_ANY_SLOT, KEY1, strlen(KEY1)-1), "wrong key"); + OK_(crypt_resume_by_passphrase(cd, CDEVICE_1, CRYPT_ANY_SLOT, KEY1, strlen(KEY1))); + FAIL_(crypt_resume_by_passphrase(cd, CDEVICE_1, CRYPT_ANY_SLOT, KEY1, strlen(KEY1)), "not suspended"); + + OK_(prepare_keyfile(KEYFILE1, KEY1, strlen(KEY1))); + OK_(crypt_suspend(cd, CDEVICE_1)); + FAIL_(crypt_resume_by_keyfile(cd, CDEVICE_1, CRYPT_ANY_SLOT, KEYFILE1 "blah", 0), "wrong keyfile"); + FAIL_(crypt_resume_by_keyfile_offset(cd, CDEVICE_1, CRYPT_ANY_SLOT, KEYFILE1, 1, 0), "wrong key"); + OK_(crypt_resume_by_keyfile_offset(cd, CDEVICE_1, CRYPT_ANY_SLOT, KEYFILE1, 0, 0)); + FAIL_(crypt_resume_by_keyfile(cd, CDEVICE_1, CRYPT_ANY_SLOT, KEYFILE1, 0), "not suspended"); + OK_(crypt_deactivate(cd, CDEVICE_1)); + CRYPT_FREE(cd); + + /* create LUKS device with detached header */ + OK_(crypt_init(&cd, DEVICE_1)); + OK_(crypt_load(cd, CRYPT_LUKS2, NULL)); + OK_(crypt_set_data_device(cd, DEVICE_2)); + OK_(crypt_activate_by_passphrase(cd, CDEVICE_1, CRYPT_ANY_SLOT, KEY1, strlen(KEY1), 0)); + CRYPT_FREE(cd); + + /* Should be able to suspend but not resume if not header specified */ + OK_(crypt_init_by_name(&cd, CDEVICE_1)); + OK_(crypt_suspend(cd, CDEVICE_1)); + FAIL_(crypt_suspend(cd, CDEVICE_1), "already suspended"); + FAIL_(crypt_resume_by_passphrase(cd, CDEVICE_1, CRYPT_ANY_SLOT, KEY1, strlen(KEY1)-1), "no header"); + CRYPT_FREE(cd); + + OK_(crypt_init_by_name_and_header(&cd, CDEVICE_1, DEVICE_1)); + OK_(crypt_resume_by_passphrase(cd, CDEVICE_1, CRYPT_ANY_SLOT, KEY1, strlen(KEY1))); + + OK_(crypt_deactivate(cd, CDEVICE_1)); + CRYPT_FREE(cd); + + _remove_keyfiles(); +} + +static void AddDeviceLuks2(void) +{ + enum { OFFSET_1M = 2048 , OFFSET_2M = 4096, OFFSET_4M = 8192, OFFSET_8M = 16384 }; + struct crypt_pbkdf_type pbkdf = { + .type = CRYPT_KDF_ARGON2I, + .hash = "sha256", + .parallel_threads = 4, + .max_memory_kb = 1024, + .time_ms = 1 + }, pbkdf_tmp; + struct crypt_params_luks2 params = { + .pbkdf = &pbkdf, + .data_device = DEVICE_2, + .sector_size = 512 + }; + char key[128], key2[128], key3[128]; + + const char *passphrase = "blabla", *passphrase2 = "nsdkFI&Y#.sd"; + const char *mk_hex = "bb21158c733229347bd4e681891e213d94c685be6a5b84818afe7a78a6de7a1a"; + const char *mk_hex2 = "bb21158c733229347bd4e681891e213d94c685be6a5b84818afe7a78a6de7a1e"; + size_t key_size = strlen(mk_hex) / 2; + const char *cipher = "aes"; + const char *cipher_mode = "cbc-essiv:sha256"; + uint64_t r_payload_offset, r_header_size, r_size_1; + + /* Cannot use Argon2 in FIPS */ + if (_fips_mode) { + pbkdf.type = CRYPT_KDF_PBKDF2; + pbkdf.parallel_threads = 0; + pbkdf.max_memory_kb = 0; + } + + crypt_decode_key(key, mk_hex, key_size); + 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_(create_dmdevice_over_loop(H_DEVICE, r_header_size)); + OK_(create_dmdevice_over_loop(H_DEVICE_WRONG, r_header_size - 1)); + + + // format + OK_(crypt_init(&cd, DMDIR H_DEVICE_WRONG)); + params.data_alignment = 0; + FAIL_(crypt_format(cd, CRYPT_LUKS2, cipher, cipher_mode, NULL, key, key_size, ¶ms), "Not enough space for keyslots material"); + CRYPT_FREE(cd); + + // test payload_offset = 0 for encrypted device with external header device + OK_(crypt_init(&cd, DMDIR H_DEVICE)); + OK_(crypt_format(cd, CRYPT_LUKS2, cipher, cipher_mode, NULL, key, key_size, ¶ms)); + EQ_(crypt_get_data_offset(cd), 0); + CRYPT_FREE(cd); + + params.data_alignment = 0; + params.data_device = NULL; + + // test payload_offset = 0. format() should look up alignment offset from device topology + OK_(crypt_init(&cd, DEVICE_2)); + OK_(crypt_format(cd, CRYPT_LUKS2, cipher, cipher_mode, NULL, key, key_size, ¶ms)); + OK_(!(crypt_get_data_offset(cd) > 0)); + CRYPT_FREE(cd); + + // set_data_offset has priority, alignment must be 0 or must be compatible + params.data_alignment = 0; + OK_(crypt_init(&cd, DEVICE_2)); + OK_(crypt_set_data_offset(cd, OFFSET_8M)); + OK_(crypt_format(cd, CRYPT_LUKS2, cipher, cipher_mode, NULL, key, key_size, ¶ms)); + EQ_(crypt_get_data_offset(cd), OFFSET_8M); + CRYPT_FREE(cd); + + // Load gets the value from metadata + OK_(crypt_init(&cd, DEVICE_2)); + OK_(crypt_set_data_offset(cd, OFFSET_2M)); + OK_(crypt_load(cd, CRYPT_LUKS2, NULL)); + EQ_(crypt_get_data_offset(cd), OFFSET_8M); + CRYPT_FREE(cd); + + params.data_alignment = OFFSET_4M; + OK_(crypt_init(&cd, DEVICE_2)); + FAIL_(crypt_set_data_offset(cd, OFFSET_2M + 1), "Not aligned to 4096"); // must be aligned to 4k + OK_(crypt_set_data_offset(cd, OFFSET_2M)); + FAIL_(crypt_format(cd, CRYPT_LUKS2, cipher, cipher_mode, NULL, key, key_size, ¶ms), "Alignment not compatible"); + OK_(crypt_set_data_offset(cd, OFFSET_4M)); + OK_(crypt_format(cd, CRYPT_LUKS2, cipher, cipher_mode, NULL, key, key_size, ¶ms)); + EQ_(crypt_get_data_offset(cd), OFFSET_4M); + CRYPT_FREE(cd); + + /* + * 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_(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)); + + // 1 sector less than required + OK_(crypt_init(&cd, DMDIR L_DEVICE_WRONG)); + FAIL_(crypt_format(cd, CRYPT_LUKS2, cipher, cipher_mode, NULL, key, key_size, ¶ms), "Device too small"); + CRYPT_FREE(cd); + + // 0 sectors for encrypted area + OK_(crypt_init(&cd, DMDIR L_DEVICE_0S)); + OK_(crypt_format(cd, CRYPT_LUKS2, cipher, cipher_mode, NULL, key, key_size, ¶ms)); + FAIL_(crypt_activate_by_volume_key(cd, CDEVICE_1, key, key_size, 0), "Encrypted area too small"); + CRYPT_FREE(cd); + + // 1 sector for encrypted area + OK_(crypt_init(&cd, DMDIR L_DEVICE_1S)); + OK_(crypt_format(cd, CRYPT_LUKS2, cipher, cipher_mode, NULL, key, key_size, ¶ms)); + EQ_(crypt_get_data_offset(cd), r_payload_offset); + OK_(crypt_activate_by_volume_key(cd, CDEVICE_1, key, key_size, 0)); + EQ_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE); + OK_(t_device_size(DMDIR CDEVICE_1, &r_size_1)); + EQ_(r_size_1, SECTOR_SIZE); + OK_(crypt_deactivate(cd, CDEVICE_1)); + EQ_(crypt_status(cd, CDEVICE_1), CRYPT_INACTIVE); + // restrict format only to empty context + FAIL_(crypt_format(cd, CRYPT_LUKS2, cipher, cipher_mode, NULL, key, key_size, ¶ms), "Context is already formatted"); + FAIL_(crypt_format(cd, CRYPT_LUKS2, cipher, cipher_mode, NULL, key, key_size, NULL), "Context is already formatted"); + // change data device to wrong one + OK_(crypt_set_data_device(cd, DMDIR L_DEVICE_0S)); + FAIL_(crypt_activate_by_volume_key(cd, CDEVICE_1, key, key_size, 0), "Device too small"); + OK_(crypt_set_data_device(cd, DMDIR L_DEVICE_1S)); + OK_(crypt_activate_by_volume_key(cd, CDEVICE_1, key, key_size, 0)); + OK_(crypt_deactivate(cd, CDEVICE_1)); + CRYPT_FREE(cd); + + params.data_alignment = 0; + params.data_device = DEVICE_2; + + // generate keyslot material at the end of luks header + OK_(crypt_init(&cd, DMDIR H_DEVICE)); + OK_(crypt_format(cd, CRYPT_LUKS2, cipher, cipher_mode, NULL, key, key_size, ¶ms)); + EQ_((int)key_size, crypt_get_volume_key_size(cd)); + EQ_(crypt_keyslot_add_by_volume_key(cd, 7, key, key_size, passphrase, strlen(passphrase)), 7); + EQ_(crypt_activate_by_passphrase(cd, CDEVICE_1, 7, passphrase, strlen(passphrase) ,0), 7); + + OK_(crypt_keyslot_get_pbkdf(cd, 7, &pbkdf_tmp)); + OK_(strcmp(pbkdf_tmp.type, pbkdf.type)); + if (!_fips_mode) { + NULL_(pbkdf_tmp.hash); + OK_(!(pbkdf_tmp.max_memory_kb >= 32)); + OK_(!(pbkdf_tmp.parallel_threads >= 1)); + } else + OK_(strcmp(pbkdf_tmp.hash, pbkdf.hash)); + OK_(!(pbkdf_tmp.iterations >= 4)); + EQ_(0, pbkdf_tmp.time_ms); /* not usable in per-keyslot call */ + + CRYPT_FREE(cd); + OK_(crypt_init_by_name_and_header(&cd, CDEVICE_1, DMDIR H_DEVICE)); + FAIL_(crypt_format(cd, CRYPT_LUKS2, cipher, cipher_mode, NULL, key, key_size, ¶ms), "Context is already formatted"); + EQ_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE); + CRYPT_FREE(cd); + // check active status without header + OK_(crypt_init_by_name_and_header(&cd, CDEVICE_1, NULL)); + EQ_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE); + NULL_(crypt_get_type(cd)); + OK_(strcmp(cipher, crypt_get_cipher(cd))); + OK_(strcmp(cipher_mode, crypt_get_cipher_mode(cd))); + EQ_((int)key_size, crypt_get_volume_key_size(cd)); + OK_(crypt_deactivate(cd, CDEVICE_1)); + CRYPT_FREE(cd); + + params.data_alignment = OFFSET_1M; + params.data_device = NULL; + + // test uuid mismatch and _init_by_name_and_header + OK_(crypt_init(&cd, DMDIR L_DEVICE_1S)); + OK_(crypt_format(cd, CRYPT_LUKS2, cipher, cipher_mode, NULL, key, key_size, ¶ms)); + OK_(crypt_activate_by_volume_key(cd, CDEVICE_1, key, key_size, 0)); + CRYPT_FREE(cd); + params.data_alignment = 0; + params.data_device = DEVICE_2; + OK_(crypt_init(&cd, DMDIR H_DEVICE)); + OK_(crypt_format(cd, CRYPT_LUKS2, cipher, cipher_mode, NULL, key, key_size, ¶ms)); + CRYPT_FREE(cd); + // there we've got uuid mismatch + OK_(crypt_init_by_name_and_header(&cd, CDEVICE_1, DMDIR H_DEVICE)); + EQ_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE); + NULL_(crypt_get_type(cd)); + FAIL_(crypt_activate_by_volume_key(cd, CDEVICE_1, key, key_size, 0), "Device is active"); + FAIL_(crypt_activate_by_volume_key(cd, CDEVICE_2, key, key_size, 0), "Device is active"); + EQ_(crypt_status(cd, CDEVICE_2), CRYPT_INACTIVE); + OK_(crypt_deactivate(cd, CDEVICE_1)); + CRYPT_FREE(cd); + + params.data_device = NULL; + + OK_(crypt_init(&cd, DEVICE_2)); + OK_(crypt_format(cd, CRYPT_LUKS2, cipher, cipher_mode, NULL, key, key_size, ¶ms)); + + // even with no keyslots defined it can be activated by volume key + OK_(crypt_volume_key_verify(cd, key, key_size)); + OK_(crypt_activate_by_volume_key(cd, CDEVICE_2, key, key_size, 0)); + EQ_(crypt_status(cd, CDEVICE_2), CRYPT_ACTIVE); + OK_(crypt_deactivate(cd, CDEVICE_2)); + + // now with keyslot + EQ_(7, crypt_keyslot_add_by_volume_key(cd, 7, key, key_size, passphrase, strlen(passphrase))); + EQ_(CRYPT_SLOT_ACTIVE_LAST, crypt_keyslot_status(cd, 7)); + EQ_(7, crypt_activate_by_passphrase(cd, CDEVICE_2, CRYPT_ANY_SLOT, passphrase, strlen(passphrase), 0)); + EQ_(crypt_status(cd, CDEVICE_2), CRYPT_ACTIVE); + OK_(crypt_deactivate(cd, CDEVICE_2)); + + crypt_set_iteration_time(cd, 1); + EQ_(1, crypt_keyslot_add_by_volume_key(cd, 1, key, key_size, KEY1, strlen(KEY1))); + OK_(prepare_keyfile(KEYFILE1, KEY1, strlen(KEY1))); + OK_(prepare_keyfile(KEYFILE2, KEY2, strlen(KEY2))); + EQ_(2, crypt_keyslot_add_by_keyfile(cd, 2, KEYFILE1, 0, KEYFILE2, 0)); + FAIL_(crypt_keyslot_add_by_keyfile_offset(cd, 3, KEYFILE1, 0, 1, KEYFILE2, 0, 1), "wrong key"); + EQ_(3, crypt_keyslot_add_by_keyfile_offset(cd, 3, KEYFILE1, 0, 0, KEYFILE2, 0, 1)); + EQ_(4, crypt_keyslot_add_by_keyfile_offset(cd, 4, KEYFILE2, 0, 1, KEYFILE1, 0, 1)); + FAIL_(crypt_activate_by_keyfile(cd, CDEVICE_2, CRYPT_ANY_SLOT, KEYFILE2, strlen(KEY2)-1, 0), "key mismatch"); + EQ_(2, crypt_activate_by_keyfile(cd, NULL, CRYPT_ANY_SLOT, KEYFILE2, 0, 0)); + EQ_(3, crypt_activate_by_keyfile_offset(cd, NULL, CRYPT_ANY_SLOT, KEYFILE2, 0, 1, 0)); + EQ_(4, crypt_activate_by_keyfile_offset(cd, NULL, CRYPT_ANY_SLOT, KEYFILE1, 0, 1, 0)); + FAIL_(crypt_activate_by_keyfile_offset(cd, CDEVICE_2, CRYPT_ANY_SLOT, KEYFILE2, strlen(KEY2), 2, 0), "not enough data"); + FAIL_(crypt_activate_by_keyfile_offset(cd, CDEVICE_2, CRYPT_ANY_SLOT, KEYFILE2, 0, strlen(KEY2) + 1, 0), "cannot seek"); + FAIL_(crypt_activate_by_keyfile_offset(cd, CDEVICE_2, CRYPT_ANY_SLOT, KEYFILE2, 0, 2, 0), "wrong key"); + EQ_(2, crypt_activate_by_keyfile(cd, CDEVICE_2, CRYPT_ANY_SLOT, KEYFILE2, 0, 0)); + OK_(crypt_keyslot_destroy(cd, 1)); + OK_(crypt_keyslot_destroy(cd, 2)); + OK_(crypt_keyslot_destroy(cd, 3)); + OK_(crypt_keyslot_destroy(cd, 4)); + OK_(crypt_deactivate(cd, CDEVICE_2)); + _remove_keyfiles(); + + FAIL_(crypt_keyslot_add_by_volume_key(cd, 7, key, key_size, passphrase, strlen(passphrase)), "slot used"); + key[1] = ~key[1]; + FAIL_(crypt_keyslot_add_by_volume_key(cd, 6, key, key_size, passphrase, strlen(passphrase)), "key mismatch"); + key[1] = ~key[1]; + EQ_(6, crypt_keyslot_add_by_volume_key(cd, 6, key, key_size, passphrase, strlen(passphrase))); + EQ_(CRYPT_SLOT_ACTIVE, crypt_keyslot_status(cd, 6)); + + FAIL_(crypt_keyslot_destroy(cd, 8), "invalid keyslot"); + FAIL_(crypt_keyslot_destroy(cd, CRYPT_ANY_SLOT), "invalid keyslot"); + FAIL_(crypt_keyslot_destroy(cd, 0), "keyslot not used"); + OK_(crypt_keyslot_destroy(cd, 7)); + EQ_(CRYPT_SLOT_INACTIVE, crypt_keyslot_status(cd, 7)); + EQ_(CRYPT_SLOT_ACTIVE_LAST, crypt_keyslot_status(cd, 6)); + + EQ_(7, crypt_keyslot_change_by_passphrase(cd, 6, 7, passphrase, strlen(passphrase), passphrase2, strlen(passphrase2))); + EQ_(CRYPT_SLOT_ACTIVE_LAST, crypt_keyslot_status(cd, 7)); + EQ_(7, crypt_activate_by_passphrase(cd, NULL, 7, passphrase2, strlen(passphrase2), 0)); + EQ_(6, crypt_keyslot_change_by_passphrase(cd, CRYPT_ANY_SLOT, 6, passphrase2, strlen(passphrase2), passphrase, strlen(passphrase))); + + EQ_(6, crypt_volume_key_get(cd, CRYPT_ANY_SLOT, key2, &key_size, passphrase, strlen(passphrase))); + OK_(crypt_volume_key_verify(cd, key2, key_size)); + OK_(memcmp(key, key2, key_size)); + + OK_(strcmp(cipher, crypt_get_cipher(cd))); + OK_(strcmp(cipher_mode, crypt_get_cipher_mode(cd))); + EQ_((int)key_size, crypt_get_volume_key_size(cd)); + EQ_(r_payload_offset, crypt_get_data_offset(cd)); + OK_(strcmp(DEVICE_2, crypt_get_device_name(cd))); + + reset_log(); + OK_(crypt_dump(cd)); + OK_(!(global_lines != 0)); + reset_log(); + + FAIL_(crypt_set_uuid(cd, "blah"), "wrong UUID format"); + OK_(crypt_set_uuid(cd, DEVICE_TEST_UUID)); + OK_(strcmp(DEVICE_TEST_UUID, crypt_get_uuid(cd))); + + FAIL_(crypt_deactivate(cd, CDEVICE_2), "not active"); + CRYPT_FREE(cd); + _cleanup_dmdevices(); + + /* LUKSv2 format tests */ + + /* very basic test */ + OK_(crypt_init(&cd, DEVICE_2)); + crypt_set_iteration_time(cd, 1); + FAIL_(crypt_format(cd, CRYPT_LUKS2, cipher, cipher_mode, NULL, NULL, 0, NULL), "Wrong key size"); + OK_(crypt_format(cd, CRYPT_LUKS2, cipher, cipher_mode, NULL, key, key_size, NULL)); + CRYPT_FREE(cd); + /* some invalid parameters known to cause troubles */ + OK_(crypt_init(&cd, DEVICE_2)); + crypt_set_iteration_time(cd, 0); /* wrong for argon2 but we don't know the pbkdf type yet, ignored */ + OK_(crypt_format(cd, CRYPT_LUKS2, cipher, cipher_mode, NULL, key, key_size, NULL)); + CRYPT_FREE(cd); + OK_(crypt_init(&cd, DEVICE_2)); + crypt_set_iteration_time(cd, 1); + OK_(crypt_format(cd, CRYPT_LUKS2, cipher, cipher_mode, NULL, key, key_size, NULL)); + EQ_(crypt_keyslot_add_by_volume_key(cd, 0, NULL, key_size, PASSPHRASE, strlen(PASSPHRASE)), 0); + CRYPT_FREE(cd); + + OK_(crypt_init(&cd, DEVICE_2)); + crypt_set_iteration_time(cd, 1); + OK_(crypt_format(cd, CRYPT_LUKS2, cipher, cipher_mode, NULL, NULL, key_size, NULL)); + FAIL_(crypt_keyslot_add_by_volume_key(cd, CRYPT_ANY_SLOT, key, key_size, PASSPHRASE, strlen(PASSPHRASE)), "VK doesn't match any digest"); + FAIL_(crypt_keyslot_add_by_volume_key(cd, 1, key, key_size, PASSPHRASE, strlen(PASSPHRASE)), "VK doesn't match any digest"); + CRYPT_FREE(cd); + + OK_(create_dmdevice_over_loop(L_DEVICE_1S, r_payload_offset + 1)); + OK_(crypt_init(&cd, DMDIR L_DEVICE_1S)); + crypt_set_iteration_time(cd, 1); + OK_(crypt_format(cd, CRYPT_LUKS2, cipher, cipher_mode, NULL, key, key_size, NULL)); + EQ_(crypt_keyslot_add_by_volume_key(cd, 3, NULL, key_size, PASSPHRASE, strlen(PASSPHRASE)), 3); + FAIL_(crypt_activate_by_volume_key(cd, CDEVICE_1, key3, key_size, 0), "VK doesn't match any digest assigned to segment 0"); + CRYPT_FREE(cd); + + /* + * Check regression in getting keyslot encryption parameters when + * volume key size is unknown (no active keyslots). + */ + OK_(crypt_init(&cd, DMDIR L_DEVICE_1S)); + crypt_set_iteration_time(cd, 1); + OK_(crypt_format(cd, CRYPT_LUKS2, cipher, cipher_mode, NULL, key, key_size, NULL)); + EQ_(crypt_keyslot_add_by_volume_key(cd, 0, NULL, key_size, PASSPHRASE, strlen(PASSPHRASE)), 0); + /* drop context copy of volume key */ + CRYPT_FREE(cd); + OK_(crypt_init(&cd, DMDIR L_DEVICE_1S)); + OK_(crypt_load(cd, CRYPT_LUKS, NULL)); + EQ_(crypt_volume_key_get(cd, CRYPT_ANY_SLOT, key, &key_size, PASSPHRASE, strlen(PASSPHRASE)), 0); + OK_(crypt_keyslot_destroy(cd, 0)); + EQ_(crypt_keyslot_add_by_volume_key(cd, 0, key, key_size, PASSPHRASE, strlen(PASSPHRASE)), 0); + CRYPT_FREE(cd); + + _cleanup_dmdevices(); +} + +static void Luks2MetadataSize(void) +{ + struct crypt_pbkdf_type pbkdf = { + .type = CRYPT_KDF_ARGON2I, + .hash = "sha256", + .parallel_threads = 1, + .max_memory_kb = 128, + .iterations = 4, + .flags = CRYPT_PBKDF_NO_BENCHMARK + }; + struct crypt_params_luks2 params = { + .pbkdf = &pbkdf, + .data_device = DEVICE_2, + .sector_size = 512 + }; + char key[128], tmp[128]; + + const char *passphrase = "blabla"; + const char *mk_hex = "bb21158c733229347bd4e681891e213d94c685be6a5b84818afe7a78a6de7a1a"; + size_t key_size = strlen(mk_hex) / 2; + const char *cipher = "aes"; + const char *cipher_mode = "cbc-essiv:sha256"; + uint64_t r_header_size, default_mdata_size, default_keyslots_size, mdata_size, + keyslots_size, r_header_wrong_size = 14336; + + /* Cannot use Argon2 in FIPS */ + if (_fips_mode) { + pbkdf.type = CRYPT_KDF_PBKDF2; + pbkdf.parallel_threads = 0; + pbkdf.max_memory_kb = 0; + pbkdf.iterations = 1000; + } + + crypt_decode_key(key, mk_hex, key_size); + + // init test devices + 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(H_DEVICE_WRONG, r_header_wrong_size)); /* 7 MiBs only */ + //default metadata sizes + OK_(crypt_init(&cd, DMDIR H_DEVICE)); + OK_(crypt_get_metadata_size(cd, &mdata_size, &keyslots_size)); + EQ_(mdata_size, 0); + EQ_(keyslots_size, 0); + OK_(crypt_set_metadata_size(cd, 0, 0)); + OK_(crypt_get_metadata_size(cd, &mdata_size, &keyslots_size)); + EQ_(mdata_size, 0); + EQ_(keyslots_size, 0); + OK_(crypt_set_metadata_size(cd, 0x004000, 0x004000)); + OK_(crypt_get_metadata_size(cd, &mdata_size, &keyslots_size)); + EQ_(mdata_size, 0x004000); + EQ_(keyslots_size, 0x004000); + OK_(crypt_set_metadata_size(cd, 0x008000, 0x008000)); + OK_(crypt_get_metadata_size(cd, &mdata_size, &keyslots_size)); + EQ_(mdata_size, 0x008000); + EQ_(keyslots_size, 0x008000); + FAIL_(crypt_set_metadata_size(cd, 0x008001, 0x008000), "Wrong size"); + FAIL_(crypt_set_metadata_size(cd, 0x008000, 0x008001), "Wrong size"); + CRYPT_FREE(cd); + + // metadata settings + OK_(crypt_init(&cd, DMDIR H_DEVICE)); + OK_(crypt_set_metadata_size(cd, 0x080000, 0x080000)); + OK_(crypt_format(cd, CRYPT_LUKS2, cipher, cipher_mode, NULL, key, key_size, ¶ms)); + EQ_(crypt_keyslot_add_by_volume_key(cd, 7, key, key_size, passphrase, strlen(passphrase)), 7); + CRYPT_FREE(cd); + OK_(crypt_init(&cd, DMDIR H_DEVICE)); + OK_(crypt_load(cd, CRYPT_LUKS2, NULL)); + OK_(crypt_get_metadata_size(cd, &mdata_size, &keyslots_size)); + EQ_(mdata_size, 0x080000); + EQ_(keyslots_size, 0x080000); + CRYPT_FREE(cd); + // default + OK_(crypt_init(&cd, DMDIR H_DEVICE)); + OK_(crypt_format(cd, CRYPT_LUKS2, cipher, cipher_mode, NULL, key, key_size, ¶ms)); + OK_(crypt_get_metadata_size(cd, &default_mdata_size, &default_keyslots_size)); + EQ_(default_mdata_size, 0x04000); + EQ_(default_keyslots_size, (r_header_size * 512) - 2 * 0x04000); + CRYPT_FREE(cd); + // check keyslots size calculation is correct + OK_(crypt_init(&cd, DMDIR H_DEVICE)); + OK_(crypt_set_metadata_size(cd, 0x80000, 0)); + OK_(crypt_format(cd, CRYPT_LUKS2, cipher, cipher_mode, NULL, key, key_size, ¶ms)); + OK_(crypt_get_metadata_size(cd, &mdata_size, &keyslots_size)); + EQ_(mdata_size, 0x80000); + EQ_(keyslots_size, (r_header_size * 512) - 2 * 0x80000); + CRYPT_FREE(cd); + + // various metadata size checks combined with data offset + OK_(crypt_init(&cd, DMDIR H_DEVICE)); + OK_(crypt_set_metadata_size(cd, 0, default_keyslots_size + 4096)); + FAIL_(crypt_format(cd, CRYPT_LUKS2, cipher, cipher_mode, NULL, key, key_size, ¶ms), "Device is too small."); + OK_(crypt_set_metadata_size(cd, 0x20000, (r_header_size * 512) - 2 * 0x20000 + 4096)); + FAIL_(crypt_format(cd, CRYPT_LUKS2, cipher, cipher_mode, NULL, key, key_size, ¶ms), "Device is too small."); + CRYPT_FREE(cd); + + OK_(crypt_init(&cd, DMDIR H_DEVICE)); + OK_(crypt_set_metadata_size(cd, 0x80000, 0)); + OK_(crypt_set_data_offset(cd, 0x80000 / 512 - 8)); + FAIL_(crypt_format(cd, CRYPT_LUKS2, cipher, cipher_mode, NULL, key, key_size, ¶ms), "Data offset is too small."); + CRYPT_FREE(cd); + + // H_DEVICE_WRONG size is 7MiB + OK_(crypt_init(&cd, DMDIR H_DEVICE_WRONG)); + OK_(crypt_format(cd, CRYPT_LUKS2, cipher, cipher_mode, NULL, key, key_size, ¶ms)); + OK_(crypt_get_metadata_size(cd, &mdata_size, &keyslots_size)); + EQ_(mdata_size, default_mdata_size); + EQ_(keyslots_size, (r_header_wrong_size * 512) - 2 * default_mdata_size); + CRYPT_FREE(cd); + + OK_(crypt_init(&cd, DMDIR H_DEVICE_WRONG)); + OK_(crypt_set_metadata_size(cd, 0x400000, 0)); + FAIL_(crypt_format(cd, CRYPT_LUKS2, cipher, cipher_mode, NULL, key, key_size, ¶ms), "Device is too small."); + CRYPT_FREE(cd); + + // IMAGE_EMPTY_SMALL size is 7MiB but now it's regulare file + OK_(crypt_init(&cd, IMAGE_EMPTY_SMALL)); + OK_(crypt_format(cd, CRYPT_LUKS2, cipher, cipher_mode, NULL, key, key_size, ¶ms)); + OK_(crypt_get_metadata_size(cd, &mdata_size, &keyslots_size)); + EQ_(mdata_size, default_mdata_size); + EQ_(keyslots_size, default_keyslots_size); + EQ_(crypt_get_data_offset(cd), 0); + CRYPT_FREE(cd); + + sprintf(tmp, "truncate -s %" PRIu64 " " IMAGE_EMPTY_SMALL, r_header_wrong_size * 512); + _system(tmp, 1); + + // check explicit keyslots size and data offset are respected even with regular file mdevice + OK_(crypt_init(&cd, IMAGE_EMPTY_SMALL)); + OK_(crypt_set_metadata_size(cd, 0, default_keyslots_size)); + OK_(crypt_set_data_offset(cd, r_header_size + 8)); + OK_(crypt_format(cd, CRYPT_LUKS2, cipher, cipher_mode, NULL, key, key_size, ¶ms)); + OK_(crypt_get_metadata_size(cd, &mdata_size, &keyslots_size)); + EQ_(mdata_size, default_mdata_size); + EQ_(keyslots_size, default_keyslots_size); + EQ_(crypt_get_data_offset(cd), r_header_size + 8); + CRYPT_FREE(cd); + + _cleanup_dmdevices(); +} + +static void UseTempVolumes(void) +{ + char tmp[256]; + + // Tepmporary device without keyslot but with on-disk LUKS header + OK_(crypt_init(&cd, DEVICE_2)); + FAIL_(crypt_activate_by_volume_key(cd, CDEVICE_2, NULL, 0, 0), "not yet formatted"); + OK_(crypt_format(cd, CRYPT_LUKS2, "aes", "cbc-essiv:sha256", NULL, NULL, 16, NULL)); + OK_(crypt_activate_by_volume_key(cd, CDEVICE_2, NULL, 0, 0)); + EQ_(crypt_status(cd, CDEVICE_2), CRYPT_ACTIVE); + CRYPT_FREE(cd); + + OK_(crypt_init_by_name(&cd, CDEVICE_2)); + OK_(crypt_deactivate(cd, CDEVICE_2)); + CRYPT_FREE(cd); + + // Dirty checks: device without UUID + // we should be able to remove it but not manipulate with it + snprintf(tmp, sizeof(tmp), "dmsetup create %s --table \"" + "0 100 crypt aes-cbc-essiv:sha256 deadbabedeadbabedeadbabedeadbabe 0 " + "%s 2048\"", CDEVICE_2, DEVICE_2); + _system(tmp, 1); + OK_(crypt_init_by_name(&cd, CDEVICE_2)); + OK_(crypt_deactivate(cd, CDEVICE_2)); + FAIL_(crypt_activate_by_volume_key(cd, CDEVICE_2, NULL, 0, 0), "No known device type"); + CRYPT_FREE(cd); + + // Dirty checks: device with UUID but LUKS header key fingerprint must fail) + snprintf(tmp, sizeof(tmp), "dmsetup create %s --table \"" + "0 100 crypt aes-cbc-essiv:sha256 deadbabedeadbabedeadbabedeadbabe 0 " + "%s 2048\" -u CRYPT-LUKS2-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-ctest1", + CDEVICE_2, DEVICE_2); + _system(tmp, 1); + OK_(crypt_init_by_name(&cd, CDEVICE_2)); + OK_(crypt_deactivate(cd, CDEVICE_2)); + FAIL_(crypt_activate_by_volume_key(cd, CDEVICE_2, NULL, 0, 0), "wrong volume key"); + CRYPT_FREE(cd); + + // No slots + OK_(crypt_init(&cd, DEVICE_2)); + OK_(crypt_load(cd, CRYPT_LUKS2, NULL)); + FAIL_(crypt_activate_by_volume_key(cd, CDEVICE_2, NULL, 0, 0), "volume key is lost"); + CRYPT_FREE(cd); +} + +static void Luks2HeaderRestore(void) +{ + char key[128]; + struct crypt_pbkdf_type pbkdf = { + .type = CRYPT_KDF_ARGON2I, + .hash = "sha256", + .parallel_threads = 4, + .max_memory_kb = 1024, + .time_ms = 1 + }; + struct crypt_params_luks2 params = { + .pbkdf = &pbkdf, + .data_alignment = 8192, // 4M, data offset will be 4096 + .sector_size = 512 + }; + struct crypt_params_plain pl_params = { + .hash = "sha1", + .skip = 0, + .offset = 0, + .size = 0 + }; + struct crypt_params_luks1 luks1 = { + .data_alignment = 8192, // 4M offset to pass alignment test + }; + uint32_t flags = 0; + + const char *mk_hex = "bb21158c733229347bd4e681891e213d94c685be6a5b84818afe7a78a6de7a1a"; + size_t key_size = strlen(mk_hex) / 2; + const char *cipher = "aes"; + const char *cipher_mode = "cbc-essiv:sha256"; + uint64_t r_payload_offset; + + /* Cannot use Argon2 in FIPS */ + if (_fips_mode) { + pbkdf.type = CRYPT_KDF_PBKDF2; + pbkdf.parallel_threads = 0; + pbkdf.max_memory_kb = 0; + } + + crypt_decode_key(key, mk_hex, key_size); + + OK_(get_luks2_offsets(1, 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 + OK_(crypt_init(&cd, DMDIR L_DEVICE_OK)); + OK_(crypt_format(cd, CRYPT_PLAIN, cipher, cipher_mode, NULL, NULL, key_size, &pl_params)); + OK_(crypt_activate_by_volume_key(cd, CDEVICE_1, key, key_size, 0)); + FAIL_(crypt_header_restore(cd, CRYPT_PLAIN, NO_REQS_LUKS2_HEADER), "Cannot restore header to PLAIN type device"); + FAIL_(crypt_header_restore(cd, CRYPT_LUKS2, NO_REQS_LUKS2_HEADER), "Cannot restore header over PLAIN type device"); + EQ_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE); + OK_(crypt_deactivate(cd, CDEVICE_1)); + CRYPT_FREE(cd); + + // FIXME: does following test make a sense in LUKS2? + // volume key_size mismatch + // OK_(crypt_init(&cd, DMDIR L_DEVICE_OK)); + // memcpy(key2, key, key_size / 2); + // OK_(crypt_format(cd, CRYPT_LUKS2, cipher, cipher_mode, NULL, key2, key_size / 2, ¶ms)); + // FAIL_(crypt_header_restore(cd, CRYPT_LUKS2, VALID_LUKS2_HEADER), "Volume keysize mismatch"); + // CRYPT_FREE(cd); + + // payload offset mismatch + params.data_alignment = 8193; + OK_(crypt_init(&cd, DMDIR L_DEVICE_OK)); + OK_(crypt_format(cd, CRYPT_LUKS2, cipher, cipher_mode, NULL, key, key_size, ¶ms)); + FAIL_(crypt_header_restore(cd, CRYPT_LUKS2, NO_REQS_LUKS2_HEADER), "Payload offset mismatch"); + CRYPT_FREE(cd); + params.data_alignment = 4096; + OK_(crypt_init(&cd, DMDIR L_DEVICE_OK)); + OK_(crypt_format(cd, CRYPT_LUKS2, cipher, cipher_mode, NULL, key, key_size, ¶ms)); + // FIXME: either format has to fail or next line must be true + // EQ_(crypt_get_data_offset(cd), params.data_alignment); + // FAIL_(crypt_header_restore(cd, CRYPT_LUKS2, VALID_LUKS2_HEADER), "Payload offset mismatch"); + CRYPT_FREE(cd); + + // do not allow restore over LUKS1 header on device + OK_(crypt_init(&cd, DMDIR L_DEVICE_OK)); + crypt_set_iteration_time(cd, 1); + OK_(crypt_format(cd, CRYPT_LUKS1, cipher, cipher_mode, NULL, NULL, 32, &luks1)); + CRYPT_FREE(cd); + OK_(crypt_init(&cd, DMDIR L_DEVICE_OK)); + OK_(crypt_load(cd, CRYPT_LUKS, NULL)); + FAIL_(crypt_header_restore(cd, CRYPT_LUKS2, NO_REQS_LUKS2_HEADER), "LUKS1 format detected"); + CRYPT_FREE(cd); + + /* check crypt_header_restore() properly loads crypt_device context */ + OK_(crypt_init(&cd, DMDIR L_DEVICE_OK)); + OK_(crypt_wipe(cd, NULL, CRYPT_WIPE_ZERO, 0, 1*1024*1024, 1*1024*1024, 0, NULL, NULL)); + OK_(crypt_header_restore(cd, CRYPT_LUKS2, NO_REQS_LUKS2_HEADER)); + /* check LUKS2 specific API call returns non-error code */ + OK_(crypt_persistent_flags_get(cd, CRYPT_FLAGS_REQUIREMENTS, &flags)); + EQ_(flags, 0); + /* same test, any LUKS */ + OK_(crypt_wipe(cd, NULL, CRYPT_WIPE_ZERO, 0, 1*1024*1024, 1*1024*1024, 0, NULL, NULL)); + OK_(crypt_header_restore(cd, CRYPT_LUKS, NO_REQS_LUKS2_HEADER)); + /* check LUKS2 specific API call returns non-error code */ + OK_(crypt_persistent_flags_get(cd, CRYPT_FLAGS_REQUIREMENTS, &flags)); + EQ_(flags, 0); + + CRYPT_FREE(cd); + + _cleanup_dmdevices(); +} + +static void Luks2HeaderLoad(void) +{ + struct crypt_pbkdf_type pbkdf = { + .type = CRYPT_KDF_ARGON2I, + .hash = "sha256", + .parallel_threads = 4, + .max_memory_kb = 1024, + .time_ms = 1 + }; + struct crypt_params_luks2 params = { + .pbkdf = &pbkdf, + .data_alignment = 8192, // 4M, data offset will be 4096 + .data_device = DEVICE_2, + .sector_size = 512 + }; + struct crypt_params_plain pl_params = { + .hash = "sha1", + .skip = 0, + .offset = 0, + .size = 0 + }; + char key[128], cmd[256]; + + const char *mk_hex = "bb21158c733229347bd4e681891e213d94c685be6a5b84818afe7a78a6de7a1a"; + size_t key_size = strlen(mk_hex) / 2; + const char *cipher = "aes"; + const char *cipher_mode = "cbc-essiv:sha256"; + uint64_t r_payload_offset, r_header_size, img_size; + + /* Cannot use Argon2 in FIPS */ + if (_fips_mode) { + pbkdf.type = CRYPT_KDF_PBKDF2; + pbkdf.parallel_threads = 0; + pbkdf.max_memory_kb = 0; + } + + crypt_decode_key(key, mk_hex, key_size); + + // 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)); + // 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 + //OK_(create_dmdevice_over_loop(H_DEVICE_WRONG, r_payload_offset - 1)); + OK_(create_dmdevice_over_loop(H_DEVICE_WRONG, img_size - 1)); + snprintf(cmd, sizeof(cmd), "dd if=" IMAGE1 " of=" DMDIR H_DEVICE_WRONG " bs=%" PRIu32 " count=%" PRIu64 " 2>/dev/null", params.sector_size, img_size - 1); + OK_(_system(cmd, 1)); + // some device + OK_(create_dmdevice_over_loop(L_DEVICE_OK, r_payload_offset + 1000)); + // 1 sector device + OK_(create_dmdevice_over_loop(L_DEVICE_1S, r_header_size + 1)); + // 0 sectors device for payload + OK_(create_dmdevice_over_loop(L_DEVICE_0S, r_header_size)); + + // valid metadata and device size + params.data_alignment = 0; + params.data_device = DMDIR L_DEVICE_OK; + OK_(crypt_init(&cd, DMDIR H_DEVICE)); + OK_(crypt_format(cd, CRYPT_LUKS2, cipher, cipher_mode, NULL, key, key_size, ¶ms)); + CRYPT_FREE(cd); + OK_(crypt_init(&cd, DMDIR H_DEVICE)); + OK_(crypt_load(cd, CRYPT_LUKS2, NULL)); + OK_(crypt_set_data_device(cd, DMDIR L_DEVICE_OK)); + OK_(crypt_activate_by_volume_key(cd, CDEVICE_1, key, key_size, 0)); + EQ_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE); + OK_(!crypt_get_metadata_device_name(cd)); + EQ_(strcmp(DMDIR H_DEVICE, crypt_get_metadata_device_name(cd)), 0); + OK_(crypt_deactivate(cd, CDEVICE_1)); + CRYPT_FREE(cd); + + // repeat with init with two devices + OK_(crypt_init_data_device(&cd, DMDIR H_DEVICE, DMDIR L_DEVICE_OK)); + OK_(crypt_format(cd, CRYPT_LUKS2, cipher, cipher_mode, NULL, key, key_size, ¶ms)); + CRYPT_FREE(cd); + OK_(crypt_init_data_device(&cd, DMDIR H_DEVICE, DMDIR L_DEVICE_OK)); + OK_(crypt_load(cd, CRYPT_LUKS2, NULL)); + OK_(!crypt_get_metadata_device_name(cd)); + EQ_(strcmp(DMDIR H_DEVICE, crypt_get_metadata_device_name(cd)), 0); + CRYPT_FREE(cd); + + // bad header: device too small (payloadOffset > device_size) + OK_(crypt_init(&cd, DMDIR H_DEVICE_WRONG)); + FAIL_(crypt_load(cd, CRYPT_LUKS2, NULL), "Device too small"); + NULL_(crypt_get_type(cd)); + CRYPT_FREE(cd); + + // 0 secs for encrypted data area + params.data_alignment = 8192; + params.data_device = NULL; + OK_(crypt_init(&cd, DMDIR L_DEVICE_0S)); + OK_(crypt_format(cd, CRYPT_LUKS2, cipher, cipher_mode, NULL, key, key_size, ¶ms)); + CRYPT_FREE(cd); + // load should be ok + OK_(crypt_init(&cd, DMDIR L_DEVICE_0S)); + OK_(crypt_load(cd, CRYPT_LUKS2, NULL)); + FAIL_(crypt_activate_by_volume_key(cd, CDEVICE_1, key, key_size, 0), "Device too small"); + EQ_(crypt_status(cd, CDEVICE_1), CRYPT_INACTIVE); + CRYPT_FREE(cd); + + // damaged header + OK_(_system("dd if=/dev/zero of=" DMDIR L_DEVICE_OK " bs=512 count=8 2>/dev/null", 1)); + OK_(_system("dd if=/dev/zero of=" DMDIR L_DEVICE_OK " bs=512 seek=32 count=8 2>/dev/null", 1)); + OK_(crypt_init(&cd, DMDIR L_DEVICE_OK)); + FAIL_(crypt_load(cd, CRYPT_LUKS2, NULL), "Header not found"); + CRYPT_FREE(cd); + + // plain device + OK_(crypt_init(&cd, DMDIR H_DEVICE)); + FAIL_(crypt_load(cd, CRYPT_PLAIN, NULL), "Can't load nonLUKS device type"); + CRYPT_FREE(cd); + OK_(crypt_init(&cd, DMDIR H_DEVICE)); + OK_(crypt_format(cd, CRYPT_PLAIN, cipher, cipher_mode, NULL, key, key_size, &pl_params)); + FAIL_(crypt_load(cd, CRYPT_LUKS2, NULL), "Can't load over nonLUKS device type"); + CRYPT_FREE(cd); + + //LUKSv2 device + OK_(crypt_init(&cd, DEVICE_4)); + OK_(crypt_load(cd, CRYPT_LUKS, NULL)); + CRYPT_FREE(cd); + OK_(crypt_init(&cd, DEVICE_4)); + crypt_set_iteration_time(cd, 0); /* invalid for argon2 pbkdf, ignored */ + OK_(crypt_load(cd, CRYPT_LUKS, NULL)); + CRYPT_FREE(cd); + + /* check load sets proper device type */ + OK_(crypt_init(&cd, DMDIR L_DEVICE_0S)); + OK_(crypt_load(cd, CRYPT_LUKS, NULL)); + EQ_(strcmp(CRYPT_LUKS2, crypt_get_type(cd)), 0); + CRYPT_FREE(cd); + + _cleanup_dmdevices(); +} + +static void Luks2HeaderBackup(void) +{ + struct crypt_pbkdf_type pbkdf = { + .type = CRYPT_KDF_ARGON2I, + .hash = "sha256", + .parallel_threads = 4, + .max_memory_kb = 1024, + .time_ms = 1 + }; + struct crypt_params_luks2 params = { + .pbkdf = &pbkdf, + .data_alignment = 8192, // 4M, data offset will be 4096 + .data_device = DEVICE_2, + .sector_size = 512 + }; + char key[128]; + int fd, ro = O_RDONLY; + + const char *mk_hex = "bb21158c733229347bd4e681891e213d94c685be6a5b84818afe7a78a6de7a1a"; + size_t key_size = strlen(mk_hex) / 2; + const char *cipher = "aes"; + const char *cipher_mode = "cbc-essiv:sha256"; + uint64_t r_payload_offset; + + const char *passphrase = PASSPHRASE; + + /* Cannot use Argon2 in FIPS */ + if (_fips_mode) { + pbkdf.type = CRYPT_KDF_PBKDF2; + pbkdf.parallel_threads = 0; + pbkdf.max_memory_kb = 0; + } + + crypt_decode_key(key, mk_hex, key_size); + + OK_(get_luks2_offsets(0, 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 + OK_(crypt_init(&cd, DMDIR L_DEVICE_OK)); + OK_(crypt_format(cd, CRYPT_LUKS2, cipher, cipher_mode, NULL, key, key_size, ¶ms)); + OK_(crypt_activate_by_volume_key(cd, CDEVICE_1, key, key_size, 0)); + EQ_(crypt_keyslot_add_by_volume_key(cd, 7, key, key_size, passphrase, strlen(passphrase)), 7); + EQ_(crypt_keyslot_add_by_volume_key(cd, 0, key, key_size, passphrase, strlen(passphrase)), 0); + OK_(crypt_header_backup(cd, CRYPT_LUKS2, BACKUP_FILE)); + OK_(crypt_deactivate(cd, CDEVICE_1)); + CRYPT_FREE(cd); + + // restore header from backup + OK_(crypt_init(&cd, DMDIR L_DEVICE_OK)); + OK_(crypt_header_restore(cd, CRYPT_LUKS2, BACKUP_FILE)); + OK_(crypt_load(cd, CRYPT_LUKS2, NULL)); + OK_(crypt_activate_by_volume_key(cd, CDEVICE_1, key, key_size, 0)); + EQ_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE); + OK_(crypt_deactivate(cd, CDEVICE_1)); + CRYPT_FREE(cd); + + // exercise luksOpen using backup header in file + OK_(crypt_init(&cd, BACKUP_FILE)); + OK_(crypt_load(cd, CRYPT_LUKS2, NULL)); + OK_(crypt_set_data_device(cd, DMDIR L_DEVICE_OK)); + EQ_(crypt_activate_by_passphrase(cd, CDEVICE_1, 0, passphrase, strlen(passphrase), 0), 0); + EQ_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE); + OK_(crypt_deactivate(cd, CDEVICE_1)); + CRYPT_FREE(cd); + + OK_(crypt_init(&cd, BACKUP_FILE)); + OK_(crypt_load(cd, CRYPT_LUKS2, NULL)); + OK_(crypt_set_data_device(cd, DMDIR L_DEVICE_OK)); + EQ_(crypt_activate_by_passphrase(cd, CDEVICE_1, 7, passphrase, strlen(passphrase), 0), 7); + EQ_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE); + OK_(crypt_deactivate(cd, CDEVICE_1)); + CRYPT_FREE(cd); + + // exercise luksOpen using backup header on block device + fd = loop_attach(&DEVICE_3, BACKUP_FILE, 0, 0, &ro); + NOTFAIL_(fd, "Bad loop device."); + close(fd); + OK_(crypt_init(&cd, DEVICE_3)); + OK_(crypt_load(cd, CRYPT_LUKS2, NULL)); + OK_(crypt_set_data_device(cd, DMDIR L_DEVICE_OK)); + EQ_(crypt_activate_by_passphrase(cd, CDEVICE_1, 0, passphrase, strlen(passphrase), 0), 0); + EQ_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE); + OK_(crypt_deactivate(cd, CDEVICE_1)); + CRYPT_FREE(cd); + + OK_(crypt_init(&cd, DEVICE_3)); + OK_(crypt_load(cd, CRYPT_LUKS2, NULL)); + OK_(crypt_set_data_device(cd, DMDIR L_DEVICE_OK)); + EQ_(crypt_activate_by_passphrase(cd, CDEVICE_1, 7, passphrase, strlen(passphrase), 0), 7); + EQ_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE); + OK_(crypt_deactivate(cd, CDEVICE_1)); + CRYPT_FREE(cd); + + _cleanup_dmdevices(); +} + +static void ResizeDeviceLuks2(void) +{ + struct crypt_pbkdf_type pbkdf = { + .type = CRYPT_KDF_ARGON2I, + .hash = "sha256", + .parallel_threads = 4, + .max_memory_kb = 1024, + .time_ms = 1 + }; + struct crypt_params_luks2 params = { + .pbkdf = &pbkdf, + .data_alignment = 8192, // 4M, data offset will be 4096 + .sector_size = 512 + }; + char key[128]; + + const char *mk_hex = "bb21158c733229347bd4e681891e213d94c685be6a5b84818afe7a78a6de7a1a"; + size_t key_size = strlen(mk_hex) / 2; + const char *cipher = "aes"; + const char *cipher_mode = "cbc-essiv:sha256"; + uint64_t r_payload_offset, r_header_size, r_size; + + /* Cannot use Argon2 in FIPS */ + if (_fips_mode) { + pbkdf.type = CRYPT_KDF_PBKDF2; + pbkdf.parallel_threads = 0; + pbkdf.max_memory_kb = 0; + } + + 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_(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)); + OK_(create_dmdevice_over_loop(L_DEVICE_WRONG, r_payload_offset + 1000)); + + // test header and encrypted payload all in one device + OK_(crypt_init(&cd, DMDIR L_DEVICE_OK)); + // disable loading VKs in kernel keyring (compatible mode) + OK_(crypt_volume_key_keyring(cd, 0)); + OK_(crypt_format(cd, CRYPT_LUKS2, cipher, cipher_mode, NULL, key, key_size, ¶ms)); + OK_(crypt_activate_by_volume_key(cd, CDEVICE_1, key, key_size, 0)); + OK_(crypt_resize(cd, CDEVICE_1, 0)); + OK_(crypt_resize(cd, CDEVICE_1, 42)); + if (!t_device_size(DMDIR CDEVICE_1, &r_size)) + EQ_(42, r_size >> SECTOR_SHIFT); + OK_(crypt_resize(cd, CDEVICE_1, 0)); + // autodetect encrypted device area size + OK_(crypt_resize(cd, CDEVICE_1, 0)); + if (!t_device_size(DMDIR CDEVICE_1, &r_size)) + EQ_(1000, r_size >> SECTOR_SHIFT); + FAIL_(crypt_resize(cd, CDEVICE_1, 1001), "Device too small"); + if (!t_device_size(DMDIR CDEVICE_1, &r_size)) + EQ_(1000, r_size >> SECTOR_SHIFT); + EQ_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE); + OK_(crypt_deactivate(cd, CDEVICE_1)); + CRYPT_FREE(cd); + + params.data_alignment = 0; + params.data_device = DMDIR L_DEVICE_0S; + // test case for external header + OK_(crypt_init(&cd, DMDIR H_DEVICE)); + OK_(crypt_format(cd, CRYPT_LUKS2, cipher, cipher_mode, NULL, key, key_size, ¶ms)); + OK_(crypt_activate_by_volume_key(cd, CDEVICE_1, key, key_size, 0)); + OK_(crypt_resize(cd, CDEVICE_1, 666)); + if (!t_device_size(DMDIR CDEVICE_1, &r_size)) + EQ_(666, r_size >> SECTOR_SHIFT); + // autodetect encrypted device size + OK_(crypt_resize(cd, CDEVICE_1, 0)); + if (!t_device_size(DMDIR CDEVICE_1, &r_size)) + EQ_(1000, r_size >> SECTOR_SHIFT); + FAIL_(crypt_resize(cd, CDEVICE_1, 1001), "Device too small"); + if (!t_device_size(DMDIR CDEVICE_1, &r_size)) + EQ_(1000, r_size >> SECTOR_SHIFT); + EQ_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE); + OK_(crypt_deactivate(cd, CDEVICE_1)); + CRYPT_FREE(cd); + +#ifdef KERNEL_KEYRING + OK_(crypt_init(&cd, DMDIR L_DEVICE_OK)); + OK_(crypt_load(cd, CRYPT_LUKS, NULL)); + // enable loading VKs in kernel keyring (default mode) + OK_(crypt_volume_key_keyring(cd, 1)); + OK_(crypt_activate_by_volume_key(cd, CDEVICE_1, key, key_size, 0)); + // erase volume key from kernel keyring + if (t_dm_crypt_keyring_support()) + OK_(_drop_keyring_key(cd, 0)); + else + FAIL_(_drop_keyring_key(cd, 0), "key not found"); + // same size is ok + OK_(crypt_resize(cd, CDEVICE_1, 0)); + // kernel fails to find the volume key in keyring + if (t_dm_crypt_keyring_support()) + FAIL_(crypt_resize(cd, CDEVICE_1, 42), "Unable to find volume key in keyring"); + else + OK_(crypt_resize(cd, CDEVICE_1, 42)); + // test mode must not load vk in keyring + OK_(crypt_activate_by_volume_key(cd, NULL, key, key_size, 0)); + if (t_dm_crypt_keyring_support()) + FAIL_(crypt_resize(cd, CDEVICE_1, 44), "VK must be in keyring to perform resize"); + else + OK_(crypt_resize(cd, CDEVICE_1, 44)); + // reinstate the volume key in keyring + OK_(crypt_activate_by_volume_key(cd, NULL, key, key_size, t_dm_crypt_keyring_support() ? CRYPT_ACTIVATE_KEYRING_KEY : 0)); + OK_(crypt_resize(cd, CDEVICE_1, 43)); + if (!t_device_size(DMDIR CDEVICE_1, &r_size)) + EQ_(43, r_size >> SECTOR_SHIFT); + CRYPT_FREE(cd); + + OK_(crypt_init(&cd, DMDIR L_DEVICE_OK)); + OK_(crypt_load(cd, CRYPT_LUKS, NULL)); + // check userspace gets hint volume key must be properly loaded in kernel keyring + if (t_dm_crypt_keyring_support()) + EQ_(crypt_resize(cd, CDEVICE_1, 0), -EPERM); + else + OK_(crypt_resize(cd, CDEVICE_1, 0)); + CRYPT_FREE(cd); + + // same as above for handles initialised by name + OK_(crypt_init_by_name(&cd, CDEVICE_1)); + if (t_dm_crypt_keyring_support()) + EQ_(crypt_resize(cd, CDEVICE_1, 0), -EPERM); + else + OK_(crypt_resize(cd, CDEVICE_1, 0)); + OK_(crypt_deactivate(cd, CDEVICE_1)); + CRYPT_FREE(cd); +#endif + OK_(crypt_init(&cd, DMDIR L_DEVICE_OK)); + OK_(crypt_load(cd, NULL, NULL)); + OK_(crypt_activate_by_volume_key(cd, CDEVICE_1, key, key_size, 0)); + + /* create second LUKS2 device */ + OK_(crypt_init(&cd2, DMDIR L_DEVICE_WRONG)); + OK_(crypt_format(cd2, CRYPT_LUKS2, cipher, cipher_mode, crypt_get_uuid(cd), key, key_size, ¶ms)); + OK_(crypt_activate_by_volume_key(cd2, CDEVICE_2, key, key_size, 0)); + /* do not allow resize of other device */ + FAIL_(crypt_resize(cd2, CDEVICE_1, 1), "Device got resized by wrong device context."); + OK_(crypt_deactivate(cd2, CDEVICE_2)); + CRYPT_FREE(cd2); + + OK_(crypt_init(&cd2, DMDIR L_DEVICE_WRONG)); + crypt_set_iteration_time(cd2, 1); + OK_(crypt_format(cd2, CRYPT_LUKS1, cipher, cipher_mode, crypt_get_uuid(cd), key, key_size, NULL)); + OK_(crypt_activate_by_volume_key(cd2, CDEVICE_2, key, key_size, 0)); + FAIL_(crypt_resize(cd2, CDEVICE_1, 1), "Device got resized by wrong device context."); + OK_(crypt_deactivate(cd2, CDEVICE_2)); + CRYPT_FREE(cd2); + + OK_(crypt_init(&cd2, DMDIR L_DEVICE_WRONG)); + OK_(crypt_format(cd2, CRYPT_PLAIN, cipher, cipher_mode, NULL, key, key_size, NULL)); + OK_(crypt_activate_by_volume_key(cd2, CDEVICE_2, key, key_size, 0)); + FAIL_(crypt_resize(cd2, CDEVICE_1, 1), "Device got resized by wrong device context."); + OK_(crypt_deactivate(cd2, CDEVICE_2)); + CRYPT_FREE(cd2); + + OK_(crypt_deactivate(cd, CDEVICE_1)); + CRYPT_FREE(cd); + + _cleanup_dmdevices(); +} + +static void TokenActivationByKeyring(void) +{ +#ifdef KERNEL_KEYRING + key_serial_t kid, kid1; + struct crypt_active_device cad; + + const char *cipher = "aes"; + const char *cipher_mode = "xts-plain64"; + + const struct crypt_token_params_luks2_keyring params = { + .key_description = KEY_DESC_TEST0 + }, params2 = { + .key_description = KEY_DESC_TEST1 + }; + uint64_t r_payload_offset; + + if (!t_dm_crypt_keyring_support()) { + printf("WARNING: Kernel keyring not supported, skipping test.\n"); + return; + } + + 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_(create_dmdevice_over_loop(L_DEVICE_1S, r_payload_offset + 1)); + + // prepare the device + OK_(crypt_init(&cd, DMDIR L_DEVICE_1S)); + crypt_set_iteration_time(cd, 1); + OK_(crypt_format(cd, CRYPT_LUKS2, cipher, cipher_mode, NULL, NULL, 32, NULL)); + EQ_(crypt_keyslot_add_by_volume_key(cd, 0, NULL, 32, PASSPHRASE, strlen(PASSPHRASE)), 0); + EQ_(crypt_token_luks2_keyring_set(cd, 3, ¶ms), 3); + EQ_(crypt_token_assign_keyslot(cd, 3, 0), 3); + CRYPT_FREE(cd); + + // test thread keyring key in token 0 + OK_(crypt_init(&cd, DMDIR L_DEVICE_1S)); + OK_(crypt_load(cd, CRYPT_LUKS2, NULL)); + EQ_(crypt_activate_by_token(cd, CDEVICE_1, 3, NULL, 0), 0); + FAIL_(crypt_activate_by_token(cd, CDEVICE_1, 3, NULL, 0), "already open"); + OK_(crypt_deactivate(cd, CDEVICE_1)); + CRYPT_FREE(cd); + + NOTFAIL_(keyctl_unlink(kid, KEY_SPEC_THREAD_KEYRING), "Test or kernel keyring are broken."); + + kid = add_key("user", KEY_DESC_TEST0, PASSPHRASE, strlen(PASSPHRASE), KEY_SPEC_PROCESS_KEYRING); + NOTFAIL_(kid, "Test or kernel keyring are broken."); + + // add token 1 with process keyring key + OK_(crypt_init(&cd, DMDIR L_DEVICE_1S)); + OK_(crypt_load(cd, CRYPT_LUKS2, NULL)); + EQ_(crypt_token_json_set(cd, 3, NULL), 3); + EQ_(crypt_token_luks2_keyring_set(cd, 1, ¶ms), 1); + EQ_(crypt_token_assign_keyslot(cd, 1, 0), 1); + CRYPT_FREE(cd); + + // test process keyring key in token 1 + OK_(crypt_init(&cd, DMDIR L_DEVICE_1S)); + OK_(crypt_load(cd, CRYPT_LUKS2, NULL)); + EQ_(crypt_activate_by_token(cd, CDEVICE_1, 1, NULL, 0), 0); + FAIL_(crypt_activate_by_token(cd, CDEVICE_1, 1, NULL, 0), "already open"); + OK_(crypt_deactivate(cd, CDEVICE_1)); + CRYPT_FREE(cd); + + NOTFAIL_(keyctl_unlink(kid, KEY_SPEC_PROCESS_KEYRING), "Test or kernel keyring are broken."); + + // create two tokens and let the cryptsetup unlock the volume with the valid one + kid = add_key("user", KEY_DESC_TEST0, PASSPHRASE, strlen(PASSPHRASE), KEY_SPEC_THREAD_KEYRING); + NOTFAIL_(kid, "Test or kernel keyring are broken."); + + kid1 = add_key("user", KEY_DESC_TEST1, PASSPHRASE1, strlen(PASSPHRASE1), KEY_SPEC_THREAD_KEYRING); + NOTFAIL_(kid1, "Test or kernel keyring are broken."); + + OK_(crypt_init(&cd, DMDIR L_DEVICE_1S)); + OK_(crypt_load(cd, CRYPT_LUKS2, NULL)); + EQ_(crypt_token_luks2_keyring_set(cd, 0, ¶ms), 0); + EQ_(crypt_token_assign_keyslot(cd, 0, 0), 0); + EQ_(crypt_token_luks2_keyring_set(cd, 1, ¶ms2), 1); + FAIL_(crypt_token_assign_keyslot(cd, 1, 1), "Keyslot 1 doesn't exist"); + crypt_set_iteration_time(cd, 1); + EQ_(crypt_keyslot_add_by_passphrase(cd, 1, PASSPHRASE, strlen(PASSPHRASE), PASSPHRASE1, strlen(PASSPHRASE1)), 1); + EQ_(crypt_token_assign_keyslot(cd, 1, 1), 1); + CRYPT_FREE(cd); + + // activate by specific token + OK_(crypt_init(&cd, DMDIR L_DEVICE_1S)); + OK_(crypt_load(cd, CRYPT_LUKS2, NULL)); + EQ_(crypt_activate_by_token(cd, CDEVICE_1, 0, NULL, 0), 0); + if (t_dm_crypt_keyring_support()) { + OK_(crypt_get_active_device(cd, CDEVICE_1, &cad)); + EQ_(cad.flags & CRYPT_ACTIVATE_KEYRING_KEY, CRYPT_ACTIVATE_KEYRING_KEY); + } + OK_(crypt_deactivate(cd, CDEVICE_1)); + EQ_(crypt_activate_by_token(cd, CDEVICE_1, 1, NULL, 0), 1); + OK_(crypt_deactivate(cd, CDEVICE_1)); + CRYPT_FREE(cd); + + NOTFAIL_(keyctl_unlink(kid, KEY_SPEC_THREAD_KEYRING), "Test or kernel keyring are broken."); + + // activate by any token with token 0 having absent pass from keyring + OK_(crypt_init(&cd, DMDIR L_DEVICE_1S)); + OK_(crypt_load(cd, CRYPT_LUKS2, NULL)); + EQ_(crypt_activate_by_token(cd, CDEVICE_1, CRYPT_ANY_TOKEN, NULL, 0), 1); + if (t_dm_crypt_keyring_support()) { + OK_(crypt_get_active_device(cd, CDEVICE_1, &cad)); + EQ_(cad.flags & CRYPT_ACTIVATE_KEYRING_KEY, CRYPT_ACTIVATE_KEYRING_KEY); + } + OK_(crypt_deactivate(cd, CDEVICE_1)); + CRYPT_FREE(cd); + + kid = add_key("user", KEY_DESC_TEST0, PASSPHRASE, strlen(PASSPHRASE), KEY_SPEC_THREAD_KEYRING); + NOTFAIL_(kid, "Test or kernel keyring are broken."); + + // replace pass for keyslot 0 making token 0 invalid + OK_(crypt_init(&cd, DMDIR L_DEVICE_1S)); + OK_(crypt_load(cd, CRYPT_LUKS2, NULL)); + OK_(crypt_keyslot_destroy(cd, 0)); + crypt_set_iteration_time(cd, 1); + EQ_(crypt_keyslot_add_by_passphrase(cd, 0, PASSPHRASE1, strlen(PASSPHRASE1), PASSPHRASE1, strlen(PASSPHRASE1)), 0); + CRYPT_FREE(cd); + + // activate by any token with token 0 having wrong pass for keyslot 0 + OK_(crypt_init(&cd, DMDIR L_DEVICE_1S)); + OK_(crypt_load(cd, CRYPT_LUKS2, NULL)); + EQ_(crypt_activate_by_token(cd, CDEVICE_1, CRYPT_ANY_TOKEN, NULL, 0), 1); + OK_(crypt_deactivate(cd, CDEVICE_1)); + CRYPT_FREE(cd); + + // create new device, with two tokens: + // 1st token being invalid (missing key in keyring) + // 2nd token can activate keyslot 1 after failing to do so w/ keyslot 0 (wrong pass) + OK_(crypt_init(&cd, DMDIR L_DEVICE_1S)); + crypt_set_iteration_time(cd, 1); + OK_(crypt_format(cd, CRYPT_LUKS2, cipher, cipher_mode, NULL, NULL, 32, NULL)); + EQ_(crypt_keyslot_add_by_volume_key(cd, 0, NULL, 32, PASSPHRASE, strlen(PASSPHRASE)), 0); + EQ_(crypt_keyslot_add_by_volume_key(cd, 1, NULL, 32, PASSPHRASE1, strlen(PASSPHRASE1)), 1); + EQ_(crypt_token_luks2_keyring_set(cd, 0, ¶ms), 0); + EQ_(crypt_token_assign_keyslot(cd, 0, 0), 0); + EQ_(crypt_token_luks2_keyring_set(cd, 2, ¶ms2), 2); + EQ_(crypt_token_assign_keyslot(cd, 2, 1), 2); + CRYPT_FREE(cd); + + NOTFAIL_(keyctl_unlink(kid, KEY_SPEC_THREAD_KEYRING), "Test or kernel keyring are broken."); + + kid1 = add_key("user", KEY_DESC_TEST1, PASSPHRASE1, strlen(PASSPHRASE1), KEY_SPEC_THREAD_KEYRING); + NOTFAIL_(kid1, "Test or kernel keyring are broken."); + + OK_(crypt_init(&cd, DMDIR L_DEVICE_1S)); + OK_(crypt_load(cd, CRYPT_LUKS2, NULL)); + EQ_(crypt_activate_by_token(cd, CDEVICE_1, CRYPT_ANY_TOKEN, NULL, 0), 1); + OK_(crypt_deactivate(cd, CDEVICE_1)); + CRYPT_FREE(cd); + _cleanup_dmdevices(); +#else + printf("WARNING: cryptsetup compiled with kernel keyring service disabled, skipping test.\n"); +#endif +} + +static void Tokens(void) +{ +#define TEST_TOKEN_JSON(x) "{\"type\":\"test_token\",\"keyslots\":[" x "]," \ + "\"key_length\":32,\"a_field\":\"magic_string\"}" + +#define TEST_TOKEN_JSON_INVALID(x) "{\"type\":\"test_token\",\"keyslots\":[" x "]," \ + "\"key_length\":32}" + +#define TEST_TOKEN1_JSON(x) "{\"type\":\"test_token1\",\"keyslots\":[" x "]," \ + "\"key_length\":32,\"a_field\":\"magic_string\"}" + +#define TEST_TOKEN1_JSON_INVALID(x) "{\"type\":\"test_token1\",\"keyslots\":[" x "]," \ + "\"key_length\":32}" + +#define BOGUS_TOKEN0_JSON "{\"type\":\"luks2-\",\"keyslots\":[]}" +#define BOGUS_TOKEN1_JSON "{\"type\":\"luks2-a\",\"keyslots\":[]}" + +#define LUKS2_KEYRING_TOKEN_JSON(x, y) "{\"type\":\"luks2-keyring\",\"keyslots\":[" x "]," \ + "\"key_description\":" y "}" + +#define LUKS2_KEYRING_TOKEN_JSON_BAD(x, y) "{\"type\":\"luks2-keyring\",\"keyslots\":[" x "]," \ + "\"key_description\":" y ", \"some_field\":\"some_value\"}" + + + const char *dummy; + const char *cipher = "aes"; + const char *cipher_mode = "xts-plain64"; + char passptr[] = PASSPHRASE; + char passptr1[] = PASSPHRASE1; + + static const crypt_token_handler th = { + .name = "test_token", + .open = test_open, + .validate = test_validate + }, th2 = { + .name = "test_token", + .open = test_open + }, th3 = { + .name = "test_token1", + .open = test_open, + .validate = test_validate + }, th_reserved = { + .name = "luks2-prefix", + .open = test_open + }; + + struct crypt_token_params_luks2_keyring params = { + .key_description = "desc" + }; + uint64_t r_payload_offset; + + OK_(crypt_token_register(&th)); + FAIL_(crypt_token_register(&th2), "Token handler with the name already registered."); + + FAIL_(crypt_token_register(&th_reserved), "luks2- is reserved prefix"); + + OK_(get_luks2_offsets(1, 0, 0, NULL, &r_payload_offset)); + OK_(create_dmdevice_over_loop(L_DEVICE_1S, r_payload_offset + 1)); + + // basic token API tests + OK_(crypt_init(&cd, DMDIR L_DEVICE_1S)); + crypt_set_iteration_time(cd, 1); + OK_(crypt_format(cd, CRYPT_LUKS2, cipher, cipher_mode, NULL, NULL, 32, NULL)); + EQ_(crypt_token_status(cd, -1, NULL), CRYPT_TOKEN_INVALID); + EQ_(crypt_token_status(cd, 32, NULL), CRYPT_TOKEN_INVALID); + EQ_(crypt_token_status(cd, 0, NULL), CRYPT_TOKEN_INACTIVE); + EQ_(crypt_token_status(cd, 31, NULL), CRYPT_TOKEN_INACTIVE); + EQ_(crypt_keyslot_add_by_volume_key(cd, 0, NULL, 32, PASSPHRASE, strlen(PASSPHRASE)), 0); + EQ_(crypt_keyslot_add_by_volume_key(cd, 1, NULL, 32, PASSPHRASE1, strlen(PASSPHRASE1)), 1); + FAIL_(crypt_token_json_set(cd, CRYPT_ANY_TOKEN, TEST_TOKEN_JSON_INVALID("\"0\"")), "Token validation failed"); + EQ_(crypt_token_json_set(cd, CRYPT_ANY_TOKEN, TEST_TOKEN_JSON("\"0\"")), 0); + EQ_(crypt_token_status(cd, 0, NULL), CRYPT_TOKEN_EXTERNAL); + EQ_(crypt_activate_by_token(cd, CDEVICE_1, 0, passptr, 0), 0); + FAIL_(crypt_activate_by_token(cd, CDEVICE_1, 0, passptr, 0), "already active"); + OK_(crypt_deactivate(cd, CDEVICE_1)); + + // write invalid token and verify that validate() can detect it after handler being registered + EQ_(crypt_token_json_set(cd, CRYPT_ANY_TOKEN, TEST_TOKEN1_JSON_INVALID("\"1\"")), 1); + EQ_(crypt_token_status(cd, 1, NULL), CRYPT_TOKEN_EXTERNAL_UNKNOWN); + EQ_(crypt_token_json_set(cd, CRYPT_ANY_TOKEN, TEST_TOKEN1_JSON("\"1\"")), 2); + EQ_(crypt_token_status(cd, 2, &dummy), CRYPT_TOKEN_EXTERNAL_UNKNOWN); + OK_(strcmp(dummy, "test_token1")); + FAIL_(crypt_activate_by_token(cd, CDEVICE_1, 1, passptr1, 0), "Unknown token handler"); + FAIL_(crypt_activate_by_token(cd, CDEVICE_1, 2, passptr1, 0), "Unknown token handler"); + OK_(crypt_token_register(&th3)); + FAIL_(crypt_activate_by_token(cd, CDEVICE_1, 1, passptr1, 0), "Token validation failed"); + EQ_(crypt_activate_by_token(cd, CDEVICE_1, 2, passptr1, 0), 1); + OK_(crypt_deactivate(cd, CDEVICE_1)); + + // test crypt_token_json_get returns correct token id + EQ_(crypt_token_json_get(cd, 2, &dummy), 2); + + // exercise assign/unassign keyslots API + EQ_(crypt_token_unassign_keyslot(cd, 2, 1), 2); + FAIL_(crypt_activate_by_token(cd, CDEVICE_1, 2, passptr1, 0), "Token assigned to no keyslot"); + EQ_(crypt_token_assign_keyslot(cd, 2, 0), 2); + FAIL_(crypt_activate_by_token(cd, CDEVICE_1, 2, passptr1, 0), "Wrong passphrase"); + EQ_(crypt_activate_by_token(cd, CDEVICE_1, 2, passptr, 0), 0); + OK_(crypt_deactivate(cd, CDEVICE_1)); + EQ_(crypt_token_json_set(cd, 1, NULL), 1); + FAIL_(crypt_token_json_get(cd, 1, &dummy), "Token is not there"); + EQ_(crypt_token_unassign_keyslot(cd, 2, CRYPT_ANY_SLOT), 2); + EQ_(crypt_token_unassign_keyslot(cd, 0, CRYPT_ANY_SLOT), 0); + + // various tests related to unassigned keyslot to volume segment + EQ_(crypt_keyslot_add_by_key(cd, 3, NULL, 32, PASSPHRASE1, strlen(PASSPHRASE1), CRYPT_VOLUME_KEY_NO_SEGMENT), 3); + EQ_(crypt_token_assign_keyslot(cd, 2, 0), 2); + EQ_(crypt_token_assign_keyslot(cd, 0, 3), 0); + + EQ_(crypt_activate_by_token(cd, NULL, 2, passptr, 0), 0); + EQ_(crypt_activate_by_token(cd, NULL, 0, passptr1, CRYPT_ACTIVATE_ALLOW_UNBOUND_KEY), 3); + // FIXME: useless error message here (or missing one to be specific) + FAIL_(crypt_activate_by_token(cd, CDEVICE_1, 0, passptr1, 0), "No volume key available in token keyslots"); + EQ_(crypt_activate_by_token(cd, CDEVICE_1, 2, passptr, 0), 0); + OK_(crypt_deactivate(cd, CDEVICE_1)); + EQ_(crypt_token_assign_keyslot(cd, 0, 1), 0); + OK_(crypt_token_is_assigned(cd, 0, 1)); + EQ_(crypt_activate_by_token(cd, CDEVICE_1, 0, passptr1, 0), 1); + OK_(crypt_deactivate(cd, CDEVICE_1)); + + EQ_(crypt_token_assign_keyslot(cd, 2, 3), 2); + OK_(crypt_token_is_assigned(cd, 2, 3)); + EQ_(crypt_activate_by_token(cd, NULL, 2, passptr, 0), 0); + EQ_(crypt_activate_by_token(cd, CDEVICE_1, 2, passptr, 0), 0); + OK_(crypt_deactivate(cd, CDEVICE_1)); + +#ifdef KERNEL_KEYRING + if (t_dm_crypt_keyring_support()) { + EQ_(crypt_activate_by_token(cd, NULL, 2, passptr, CRYPT_ACTIVATE_KEYRING_KEY), 0); + OK_(_volume_key_in_keyring(cd, 0)); + } + OK_(crypt_volume_key_keyring(cd, 0)); +#endif + FAIL_(crypt_activate_by_token(cd, NULL, 2, passptr, CRYPT_ACTIVATE_KEYRING_KEY), "Can't use keyring when disabled in library"); + OK_(crypt_volume_key_keyring(cd, 1)); + + EQ_(crypt_token_luks2_keyring_set(cd, 5, ¶ms), 5); + EQ_(crypt_token_status(cd, 5, &dummy), CRYPT_TOKEN_INTERNAL); + OK_(strcmp(dummy, "luks2-keyring")); + + FAIL_(crypt_token_luks2_keyring_get(cd, 2, ¶ms), "Token is not luks2-keyring type"); + + FAIL_(crypt_token_json_set(cd, CRYPT_ANY_TOKEN, BOGUS_TOKEN0_JSON), "luks2- reserved prefix."); + FAIL_(crypt_token_json_set(cd, CRYPT_ANY_TOKEN, BOGUS_TOKEN1_JSON), "luks2- reserved prefix."); + + // test we can use crypt_token_json_set for valid luks2-keyring token + FAIL_(crypt_token_json_set(cd, 12, LUKS2_KEYRING_TOKEN_JSON_BAD("\"0\"", "\"my_desc_x\"")), "Strict luks2-keyring token validation failed"); + EQ_(crypt_token_status(cd, 12, NULL), CRYPT_TOKEN_INACTIVE); + FAIL_(crypt_token_json_set(cd, 12, LUKS2_KEYRING_TOKEN_JSON("\"5\"", "\"my_desc\"")), "Missing keyslot 5."); + EQ_(crypt_token_json_set(cd, 10, LUKS2_KEYRING_TOKEN_JSON("\"1\"", "\"my_desc\"")), 10); + EQ_(crypt_token_status(cd, 10, &dummy), CRYPT_TOKEN_INTERNAL); + OK_(strcmp(dummy, "luks2-keyring")); + params.key_description = NULL; + EQ_(crypt_token_luks2_keyring_get(cd, 10, ¶ms), 10); + OK_(strcmp(params.key_description, "my_desc")); + + OK_(crypt_token_is_assigned(cd, 10, 1)); + // unassigned tests + EQ_(crypt_token_is_assigned(cd, 10, 21), -ENOENT); + EQ_(crypt_token_is_assigned(cd, 21, 1), -ENOENT); + // wrong keyslot or token id tests + EQ_(crypt_token_is_assigned(cd, -1, 1), -EINVAL); + EQ_(crypt_token_is_assigned(cd, 32, 1), -EINVAL); + EQ_(crypt_token_is_assigned(cd, 10, -1), -EINVAL); + EQ_(crypt_token_is_assigned(cd, 10, 32), -EINVAL); + EQ_(crypt_token_is_assigned(cd, -1, -1), -EINVAL); + EQ_(crypt_token_is_assigned(cd, 32, 32), -EINVAL); + + CRYPT_FREE(cd); + + _cleanup_dmdevices(); +} + +static void LuksConvert(void) +{ + uint64_t offset, r_payload_offset; + + const char *json = "{\"type\":\"convert_block\",\"keyslots\":[]}"; + const struct crypt_pbkdf_type argon = { + .type = CRYPT_KDF_ARGON2I, + .hash = "sha512", + .time_ms = 1, + .max_memory_kb = 1024, + .parallel_threads = 1 + }, pbkdf2 = { + .type = CRYPT_KDF_PBKDF2, + .hash = "sha1", + .time_ms = 1 + }; + + struct crypt_params_luks1 luks1 = { + .hash = "sha256", + .data_device = DMDIR L_DEVICE_1S + }; + + struct crypt_params_luks2 luks2 = { + .pbkdf = &pbkdf2, + .sector_size = 512 + }; + + const char *cipher = "aes"; + const char *cipher_mode = "xts-plain64"; + + // prepare the device + OK_(crypt_init(&cd, DEVICE_1)); + crypt_set_iteration_time(cd, 1); + OK_(crypt_format(cd, CRYPT_LUKS1, cipher, cipher_mode, NULL, NULL, 32, NULL)); + offset = crypt_get_data_offset(cd); + EQ_(crypt_keyslot_add_by_volume_key(cd, 0, NULL, 32, PASSPHRASE, strlen(PASSPHRASE)), 0); + EQ_(crypt_keyslot_add_by_volume_key(cd, 7, NULL, 32, PASSPHRASE1, strlen(PASSPHRASE1)), 7); + CRYPT_FREE(cd); + + // convert LUKSv1 -> LUKSv2 + OK_(crypt_init(&cd, DEVICE_1)); + OK_(crypt_load(cd, CRYPT_LUKS, NULL)); + FAIL_(crypt_convert(cd, CRYPT_LUKS1, NULL), "format is already LUKSv1"); + EQ_(crypt_activate_by_passphrase(cd, CDEVICE_1, CRYPT_ANY_SLOT, PASSPHRASE, strlen(PASSPHRASE), 0), 0); + FAIL_(crypt_convert(cd, CRYPT_LUKS2, NULL), "device is active"); + OK_(strcmp(crypt_get_type(cd), CRYPT_LUKS1)); + OK_(crypt_deactivate(cd, CDEVICE_1)); + OK_(crypt_convert(cd, CRYPT_LUKS2, NULL)); + OK_(strcmp(crypt_get_type(cd), CRYPT_LUKS2)); + CRYPT_FREE(cd); + + // check result + OK_(crypt_init(&cd, DEVICE_1)); + FAIL_(crypt_load(cd, CRYPT_LUKS1, NULL), "wrong luks format"); + OK_(crypt_load(cd, CRYPT_LUKS, NULL)); + EQ_(crypt_get_data_offset(cd), offset); + OK_(strcmp(crypt_get_type(cd), CRYPT_LUKS2)); + EQ_(crypt_activate_by_passphrase(cd, CDEVICE_1, CRYPT_ANY_SLOT, PASSPHRASE, strlen(PASSPHRASE), 0), 0); + OK_(crypt_deactivate(cd, CDEVICE_1)); + EQ_(crypt_activate_by_passphrase(cd, CDEVICE_1, CRYPT_ANY_SLOT, PASSPHRASE1, strlen(PASSPHRASE1), 0), 7); + OK_(crypt_deactivate(cd, CDEVICE_1)); + FAIL_(crypt_convert(cd, CRYPT_LUKS2, NULL), "format is already LUKSv2"); + OK_(strcmp(crypt_get_type(cd), CRYPT_LUKS2)); + CRYPT_FREE(cd); + + // convert LUKSv2 -> LUKSv1 + OK_(crypt_init(&cd, DEVICE_1)); + OK_(crypt_load(cd, CRYPT_LUKS, NULL)); + EQ_(crypt_get_data_offset(cd), offset); + EQ_(crypt_activate_by_passphrase(cd, CDEVICE_1, CRYPT_ANY_SLOT, PASSPHRASE, strlen(PASSPHRASE), 0), 0); + FAIL_(crypt_convert(cd, CRYPT_LUKS1, NULL), "device is active"); + OK_(strcmp(crypt_get_type(cd), CRYPT_LUKS2)); + OK_(crypt_deactivate(cd, CDEVICE_1)); + OK_(crypt_convert(cd, CRYPT_LUKS1, NULL)); + OK_(strcmp(crypt_get_type(cd), CRYPT_LUKS1)); + CRYPT_FREE(cd); + + // check result + OK_(crypt_init(&cd, DEVICE_1)); + FAIL_(crypt_load(cd, CRYPT_LUKS2, NULL), "wrong luks format"); + OK_(crypt_load(cd, CRYPT_LUKS, NULL)); + OK_(strcmp(crypt_get_type(cd), CRYPT_LUKS1)); + EQ_(crypt_get_data_offset(cd), offset); + EQ_(crypt_activate_by_passphrase(cd, CDEVICE_1, CRYPT_ANY_SLOT, PASSPHRASE, strlen(PASSPHRASE), 0), 0); + OK_(crypt_deactivate(cd, CDEVICE_1)); + EQ_(crypt_activate_by_passphrase(cd, CDEVICE_1, CRYPT_ANY_SLOT, PASSPHRASE1, strlen(PASSPHRASE1), 0), 7); + OK_(crypt_deactivate(cd, CDEVICE_1)); + FAIL_(crypt_convert(cd, CRYPT_LUKS1, NULL), "format is already LUKSv1"); + OK_(strcmp(crypt_get_type(cd), CRYPT_LUKS1)); + CRYPT_FREE(cd); + + // exercice non-pbkdf2 LUKSv2 conversion + if (!_fips_mode) { + OK_(crypt_init(&cd, DEVICE_1)); + OK_(crypt_set_data_offset(cd, offset)); + OK_(crypt_format(cd, CRYPT_LUKS2, cipher, cipher_mode, NULL, NULL, 32, NULL)); + OK_(crypt_set_pbkdf_type(cd, &argon)); + EQ_(crypt_keyslot_add_by_volume_key(cd, 0, NULL, 32, PASSPHRASE, strlen(PASSPHRASE)), 0); + FAIL_(crypt_convert(cd, CRYPT_LUKS1, NULL), "Incompatible pbkdf with LUKSv1 format"); + CRYPT_FREE(cd); + } + + // exercice non LUKS1 compatible keyslot + OK_(crypt_init(&cd, DEVICE_1)); + OK_(crypt_set_data_offset(cd, offset)); + OK_(crypt_format(cd, CRYPT_LUKS2, cipher, cipher_mode, NULL, NULL, 32, &luks2)); + EQ_(crypt_keyslot_add_by_volume_key(cd, 0, NULL, 32, PASSPHRASE, strlen(PASSPHRASE)), 0); + EQ_(crypt_keyslot_add_by_key(cd, 1, NULL, 32, PASSPHRASE1, strlen(PASSPHRASE1), CRYPT_VOLUME_KEY_NO_SEGMENT), 1); + // FIXME: following test fails as expected but for a different reason + FAIL_(crypt_convert(cd, CRYPT_LUKS1, NULL), "Unassigned keyslots are incompatible with LUKSv1 format"); + CRYPT_FREE(cd); + + // exercice LUKSv2 conversion with single pbkdf2 keyslot being active + OK_(crypt_init(&cd, DEVICE_1)); + OK_(crypt_set_data_offset(cd, offset)); + OK_(crypt_set_pbkdf_type(cd, &pbkdf2)); + OK_(crypt_format(cd, CRYPT_LUKS2, cipher, cipher_mode, NULL, NULL, 32, NULL)); + offset = crypt_get_data_offset(cd); + EQ_(crypt_keyslot_add_by_volume_key(cd, 0, NULL, 32, PASSPHRASE, strlen(PASSPHRASE)), 0); + if (!_fips_mode) { + OK_(crypt_set_pbkdf_type(cd, &argon)); + EQ_(crypt_keyslot_add_by_volume_key(cd, 1, NULL, 32, PASSPHRASE, strlen(PASSPHRASE)), 1); + FAIL_(crypt_convert(cd, CRYPT_LUKS1, NULL), "Different hash for digest and keyslot."); + OK_(crypt_keyslot_destroy(cd, 1)); + } + OK_(crypt_convert(cd, CRYPT_LUKS1, NULL)); + EQ_(crypt_get_data_offset(cd), offset); + CRYPT_FREE(cd); + OK_(crypt_init(&cd, DEVICE_1)); + OK_(crypt_load(cd, CRYPT_LUKS, NULL)); + EQ_(crypt_get_data_offset(cd), offset); + EQ_(crypt_activate_by_passphrase(cd, NULL, 0, PASSPHRASE, strlen(PASSPHRASE), 0), 0); + CRYPT_FREE(cd); + + // do not allow conversion on keyslot No > 7 + OK_(crypt_init(&cd, DEVICE_1)); + OK_(crypt_set_data_offset(cd, offset)); + OK_(crypt_format(cd, CRYPT_LUKS2, cipher, cipher_mode, NULL, NULL, 32, &luks2)); + EQ_(crypt_keyslot_add_by_volume_key(cd, 0, NULL, 32, PASSPHRASE, strlen(PASSPHRASE)), 0); + EQ_(crypt_keyslot_add_by_volume_key(cd, 8, NULL, 32, PASSPHRASE1, strlen(PASSPHRASE1)), 8); + FAIL_(crypt_convert(cd, CRYPT_LUKS1, NULL), "Can't convert keyslot No 8"); + CRYPT_FREE(cd); + + // do not allow conversion with token + OK_(crypt_init(&cd, DEVICE_1)); + OK_(crypt_set_data_offset(cd, offset)); + OK_(crypt_format(cd, CRYPT_LUKS2, cipher, cipher_mode, NULL, NULL, 32, &luks2)); + OK_(crypt_token_json_set(cd, CRYPT_ANY_TOKEN, json)); + FAIL_(crypt_convert(cd, CRYPT_LUKS1, NULL), "Can't convert header with token."); + 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_(create_dmdevice_over_loop(L_DEVICE_1S, r_payload_offset + 1)); + + // do not allow conversion for legacy luks1 device (non-aligned keyslot offset) + OK_(_system("dd if=" CONV_DIR "/" CONV_L1_256_LEGACY " of=" DMDIR L_DEVICE_1S " bs=1M count=2 oflag=direct 2>/dev/null", 1)); + OK_(crypt_init(&cd, DMDIR L_DEVICE_1S)); + OK_(crypt_load(cd, CRYPT_LUKS1, NULL)); + FAIL_(crypt_convert(cd, CRYPT_LUKS2, NULL), "Can't convert device with unaligned keyslot offset"); + CRYPT_FREE(cd); + + /* + * do not allow conversion on images if there's not enough space between + * last keyslot and data offset (should not happen on headers created + * with cryptsetup) + */ + OK_(_system("dd if=" CONV_DIR "/" CONV_L1_256_UNMOVABLE " of=" DMDIR L_DEVICE_1S " bs=1M count=2 oflag=direct 2>/dev/null", 1)); + OK_(crypt_init(&cd, DMDIR L_DEVICE_1S)); + OK_(crypt_load(cd, CRYPT_LUKS1, NULL)); + FAIL_(crypt_convert(cd, CRYPT_LUKS2, NULL), "Can't convert device with unaligned keyslot offset"); + CRYPT_FREE(cd); + + // compat conversion tests + // LUKS1 -> LUKS2 + + // 128b key + OK_(_system("dd if=" CONV_DIR "/" CONV_L1_128 " of=" DMDIR L_DEVICE_1S " bs=1M count=2 oflag=direct 2>/dev/null", 1)); + + OK_(crypt_init(&cd, DMDIR L_DEVICE_1S)); + OK_(crypt_load(cd, CRYPT_LUKS1, NULL)); + offset = crypt_get_data_offset(cd); + OK_(crypt_convert(cd, CRYPT_LUKS2, NULL)); + EQ_(crypt_get_data_offset(cd), offset); + EQ_(strcmp(crypt_get_type(cd), CRYPT_LUKS2), 0); + EQ_(crypt_activate_by_passphrase(cd, NULL, 0, PASS0, strlen(PASS0), 0), 0); + EQ_(crypt_activate_by_passphrase(cd, NULL, 7, PASS7, strlen(PASS7), 0), 7); + CRYPT_FREE(cd); + OK_(crypt_init(&cd, DMDIR L_DEVICE_1S)); + OK_(crypt_load(cd, CRYPT_LUKS2, NULL)); + EQ_(crypt_get_data_offset(cd), offset); + EQ_(crypt_activate_by_passphrase(cd, NULL, 0, PASS0, strlen(PASS0), 0), 0); + EQ_(crypt_activate_by_passphrase(cd, NULL, 7, PASS7, strlen(PASS7), 0), 7); + CRYPT_FREE(cd); + + // 256b key + OK_(_system("dd if=" CONV_DIR "/" CONV_L1_256 " of=" DMDIR L_DEVICE_1S " bs=1M count=2 oflag=direct 2>/dev/null", 1)); + + OK_(crypt_init(&cd, DMDIR L_DEVICE_1S)); + OK_(crypt_load(cd, CRYPT_LUKS1, NULL)); + offset = crypt_get_data_offset(cd); + OK_(crypt_convert(cd, CRYPT_LUKS2, NULL)); + EQ_(crypt_get_data_offset(cd), offset); + EQ_(strcmp(crypt_get_type(cd), CRYPT_LUKS2), 0); + EQ_(crypt_activate_by_passphrase(cd, NULL, 0, PASS0, strlen(PASS0), 0), 0); + EQ_(crypt_activate_by_passphrase(cd, NULL, 7, PASS7, strlen(PASS7), 0), 7); + CRYPT_FREE(cd); + OK_(crypt_init(&cd, DMDIR L_DEVICE_1S)); + OK_(crypt_load(cd, CRYPT_LUKS2, NULL)); + EQ_(crypt_get_data_offset(cd), offset); + EQ_(crypt_activate_by_passphrase(cd, NULL, 0, PASS0, strlen(PASS0), 0), 0); + EQ_(crypt_activate_by_passphrase(cd, NULL, 7, PASS7, strlen(PASS7), 0), 7); + CRYPT_FREE(cd); + + // 512b key + OK_(_system("dd if=" CONV_DIR "/" CONV_L1_512 " of=" DMDIR L_DEVICE_1S " bs=1M count=2 oflag=direct 2>/dev/null", 1)); + + OK_(crypt_init(&cd, DMDIR L_DEVICE_1S)); + OK_(crypt_load(cd, CRYPT_LUKS1, NULL)); + offset = crypt_get_data_offset(cd); + OK_(crypt_convert(cd, CRYPT_LUKS2, NULL)); + EQ_(crypt_get_data_offset(cd), offset); + EQ_(strcmp(crypt_get_type(cd), CRYPT_LUKS2), 0); + EQ_(crypt_activate_by_passphrase(cd, NULL, 0, PASS0, strlen(PASS0), 0), 0); + EQ_(crypt_activate_by_passphrase(cd, NULL, 7, PASS7, strlen(PASS7), 0), 7); + CRYPT_FREE(cd); + OK_(crypt_init(&cd, DMDIR L_DEVICE_1S)); + OK_(crypt_load(cd, CRYPT_LUKS2, NULL)); + EQ_(crypt_get_data_offset(cd), offset); + EQ_(crypt_activate_by_passphrase(cd, NULL, 0, PASS0, strlen(PASS0), 0), 0); + EQ_(crypt_activate_by_passphrase(cd, NULL, 7, PASS7, strlen(PASS7), 0), 7); + CRYPT_FREE(cd); + + // detached LUKS1 header conversion + OK_(crypt_init(&cd, CONV_DIR "/" CONV_L1_128_DET)); + OK_(crypt_load(cd, CRYPT_LUKS1, NULL)); + offset = crypt_get_data_offset(cd); + OK_(crypt_convert(cd, CRYPT_LUKS2, NULL)); + EQ_(crypt_get_data_offset(cd), offset); + EQ_(strcmp(crypt_get_type(cd), CRYPT_LUKS2), 0); + EQ_(crypt_activate_by_passphrase(cd, NULL, 0, PASS0, strlen(PASS0), 0), 0); + EQ_(crypt_activate_by_passphrase(cd, NULL, 7, PASS7, strlen(PASS7), 0), 7); + CRYPT_FREE(cd); + OK_(crypt_init(&cd, CONV_DIR "/" CONV_L1_128_DET)); + OK_(crypt_load(cd, CRYPT_LUKS2, NULL)); + EQ_(crypt_get_data_offset(cd), offset); + EQ_(crypt_activate_by_passphrase(cd, NULL, 0, PASS0, strlen(PASS0), 0), 0); + EQ_(crypt_activate_by_passphrase(cd, NULL, 7, PASS7, strlen(PASS7), 0), 7); + CRYPT_FREE(cd); + + // 256b key + OK_(crypt_init(&cd, CONV_DIR "/" CONV_L1_256_DET)); + OK_(crypt_load(cd, CRYPT_LUKS1, NULL)); + offset = crypt_get_data_offset(cd); + OK_(crypt_convert(cd, CRYPT_LUKS2, NULL)); + EQ_(crypt_get_data_offset(cd), offset); + EQ_(strcmp(crypt_get_type(cd), CRYPT_LUKS2), 0); + EQ_(crypt_activate_by_passphrase(cd, NULL, 0, PASS0, strlen(PASS0), 0), 0); + EQ_(crypt_activate_by_passphrase(cd, NULL, 7, PASS7, strlen(PASS7), 0), 7); + CRYPT_FREE(cd); + OK_(crypt_init(&cd, CONV_DIR "/" CONV_L1_256_DET)); + OK_(crypt_load(cd, CRYPT_LUKS2, NULL)); + EQ_(crypt_get_data_offset(cd), offset); + EQ_(crypt_activate_by_passphrase(cd, NULL, 0, PASS0, strlen(PASS0), 0), 0); + EQ_(crypt_activate_by_passphrase(cd, NULL, 7, PASS7, strlen(PASS7), 0), 7); + CRYPT_FREE(cd); + + // 512b key + OK_(crypt_init(&cd, CONV_DIR "/" CONV_L1_512_DET)); + OK_(crypt_load(cd, CRYPT_LUKS1, NULL)); + offset = crypt_get_data_offset(cd); + OK_(crypt_convert(cd, CRYPT_LUKS2, NULL)); + EQ_(crypt_get_data_offset(cd), offset); + EQ_(strcmp(crypt_get_type(cd), CRYPT_LUKS2), 0); + EQ_(crypt_activate_by_passphrase(cd, NULL, 0, PASS0, strlen(PASS0), 0), 0); + EQ_(crypt_activate_by_passphrase(cd, NULL, 7, PASS7, strlen(PASS7), 0), 7); + CRYPT_FREE(cd); + OK_(crypt_init(&cd, CONV_DIR "/" CONV_L1_512_DET)); + OK_(crypt_load(cd, CRYPT_LUKS2, NULL)); + EQ_(crypt_get_data_offset(cd), offset); + EQ_(crypt_activate_by_passphrase(cd, NULL, 0, PASS0, strlen(PASS0), 0), 0); + EQ_(crypt_activate_by_passphrase(cd, NULL, 7, PASS7, strlen(PASS7), 0), 7); + CRYPT_FREE(cd); + + // LUKS2 -> LUKS1 + // 128b key + OK_(_system("dd if=" CONV_DIR "/" CONV_L2_128 " of=" DMDIR L_DEVICE_1S " bs=1M count=4 oflag=direct 2>/dev/null", 1)); + + OK_(crypt_init(&cd, DMDIR L_DEVICE_1S)); + OK_(crypt_load(cd, CRYPT_LUKS2, NULL)); + offset = crypt_get_data_offset(cd); + OK_(crypt_convert(cd, CRYPT_LUKS1, NULL)); + EQ_(crypt_get_data_offset(cd), offset); + EQ_(strcmp(crypt_get_type(cd), CRYPT_LUKS1), 0); + EQ_(crypt_activate_by_passphrase(cd, NULL, 0, PASS0, strlen(PASS0), 0), 0); + EQ_(crypt_activate_by_passphrase(cd, NULL, 7, PASS7, strlen(PASS7), 0), 7); + CRYPT_FREE(cd); + OK_(crypt_init(&cd, DMDIR L_DEVICE_1S)); + OK_(crypt_load(cd, CRYPT_LUKS1, NULL)); + EQ_(crypt_get_data_offset(cd), offset); + EQ_(crypt_activate_by_passphrase(cd, NULL, 0, PASS0, strlen(PASS0), 0), 0); + EQ_(crypt_activate_by_passphrase(cd, NULL, 7, PASS7, strlen(PASS7), 0), 7); + CRYPT_FREE(cd); + + // 128b all LUKS1 keyslots used + OK_(_system("dd if=" CONV_DIR "/" CONV_L2_128_FULL " of=" DMDIR L_DEVICE_1S " bs=1M count=4 oflag=direct 2>/dev/null", 1)); + OK_(crypt_init(&cd, DMDIR L_DEVICE_1S)); + OK_(crypt_load(cd, CRYPT_LUKS2, NULL)); + OK_(crypt_convert(cd, CRYPT_LUKS1, NULL)); + EQ_(strcmp(crypt_get_type(cd), CRYPT_LUKS1), 0); + CRYPT_FREE(cd); + OK_(crypt_init(&cd, DMDIR L_DEVICE_1S)); + OK_(crypt_load(cd, CRYPT_LUKS1, NULL)); + EQ_(crypt_activate_by_passphrase(cd, NULL, 0, PASS0, strlen(PASS0), 0), 0); + EQ_(crypt_activate_by_passphrase(cd, NULL, 7, PASS7, strlen(PASS7), 0), 7); + EQ_(crypt_activate_by_passphrase(cd, NULL, 1, PASS1, strlen(PASS1), 0), 1); + EQ_(crypt_activate_by_passphrase(cd, NULL, 2, PASS2, strlen(PASS2), 0), 2); + EQ_(crypt_activate_by_passphrase(cd, NULL, 3, PASS3, strlen(PASS3), 0), 3); + EQ_(crypt_activate_by_passphrase(cd, NULL, 4, PASS4, strlen(PASS4), 0), 4); + EQ_(crypt_activate_by_passphrase(cd, NULL, 5, PASS5, strlen(PASS5), 0), 5); + EQ_(crypt_activate_by_passphrase(cd, NULL, 6, PASS6, strlen(PASS6), 0), 6); + CRYPT_FREE(cd); + + // 256b key + OK_(_system("dd if=" CONV_DIR "/" CONV_L2_256 " of=" DMDIR L_DEVICE_1S " bs=1M count=4 oflag=direct 2>/dev/null", 1)); + + OK_(crypt_init(&cd, DMDIR L_DEVICE_1S)); + OK_(crypt_load(cd, CRYPT_LUKS2, NULL)); + offset = crypt_get_data_offset(cd); + OK_(crypt_convert(cd, CRYPT_LUKS1, NULL)); + EQ_(crypt_get_data_offset(cd), offset); + EQ_(strcmp(crypt_get_type(cd), CRYPT_LUKS1), 0); + EQ_(crypt_activate_by_passphrase(cd, NULL, 0, PASS0, strlen(PASS0), 0), 0); + EQ_(crypt_activate_by_passphrase(cd, NULL, 7, PASS7, strlen(PASS7), 0), 7); + CRYPT_FREE(cd); + OK_(crypt_init(&cd, DMDIR L_DEVICE_1S)); + OK_(crypt_load(cd, CRYPT_LUKS1, NULL)); + EQ_(crypt_get_data_offset(cd), offset); + EQ_(crypt_activate_by_passphrase(cd, NULL, 0, PASS0, strlen(PASS0), 0), 0); + EQ_(crypt_activate_by_passphrase(cd, NULL, 7, PASS7, strlen(PASS7), 0), 7); + CRYPT_FREE(cd); + + // 256b all LUKS1 keyslots used + OK_(_system("dd if=" CONV_DIR "/" CONV_L2_256_FULL " of=" DMDIR L_DEVICE_1S " bs=1M count=4 oflag=direct 2>/dev/null", 1)); + OK_(crypt_init(&cd, DMDIR L_DEVICE_1S)); + OK_(crypt_load(cd, CRYPT_LUKS2, NULL)); + OK_(crypt_convert(cd, CRYPT_LUKS1, NULL)); + EQ_(strcmp(crypt_get_type(cd), CRYPT_LUKS1), 0); + CRYPT_FREE(cd); + OK_(crypt_init(&cd, DMDIR L_DEVICE_1S)); + OK_(crypt_load(cd, CRYPT_LUKS1, NULL)); + EQ_(crypt_activate_by_passphrase(cd, NULL, 0, PASS0, strlen(PASS0), 0), 0); + EQ_(crypt_activate_by_passphrase(cd, NULL, 7, PASS7, strlen(PASS7), 0), 7); + EQ_(crypt_activate_by_passphrase(cd, NULL, 1, PASS1, strlen(PASS1), 0), 1); + EQ_(crypt_activate_by_passphrase(cd, NULL, 2, PASS2, strlen(PASS2), 0), 2); + EQ_(crypt_activate_by_passphrase(cd, NULL, 3, PASS3, strlen(PASS3), 0), 3); + EQ_(crypt_activate_by_passphrase(cd, NULL, 4, PASS4, strlen(PASS4), 0), 4); + EQ_(crypt_activate_by_passphrase(cd, NULL, 5, PASS5, strlen(PASS5), 0), 5); + EQ_(crypt_activate_by_passphrase(cd, NULL, 6, PASS6, strlen(PASS6), 0), 6); + CRYPT_FREE(cd); + + // 512b key + OK_(_system("dd if=" CONV_DIR "/" CONV_L2_512 " of=" DMDIR L_DEVICE_1S " bs=1M count=4 oflag=direct 2>/dev/null", 1)); + + OK_(crypt_init(&cd, DMDIR L_DEVICE_1S)); + OK_(crypt_load(cd, CRYPT_LUKS2, NULL)); + offset = crypt_get_data_offset(cd); + OK_(crypt_convert(cd, CRYPT_LUKS1, NULL)); + EQ_(crypt_get_data_offset(cd), offset); + EQ_(strcmp(crypt_get_type(cd), CRYPT_LUKS1), 0); + EQ_(crypt_activate_by_passphrase(cd, NULL, 0, PASS0, strlen(PASS0), 0), 0); + EQ_(crypt_activate_by_passphrase(cd, NULL, 7, PASS7, strlen(PASS7), 0), 7); + CRYPT_FREE(cd); + OK_(crypt_init(&cd, DMDIR L_DEVICE_1S)); + OK_(crypt_load(cd, CRYPT_LUKS1, NULL)); + EQ_(crypt_get_data_offset(cd), offset); + EQ_(crypt_activate_by_passphrase(cd, NULL, 0, PASS0, strlen(PASS0), 0), 0); + EQ_(crypt_activate_by_passphrase(cd, NULL, 7, PASS7, strlen(PASS7), 0), 7); + CRYPT_FREE(cd); + + // 512b all LUKS1 keyslots used + OK_(_system("dd if=" CONV_DIR "/" CONV_L2_512_FULL " of=" DMDIR L_DEVICE_1S " bs=1M count=4 oflag=direct 2>/dev/null", 1)); + OK_(crypt_init(&cd, DMDIR L_DEVICE_1S)); + OK_(crypt_load(cd, CRYPT_LUKS2, NULL)); + OK_(crypt_convert(cd, CRYPT_LUKS1, NULL)); + EQ_(strcmp(crypt_get_type(cd), CRYPT_LUKS1), 0); + CRYPT_FREE(cd); + OK_(crypt_init(&cd, DMDIR L_DEVICE_1S)); + OK_(crypt_load(cd, CRYPT_LUKS1, NULL)); + EQ_(crypt_activate_by_passphrase(cd, NULL, 0, PASS0, strlen(PASS0), 0), 0); + EQ_(crypt_activate_by_passphrase(cd, NULL, 7, PASS7, strlen(PASS7), 0), 7); + EQ_(crypt_activate_by_passphrase(cd, NULL, 1, PASS1, strlen(PASS1), 0), 1); + EQ_(crypt_activate_by_passphrase(cd, NULL, 2, PASS2, strlen(PASS2), 0), 2); + EQ_(crypt_activate_by_passphrase(cd, NULL, 3, PASS3, strlen(PASS3), 0), 3); + EQ_(crypt_activate_by_passphrase(cd, NULL, 4, PASS4, strlen(PASS4), 0), 4); + EQ_(crypt_activate_by_passphrase(cd, NULL, 5, PASS5, strlen(PASS5), 0), 5); + EQ_(crypt_activate_by_passphrase(cd, NULL, 6, PASS6, strlen(PASS6), 0), 6); + CRYPT_FREE(cd); + + // detached headers + // 128b + OK_(crypt_init(&cd, CONV_DIR "/" CONV_L2_128_DET)); + OK_(crypt_load(cd, CRYPT_LUKS2, NULL)); + offset = crypt_get_data_offset(cd); + OK_(crypt_convert(cd, CRYPT_LUKS1, NULL)); + EQ_(crypt_get_data_offset(cd), offset); + EQ_(strcmp(crypt_get_type(cd), CRYPT_LUKS1), 0); + EQ_(crypt_activate_by_passphrase(cd, NULL, 0, PASS0, strlen(PASS0), 0), 0); + EQ_(crypt_activate_by_passphrase(cd, NULL, 7, PASS7, strlen(PASS7), 0), 7); + CRYPT_FREE(cd); + OK_(crypt_init(&cd, CONV_DIR "/" CONV_L2_128_DET)); + OK_(crypt_load(cd, CRYPT_LUKS1, NULL)); + EQ_(crypt_get_data_offset(cd), offset); + EQ_(crypt_activate_by_passphrase(cd, NULL, 0, PASS0, strlen(PASS0), 0), 0); + EQ_(crypt_activate_by_passphrase(cd, NULL, 7, PASS7, strlen(PASS7), 0), 7); + CRYPT_FREE(cd); + + // 128b all LUKS1 keyslots used + OK_(crypt_init(&cd, CONV_DIR "/" CONV_L2_128_DET_FULL)); + OK_(crypt_load(cd, CRYPT_LUKS2, NULL)); + OK_(crypt_convert(cd, CRYPT_LUKS1, NULL)); + EQ_(strcmp(crypt_get_type(cd), CRYPT_LUKS1), 0); + CRYPT_FREE(cd); + OK_(crypt_init(&cd, CONV_DIR "/" CONV_L2_128_DET_FULL)); + OK_(crypt_load(cd, CRYPT_LUKS1, NULL)); + EQ_(crypt_activate_by_passphrase(cd, NULL, 0, PASS0, strlen(PASS0), 0), 0); + EQ_(crypt_activate_by_passphrase(cd, NULL, 7, PASS7, strlen(PASS7), 0), 7); + EQ_(crypt_activate_by_passphrase(cd, NULL, 1, PASS1, strlen(PASS1), 0), 1); + EQ_(crypt_activate_by_passphrase(cd, NULL, 2, PASS2, strlen(PASS2), 0), 2); + EQ_(crypt_activate_by_passphrase(cd, NULL, 3, PASS3, strlen(PASS3), 0), 3); + EQ_(crypt_activate_by_passphrase(cd, NULL, 4, PASS4, strlen(PASS4), 0), 4); + EQ_(crypt_activate_by_passphrase(cd, NULL, 5, PASS5, strlen(PASS5), 0), 5); + EQ_(crypt_activate_by_passphrase(cd, NULL, 6, PASS6, strlen(PASS6), 0), 6); + CRYPT_FREE(cd); + + // 256b key + OK_(crypt_init(&cd, CONV_DIR "/" CONV_L2_256_DET)); + OK_(crypt_load(cd, CRYPT_LUKS2, NULL)); + offset = crypt_get_data_offset(cd); + OK_(crypt_convert(cd, CRYPT_LUKS1, NULL)); + EQ_(crypt_get_data_offset(cd), offset); + EQ_(strcmp(crypt_get_type(cd), CRYPT_LUKS1), 0); + EQ_(crypt_activate_by_passphrase(cd, NULL, 0, PASS0, strlen(PASS0), 0), 0); + EQ_(crypt_activate_by_passphrase(cd, NULL, 7, PASS7, strlen(PASS7), 0), 7); + CRYPT_FREE(cd); + OK_(crypt_init(&cd, CONV_DIR "/" CONV_L2_256_DET)); + OK_(crypt_load(cd, CRYPT_LUKS1, NULL)); + EQ_(crypt_get_data_offset(cd), offset); + EQ_(crypt_activate_by_passphrase(cd, NULL, 0, PASS0, strlen(PASS0), 0), 0); + EQ_(crypt_activate_by_passphrase(cd, NULL, 7, PASS7, strlen(PASS7), 0), 7); + CRYPT_FREE(cd); + + // 256b all LUKS1 keyslots used + OK_(crypt_init(&cd, CONV_DIR "/" CONV_L2_256_DET_FULL)); + OK_(crypt_load(cd, CRYPT_LUKS2, NULL)); + OK_(crypt_convert(cd, CRYPT_LUKS1, NULL)); + EQ_(strcmp(crypt_get_type(cd), CRYPT_LUKS1), 0); + CRYPT_FREE(cd); + OK_(crypt_init(&cd, CONV_DIR "/" CONV_L2_256_DET_FULL)); + OK_(crypt_load(cd, CRYPT_LUKS1, NULL)); + EQ_(crypt_activate_by_passphrase(cd, NULL, 0, PASS0, strlen(PASS0), 0), 0); + EQ_(crypt_activate_by_passphrase(cd, NULL, 7, PASS7, strlen(PASS7), 0), 7); + EQ_(crypt_activate_by_passphrase(cd, NULL, 1, PASS1, strlen(PASS1), 0), 1); + EQ_(crypt_activate_by_passphrase(cd, NULL, 2, PASS2, strlen(PASS2), 0), 2); + EQ_(crypt_activate_by_passphrase(cd, NULL, 3, PASS3, strlen(PASS3), 0), 3); + EQ_(crypt_activate_by_passphrase(cd, NULL, 4, PASS4, strlen(PASS4), 0), 4); + EQ_(crypt_activate_by_passphrase(cd, NULL, 5, PASS5, strlen(PASS5), 0), 5); + EQ_(crypt_activate_by_passphrase(cd, NULL, 6, PASS6, strlen(PASS6), 0), 6); + CRYPT_FREE(cd); + + // 512b key + OK_(crypt_init(&cd, CONV_DIR "/" CONV_L2_512_DET)); + OK_(crypt_load(cd, CRYPT_LUKS2, NULL)); + offset = crypt_get_data_offset(cd); + OK_(crypt_convert(cd, CRYPT_LUKS1, NULL)); + EQ_(crypt_get_data_offset(cd), offset); + EQ_(strcmp(crypt_get_type(cd), CRYPT_LUKS1), 0); + EQ_(crypt_activate_by_passphrase(cd, NULL, 0, PASS0, strlen(PASS0), 0), 0); + EQ_(crypt_activate_by_passphrase(cd, NULL, 7, PASS7, strlen(PASS7), 0), 7); + CRYPT_FREE(cd); + OK_(crypt_init(&cd, CONV_DIR "/" CONV_L2_512_DET)); + OK_(crypt_load(cd, CRYPT_LUKS1, NULL)); + EQ_(crypt_get_data_offset(cd), offset); + EQ_(crypt_activate_by_passphrase(cd, NULL, 0, PASS0, strlen(PASS0), 0), 0); + EQ_(crypt_activate_by_passphrase(cd, NULL, 7, PASS7, strlen(PASS7), 0), 7); + CRYPT_FREE(cd); + + // 512b all LUKS1 keyslots used + OK_(crypt_init(&cd, CONV_DIR "/" CONV_L2_512_DET_FULL)); + OK_(crypt_load(cd, CRYPT_LUKS2, NULL)); + OK_(crypt_convert(cd, CRYPT_LUKS1, NULL)); + EQ_(strcmp(crypt_get_type(cd), CRYPT_LUKS1), 0); + CRYPT_FREE(cd); + OK_(crypt_init(&cd, CONV_DIR "/" CONV_L2_512_DET_FULL)); + OK_(crypt_load(cd, CRYPT_LUKS1, NULL)); + EQ_(crypt_activate_by_passphrase(cd, NULL, 0, PASS0, strlen(PASS0), 0), 0); + EQ_(crypt_activate_by_passphrase(cd, NULL, 7, PASS7, strlen(PASS7), 0), 7); + EQ_(crypt_activate_by_passphrase(cd, NULL, 1, PASS1, strlen(PASS1), 0), 1); + EQ_(crypt_activate_by_passphrase(cd, NULL, 2, PASS2, strlen(PASS2), 0), 2); + EQ_(crypt_activate_by_passphrase(cd, NULL, 3, PASS3, strlen(PASS3), 0), 3); + EQ_(crypt_activate_by_passphrase(cd, NULL, 4, PASS4, strlen(PASS4), 0), 4); + EQ_(crypt_activate_by_passphrase(cd, NULL, 5, PASS5, strlen(PASS5), 0), 5); + EQ_(crypt_activate_by_passphrase(cd, NULL, 6, PASS6, strlen(PASS6), 0), 6); + CRYPT_FREE(cd); + + // detached LUKS1 header upconversion + OK_(create_dmdevice_over_loop(H_DEVICE, 2050)); // default LUKS1 header should fit there + OK_(crypt_init(&cd, DMDIR H_DEVICE)); + crypt_set_iteration_time(cd, 1); + //OK_(crypt_set_pbkdf_type(cd, &pbkdf2)); + OK_(crypt_format(cd, CRYPT_LUKS1, "aes", "xts-plain64", NULL, NULL, 32, &luks1)); + EQ_(crypt_keyslot_add_by_volume_key(cd, 7, NULL, 32, PASSPHRASE, strlen(PASSPHRASE)), 7); + FAIL_(crypt_convert(cd, CRYPT_LUKS2, NULL), "Unable to move keyslots. Not enough space."); + CRYPT_FREE(cd); + + // 2050 sectors, empty file + OK_(crypt_init(&cd, IMAGE_EMPTY_SMALL_2)); + //OK_(crypt_set_pbkdf_type(cd, &pbkdf2)); + crypt_set_iteration_time(cd, 1); + OK_(crypt_format(cd, CRYPT_LUKS1, "aes", "xts-plain64", NULL, NULL, 32, &luks1)); + EQ_(crypt_get_data_offset(cd), 0); + EQ_(crypt_keyslot_add_by_volume_key(cd, 7, NULL, 32, PASSPHRASE, strlen(PASSPHRASE)), 7); + OK_(crypt_convert(cd, CRYPT_LUKS2, NULL)); + CRYPT_FREE(cd); + + _cleanup_dmdevices(); +} + +static void Pbkdf(void) +{ + const struct crypt_pbkdf_type *pbkdf; + + const char *cipher = "aes", *mode="xts-plain64"; + struct crypt_pbkdf_type argon2 = { + .type = CRYPT_KDF_ARGON2I, + .hash = DEFAULT_LUKS1_HASH, + .time_ms = 6, + .max_memory_kb = 1024, + .parallel_threads = 1 + }, pbkdf2 = { + .type = CRYPT_KDF_PBKDF2, + .hash = DEFAULT_LUKS1_HASH, + .time_ms = 9 + }, bad = { + .type = "hamster_pbkdf", + .hash = DEFAULT_LUKS1_HASH + }; + struct crypt_params_plain params = { + .hash = "sha1", + .skip = 0, + .offset = 0, + .size = 0 + }; + struct crypt_params_luks1 luks1 = { + .hash = "whirlpool", // test non-standard hash + .data_alignment = 2048, + }; + + uint64_t r_payload_offset; + + /* Only PBKDF2 is allowed in FIPS, these tests cannot be run. */ + if (_fips_mode) + return; + + OK_(get_luks2_offsets(1, 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)); + NULL_(crypt_get_pbkdf_type_params("suslik")); + NOTNULL_(pbkdf = crypt_get_pbkdf_type_params(CRYPT_KDF_PBKDF2)); + OK_(strcmp(pbkdf->type, CRYPT_KDF_PBKDF2)); + NOTNULL_(pbkdf = crypt_get_pbkdf_type_params(CRYPT_KDF_ARGON2I)); + OK_(strcmp(pbkdf->type, CRYPT_KDF_ARGON2I)); + NOTNULL_(pbkdf = crypt_get_pbkdf_type_params(CRYPT_KDF_ARGON2ID)); + OK_(strcmp(pbkdf->type, CRYPT_KDF_ARGON2ID)); + + // test empty context + OK_(crypt_init(&cd, DMDIR L_DEVICE_OK)); + NULL_(crypt_get_pbkdf_type(cd)); + OK_(crypt_set_pbkdf_type(cd, &argon2)); + NOTNULL_(crypt_get_pbkdf_type(cd)); + OK_(crypt_set_pbkdf_type(cd, &pbkdf2)); + NOTNULL_(crypt_get_pbkdf_type(cd)); + OK_(crypt_set_pbkdf_type(cd, NULL)); + NOTNULL_(crypt_get_pbkdf_type(cd)); + + // test plain device + OK_(crypt_format(cd, CRYPT_PLAIN, cipher, mode, NULL, NULL, 32, ¶ms)); + OK_(crypt_set_pbkdf_type(cd, &argon2)); + OK_(crypt_set_pbkdf_type(cd, &pbkdf2)); + OK_(crypt_set_pbkdf_type(cd, NULL)); + NOTNULL_(crypt_get_pbkdf_type(cd)); + CRYPT_FREE(cd); + + // test LUKSv1 device + OK_(crypt_init(&cd, DMDIR L_DEVICE_OK)); + OK_(crypt_format(cd, CRYPT_LUKS1, cipher, mode, NULL, NULL, 32, NULL)); + FAIL_(crypt_set_pbkdf_type(cd, &argon2), "Unsupported with non-LUKS2 devices"); + OK_(crypt_set_pbkdf_type(cd, &pbkdf2)); + OK_(crypt_set_pbkdf_type(cd, NULL)); + NOTNULL_(pbkdf = crypt_get_pbkdf_type(cd)); + EQ_(pbkdf->time_ms, DEFAULT_LUKS1_ITER_TIME); + CRYPT_FREE(cd); + // test value set in crypt_set_iteration_time() can be obtained via following crypt_get_pbkdf_type() + OK_(crypt_init(&cd, DMDIR L_DEVICE_OK)); + crypt_set_iteration_time(cd, 42); + OK_(crypt_format(cd, CRYPT_LUKS1, cipher, mode, NULL, NULL, 32, NULL)); + NOTNULL_(pbkdf = crypt_get_pbkdf_type(cd)); + EQ_(pbkdf->time_ms, 42); + // test crypt_get_pbkdf_type() returns expected values for LUKSv1 + OK_(strcmp(pbkdf->type, CRYPT_KDF_PBKDF2)); + OK_(strcmp(pbkdf->hash, DEFAULT_LUKS1_HASH)); + EQ_(pbkdf->max_memory_kb, 0); + EQ_(pbkdf->parallel_threads, 0); + crypt_set_iteration_time(cd, 43); + NOTNULL_(pbkdf = crypt_get_pbkdf_type(cd)); + EQ_(pbkdf->time_ms, 43); + CRYPT_FREE(cd); + // test whether crypt_get_pbkdf_type() after double crypt_load() + OK_(crypt_init(&cd, DMDIR L_DEVICE_OK)); + OK_(crypt_load(cd, CRYPT_LUKS, NULL)); + crypt_set_iteration_time(cd, 42); + OK_(crypt_load(cd, CRYPT_LUKS, NULL)); + NOTNULL_(pbkdf = crypt_get_pbkdf_type(cd)); + EQ_(pbkdf->time_ms, 42); + CRYPT_FREE(cd); + // test whether hash passed via *params in crypt_load() has higher priority + OK_(crypt_init(&cd, DMDIR L_DEVICE_OK)); + crypt_set_iteration_time(cd, 1); + OK_(crypt_format(cd, CRYPT_LUKS1, cipher, mode, NULL, NULL, 32, &luks1)); + NOTNULL_(pbkdf = crypt_get_pbkdf_type(cd)); + OK_(strcmp(pbkdf->hash, luks1.hash)); + OK_(crypt_load(cd, CRYPT_LUKS, NULL)); + NOTNULL_(pbkdf = crypt_get_pbkdf_type(cd)); + OK_(strcmp(pbkdf->hash, luks1.hash)); + CRYPT_FREE(cd); + + // test LUKSv2 device + // test default values are set + OK_(crypt_init(&cd, DMDIR L_DEVICE_OK)); + OK_(crypt_format(cd, CRYPT_LUKS2, cipher, mode, NULL, NULL, 32, NULL)); + NOTNULL_(pbkdf = crypt_get_pbkdf_type(cd)); + OK_(strcmp(pbkdf->type, DEFAULT_LUKS2_PBKDF)); + OK_(strcmp(pbkdf->hash, DEFAULT_LUKS1_HASH)); + EQ_(pbkdf->time_ms, DEFAULT_LUKS2_ITER_TIME); + EQ_(pbkdf->max_memory_kb, adjusted_pbkdf_memory()); + EQ_(pbkdf->parallel_threads, _min(cpus_online(), DEFAULT_LUKS2_PARALLEL_THREADS)); + // set and verify argon2 type + OK_(crypt_set_pbkdf_type(cd, &argon2)); + NOTNULL_(pbkdf = crypt_get_pbkdf_type(cd)); + OK_(strcmp(pbkdf->type, argon2.type)); + OK_(strcmp(pbkdf->hash, argon2.hash)); + EQ_(pbkdf->time_ms, argon2.time_ms); + EQ_(pbkdf->max_memory_kb, argon2.max_memory_kb); + EQ_(pbkdf->parallel_threads, argon2.parallel_threads); + // set and verify pbkdf2 type + OK_(crypt_set_pbkdf_type(cd, &pbkdf2)); + NOTNULL_(pbkdf = crypt_get_pbkdf_type(cd)); + OK_(strcmp(pbkdf->type, pbkdf2.type)); + OK_(strcmp(pbkdf->hash, pbkdf2.hash)); + EQ_(pbkdf->time_ms, pbkdf2.time_ms); + EQ_(pbkdf->max_memory_kb, pbkdf2.max_memory_kb); + EQ_(pbkdf->parallel_threads, pbkdf2.parallel_threads); + // reset and verify default values + crypt_set_iteration_time(cd, 1); // it's supposed to override this call + OK_(crypt_set_pbkdf_type(cd, NULL)); + NOTNULL_(pbkdf = crypt_get_pbkdf_type(cd)); + OK_(strcmp(pbkdf->type, DEFAULT_LUKS2_PBKDF)); + OK_(strcmp(pbkdf->hash, DEFAULT_LUKS1_HASH)); + EQ_(pbkdf->time_ms, DEFAULT_LUKS2_ITER_TIME); + EQ_(pbkdf->max_memory_kb, adjusted_pbkdf_memory()); + EQ_(pbkdf->parallel_threads, _min(cpus_online(), DEFAULT_LUKS2_PARALLEL_THREADS)); + // try to pass illegal values + argon2.parallel_threads = 0; + FAIL_(crypt_set_pbkdf_type(cd, &argon2), "Parallel threads can't be 0"); + argon2.parallel_threads = 1; + argon2.max_memory_kb = 0; + FAIL_(crypt_set_pbkdf_type(cd, &argon2), "Memory can't be 0"); + argon2.max_memory_kb = 1024; + pbkdf2.parallel_threads = 1; + FAIL_(crypt_set_pbkdf_type(cd, &pbkdf2), "Parallel threads can't be set with pbkdf2 type"); + pbkdf2.parallel_threads = 0; + pbkdf2.max_memory_kb = 512; + FAIL_(crypt_set_pbkdf_type(cd, &pbkdf2), "Memory can't be set with pbkdf2 type"); + FAIL_(crypt_set_pbkdf_type(cd, &bad), "Unknown type member"); + bad.type = CRYPT_KDF_PBKDF2; + bad.hash = NULL; + FAIL_(crypt_set_pbkdf_type(cd, &bad), "Hash member is empty"); + bad.type = NULL; + bad.hash = DEFAULT_LUKS1_HASH; + FAIL_(crypt_set_pbkdf_type(cd, &bad), "Pbkdf type member is empty"); + bad.hash = "hamster_hash"; + FAIL_(crypt_set_pbkdf_type(cd, &pbkdf2), "Unknown hash member"); + CRYPT_FREE(cd); + // test whether crypt_get_pbkdf_type() behaves accordingly after second crypt_load() call + OK_(crypt_init(&cd, DMDIR L_DEVICE_OK)); + OK_(crypt_load(cd, CRYPT_LUKS, NULL)); + NOTNULL_(pbkdf = crypt_get_pbkdf_type(cd)); + OK_(strcmp(pbkdf->type, DEFAULT_LUKS2_PBKDF)); + OK_(strcmp(pbkdf->hash, DEFAULT_LUKS1_HASH)); + EQ_(pbkdf->time_ms, DEFAULT_LUKS2_ITER_TIME); + EQ_(pbkdf->max_memory_kb, adjusted_pbkdf_memory()); + EQ_(pbkdf->parallel_threads, _min(cpus_online(), DEFAULT_LUKS2_PARALLEL_THREADS)); + crypt_set_iteration_time(cd, 1); + OK_(crypt_load(cd, CRYPT_LUKS, NULL)); + OK_(strcmp(pbkdf->type, DEFAULT_LUKS2_PBKDF)); + OK_(strcmp(pbkdf->hash, DEFAULT_LUKS1_HASH)); + EQ_(pbkdf->time_ms, 1); + EQ_(pbkdf->max_memory_kb, adjusted_pbkdf_memory()); + EQ_(pbkdf->parallel_threads, _min(cpus_online(), DEFAULT_LUKS2_PARALLEL_THREADS)); + CRYPT_FREE(cd); + + // test crypt_set_pbkdf_type() overwrites invalid value set by crypt_set_iteration_time() + OK_(crypt_init(&cd, DMDIR L_DEVICE_OK)); + crypt_set_iteration_time(cd, 0); + OK_(crypt_set_pbkdf_type(cd, &argon2)); + NOTNULL_(pbkdf = crypt_get_pbkdf_type(cd)); + OK_(strcmp(pbkdf->type, argon2.type)); + EQ_(pbkdf->time_ms, argon2.time_ms); + + // force iterations + argon2.iterations = 33; + argon2.flags = CRYPT_PBKDF_NO_BENCHMARK; + OK_(crypt_set_pbkdf_type(cd, &argon2)); + NOTNULL_(pbkdf = crypt_get_pbkdf_type(cd)); + EQ_(pbkdf->iterations, 33); + EQ_(pbkdf->flags, CRYPT_PBKDF_NO_BENCHMARK); + + // time may be unset with iterations + argon2.time_ms = 0; + OK_(crypt_set_pbkdf_type(cd, &argon2)); + argon2.flags &= ~CRYPT_PBKDF_NO_BENCHMARK; + FAIL_(crypt_set_pbkdf_type(cd, &argon2), "Illegal time value."); + + pbkdf2.time_ms = 0; + pbkdf2.flags = CRYPT_PBKDF_NO_BENCHMARK; + pbkdf2.parallel_threads = 0; + pbkdf2.max_memory_kb = 0; + pbkdf2.iterations = 1000; + OK_(crypt_set_pbkdf_type(cd, &pbkdf2)); + pbkdf2.flags &= ~CRYPT_PBKDF_NO_BENCHMARK; + FAIL_(crypt_set_pbkdf_type(cd, &pbkdf2), "Illegal time value."); + + // hash is relevant only with pbkdf2 + pbkdf2.time_ms = 9; + pbkdf2.hash = NULL; + FAIL_(crypt_set_pbkdf_type(cd, &pbkdf2), "Hash is mandatory for pbkdf2"); + pbkdf2.hash = "sha1"; + OK_(crypt_set_pbkdf_type(cd, &pbkdf2)); + + argon2.time_ms = 9; + argon2.hash = "sha1"; // will be ignored + OK_(crypt_set_pbkdf_type(cd, &argon2)); + argon2.hash = NULL; + OK_(crypt_set_pbkdf_type(cd, &argon2)); + + CRYPT_FREE(cd); + + NOTNULL_(pbkdf = crypt_get_pbkdf_default(CRYPT_LUKS1)); + OK_(strcmp(pbkdf->type, CRYPT_KDF_PBKDF2)); + EQ_(pbkdf->time_ms, DEFAULT_LUKS1_ITER_TIME); + OK_(strcmp(pbkdf->hash, DEFAULT_LUKS1_HASH)); + EQ_(pbkdf->max_memory_kb, 0); + EQ_(pbkdf->parallel_threads, 0); + + NOTNULL_(pbkdf = crypt_get_pbkdf_default(CRYPT_LUKS2)); + OK_(strcmp(pbkdf->type, DEFAULT_LUKS2_PBKDF)); + EQ_(pbkdf->time_ms, DEFAULT_LUKS2_ITER_TIME); + OK_(strcmp(pbkdf->hash, DEFAULT_LUKS1_HASH)); + EQ_(pbkdf->max_memory_kb, DEFAULT_LUKS2_MEMORY_KB); + EQ_(pbkdf->parallel_threads, DEFAULT_LUKS2_PARALLEL_THREADS); + + NULL_(pbkdf = crypt_get_pbkdf_default(CRYPT_PLAIN)); + + _cleanup_dmdevices(); +} + +static void Luks2KeyslotAdd(void) +{ + char key[128], key2[128], key_ret[128]; + const char *cipher = "aes", *cipher_mode="xts-plain64"; + const char *mk_hex = "bb21158c733229347bd4e681891e213d94c685be6a5b84818afe7a78a6de7a1a"; + const char *mk_hex2 = "bb21158c733229347bd4e681891e213d94c685be6a5b84818afe7a78a6de7a1e"; + size_t key_ret_len, key_size = strlen(mk_hex) / 2; + uint64_t r_payload_offset; + struct crypt_pbkdf_type pbkdf = { + .type = "argon2i", + .hash = "sha256", + .iterations = 4, + .max_memory_kb = 32, + .parallel_threads = 1, + .flags = CRYPT_PBKDF_NO_BENCHMARK, + }; + struct crypt_params_luks2 params2 = { + .pbkdf = &pbkdf, + .sector_size = SECTOR_SIZE + }; + + crypt_decode_key(key, mk_hex, key_size); + crypt_decode_key(key2, mk_hex2, key_size); + + /* Cannot use Argon2 in FIPS */ + if (_fips_mode) { + pbkdf.type = CRYPT_KDF_PBKDF2; + pbkdf.parallel_threads = 0; + pbkdf.max_memory_kb = 0; + pbkdf.iterations = 1000; + } + + OK_(get_luks2_offsets(1, 0, 0, NULL, &r_payload_offset)); + OK_(create_dmdevice_over_loop(L_DEVICE_OK, r_payload_offset + 1)); + + /* test crypt_keyslot_add_by_key */ + OK_(crypt_init(&cd, DMDIR L_DEVICE_OK)); + OK_(crypt_format(cd, CRYPT_LUKS2, cipher, cipher_mode, NULL, key, key_size, ¶ms2)); + EQ_(crypt_keyslot_add_by_key(cd, 1, key2, key_size, PASSPHRASE1, strlen(PASSPHRASE1), CRYPT_VOLUME_KEY_NO_SEGMENT), 1); + EQ_(crypt_keyslot_add_by_volume_key(cd, 0, key, key_size, PASSPHRASE, strlen(PASSPHRASE)), 0); + EQ_(crypt_keyslot_status(cd, 0), CRYPT_SLOT_ACTIVE_LAST); + EQ_(crypt_keyslot_status(cd, 1), CRYPT_SLOT_UNBOUND); + /* must not activate volume with keyslot unassigned to a segment */ + FAIL_(crypt_activate_by_volume_key(cd, CDEVICE_1, key2, key_size, 0), "Key doesn't match volume key digest"); + FAIL_(crypt_activate_by_passphrase(cd, CDEVICE_1, 1, PASSPHRASE1, strlen(PASSPHRASE1), 0), "Keyslot not assigned to volume"); + FAIL_(crypt_activate_by_passphrase(cd, CDEVICE_1, CRYPT_ANY_SLOT, PASSPHRASE1, strlen(PASSPHRASE1), 0), "No keyslot assigned to volume with this passphrase"); + /* unusable for volume activation even in test mode */ + FAIL_(crypt_activate_by_volume_key(cd, NULL, key2, key_size, 0), "Key doesn't match volume key digest"); + /* otoh passphrase check should pass */ + EQ_(crypt_activate_by_passphrase(cd, NULL, 1, PASSPHRASE1, strlen(PASSPHRASE1), CRYPT_ACTIVATE_ALLOW_UNBOUND_KEY), 1); + EQ_(crypt_activate_by_passphrase(cd, NULL, CRYPT_ANY_SLOT, PASSPHRASE1, strlen(PASSPHRASE1), CRYPT_ACTIVATE_ALLOW_UNBOUND_KEY), 1); + /* in general crypt_keyslot_add_by_key must allow any reasonable key size + * even though such keyslot will not be usable for segment encryption */ + EQ_(crypt_keyslot_add_by_key(cd, 2, key2, key_size-1, PASSPHRASE1, strlen(PASSPHRASE1), CRYPT_VOLUME_KEY_NO_SEGMENT), 2); + EQ_(crypt_keyslot_add_by_key(cd, 3, key2, 13, PASSPHRASE1, strlen(PASSPHRASE1), CRYPT_VOLUME_KEY_NO_SEGMENT), 3); + + FAIL_(crypt_keyslot_get_key_size(cd, CRYPT_ANY_SLOT), "Bad keyslot specification."); + EQ_(crypt_get_volume_key_size(cd), key_size); + EQ_(crypt_keyslot_get_key_size(cd, 0), key_size); + EQ_(crypt_keyslot_get_key_size(cd, 1), key_size); + EQ_(crypt_keyslot_get_key_size(cd, 2), key_size-1); + EQ_(crypt_keyslot_get_key_size(cd, 3), 13); + + key_ret_len = key_size - 1; + FAIL_(crypt_volume_key_get(cd, CRYPT_ANY_SLOT, key_ret, &key_ret_len, PASSPHRASE1, strlen(PASSPHRASE1)), "Wrong size"); + + key_ret_len = 13; + FAIL_(crypt_volume_key_get(cd, 2, key_ret, &key_ret_len, PASSPHRASE1, strlen(PASSPHRASE1)), "wrong size"); + EQ_(crypt_volume_key_get(cd, 3, key_ret, &key_ret_len, PASSPHRASE1, strlen(PASSPHRASE1)), 3); + FAIL_(crypt_activate_by_volume_key(cd, NULL, key_ret, key_ret_len, 0), "Not a volume key"); + key_ret_len = key_size; + EQ_(crypt_volume_key_get(cd, 1, key_ret, &key_ret_len, PASSPHRASE1, strlen(PASSPHRASE1)), 1); + + /* test force volume key change works as expected */ + EQ_(crypt_keyslot_add_by_key(cd, 1, NULL, 0, PASSPHRASE1, strlen(PASSPHRASE1), CRYPT_VOLUME_KEY_SET), 1); + OK_(crypt_activate_by_volume_key(cd, NULL, key2, key_size, 0)); + OK_(crypt_activate_by_volume_key(cd, NULL, key_ret, key_ret_len, 0)); + OK_(crypt_activate_by_volume_key(cd, CDEVICE_1, key2, key_size, 0)); + OK_(crypt_deactivate(cd, CDEVICE_1)); + EQ_(crypt_activate_by_passphrase(cd, NULL, 1, PASSPHRASE1, strlen(PASSPHRASE1), 0), 1); + EQ_(crypt_activate_by_passphrase(cd, CDEVICE_1, 1, PASSPHRASE1, strlen(PASSPHRASE1), 0), 1); + OK_(crypt_deactivate(cd, CDEVICE_1)); + /* old keyslot must be unusable */ + FAIL_(crypt_activate_by_volume_key(cd, CDEVICE_1, key, key_size, 0), "Key doesn't match volume key digest"); + FAIL_(crypt_activate_by_volume_key(cd, NULL, key, key_size, 0), "Key doesn't match volume key digest"); + FAIL_(crypt_activate_by_passphrase(cd, CDEVICE_1, 0, PASSPHRASE, strlen(PASSPHRASE), 0), "Keyslot not assigned to volume"); + EQ_(crypt_keyslot_add_by_passphrase(cd, 5, PASSPHRASE1, strlen(PASSPHRASE1), PASSPHRASE1, strlen(PASSPHRASE1)), 5); + EQ_(crypt_keyslot_add_by_volume_key(cd, 6, key2, key_size, PASSPHRASE1, strlen(PASSPHRASE1)), 6); + /* regression test. check new keyslot is properly assigned to new volume key digest */ + EQ_(crypt_activate_by_passphrase(cd, CDEVICE_1, 5, PASSPHRASE1, strlen(PASSPHRASE1), 0), 5); + OK_(crypt_deactivate(cd, CDEVICE_1)); + EQ_(crypt_activate_by_passphrase(cd, CDEVICE_1, 6, PASSPHRASE1, strlen(PASSPHRASE1), 0), 6); + OK_(crypt_deactivate(cd, CDEVICE_1)); + + CRYPT_FREE(cd); + + OK_(crypt_init(&cd, DMDIR L_DEVICE_OK)); + OK_(crypt_format(cd, CRYPT_LUKS2, cipher, cipher_mode, NULL, key, key_size, ¶ms2)); + /* keyslot 0, volume key, digest 0 */ + EQ_(crypt_keyslot_add_by_key(cd, 0, key, key_size, PASSPHRASE, strlen(PASSPHRASE), 0), 0); + /* keyslot 1, unbound key, digest 1 */ + EQ_(crypt_keyslot_add_by_key(cd, 1, key2, key_size, PASSPHRASE1, strlen(PASSPHRASE1), CRYPT_VOLUME_KEY_NO_SEGMENT), 1); + /* keyslot 2, unbound key, digest 1 */ + EQ_(crypt_keyslot_add_by_key(cd, 2, key2, key_size, PASSPHRASE1, strlen(PASSPHRASE1), CRYPT_VOLUME_KEY_NO_SEGMENT | CRYPT_VOLUME_KEY_DIGEST_REUSE), 2); + /* keyslot 3, unbound key, digest 2 */ + EQ_(crypt_keyslot_add_by_key(cd, 3, key2, key_size - 1, PASSPHRASE1, strlen(PASSPHRASE1), CRYPT_VOLUME_KEY_NO_SEGMENT | CRYPT_VOLUME_KEY_DIGEST_REUSE), 3); + /* keyslot 4, unbound key, digest 1 */ + EQ_(crypt_keyslot_add_by_key(cd, CRYPT_ANY_SLOT, key2, key_size, PASSPHRASE1, strlen(PASSPHRASE1), CRYPT_VOLUME_KEY_NO_SEGMENT | CRYPT_VOLUME_KEY_DIGEST_REUSE), 4); + FAIL_(crypt_keyslot_add_by_key(cd, CRYPT_ANY_SLOT, key, key_size, PASSPHRASE1, strlen(PASSPHRASE1), CRYPT_VOLUME_KEY_NO_SEGMENT | CRYPT_VOLUME_KEY_SET), "Illegal"); + FAIL_(crypt_keyslot_add_by_key(cd, CRYPT_ANY_SLOT, key, key_size, PASSPHRASE1, strlen(PASSPHRASE1), CRYPT_VOLUME_KEY_NO_SEGMENT | CRYPT_VOLUME_KEY_SET | CRYPT_VOLUME_KEY_DIGEST_REUSE), "Illegal"); + /* Such key doesn't exist, nothing to reuse */ + FAIL_(crypt_keyslot_add_by_key(cd, CRYPT_ANY_SLOT, key2, key_size - 2, PASSPHRASE1, strlen(PASSPHRASE1), CRYPT_VOLUME_KEY_DIGEST_REUSE), "Key digest doesn't match any existing."); + /* Keyslot 5, volume key, digest 0 */ + EQ_(crypt_keyslot_add_by_key(cd, 5, key, key_size, PASSPHRASE1, strlen(PASSPHRASE1), CRYPT_VOLUME_KEY_DIGEST_REUSE), 5); + + OK_(crypt_activate_by_volume_key(cd, NULL, key, key_size, 0)); + EQ_(crypt_keyslot_add_by_key(cd, 1, NULL, key_size, PASSPHRASE1, strlen(PASSPHRASE1), CRYPT_VOLUME_KEY_SET), 1); + OK_(crypt_activate_by_volume_key(cd, NULL, key2, key_size, 0)); + FAIL_(crypt_activate_by_volume_key(cd, NULL, key, key_size, 0), "Not a volume key"); + EQ_(crypt_activate_by_passphrase(cd, CDEVICE_1, 1, PASSPHRASE1, strlen(PASSPHRASE1), 0), 1); + OK_(crypt_deactivate(cd, CDEVICE_1)); + EQ_(crypt_activate_by_passphrase(cd, CDEVICE_1, 2, PASSPHRASE1, strlen(PASSPHRASE1), 0), 2); + OK_(crypt_deactivate(cd, CDEVICE_1)); + FAIL_(crypt_activate_by_passphrase(cd, CDEVICE_1, 0, PASSPHRASE, strlen(PASSPHRASE), 0), "No volume key keyslot"); + + /* TODO: key is unusable with aes-xts */ + // FAIL_(crypt_keyslot_add_by_key(cd, 3, NULL, 0, PASSPHRASE1, strlen(PASSPHRASE1), CRYPT_VOLUME_KEY_SET), "Unusable key with segment cipher"); + + EQ_(crypt_keyslot_add_by_key(cd, 5, NULL, 0, PASSPHRASE1, strlen(PASSPHRASE1), CRYPT_VOLUME_KEY_SET), 5); + FAIL_(crypt_activate_by_volume_key(cd, NULL, key2, key_size, 0), "Not a volume key"); + EQ_(crypt_activate_by_passphrase(cd, CDEVICE_1, 5, PASSPHRASE1, strlen(PASSPHRASE1), 0), 5); + OK_(crypt_deactivate(cd, CDEVICE_1)); + + CRYPT_FREE(cd); + + _cleanup_dmdevices(); +} + +static void Luks2KeyslotParams(void) +{ + char key[128], key2[128]; + const char *cipher = "aes", *cipher_mode="xts-plain64"; + const char *cipher_spec = "aes-xts-plain64", *cipher_keyslot = "aes-cbc-essiv:sha256"; + const char *mk_hex = "bb21158c733229347bd4e681891e213d94c685be6a5b84818afe7a78a6de7a1a"; + 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; + + crypt_decode_key(key, mk_hex, key_size); + crypt_decode_key(key2, mk_hex2, key_size); + + 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_(create_dmdevice_over_loop(L_DEVICE_OK, r_payload_offset + 1)); + + EQ_(key_size, 2 * keyslot_key_size); + /* test crypt_keyslot_add_by_key */ + OK_(crypt_init(&cd, DMDIR L_DEVICE_OK)); + crypt_set_iteration_time(cd, 1); + OK_(crypt_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)); + EQ_(key_size_ret, key_size); + + // Normal slots + EQ_(0, crypt_keyslot_add_by_volume_key(cd, 0, key, key_size, PASSPHRASE, strlen(PASSPHRASE))); + EQ_(1, crypt_keyslot_add_by_passphrase(cd, 1, PASSPHRASE, strlen(PASSPHRASE), PASSPHRASE1,strlen(PASSPHRASE1))); + EQ_(2, crypt_keyslot_add_by_key(cd, 2, key2, key_size, PASSPHRASE1, strlen(PASSPHRASE1), CRYPT_VOLUME_KEY_NO_SEGMENT)); + EQ_(6, crypt_keyslot_add_by_keyfile(cd, 6, KEYFILE1, 0, KEYFILE2, 0)); + + // Slots with different encryption type + OK_(crypt_keyslot_set_encryption(cd, cipher_keyslot, keyslot_key_size)); + OK_(strcmp(crypt_keyslot_get_encryption(cd, CRYPT_ANY_SLOT, &key_size_ret), cipher_keyslot)); + EQ_(key_size_ret, keyslot_key_size); + + EQ_(3, crypt_keyslot_add_by_volume_key(cd, 3, key, key_size, PASSPHRASE, strlen(PASSPHRASE))); + EQ_(4, crypt_keyslot_add_by_passphrase(cd, 4, PASSPHRASE, strlen(PASSPHRASE), PASSPHRASE1,strlen(PASSPHRASE1))); + EQ_(5, crypt_keyslot_add_by_key(cd, 5, key2, key_size, PASSPHRASE1, strlen(PASSPHRASE1), CRYPT_VOLUME_KEY_NO_SEGMENT)); + EQ_(7, crypt_keyslot_add_by_keyfile(cd, 7, KEYFILE1, 0, KEYFILE2, 0)); + + CRYPT_FREE(cd); + + OK_(crypt_init(&cd, DMDIR L_DEVICE_OK)); + OK_(crypt_load(cd, CRYPT_LUKS2, NULL)); + + EQ_(crypt_keyslot_status(cd, 0), CRYPT_SLOT_ACTIVE); + OK_(strcmp(crypt_keyslot_get_encryption(cd, 0, &key_size_ret), cipher_spec)); + EQ_(key_size_ret, key_size); + + EQ_(crypt_keyslot_status(cd, 1), CRYPT_SLOT_ACTIVE); + OK_(strcmp(crypt_keyslot_get_encryption(cd, 1, &key_size_ret), cipher_spec)); + EQ_(key_size_ret, key_size); + + EQ_(crypt_keyslot_status(cd, 2), CRYPT_SLOT_UNBOUND); + OK_(strcmp(crypt_keyslot_get_encryption(cd, 2, &key_size_ret), cipher_spec)); + EQ_(key_size_ret, key_size); + + EQ_(crypt_keyslot_status(cd, 6), CRYPT_SLOT_ACTIVE); + OK_(strcmp(crypt_keyslot_get_encryption(cd, 6, &key_size_ret), cipher_spec)); + EQ_(key_size_ret, key_size); + + EQ_(crypt_keyslot_status(cd, 3), CRYPT_SLOT_ACTIVE); + OK_(strcmp(crypt_keyslot_get_encryption(cd, 3, &key_size_ret), cipher_keyslot)); + EQ_(key_size_ret, keyslot_key_size); + + EQ_(crypt_keyslot_status(cd, 4), CRYPT_SLOT_ACTIVE); + OK_(strcmp(crypt_keyslot_get_encryption(cd, 4, &key_size_ret), cipher_keyslot)); + EQ_(key_size_ret, keyslot_key_size); + + EQ_(crypt_keyslot_status(cd, 5), CRYPT_SLOT_UNBOUND); + OK_(strcmp(crypt_keyslot_get_encryption(cd, 5, &key_size_ret), cipher_keyslot)); + EQ_(key_size_ret, keyslot_key_size); + + EQ_(crypt_keyslot_status(cd, 7), CRYPT_SLOT_ACTIVE); + 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); + 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); + + /* Revert to default */ + EQ_(9, crypt_keyslot_change_by_passphrase(cd, 5, 9, PASSPHRASE1, strlen(PASSPHRASE1), PASSPHRASE, strlen(PASSPHRASE))); + OK_(strcmp(crypt_keyslot_get_encryption(cd, 9, &key_size_ret), cipher_spec)); + EQ_(key_size_ret, key_size); + + /* Set new encryption params */ + OK_(crypt_keyslot_set_encryption(cd, cipher_keyslot, keyslot_key_size)); + + EQ_(1, crypt_keyslot_change_by_passphrase(cd, 8, 1, PASSPHRASE, strlen(PASSPHRASE), PASSPHRASE1, strlen(PASSPHRASE1))); + OK_(strcmp(crypt_keyslot_get_encryption(cd, 1, &key_size_ret), cipher_keyslot)); + EQ_(key_size_ret, keyslot_key_size); + + EQ_(10, crypt_keyslot_change_by_passphrase(cd, 2, 10, PASSPHRASE1, strlen(PASSPHRASE1), PASSPHRASE, strlen(PASSPHRASE))); + OK_(strcmp(crypt_keyslot_get_encryption(cd, 10, &key_size_ret), cipher_keyslot)); + EQ_(key_size_ret, keyslot_key_size); + + EQ_(0, crypt_keyslot_change_by_passphrase(cd, 0, 0, PASSPHRASE, strlen(PASSPHRASE), PASSPHRASE1, strlen(PASSPHRASE1))); + OK_(strcmp(crypt_keyslot_get_encryption(cd, 0, &key_size_ret), cipher_keyslot)); + EQ_(key_size_ret, keyslot_key_size); + + CRYPT_FREE(cd); + + /* LUKS1 compatible calls */ + OK_(crypt_init(&cd, DMDIR L_DEVICE_OK)); + crypt_set_iteration_time(cd, 1); + 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)); + EQ_(key_size_ret, key_size); + EQ_(0, crypt_keyslot_add_by_volume_key(cd, 0, key, key_size, PASSPHRASE, strlen(PASSPHRASE))); + OK_(strcmp(crypt_keyslot_get_encryption(cd, 0, &key_size_ret), cipher_spec)); + EQ_(key_size_ret, key_size); + CRYPT_FREE(cd); + + _cleanup_dmdevices(); + _remove_keyfiles(); +} + +static void Luks2ActivateByKeyring(void) +{ +#ifdef KERNEL_KEYRING + + key_serial_t kid, kid1; + uint64_t r_payload_offset; + + const char *cipher = "aes"; + const char *cipher_mode = "xts-plain64"; + + if (!t_dm_crypt_keyring_support()) { + printf("WARNING: Kernel keyring not supported, skipping test.\n"); + return; + } + + kid = add_key("user", KEY_DESC_TEST0, PASSPHRASE, strlen(PASSPHRASE), KEY_SPEC_THREAD_KEYRING); + NOTFAIL_(kid, "Test or kernel keyring are broken."); + 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_(create_dmdevice_over_loop(L_DEVICE_OK, r_payload_offset + 1)); + + // prepare the device + OK_(crypt_init(&cd, DMDIR L_DEVICE_OK)); + crypt_set_iteration_time(cd, 1); + OK_(crypt_format(cd, CRYPT_LUKS2, cipher, cipher_mode, NULL, NULL, 32, NULL)); + EQ_(crypt_keyslot_add_by_volume_key(cd, 0, NULL, 32, PASSPHRASE, strlen(PASSPHRASE)), 0); + EQ_(crypt_keyslot_add_by_key(cd, 1, NULL, 32, PASSPHRASE1, strlen(PASSPHRASE1), CRYPT_VOLUME_KEY_NO_SEGMENT), 1); + EQ_(crypt_keyslot_add_by_volume_key(cd, 2, NULL, 32, PASSPHRASE1, strlen(PASSPHRASE1)), 2); + CRYPT_FREE(cd); + + // FIXME: all following tests work as expected but most error messages are missing + // check activate by keyring works exactly same as by passphrase + OK_(crypt_init(&cd, DMDIR L_DEVICE_OK)); + OK_(crypt_load(cd, CRYPT_LUKS2, NULL)); + EQ_(crypt_activate_by_keyring(cd, NULL, KEY_DESC_TEST0, 0, 0), 0); + EQ_(crypt_activate_by_keyring(cd, CDEVICE_1, KEY_DESC_TEST0, 0, 0), 0); + EQ_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE); + FAIL_(crypt_activate_by_keyring(cd, CDEVICE_1, KEY_DESC_TEST0, 0, 0), "already open"); + OK_(crypt_deactivate(cd, CDEVICE_1)); + EQ_(crypt_status(cd, CDEVICE_1), CRYPT_INACTIVE); + EQ_(crypt_activate_by_keyring(cd, NULL, KEY_DESC_TEST1, 1, CRYPT_ACTIVATE_ALLOW_UNBOUND_KEY), 1); + EQ_(crypt_activate_by_keyring(cd, NULL, KEY_DESC_TEST1, 2, 0), 2); + FAIL_(crypt_activate_by_keyring(cd, CDEVICE_1, KEY_DESC_TEST1, 1, 0), "Keyslot not assigned to volume"); + EQ_(crypt_activate_by_keyring(cd, CDEVICE_1, KEY_DESC_TEST1, 2, 0), 2); + EQ_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE); + OK_(crypt_deactivate(cd, CDEVICE_1)); + EQ_(crypt_activate_by_keyring(cd, CDEVICE_1, KEY_DESC_TEST1, CRYPT_ANY_SLOT, 0), 2); + OK_(crypt_deactivate(cd, CDEVICE_1)); + FAIL_(crypt_activate_by_keyring(cd, NULL, KEY_DESC_TEST0, 2, 0), "Failed to unclock keyslot"); + FAIL_(crypt_activate_by_keyring(cd, NULL, KEY_DESC_TEST1, 0, 0), "Failed to unclock keyslot"); + CRYPT_FREE(cd); + + NOTFAIL_(keyctl_unlink(kid, KEY_SPEC_THREAD_KEYRING), "Test or kernel keyring are broken."); + NOTFAIL_(keyctl_unlink(kid1, KEY_SPEC_THREAD_KEYRING), "Test or kernel keyring are broken."); + + OK_(crypt_init(&cd, DMDIR L_DEVICE_OK)); + OK_(crypt_load(cd, CRYPT_LUKS2, NULL)); + FAIL_(crypt_activate_by_keyring(cd, NULL, KEY_DESC_TEST0, CRYPT_ANY_SLOT, 0), "no such key in keyring"); + FAIL_(crypt_activate_by_keyring(cd, CDEVICE_1, KEY_DESC_TEST0, CRYPT_ANY_SLOT, 0), "no such key in keyring"); + FAIL_(crypt_activate_by_keyring(cd, CDEVICE_1, KEY_DESC_TEST1, 2, 0), "no such key in keyring"); + FAIL_(crypt_activate_by_keyring(cd, NULL, KEY_DESC_TEST1, 1, 0), "no such key in keyring"); + CRYPT_FREE(cd); + _cleanup_dmdevices(); +#else + printf("WARNING: cryptsetup compiled with kernel keyring service disabled, skipping test.\n"); +#endif +} + +static void Luks2Requirements(void) +{ + int r; + char key[128]; + size_t key_size = 128; + const struct crypt_pbkdf_type *pbkdf; +#ifdef KERNEL_KEYRING + key_serial_t kid; +#endif + uint32_t flags; + uint64_t dummy, r_payload_offset; + struct crypt_active_device cad; + + const char *token, *json = "{\"type\":\"test_token\",\"keyslots\":[]}"; + struct crypt_pbkdf_type argon2 = { + .type = CRYPT_KDF_ARGON2I, + .hash = DEFAULT_LUKS1_HASH, + .time_ms = 6, + .max_memory_kb = 1024, + .parallel_threads = 1 + }, pbkdf2 = { + .type = CRYPT_KDF_PBKDF2, + .hash = DEFAULT_LUKS1_HASH, + .time_ms = 9 + }; + struct crypt_token_params_luks2_keyring params_get, params = { + .key_description = KEY_DESC_TEST0 + }; + + OK_(prepare_keyfile(KEYFILE1, "aaa", 3)); + OK_(prepare_keyfile(KEYFILE2, "xxx", 3)); + + /* crypt_load (unrestricted) */ + OK_(crypt_init(&cd, DEVICE_5)); + OK_(crypt_load(cd, CRYPT_LUKS, NULL)); + CRYPT_FREE(cd); + + OK_(crypt_init(&cd, DEVICE_5)); + OK_(crypt_load(cd, CRYPT_LUKS2, NULL)); + + /* crypt_dump (unrestricted) */ + reset_log(); + OK_(crypt_dump(cd)); + OK_(!(global_lines != 0)); + reset_log(); + + /* get & set pbkdf params (unrestricted) */ + if (!_fips_mode) { + OK_(crypt_set_pbkdf_type(cd, &argon2)); + NOTNULL_(crypt_get_pbkdf_type(cd)); + } + + OK_(crypt_set_pbkdf_type(cd, &pbkdf2)); + NOTNULL_(crypt_get_pbkdf_type(cd)); + + /* crypt_set_iteration_time (unrestricted) */ + crypt_set_iteration_time(cd, 1); + pbkdf = crypt_get_pbkdf_type(cd); + NOTNULL_(pbkdf); + EQ_(pbkdf->time_ms, 1); + + /* crypt_convert (restricted) */ + FAIL_((r = crypt_convert(cd, CRYPT_LUKS1, NULL)), "Unmet requirements detected"); + EQ_(r, -ETXTBSY); + + /* crypt_set_uuid (restricted) */ + FAIL_((r = crypt_set_uuid(cd, NULL)), "Unmet requirements detected"); + EQ_(r, -ETXTBSY); + + /* crypt_set_label (restricted) */ + FAIL_((r = crypt_set_label(cd, "label", "subsystem")), "Unmet requirements detected"); + EQ_(r, -ETXTBSY); + + /* crypt_repair (with current repair capabilities it's unrestricted) */ + OK_(crypt_repair(cd, CRYPT_LUKS2, NULL)); + + /* crypt_keyslot_add_passphrase (restricted) */ + FAIL_((r = crypt_keyslot_add_by_passphrase(cd, CRYPT_ANY_SLOT, "aaa", 3, "bbb", 3)), "Unmet requirements detected"); + EQ_(r, -ETXTBSY); + + /* crypt_keyslot_change_by_passphrase (restricted) */ + FAIL_((r = crypt_keyslot_change_by_passphrase(cd, CRYPT_ANY_SLOT, 9, "aaa", 3, "bbb", 3)), "Unmet requirements detected"); + EQ_(r, -ETXTBSY); + + /* crypt_keyslot_add_by_keyfile (restricted) */ + FAIL_((r = crypt_keyslot_add_by_keyfile(cd, CRYPT_ANY_SLOT, KEYFILE1, 0, KEYFILE2, 0)), "Unmet requirements detected"); + EQ_(r, -ETXTBSY); + + /* crypt_keyslot_add_by_keyfile_offset (restricted) */ + FAIL_((r = crypt_keyslot_add_by_keyfile_offset(cd, CRYPT_ANY_SLOT, KEYFILE1, 0, 0, KEYFILE2, 0, 0)), "Unmet requirements detected"); + EQ_(r, -ETXTBSY); + + /* crypt_volume_key_get (unrestricted, but see below) */ + OK_(crypt_volume_key_get(cd, 0, key, &key_size, "aaa", 3)); + + /* crypt_keyslot_add_by_volume_key (restricted) */ + FAIL_((r = crypt_keyslot_add_by_volume_key(cd, CRYPT_ANY_SLOT, key, key_size, "xxx", 3)), "Unmet requirements detected"); + EQ_(r, -ETXTBSY); + + /* crypt_keyslot_add_by_key (restricted) */ + FAIL_((r = crypt_keyslot_add_by_key(cd, CRYPT_ANY_SLOT, NULL, key_size, "xxx", 3, CRYPT_VOLUME_KEY_NO_SEGMENT)), "Unmet requirements detected"); + EQ_(r, -ETXTBSY); + + /* crypt_keyslot_add_by_key (restricted) */ + FAIL_((r = crypt_keyslot_add_by_key(cd, CRYPT_ANY_SLOT, key, key_size, "xxx", 3, 0)), "Unmet requirements detected"); + EQ_(r, -ETXTBSY); + + /* crypt_persistent_flasgs_set (restricted) */ + FAIL_((r = crypt_persistent_flags_set(cd, CRYPT_FLAGS_ACTIVATION, CRYPT_ACTIVATE_ALLOW_DISCARDS)), "Unmet requirements detected"); + EQ_(r, -ETXTBSY); + + /* crypt_persistent_flasgs_get (unrestricted) */ + OK_(crypt_persistent_flags_get(cd, CRYPT_FLAGS_REQUIREMENTS, &flags)); + EQ_(flags, (uint32_t) CRYPT_REQUIREMENT_UNKNOWN); + + /* crypt_activate_by_passphrase (restricted for activation only) */ + FAIL_((r = crypt_activate_by_passphrase(cd, CDEVICE_1, 0, "aaa", 3, 0)), "Unmet requirements detected"); + EQ_(r, -ETXTBSY); + OK_(crypt_activate_by_passphrase(cd, NULL, 0, "aaa", 3, 0)); + OK_(crypt_activate_by_passphrase(cd, NULL, 0, "aaa", 3, t_dm_crypt_keyring_support() ? CRYPT_ACTIVATE_KEYRING_KEY : 0)); + EQ_(crypt_status(cd, CDEVICE_1), CRYPT_INACTIVE); + + /* crypt_activate_by_keyfile (restricted for activation only) */ + FAIL_((r = crypt_activate_by_keyfile(cd, CDEVICE_1, 0, KEYFILE1, 0, 0)), "Unmet requirements detected"); + EQ_(r, -ETXTBSY); + OK_(crypt_activate_by_keyfile(cd, NULL, 0, KEYFILE1, 0, 0)); + OK_(crypt_activate_by_keyfile(cd, NULL, 0, KEYFILE1, 0, t_dm_crypt_keyring_support() ? CRYPT_ACTIVATE_KEYRING_KEY : 0)); + + /* crypt_activate_by_volume_key (restricted for activation only) */ + FAIL_((r = crypt_activate_by_volume_key(cd, CDEVICE_1, key, key_size, 0)), "Unmet requirements detected"); + EQ_(r, -ETXTBSY); + OK_(crypt_activate_by_volume_key(cd, NULL, key, key_size, 0)); + OK_(crypt_activate_by_volume_key(cd, NULL, key, key_size, t_dm_crypt_keyring_support() ? CRYPT_ACTIVATE_KEYRING_KEY : 0)); + +#ifdef KERNEL_KEYRING + if (t_dm_crypt_keyring_support()) { + kid = add_key("user", KEY_DESC_TEST0, "aaa", 3, KEY_SPEC_THREAD_KEYRING); + NOTFAIL_(kid, "Test or kernel keyring are broken."); + + /* crypt_activate_by_keyring (restricted for activation only) */ + FAIL_((r = crypt_activate_by_keyring(cd, CDEVICE_1, KEY_DESC_TEST0, 0, 0)), "Unmet requirements detected"); + EQ_(r, t_dm_crypt_keyring_support() ? -ETXTBSY : -EINVAL); + OK_(crypt_activate_by_keyring(cd, NULL, KEY_DESC_TEST0, 0, 0)); + OK_(crypt_activate_by_keyring(cd, NULL, KEY_DESC_TEST0, 0, CRYPT_ACTIVATE_KEYRING_KEY)); + } +#endif + + /* crypt_volume_key_verify (unrestricted) */ + OK_(crypt_volume_key_verify(cd, key, key_size)); + + /* crypt_get_cipher (unrestricted) */ + OK_(strcmp(crypt_get_cipher(cd)?:"", "aes")); + + /* crypt_get_cipher_mode (unrestricted) */ + OK_(strcmp(crypt_get_cipher_mode(cd)?:"", "xts-plain64")); + + /* crypt_get_uuid (unrestricted) */ + NOTNULL_(crypt_get_uuid(cd)); + + /* crypt_get_device_name (unrestricted) */ + NOTNULL_(crypt_get_device_name(cd)); + + /* crypt_get_data_offset (unrestricted) */ + OK_(!crypt_get_data_offset(cd)); + + /* crypt_get_iv_offset (unrestricted, nothing to test) */ + + /* crypt_get_volume_key_size (unrestricted) */ + EQ_(crypt_get_volume_key_size(cd), key_size); + + /* crypt_keyslot_status (unrestricted) */ + EQ_(crypt_keyslot_status(cd, 0), CRYPT_SLOT_ACTIVE_LAST); + EQ_(crypt_keyslot_status(cd, 1), CRYPT_SLOT_INACTIVE); + + /* crypt_keyslot_get_priority (unrestricted) */ + EQ_(crypt_keyslot_get_priority(cd, 0), CRYPT_SLOT_PRIORITY_NORMAL); + + /* crypt_keyslot_set_priority (restricted) */ + FAIL_((r = crypt_keyslot_set_priority(cd, 0, CRYPT_SLOT_PRIORITY_PREFER)), "Unmet requirements detected"); + EQ_(r, -ETXTBSY); + + /* crypt_keyslot_area (unrestricted) */ + OK_(crypt_keyslot_area(cd, 0, &dummy, &dummy)); + OK_(!dummy); + + /* crypt_header_backup (unrestricted) */ + remove(BACKUP_FILE); + OK_(crypt_header_backup(cd, CRYPT_LUKS, BACKUP_FILE)); + + /* crypt_header_restore (restricted, do not drop the test until we have safe option) */ + FAIL_((r = crypt_header_restore(cd, CRYPT_LUKS2, BACKUP_FILE)), "Unmet requirements detected"); + EQ_(r, -ETXTBSY); + remove(BACKUP_FILE); + + /* crypt_token_json_set (restricted) */ + FAIL_((r = crypt_token_json_set(cd, CRYPT_ANY_TOKEN, json)), "Unmet requirements detected"); + EQ_(r, -ETXTBSY); + + /* crypt_token_json_get (unrestricted) */ + OK_(crypt_token_json_get(cd, 0, &token)); + NOTNULL_(strstr(token, "user_type")); + + /* crypt_token_status (unrestricted) */ + EQ_(crypt_token_status(cd, 0, &token), CRYPT_TOKEN_EXTERNAL_UNKNOWN); + OK_(strcmp(token, "user_type")); + EQ_(crypt_token_status(cd, 1, &token), CRYPT_TOKEN_INTERNAL); + OK_(strcmp(token, "luks2-keyring")); + EQ_(crypt_token_status(cd, 2, NULL), CRYPT_TOKEN_INACTIVE); + EQ_(crypt_token_status(cd, 6, &token), CRYPT_TOKEN_INTERNAL_UNKNOWN); + + /* crypt_token_luks2_keyring_set (restricted) */ + FAIL_((r = crypt_token_luks2_keyring_set(cd, CRYPT_ANY_TOKEN, ¶ms)), "Unmet requirements detected"); + EQ_(r, -ETXTBSY); + + /* crypt_token_luks2_keyring_get (unrestricted) */ + EQ_(crypt_token_luks2_keyring_get(cd, 1, ¶ms_get), 1); + OK_(strcmp(params_get.key_description, KEY_DESC_TEST0)); + + /* crypt_token_assign_keyslot (unrestricted) */ + FAIL_((r = crypt_token_assign_keyslot(cd, 0, 1)), "Unmet requirements detected"); + EQ_(r, -ETXTBSY); + + /* crypt_token_unassign_keyslot (unrestricted) */ + FAIL_((r = crypt_token_unassign_keyslot(cd, CRYPT_ANY_TOKEN, CRYPT_ANY_SLOT)), "Unmet requirements detected"); + EQ_(r, -ETXTBSY); + + /* crypt_activate_by_token (restricted for activation only) */ +#ifdef KERNEL_KEYRING + if (t_dm_crypt_keyring_support()) { + FAIL_((r = crypt_activate_by_token(cd, CDEVICE_1, 1, NULL, 0)), ""); // supposed to be silent + EQ_(r, -ETXTBSY); + OK_(crypt_activate_by_token(cd, NULL, 1, NULL, 0)); + 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_(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)); + + /* need to fake activated LUKSv2 device with requirements features */ + CRYPT_FREE(cd); + OK_(crypt_init(&cd, DMDIR L_DEVICE_OK)); + OK_(crypt_load(cd, CRYPT_LUKS, NULL)); + OK_(crypt_activate_by_passphrase(cd, CDEVICE_1, 0, "aaa", 3, 0)); + OK_(crypt_header_backup(cd, CRYPT_LUKS2, BACKUP_FILE)); + /* replace header with no requirements */ + OK_(_system("dd if=" REQS_LUKS2_HEADER " of=" DMDIR L_DEVICE_OK " bs=1M count=4 oflag=direct 2>/dev/null", 1)); + CRYPT_FREE(cd); + + OK_(crypt_init_by_name_and_header(&cd, CDEVICE_1, DEVICE_5)); + CRYPT_FREE(cd); + OK_(crypt_init_by_name(&cd, CDEVICE_1)); + + /* crypt_header_restore (restricted with confirmation required) */ + /* allow force restore over device header w/ requirements */ + OK_(crypt_header_restore(cd, CRYPT_LUKS2, BACKUP_FILE)); + remove(BACKUP_FILE); + OK_(_system("dd if=" REQS_LUKS2_HEADER " of=" DMDIR L_DEVICE_OK " bs=1M count=4 oflag=direct 2>/dev/null", 1)); + OK_(crypt_header_backup(cd, CRYPT_LUKS2, BACKUP_FILE)); /* create backup with requirements */ + + /* crypt_suspend (restricted) */ + FAIL_((r = crypt_suspend(cd, CDEVICE_1)), "Unmet requirements detected"); + EQ_(r, -ETXTBSY); + CRYPT_FREE(cd); + + /* replace header again to suspend the device */ + OK_(_system("dd if=" NO_REQS_LUKS2_HEADER " of=" DMDIR L_DEVICE_OK " bs=1M count=4 oflag=direct 2>/dev/null", 1)); + OK_(crypt_init_by_name(&cd, CDEVICE_1)); + OK_(crypt_suspend(cd, CDEVICE_1)); + + /* crypt_header_restore (restricted, do not drop the test until we have safe option) */ + /* refuse to overwrite header w/ backup including requirements */ + FAIL_((r = crypt_header_restore(cd, CRYPT_LUKS2, BACKUP_FILE)), "Unmet requirements detected"); + EQ_(r, -ETXTBSY); + + CRYPT_FREE(cd); + + OK_(_system("dd if=" REQS_LUKS2_HEADER " of=" DMDIR L_DEVICE_OK " bs=1M count=4 oflag=direct 2>/dev/null", 1)); + OK_(crypt_init_by_name(&cd, CDEVICE_1)); + + /* crypt_resume_by_passphrase (restricted) */ + FAIL_((r = crypt_resume_by_passphrase(cd, CDEVICE_1, 0, "aaa", 3)), "Unmet requirements detected"); + EQ_(r, -ETXTBSY); + + /* crypt_resume_by_keyfile (restricted) */ + FAIL_((r = crypt_resume_by_keyfile(cd, CDEVICE_1, 0, KEYFILE1, 0)), "Unmet requirements detected"); + EQ_(r, -ETXTBSY); + + /* crypt_resume_by_keyfile_offset (restricted) */ + FAIL_((r = crypt_resume_by_keyfile_offset(cd, CDEVICE_1, 0, KEYFILE1, 0, 0)), "Unmet requirements detected"); + EQ_(r, -ETXTBSY); + CRYPT_FREE(cd); + + OK_(_system("dd if=" NO_REQS_LUKS2_HEADER " of=" DMDIR L_DEVICE_OK " bs=1M count=4 oflag=direct 2>/dev/null", 1)); + OK_(crypt_init_by_name(&cd, CDEVICE_1)); + OK_(crypt_resume_by_passphrase(cd, CDEVICE_1, 0, "aaa", 3)); + CRYPT_FREE(cd); + OK_(_system("dd if=" REQS_LUKS2_HEADER " of=" DMDIR L_DEVICE_OK " bs=1M count=4 oflag=direct 2>/dev/null", 1)); + + OK_(crypt_init_by_name(&cd, CDEVICE_1)); + /* load VK in keyring */ + OK_(crypt_activate_by_passphrase(cd, NULL, 0, "aaa", 3, t_dm_crypt_keyring_support() ? CRYPT_ACTIVATE_KEYRING_KEY : 0)); + /* crypt_resize (restricted) */ + FAIL_((r = crypt_resize(cd, CDEVICE_1, 1)), "Unmet requirements detected"); + EQ_(r, -ETXTBSY); + EQ_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE); + + /* crypt_get_active_device (unrestricted) */ + OK_(crypt_get_active_device(cd, CDEVICE_1, &cad)); +#ifdef KERNEL_KEYRING + if (t_dm_crypt_keyring_support()) + EQ_(cad.flags & CRYPT_ACTIVATE_KEYRING_KEY, CRYPT_ACTIVATE_KEYRING_KEY); +#endif + + /* crypt_deactivate (unrestricted) */ + OK_(crypt_deactivate(cd, CDEVICE_1)); + + /* crypt_token_is_assigned (unrestricted) */ + OK_(crypt_token_is_assigned(cd, 1, 0)); + OK_(crypt_token_is_assigned(cd, 6, 0)); + EQ_(crypt_token_is_assigned(cd, 0, 0), -ENOENT); + + /* crypt_keyslot_destroy (unrestricted) */ + OK_(crypt_keyslot_destroy(cd, 0)); + + CRYPT_FREE(cd); + _cleanup_dmdevices(); +} + +static void Luks2Integrity(void) +{ + struct crypt_params_integrity ip = {}; + struct crypt_params_luks2 params = { + .sector_size = 512, + .integrity = "hmac(sha256)" + }; + size_t key_size = 32 + 32; + const char *passphrase = "blabla"; + const char *cipher = "aes"; + const char *cipher_mode = "xts-random"; + int ret; + + // FIXME: This is just a stub + OK_(crypt_init(&cd, DEVICE_2)); + ret = crypt_format(cd, CRYPT_LUKS2, cipher, cipher_mode, NULL, NULL, key_size, ¶ms); + if (ret < 0) { + printf("WARNING: cannot format integrity device, skipping test.\n"); + CRYPT_FREE(cd); + return; + } + + EQ_(crypt_keyslot_add_by_volume_key(cd, 7, NULL, key_size, passphrase, strlen(passphrase)), 7); + EQ_(crypt_activate_by_passphrase(cd, CDEVICE_2, 7, passphrase, strlen(passphrase) ,0), 7); + EQ_(crypt_status(cd, CDEVICE_2), CRYPT_ACTIVE); + CRYPT_FREE(cd); + + OK_(crypt_init_by_name_and_header(&cd, CDEVICE_2, NULL)); + OK_(crypt_get_integrity_info(cd, &ip)); + OK_(strcmp(cipher, crypt_get_cipher(cd))); + OK_(strcmp(cipher_mode, crypt_get_cipher_mode(cd))); + OK_(strcmp("hmac(sha256)", ip.integrity)); + EQ_(32, ip.integrity_key_size); + EQ_(32+16, ip.tag_size); + OK_(crypt_deactivate(cd, CDEVICE_2)); + CRYPT_FREE(cd); + + OK_(crypt_init(&cd, DEVICE_2)); + FAIL_(crypt_format(cd, CRYPT_LUKS2, cipher, cipher_mode, NULL, NULL, key_size - 32, ¶ms), "Wrong key size."); + FAIL_(crypt_format(cd, CRYPT_LUKS2, cipher, "xts-plainx", NULL, NULL, key_size, ¶ms), "Wrong cipher."); + CRYPT_FREE(cd); +} + +static int set_fast_pbkdf(struct crypt_device *cd) +{ + struct crypt_pbkdf_type pbkdf = { + .type = "argon2id", + .hash = "sha256", + .iterations = 4, + .max_memory_kb = 32, + .parallel_threads = 1, + .flags = CRYPT_PBKDF_NO_BENCHMARK + }; + + /* Cannot use Argon2 in FIPS */ + if (_fips_mode) { + pbkdf.type = CRYPT_KDF_PBKDF2; + pbkdf.parallel_threads = 0; + pbkdf.max_memory_kb = 0; + pbkdf.iterations = 1000; + } + return crypt_set_pbkdf_type(cd, &pbkdf); +} + +static int check_flag(uint32_t flags, uint32_t flag) +{ + return (flags & flag) ? 0 : -1; +} + +static void Luks2Refresh(void) +{ + uint64_t r_payload_offset; + char key[128], key1[128]; + const char *cipher = "aes", *mode = "xts-plain64"; + const char *mk_hex = "bb21158c733229347bd4e681891e213d94c645be6a5b84818afe7a78a6de7a1a"; + const char *mk_hex2 = "bb22158c733229347bd4e681891e213d94c685be6a5b84818afe7a78a6de7a1e"; + size_t key_size = strlen(mk_hex) / 2; + struct crypt_params_luks2 params = { + .sector_size = 512, + .integrity = "aead" + }; + struct crypt_active_device cad = {}; + + 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_(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)); + OK_(create_dmdevice_over_loop(H_DEVICE, r_payload_offset)); + + /* prepare test device */ + OK_(crypt_init(&cd, DMDIR L_DEVICE_OK)); + OK_(set_fast_pbkdf(cd)); + OK_(crypt_format(cd, CRYPT_LUKS2, cipher, mode, NULL, key, 32, NULL)); + OK_(crypt_keyslot_add_by_volume_key(cd, CRYPT_ANY_SLOT, key, 32, "aaa", 3)); + OK_(crypt_activate_by_passphrase(cd, CDEVICE_1, 0, "aaa", 3, 0)); + + /* check we can refresh significant flags */ + if (t_dm_crypt_discard_support()) { + OK_(crypt_activate_by_passphrase(cd, CDEVICE_1, 0, "aaa", 3, CRYPT_ACTIVATE_REFRESH | CRYPT_ACTIVATE_ALLOW_DISCARDS)); + OK_(crypt_get_active_device(cd, CDEVICE_1, &cad)); + OK_(check_flag(cad.flags, CRYPT_ACTIVATE_ALLOW_DISCARDS)); + cad.flags = 0; + } + + if (t_dm_crypt_cpu_switch_support()) { + OK_(crypt_activate_by_passphrase(cd, CDEVICE_1, 0, "aaa", 3, CRYPT_ACTIVATE_REFRESH | CRYPT_ACTIVATE_SAME_CPU_CRYPT)); + OK_(crypt_get_active_device(cd, CDEVICE_1, &cad)); + OK_(check_flag(cad.flags, CRYPT_ACTIVATE_SAME_CPU_CRYPT)); + cad.flags = 0; + + OK_(crypt_activate_by_passphrase(cd, CDEVICE_1, 0, "aaa", 3, CRYPT_ACTIVATE_REFRESH | CRYPT_ACTIVATE_SUBMIT_FROM_CRYPT_CPUS)); + OK_(crypt_get_active_device(cd, CDEVICE_1, &cad)); + OK_(check_flag(cad.flags, CRYPT_ACTIVATE_SUBMIT_FROM_CRYPT_CPUS)); + cad.flags = 0; + + OK_(crypt_activate_by_passphrase(cd, CDEVICE_1, 0, "aaa", 3, CRYPT_ACTIVATE_REFRESH | CRYPT_ACTIVATE_SUBMIT_FROM_CRYPT_CPUS)); + OK_(crypt_get_active_device(cd, CDEVICE_1, &cad)); + OK_(check_flag(cad.flags, CRYPT_ACTIVATE_SUBMIT_FROM_CRYPT_CPUS)); + cad.flags = 0; + } + + OK_(crypt_volume_key_keyring(cd, 0)); + OK_(crypt_activate_by_passphrase(cd, CDEVICE_1, 0, "aaa", 3, CRYPT_ACTIVATE_REFRESH)); + OK_(crypt_get_active_device(cd, CDEVICE_1, &cad)); + FAIL_(check_flag(cad.flags, CRYPT_ACTIVATE_KEYRING_KEY), "Unexpected flag raised."); + cad.flags = 0; + +#ifdef KERNEL_KEYRING + if (t_dm_crypt_keyring_support()) { + OK_(crypt_volume_key_keyring(cd, 1)); + OK_(crypt_activate_by_passphrase(cd, CDEVICE_1, 0, "aaa", 3, CRYPT_ACTIVATE_REFRESH)); + OK_(crypt_get_active_device(cd, CDEVICE_1, &cad)); + OK_(check_flag(cad.flags, CRYPT_ACTIVATE_KEYRING_KEY)); + cad.flags = 0; + } +#endif + + /* multiple flags at once */ + if (t_dm_crypt_discard_support() && t_dm_crypt_cpu_switch_support()) { + OK_(crypt_activate_by_passphrase(cd, CDEVICE_1, 0, "aaa", 3, CRYPT_ACTIVATE_REFRESH | CRYPT_ACTIVATE_SUBMIT_FROM_CRYPT_CPUS | CRYPT_ACTIVATE_ALLOW_DISCARDS)); + OK_(crypt_get_active_device(cd, CDEVICE_1, &cad)); + OK_(check_flag(cad.flags, CRYPT_ACTIVATE_SUBMIT_FROM_CRYPT_CPUS | CRYPT_ACTIVATE_ALLOW_DISCARDS)); + cad.flags = 0; + } + + /* do not allow reactivation with read-only (and drop flag silently because activation behaves exactly same) */ + OK_(crypt_activate_by_passphrase(cd, CDEVICE_1, 0, "aaa", 3, CRYPT_ACTIVATE_REFRESH | CRYPT_ACTIVATE_READONLY)); + OK_(crypt_get_active_device(cd, CDEVICE_1, &cad)); + FAIL_(check_flag(cad.flags, CRYPT_ACTIVATE_READONLY), "Reactivated with read-only flag."); + cad.flags = 0; + + /* reload flag is dropped silently */ + OK_(crypt_deactivate(cd, CDEVICE_1)); + OK_(crypt_activate_by_passphrase(cd, CDEVICE_1, 0, "aaa", 3, CRYPT_ACTIVATE_REFRESH)); + + /* check read-only flag is not lost after reload */ + OK_(crypt_deactivate(cd, CDEVICE_1)); + OK_(crypt_activate_by_passphrase(cd, CDEVICE_1, 0, "aaa", 3, CRYPT_ACTIVATE_READONLY)); + OK_(crypt_activate_by_passphrase(cd, CDEVICE_1, 0, "aaa", 3, CRYPT_ACTIVATE_REFRESH)); + OK_(crypt_get_active_device(cd, CDEVICE_1, &cad)); + OK_(check_flag(cad.flags, CRYPT_ACTIVATE_READONLY)); + cad.flags = 0; + + /* check LUKS2 with auth. enc. reload */ + OK_(crypt_init(&cd2, DMDIR L_DEVICE_WRONG)); + if (!crypt_format(cd2, CRYPT_LUKS2, "aes", "gcm-random", crypt_get_uuid(cd), key, 32, ¶ms)) { + OK_(crypt_keyslot_add_by_volume_key(cd2, 0, key, 32, "aaa", 3)); + OK_(crypt_activate_by_volume_key(cd2, CDEVICE_2, key, 32, 0)); + OK_(crypt_activate_by_volume_key(cd2, CDEVICE_2, key, 32, CRYPT_ACTIVATE_REFRESH | CRYPT_ACTIVATE_NO_JOURNAL)); + OK_(crypt_get_active_device(cd2, CDEVICE_2, &cad)); + OK_(check_flag(cad.flags, CRYPT_ACTIVATE_NO_JOURNAL)); + cad.flags = 0; + OK_(crypt_activate_by_volume_key(cd2, CDEVICE_2, key, 32, CRYPT_ACTIVATE_REFRESH | CRYPT_ACTIVATE_NO_JOURNAL | CRYPT_ACTIVATE_SUBMIT_FROM_CRYPT_CPUS)); + OK_(crypt_get_active_device(cd2, CDEVICE_2, &cad)); + OK_(check_flag(cad.flags, CRYPT_ACTIVATE_NO_JOURNAL | CRYPT_ACTIVATE_SUBMIT_FROM_CRYPT_CPUS)); + cad.flags = 0; + OK_(crypt_activate_by_passphrase(cd2, CDEVICE_2, 0, "aaa", 3, CRYPT_ACTIVATE_REFRESH)); + OK_(crypt_get_active_device(cd2, CDEVICE_2, &cad)); + FAIL_(check_flag(cad.flags, CRYPT_ACTIVATE_NO_JOURNAL), ""); + FAIL_(check_flag(cad.flags, CRYPT_ACTIVATE_SUBMIT_FROM_CRYPT_CPUS), ""); + FAIL_(crypt_activate_by_passphrase(cd2, CDEVICE_1, 0, "aaa", 3, CRYPT_ACTIVATE_REFRESH), "Refreshed LUKS2 device with LUKS2/aead context"); + OK_(crypt_deactivate(cd2, CDEVICE_2)); + } else { + printf("WARNING: cannot format integrity device, skipping few reload tests.\n"); + } + CRYPT_FREE(cd2); + + /* Use LUKS1 context on LUKS2 device */ + OK_(crypt_init(&cd2, DMDIR L_DEVICE_1S)); + OK_(crypt_format(cd2, CRYPT_LUKS1, cipher, mode, crypt_get_uuid(cd), key, 32, NULL)); + OK_(crypt_keyslot_add_by_volume_key(cd2, CRYPT_ANY_SLOT, NULL, 32, "aaa", 3)); + FAIL_(crypt_activate_by_passphrase(cd2, CDEVICE_1, 0, "aaa", 3, CRYPT_ACTIVATE_REFRESH), "Refreshed LUKS2 device with LUKS1 context"); + CRYPT_FREE(cd2); + + /* Use PLAIN context on LUKS2 device */ + OK_(crypt_init(&cd2, DMDIR L_DEVICE_1S)); + OK_(crypt_format(cd2, CRYPT_PLAIN, cipher, mode, NULL, key, 32, NULL)); + OK_(crypt_activate_by_volume_key(cd2, CDEVICE_2, key, key_size, 0)); + FAIL_(crypt_activate_by_volume_key(cd2, CDEVICE_1, key, key_size, CRYPT_ACTIVATE_REFRESH), "Refreshed LUKS2 device with PLAIN context"); + OK_(crypt_deactivate(cd2, CDEVICE_2)); + CRYPT_FREE(cd2); + + /* (snapshot-like case) */ + /* try to refresh almost identical device (differs only in major:minor of data device) */ + OK_(crypt_init(&cd2, DMDIR L_DEVICE_WRONG)); + OK_(set_fast_pbkdf(cd2)); + OK_(crypt_format(cd2, CRYPT_LUKS2, cipher, mode, crypt_get_uuid(cd), key, 32, NULL)); + OK_(crypt_keyslot_add_by_volume_key(cd2, CRYPT_ANY_SLOT, key, 32, "aaa", 3)); + FAIL_(crypt_activate_by_passphrase(cd2, CDEVICE_1, 0, "aaa", 3, CRYPT_ACTIVATE_REFRESH), "Refreshed dm-crypt mapped over mismatching data device"); + + OK_(crypt_deactivate(cd, CDEVICE_1)); + + CRYPT_FREE(cd); + CRYPT_FREE(cd2); + + _cleanup_dmdevices(); +} + +static void Luks2Flags(void) +{ + uint32_t flags = 42; + + OK_(crypt_init(&cd, DEVICE_1)); + OK_(crypt_load(cd, CRYPT_LUKS2, NULL)); + + /* check library erase passed variable on success when no flags set */ + OK_(crypt_persistent_flags_get(cd, CRYPT_FLAGS_ACTIVATION, &flags)); + EQ_(flags, 0); + + /* check set and get behave as expected */ + flags = CRYPT_ACTIVATE_ALLOW_DISCARDS; + OK_(crypt_persistent_flags_set(cd, CRYPT_FLAGS_ACTIVATION, flags)); + flags = 0; + OK_(crypt_persistent_flags_get(cd, CRYPT_FLAGS_ACTIVATION, &flags)); + EQ_(flags, CRYPT_ACTIVATE_ALLOW_DISCARDS); + + flags = CRYPT_ACTIVATE_ALLOW_DISCARDS | CRYPT_ACTIVATE_SUBMIT_FROM_CRYPT_CPUS; + OK_(crypt_persistent_flags_set(cd, CRYPT_FLAGS_ACTIVATION, flags)); + flags = (uint32_t)~0; + OK_(crypt_persistent_flags_get(cd, CRYPT_FLAGS_ACTIVATION, &flags)); + EQ_(flags,CRYPT_ACTIVATE_ALLOW_DISCARDS | CRYPT_ACTIVATE_SUBMIT_FROM_CRYPT_CPUS); + + CRYPT_FREE(cd); +} + +static int test_progress(uint64_t size, uint64_t offset, void *usrptr) +{ + while (--test_progress_steps) + return 0; + return 1; +} + +static void Luks2Reencryption(void) +{ +/* reencryption currently depends on kernel keyring support */ +#if KERNEL_KEYRING + /* NOTES: + * - reencryption requires luks2 parameters. can we avoid it? + */ + uint32_t getflags; + uint64_t r_header_size, r_size_1; + struct crypt_active_device cad; + struct crypt_pbkdf_type pbkdf = { + .type = CRYPT_KDF_ARGON2I, + .hash = "sha256", + .parallel_threads = 1, + .max_memory_kb = 128, + .iterations = 4, + .flags = CRYPT_PBKDF_NO_BENCHMARK + }; + struct crypt_params_luks2 params2 = { + .pbkdf = &pbkdf, + .sector_size = 4096 + }; + struct crypt_params_reencrypt retparams = {}, rparams = { + .direction = CRYPT_REENCRYPT_FORWARD, + .resilience = "checksum", + .hash = "sha1", + .luks2 = ¶ms2, + }; + + /* reencryption currently depends on kernel keyring support in dm-crypt */ + if (!t_dm_crypt_keyring_support()) + return; + + /* Cannot use Argon2 in FIPS */ + if (_fips_mode) { + pbkdf.type = CRYPT_KDF_PBKDF2; + pbkdf.parallel_threads = 0; + pbkdf.max_memory_kb = 0; + pbkdf.iterations = 1000; + } + + 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_header_size + 16)); + + /* create device */ + OK_(crypt_init(&cd, DMDIR L_DEVICE_OK)); + OK_(crypt_format(cd, CRYPT_LUKS2, "aes", "cbc-essiv:sha256", NULL, NULL, 32, ¶ms2)); + OK_(crypt_set_pbkdf_type(cd, &pbkdf)); + EQ_(crypt_keyslot_add_by_volume_key(cd, 21, NULL, 32, PASSPHRASE, strlen(PASSPHRASE)), 21); + + /* add several unbound keys */ + EQ_(crypt_keyslot_add_by_key(cd, 9, NULL, 64, PASSPHRASE, strlen(PASSPHRASE), CRYPT_VOLUME_KEY_NO_SEGMENT), 9); + EQ_(crypt_keyslot_add_by_key(cd, 10, NULL, 32, PASSPHRASE, strlen(PASSPHRASE), CRYPT_VOLUME_KEY_NO_SEGMENT), 10); + EQ_(crypt_keyslot_add_by_key(cd, 11, NULL, 42, PASSPHRASE, strlen(PASSPHRASE), CRYPT_VOLUME_KEY_NO_SEGMENT), 11); + EQ_(crypt_keyslot_status(cd, 21), CRYPT_SLOT_ACTIVE_LAST); + + /* test cipher parameters validation */ + FAIL_(crypt_reencrypt_init_by_passphrase(cd, NULL, PASSPHRASE, strlen(PASSPHRASE), 21, 11, "aes", "xts-plain64", &rparams), "Cipher not compatible with new volume key size."); + FAIL_(crypt_reencrypt_init_by_passphrase(cd, NULL, PASSPHRASE, strlen(PASSPHRASE), 21, 10, "tHeHamstErciphErr", "xts-plain64", &rparams), "Wrong cipher."); + FAIL_(crypt_reencrypt_init_by_passphrase(cd, NULL, PASSPHRASE, strlen(PASSPHRASE), 21, 10, "aes", "HamSterMoOode-plain64", &rparams), "Wrong mode."); + + /* test reencryption flags */ + rparams.flags = CRYPT_REENCRYPT_RESUME_ONLY; + FAIL_(crypt_reencrypt_init_by_passphrase(cd, NULL, PASSPHRASE, strlen(PASSPHRASE), 21, 9, "aes", "xts-plain64", &rparams), "Reencryption not initialized."); + rparams.flags |= CRYPT_REENCRYPT_INITIALIZE_ONLY; + FAIL_(crypt_reencrypt_init_by_passphrase(cd, NULL, PASSPHRASE, strlen(PASSPHRASE), 21, 9, "aes", "xts-plain64", &rparams), "Invalid flags combination."); + + OK_(crypt_persistent_flags_get(cd, CRYPT_FLAGS_REQUIREMENTS, &getflags)); + EQ_(getflags & CRYPT_REQUIREMENT_ONLINE_REENCRYPT, 0); + FAIL_(crypt_reencrypt(cd, NULL), "Reencryption context not initialized."); + + rparams.flags &= ~CRYPT_REENCRYPT_RESUME_ONLY; + OK_(crypt_reencrypt_init_by_passphrase(cd, NULL, PASSPHRASE, strlen(PASSPHRASE), 21, 9, "aes", "xts-plain64", &rparams)); + OK_(crypt_persistent_flags_get(cd, CRYPT_FLAGS_REQUIREMENTS, &getflags)); + EQ_(getflags & CRYPT_REQUIREMENT_ONLINE_REENCRYPT, CRYPT_REQUIREMENT_ONLINE_REENCRYPT); + + /* check reencrypt status is correct */ + EQ_(crypt_reencrypt_status(cd, &retparams), CRYPT_REENCRYPT_CLEAN); + EQ_(retparams.mode, CRYPT_REENCRYPT_REENCRYPT); + EQ_(retparams.direction, CRYPT_REENCRYPT_FORWARD); + EQ_(retparams.data_shift, 0); + EQ_(retparams.device_size, 0); + + /* check reencryption flag in metadata */ + OK_(crypt_persistent_flags_get(cd, CRYPT_FLAGS_REQUIREMENTS, &getflags)); + EQ_(getflags & CRYPT_REQUIREMENT_ONLINE_REENCRYPT, CRYPT_REQUIREMENT_ONLINE_REENCRYPT); + + /* some parameters are expected to change immediately after reencryption initialization */ + EQ_(crypt_get_volume_key_size(cd), 64); + OK_(strcmp(crypt_get_cipher_mode(cd), "xts-plain64")); + EQ_(crypt_get_sector_size(cd), 4096); + /* reencrypt keyslot must be unbound */ + EQ_(crypt_keyslot_status(cd, 0), CRYPT_SLOT_UNBOUND); + /* keyslot assigned to new segment is switched to last active */ + EQ_(crypt_keyslot_status(cd, 9), CRYPT_SLOT_ACTIVE_LAST); + /* keyslot assigned to old segment remains active */ + EQ_(crypt_keyslot_status(cd, 21), CRYPT_SLOT_ACTIVE); + + FAIL_(crypt_reencrypt_init_by_passphrase(cd, NULL, PASSPHRASE, strlen(PASSPHRASE), 21, 10, "aes", "xts-plain", &rparams), "Reencryption already initialized."); + + rparams.flags = 0; + OK_(crypt_reencrypt_init_by_passphrase(cd, NULL, PASSPHRASE, strlen(PASSPHRASE), 21, 9, "aes", "xts-plain64", &rparams)); + OK_(crypt_reencrypt(cd, NULL)); + + /* check keyslots are reassigned to segment after reencryption */ + EQ_(crypt_keyslot_status(cd, 0), CRYPT_SLOT_INACTIVE); + EQ_(crypt_keyslot_status(cd, 9), CRYPT_SLOT_ACTIVE_LAST); + EQ_(crypt_keyslot_status(cd, 10), CRYPT_SLOT_UNBOUND); + EQ_(crypt_keyslot_status(cd, 11), CRYPT_SLOT_UNBOUND); + EQ_(crypt_keyslot_status(cd, 21), CRYPT_SLOT_INACTIVE); + + EQ_(crypt_keyslot_add_by_key(cd, 21, NULL, 32, PASSPHRASE, strlen(PASSPHRASE), CRYPT_VOLUME_KEY_NO_SEGMENT), 21); + rparams.flags = CRYPT_REENCRYPT_INITIALIZE_ONLY; + params2.sector_size = 512; + OK_(crypt_reencrypt_init_by_passphrase(cd, NULL, PASSPHRASE, strlen(PASSPHRASE), 9, 21, "aes", "xts-plain64", &rparams)); + + /* fixed device size parameter impact */ + rparams.flags = CRYPT_REENCRYPT_RESUME_ONLY; + rparams.device_size = 24; + FAIL_(crypt_reencrypt_init_by_passphrase(cd, NULL, PASSPHRASE, strlen(PASSPHRASE), 9, 21, "aes", "xts-plain64", &rparams), "Invalid device size."); + OK_(crypt_persistent_flags_get(cd, CRYPT_FLAGS_REQUIREMENTS, &getflags)); + EQ_(getflags & CRYPT_REQUIREMENT_ONLINE_REENCRYPT, CRYPT_REQUIREMENT_ONLINE_REENCRYPT); + rparams.device_size = 15; + FAIL_(crypt_reencrypt_init_by_passphrase(cd, NULL, PASSPHRASE, strlen(PASSPHRASE), 9, 21, "aes", "xts-plain64", &rparams), "Invalid device size alignment."); + OK_(crypt_persistent_flags_get(cd, CRYPT_FLAGS_REQUIREMENTS, &getflags)); + EQ_(getflags & CRYPT_REQUIREMENT_ONLINE_REENCRYPT, CRYPT_REQUIREMENT_ONLINE_REENCRYPT); + FAIL_(crypt_reencrypt(cd, NULL), "Reencryption context not initialized."); + rparams.device_size = 16; + OK_(crypt_reencrypt_init_by_passphrase(cd, NULL, PASSPHRASE, strlen(PASSPHRASE), 9, 21, "aes", "xts-plain64", &rparams)); + OK_(crypt_reencrypt(cd, NULL)); + OK_(crypt_persistent_flags_get(cd, CRYPT_FLAGS_REQUIREMENTS, &getflags)); + EQ_(getflags & CRYPT_REQUIREMENT_ONLINE_REENCRYPT, 0); + + /* limited hotzone size parameter impact */ + EQ_(crypt_keyslot_add_by_key(cd, 9, NULL, 64, PASSPHRASE, strlen(PASSPHRASE), CRYPT_VOLUME_KEY_NO_SEGMENT), 9); + rparams.flags = CRYPT_REENCRYPT_INITIALIZE_ONLY; + rparams.device_size = 0; + params2.sector_size = 4096; + OK_(crypt_reencrypt_init_by_passphrase(cd, NULL, PASSPHRASE, strlen(PASSPHRASE), 21, 9, "aes", "xts-plain64", &rparams)); + + /* max hotzone size parameter impact */ + rparams.flags = CRYPT_REENCRYPT_RESUME_ONLY; + rparams.max_hotzone_size = 1; + FAIL_(crypt_reencrypt_init_by_passphrase(cd, NULL, PASSPHRASE, strlen(PASSPHRASE), 21, 9, "aes", "xts-plain64", &rparams), "Invalid hotzone size alignment."); + rparams.max_hotzone_size = 24; /* should be ok. Device size is 16 sectors and the parameter defines upper limit, not lower */ + OK_(crypt_reencrypt_init_by_passphrase(cd, NULL, PASSPHRASE, strlen(PASSPHRASE), 21, 9, "aes", "xts-plain64", &rparams)); + rparams.max_hotzone_size = 8; + OK_(crypt_reencrypt_init_by_passphrase(cd, NULL, PASSPHRASE, strlen(PASSPHRASE), 21, 9, "aes", "xts-plain64", &rparams)); + CRYPT_FREE(cd); + + OK_(crypt_init(&cd, DMDIR L_DEVICE_OK)); + OK_(crypt_load(cd, CRYPT_LUKS2, NULL)); + OK_(crypt_set_pbkdf_type(cd, &pbkdf)); + + rparams.max_hotzone_size = 0; + rparams.resilience = "haMster"; + FAIL_(crypt_reencrypt_init_by_passphrase(cd, NULL, PASSPHRASE, strlen(PASSPHRASE), 21, 9, "aes", "xts-plain64", &rparams), "Invalid resilience mode."); + rparams.resilience = "checksum"; + rparams.hash = "hamSter"; + FAIL_(crypt_reencrypt_init_by_passphrase(cd, NULL, PASSPHRASE, strlen(PASSPHRASE), 21, 9, "aes", "xts-plain64", &rparams), "Invalid resilience hash."); + + rparams.hash = "sha1"; + OK_(crypt_reencrypt_init_by_passphrase(cd, NULL, PASSPHRASE, strlen(PASSPHRASE), 21, 9, "aes", "xts-plain64", &rparams)); + OK_(crypt_reencrypt(cd, NULL)); + + /* FIXME: this is a bug, but not critical (data shift parameter is ignored after initialization) */ + //rparams.data_shift = 8; + //FAIL_(crypt_reencrypt_init_by_passphrase(cd, NULL, PASSPHRASE, strlen(PASSPHRASE), 21, 9, "aes", "xts-plain64", &rparams), "Invalid reencryption parameters."); + + EQ_(crypt_keyslot_add_by_key(cd, 21, NULL, 32, PASSPHRASE, strlen(PASSPHRASE), CRYPT_VOLUME_KEY_NO_SEGMENT), 21); + rparams.flags = 0; + rparams.resilience = "none"; + rparams.max_hotzone_size = 2048; + /* online reencryption on inactive device */ + FAIL_(crypt_reencrypt_init_by_passphrase(cd, CDEVICE_1, PASSPHRASE, strlen(PASSPHRASE), 9, 21, "aes", "xts-plain64", &rparams), "Device is not active."); + /* FIXME: this is minor bug. In fact we need only key from keyslot 9 */ + //EQ_(crypt_activate_by_passphrase(cd, CDEVICE_1, 9, PASSPHRASE, strlen(PASSPHRASE), 0), 9); + NOTFAIL_(crypt_activate_by_passphrase(cd, CDEVICE_1, CRYPT_ANY_SLOT, PASSPHRASE, strlen(PASSPHRASE), 0), "Failed to activate device."); + /* offline reencryption on active device */ + FAIL_(crypt_reencrypt_init_by_passphrase(cd, NULL, PASSPHRASE, strlen(PASSPHRASE), 9, 21, "aes", "xts-plain64", &rparams), "Device mounted or active."); + OK_(crypt_deactivate(cd, CDEVICE_1)); + /* Wrong context checks */ + OK_(crypt_reencrypt_init_by_passphrase(cd, NULL, PASSPHRASE, strlen(PASSPHRASE), 9, 21, "aes", "xts-plain64", &rparams)); + /* cd is ready for reencryption */ + OK_(crypt_init(&cd2, DMDIR L_DEVICE_OK)); + OK_(crypt_load(cd2, CRYPT_LUKS2, NULL)); + rparams.flags = CRYPT_REENCRYPT_RESUME_ONLY; + FAIL_(crypt_reencrypt_init_by_passphrase(cd2, NULL, PASSPHRASE, strlen(PASSPHRASE), 21, 9, "aes", "xts-plain64", &rparams), "Reencryption already running."); + rparams.flags = 0; + FAIL_(crypt_reencrypt_init_by_passphrase(cd2, NULL, PASSPHRASE, strlen(PASSPHRASE), 21, 9, "aes", "xts-plain64", &rparams), "Reencryption already running."); + FAIL_(crypt_reencrypt(cd2, NULL), "Invalid reencryption context."); + OK_(crypt_persistent_flags_get(cd, CRYPT_FLAGS_REQUIREMENTS, &getflags)); + EQ_(getflags & CRYPT_REQUIREMENT_ONLINE_REENCRYPT, CRYPT_REQUIREMENT_ONLINE_REENCRYPT); + OK_(crypt_persistent_flags_get(cd2, CRYPT_FLAGS_REQUIREMENTS, &getflags)); + EQ_(getflags & CRYPT_REQUIREMENT_ONLINE_REENCRYPT, CRYPT_REQUIREMENT_ONLINE_REENCRYPT); + EQ_(crypt_reencrypt_status(cd, NULL), CRYPT_REENCRYPT_CLEAN); + EQ_(crypt_reencrypt_status(cd2, NULL), CRYPT_REENCRYPT_CLEAN); + FAIL_(crypt_activate_by_passphrase(cd2, CDEVICE_1, CRYPT_ANY_SLOT, PASSPHRASE, strlen(PASSPHRASE), 0), "Reencryption already in progress."); + FAIL_(crypt_activate_by_passphrase(cd, CDEVICE_1, CRYPT_ANY_SLOT, PASSPHRASE, strlen(PASSPHRASE), 0), "Reencryption already in progress."); + OK_(crypt_reencrypt(cd, NULL)); + CRYPT_FREE(cd); + CRYPT_FREE(cd2); + + /* Partial device reencryption parameter */ + params2.sector_size = 512; + OK_(crypt_init(&cd, DMDIR L_DEVICE_OK)); + OK_(crypt_format(cd, CRYPT_LUKS2, "aes", "cbc-essiv:sha256", NULL, NULL, 32, ¶ms2)); + OK_(crypt_set_pbkdf_type(cd, &pbkdf)); + EQ_(crypt_keyslot_add_by_volume_key(cd, 0, NULL, 32, PASSPHRASE, strlen(PASSPHRASE)), 0); + EQ_(crypt_keyslot_add_by_key(cd, 1, NULL, 64, PASSPHRASE, strlen(PASSPHRASE), CRYPT_VOLUME_KEY_NO_SEGMENT), 1); + + rparams.device_size = 2; + rparams.max_hotzone_size = 1; + rparams.resilience = "none"; + EQ_(crypt_reencrypt_init_by_passphrase(cd, NULL, PASSPHRASE, strlen(PASSPHRASE), 0, 1, "aes", "xts-plain64", &rparams), 2); + + /* interrupt reencryption after 'test_progress_steps' */ + test_progress_steps = 1; + OK_(crypt_reencrypt(cd, &test_progress)); + EQ_(crypt_reencrypt_status(cd, NULL), CRYPT_REENCRYPT_CLEAN); + + NOTFAIL_(crypt_activate_by_passphrase(cd, CDEVICE_1, CRYPT_ANY_SLOT, PASSPHRASE, strlen(PASSPHRASE), 0), "Could not activate device in reencryption."); + OK_(crypt_get_active_device(cd, CDEVICE_1, &cad)); + EQ_(cad.size, 2); + EQ_(cad.offset, r_header_size); + /* TODO: this should work in future releases unless reencryption process is running */ + FAIL_(crypt_resize(cd, CDEVICE_1, 1), "Device in reencryption."); + FAIL_(crypt_resize(cd, CDEVICE_1, 0), "Device in reencryption."); + + rparams.max_hotzone_size = 0; + rparams.device_size = 3; + FAIL_(crypt_reencrypt_init_by_passphrase(cd, CDEVICE_1, PASSPHRASE, strlen(PASSPHRASE), 0, 1, "aes", "xts-plain64", &rparams), "Invalid device size."); + crypt_deactivate(cd, CDEVICE_1); + FAIL_(crypt_reencrypt_init_by_passphrase(cd, NULL, PASSPHRASE, strlen(PASSPHRASE), 0, 1, "aes", "xts-plain64", &rparams), "Invalid device size."); + rparams.device_size = 2; + rparams.flags = CRYPT_REENCRYPT_RESUME_ONLY; + NOTFAIL_(crypt_reencrypt_init_by_passphrase(cd, NULL, PASSPHRASE, strlen(PASSPHRASE), 0, 1, "aes", "xts-plain64", &rparams), "Failed to initialize reencryption."); + OK_(crypt_reencrypt(cd, NULL)); + EQ_(crypt_reencrypt_status(cd, NULL), CRYPT_REENCRYPT_NONE); + EQ_(crypt_activate_by_passphrase(cd, CDEVICE_1, 1, PASSPHRASE, strlen(PASSPHRASE), 0), 1); + OK_(crypt_get_active_device(cd, CDEVICE_1, &cad)); + /* after reencryption use whole device again */ + EQ_(cad.size, 16); + OK_(crypt_deactivate(cd, CDEVICE_1)); + + /* Reencrypt device with wrong size */ + EQ_(crypt_keyslot_add_by_key(cd, 0, NULL, 32, PASSPHRASE, strlen(PASSPHRASE), CRYPT_VOLUME_KEY_NO_SEGMENT), 0); + EQ_(crypt_activate_by_passphrase(cd, CDEVICE_1, 1, PASSPHRASE, strlen(PASSPHRASE), 0), 1); + OK_(crypt_resize(cd, CDEVICE_1, 7)); + rparams.device_size = 0; + rparams.flags = 0; + params2.sector_size = 4096; + FAIL_(crypt_reencrypt_init_by_passphrase(cd, CDEVICE_1, PASSPHRASE, strlen(PASSPHRASE), 1, 0, "aes", "xts-plain64", &rparams), "Active device size is not aligned to new sector size."); + rparams.device_size = 8; + FAIL_(crypt_reencrypt_init_by_passphrase(cd, NULL, PASSPHRASE, strlen(PASSPHRASE), 1, 0, "aes", "xts-plain64", &rparams), "Reduced reencryption size does not match active device."); + /* FIXME: allow after resize in reencryption is supported */ + //NOTFAIL_(crypt_activate_by_passphrase(cd, NULL, CRYPT_ANY_SLOT, PASSPHRASE, strlen(PASSPHRASE), CRYPT_ACTIVATE_ALLOW_UNBOUND_KEY | CRYPT_ACTIVATE_KEYRING_KEY), "Failed to load keys."); + // OK_(crypt_resize(cd, CDEVICE_1, 8)); + OK_(crypt_deactivate(cd, CDEVICE_1)); + CRYPT_FREE(cd); + + params2.sector_size = 512; + OK_(crypt_init(&cd, DMDIR L_DEVICE_OK)); + OK_(crypt_init(&cd2, DMDIR H_DEVICE)); + OK_(crypt_set_data_offset(cd2, r_header_size - 8)); + OK_(crypt_set_pbkdf_type(cd, &pbkdf)); + OK_(crypt_set_pbkdf_type(cd2, &pbkdf)); + OK_(crypt_format(cd, CRYPT_LUKS2, "aes", "cbc-essiv:sha256", NULL, NULL, 32, ¶ms2)); + OK_(crypt_format(cd2, CRYPT_LUKS2, "aes", "cbc-essiv:sha256", NULL, NULL, 32, ¶ms2)); + EQ_(crypt_keyslot_add_by_volume_key(cd, 0, NULL, 32, PASSPHRASE, strlen(PASSPHRASE)), 0); + EQ_(crypt_keyslot_add_by_volume_key(cd2, 0, NULL, 32, PASSPHRASE, strlen(PASSPHRASE)), 0); + EQ_(crypt_keyslot_add_by_key(cd, 1, NULL, 64, PASSPHRASE, strlen(PASSPHRASE), CRYPT_VOLUME_KEY_NO_SEGMENT), 1); + EQ_(crypt_keyslot_add_by_key(cd2, 1, NULL, 64, PASSPHRASE, strlen(PASSPHRASE), CRYPT_VOLUME_KEY_NO_SEGMENT), 1); + EQ_(crypt_activate_by_passphrase(cd, CDEVICE_1, 0, PASSPHRASE, strlen(PASSPHRASE), 0), 0); + EQ_(crypt_activate_by_passphrase(cd2, CDEVICE_2, 0, PASSPHRASE, strlen(PASSPHRASE), 0), 0); + rparams.flags = CRYPT_REENCRYPT_INITIALIZE_ONLY; + EQ_(crypt_reencrypt_init_by_passphrase(cd, NULL, PASSPHRASE, strlen(PASSPHRASE), 0, 1, "aes", "xts-plain64", &rparams), 2); + EQ_(crypt_reencrypt_init_by_passphrase(cd2, NULL, PASSPHRASE, strlen(PASSPHRASE), 0, 1, "aes", "xts-plain64", &rparams), 2); + rparams.flags = CRYPT_REENCRYPT_RESUME_ONLY; + /* reference wrong device in active device name */ + FAIL_(crypt_reencrypt_init_by_passphrase(cd, CDEVICE_2, PASSPHRASE, strlen(PASSPHRASE), 0, 1, "aes", "xts-plain64", &rparams), "Wrong device."); + FAIL_(crypt_reencrypt_init_by_passphrase(cd2, CDEVICE_1, PASSPHRASE, strlen(PASSPHRASE), 0, 1, "aes", "xts-plain64", &rparams), "Wrong device."); + EQ_(crypt_reencrypt_init_by_passphrase(cd2, CDEVICE_2, PASSPHRASE, strlen(PASSPHRASE), 0, 1, "aes", "xts-plain64", &rparams), 2); + FAIL_(crypt_set_data_device(cd2, DMDIR L_DEVICE_OK), "Device in reencryption."); + OK_(crypt_deactivate(cd, CDEVICE_1)); + OK_(crypt_deactivate(cd2, CDEVICE_2)); + CRYPT_FREE(cd); + CRYPT_FREE(cd2); + + /* data shift related tests */ + params2.sector_size = 512; + OK_(crypt_init(&cd, DMDIR L_DEVICE_OK)); + OK_(crypt_format(cd, CRYPT_LUKS2, "aes", "cbc-essiv:sha256", NULL, NULL, 32, ¶ms2)); + OK_(crypt_set_pbkdf_type(cd, &pbkdf)); + EQ_(crypt_keyslot_add_by_volume_key(cd, 0, NULL, 32, PASSPHRASE, strlen(PASSPHRASE)), 0); + EQ_(crypt_keyslot_add_by_key(cd, 1, NULL, 64, PASSPHRASE, strlen(PASSPHRASE), CRYPT_VOLUME_KEY_NO_SEGMENT), 1); + memset(&rparams, 0, sizeof(rparams)); + rparams.direction = CRYPT_REENCRYPT_BACKWARD; + rparams.resilience = "datashift"; + rparams.data_shift = 8; + rparams.flags = CRYPT_REENCRYPT_INITIALIZE_ONLY; + rparams.luks2 = ¶ms2; + EQ_(crypt_reencrypt_init_by_passphrase(cd, NULL, PASSPHRASE, strlen(PASSPHRASE), 0, 1, "aes", "xts-plain64", &rparams), 2); + EQ_(crypt_reencrypt_status(cd, &retparams), CRYPT_REENCRYPT_CLEAN); + EQ_(retparams.data_shift, 8); + EQ_(retparams.mode, CRYPT_REENCRYPT_REENCRYPT); + OK_(strcmp(retparams.resilience, "datashift")); + EQ_(crypt_get_data_offset(cd), 32776); + rparams.flags = CRYPT_REENCRYPT_RESUME_ONLY; + EQ_(crypt_reencrypt_init_by_passphrase(cd, NULL, PASSPHRASE, strlen(PASSPHRASE), 0, 1, "aes", "xts-plain64", &rparams), 2); + OK_(crypt_reencrypt(cd, NULL)); + CRYPT_FREE(cd); + OK_(crypt_init(&cd, DMDIR L_DEVICE_OK)); + OK_(crypt_set_pbkdf_type(cd, &pbkdf)); + OK_(crypt_load(cd, CRYPT_LUKS2, NULL)); + EQ_(crypt_activate_by_passphrase(cd, CDEVICE_1, 1, PASSPHRASE, strlen(PASSPHRASE), 0), 1); + OK_(crypt_get_active_device(cd, CDEVICE_1, &cad)); + EQ_(cad.size, 8); + EQ_(crypt_get_data_offset(cd), 32776); + OK_(crypt_deactivate(cd, CDEVICE_1)); + rparams.flags = 0; + EQ_(crypt_keyslot_add_by_key(cd, 0, NULL, 32, PASSPHRASE, strlen(PASSPHRASE), CRYPT_VOLUME_KEY_NO_SEGMENT), 0); + FAIL_(crypt_reencrypt_init_by_passphrase(cd, NULL, PASSPHRASE, strlen(PASSPHRASE), 1, 0, "aes", "xts-plain64", &rparams), "Device is too small."); + CRYPT_FREE(cd); + // BUG: We need reencrypt abort flag + /* it fails, but it's already initialized and we have no way to abort yet */ + OK_(crypt_init(&cd, DMDIR L_DEVICE_OK)); + OK_(crypt_format(cd, CRYPT_LUKS2, "aes", "cbc-essiv:sha256", NULL, NULL, 32, ¶ms2)); + OK_(crypt_set_pbkdf_type(cd, &pbkdf)); + EQ_(crypt_keyslot_add_by_volume_key(cd, 1, NULL, 64, PASSPHRASE, strlen(PASSPHRASE)), 1); + EQ_(crypt_keyslot_add_by_key(cd, 0, NULL, 32, PASSPHRASE, strlen(PASSPHRASE), CRYPT_VOLUME_KEY_NO_SEGMENT), 0); + rparams.direction = CRYPT_REENCRYPT_FORWARD; + rparams.resilience = "datashift"; + rparams.data_shift = 8; + rparams.flags = CRYPT_REENCRYPT_INITIALIZE_ONLY; + EQ_(crypt_reencrypt_init_by_passphrase(cd, NULL, PASSPHRASE, strlen(PASSPHRASE), 1, 0, "aes", "xts-plain64", &rparams), 2); + EQ_(crypt_reencrypt_status(cd, &retparams), CRYPT_REENCRYPT_CLEAN); + EQ_(retparams.data_shift, 8); + EQ_(retparams.mode, CRYPT_REENCRYPT_REENCRYPT); + OK_(strcmp(retparams.resilience, "datashift")); + EQ_(crypt_get_data_offset(cd), 32760); + rparams.flags = CRYPT_REENCRYPT_RESUME_ONLY; + EQ_(crypt_reencrypt_init_by_passphrase(cd, NULL, PASSPHRASE, strlen(PASSPHRASE), 1, 0, "aes", "xts-plain64", &rparams), 2); + OK_(crypt_reencrypt(cd, NULL)); + CRYPT_FREE(cd); + OK_(crypt_init(&cd, DMDIR L_DEVICE_OK)); + OK_(crypt_load(cd, CRYPT_LUKS2, NULL)); + EQ_(crypt_activate_by_passphrase(cd, CDEVICE_1, 0, PASSPHRASE, strlen(PASSPHRASE), 0), 0); + OK_(crypt_get_active_device(cd, CDEVICE_1, &cad)); + EQ_(cad.size, 24); + EQ_(crypt_get_data_offset(cd), 32760); + OK_(crypt_deactivate(cd, CDEVICE_1)); + CRYPT_FREE(cd); + + /* data shift with online device */ + OK_(crypt_init(&cd, DMDIR L_DEVICE_OK)); + OK_(crypt_format(cd, CRYPT_LUKS2, "aes", "cbc-essiv:sha256", NULL, NULL, 32, ¶ms2)); + OK_(crypt_set_pbkdf_type(cd, &pbkdf)); + EQ_(crypt_keyslot_add_by_volume_key(cd, 0, NULL, 32, PASSPHRASE, strlen(PASSPHRASE)), 0); + EQ_(crypt_keyslot_add_by_key(cd, 1, NULL, 64, PASSPHRASE, strlen(PASSPHRASE), CRYPT_VOLUME_KEY_NO_SEGMENT), 1); + rparams.direction = CRYPT_REENCRYPT_BACKWARD; + rparams.resilience = "datashift"; + rparams.data_shift = 8; + rparams.flags = 0; + EQ_(crypt_activate_by_passphrase(cd, CDEVICE_1, 0, PASSPHRASE, strlen(PASSPHRASE), 0), 0); + FAIL_(crypt_reencrypt_init_by_passphrase(cd, CDEVICE_1, PASSPHRASE, strlen(PASSPHRASE), 0, 1, "aes", "xts-plain64", &rparams), "Active device too large."); + OK_(crypt_deactivate(cd, CDEVICE_1)); + NOTFAIL_(crypt_activate_by_passphrase(cd, CDEVICE_1, CRYPT_ANY_SLOT, PASSPHRASE, strlen(PASSPHRASE), 0), "Failed to activate device in reencryption."); + OK_(crypt_get_active_device(cd, CDEVICE_1, &cad)); + EQ_(cad.size, 8); + rparams.flags = CRYPT_REENCRYPT_RESUME_ONLY; + EQ_(crypt_reencrypt_init_by_passphrase(cd, CDEVICE_1, PASSPHRASE, strlen(PASSPHRASE), 0, 1, "aes", "xts-plain64", &rparams), 2); + OK_(crypt_reencrypt(cd, NULL)); + OK_(crypt_deactivate(cd, CDEVICE_1)); + CRYPT_FREE(cd); + + _cleanup_dmdevices(); + + /* encryption with datashift and moved segment (limit values for data shift) */ + OK_(create_dmdevice_over_loop(H_DEVICE, r_header_size)); + OK_(create_dmdevice_over_loop(L_DEVICE_OK, 12*1024*2)); + + OK_(crypt_init(&cd, DMDIR H_DEVICE)); + + memset(&rparams, 0, sizeof(rparams)); + params2.sector_size = 512; + params2.data_device = DMDIR L_DEVICE_OK; + rparams.mode = CRYPT_REENCRYPT_ENCRYPT; + rparams.direction = CRYPT_REENCRYPT_BACKWARD; + rparams.resilience = "datashift"; + rparams.data_shift = 8192; + rparams.luks2 = ¶ms2; + rparams.flags = CRYPT_REENCRYPT_INITIALIZE_ONLY | CRYPT_REENCRYPT_MOVE_FIRST_SEGMENT; + OK_(crypt_set_data_offset(cd, 8192)); + OK_(crypt_format(cd, CRYPT_LUKS2, "aes", "xts-plain64", NULL, NULL, 64, ¶ms2)); + EQ_(crypt_keyslot_add_by_volume_key(cd, 30, NULL, 64, PASSPHRASE, strlen(PASSPHRASE)), 30); + EQ_(crypt_reencrypt_init_by_passphrase(cd, NULL, PASSPHRASE, strlen(PASSPHRASE), CRYPT_ANY_SLOT, 30, "aes", "xts-plain64", &rparams), 0); + CRYPT_FREE(cd); + OK_(crypt_init(&cd, DMDIR L_DEVICE_OK)); + OK_(crypt_header_restore(cd, CRYPT_LUKS2, DMDIR H_DEVICE)); + CRYPT_FREE(cd); + OK_(crypt_init(&cd, DMDIR L_DEVICE_OK)); + OK_(crypt_load(cd, CRYPT_LUKS2, NULL)); + EQ_(crypt_reencrypt_status(cd, &retparams), CRYPT_REENCRYPT_CLEAN); + EQ_(retparams.mode, CRYPT_REENCRYPT_ENCRYPT); + OK_(strcmp(retparams.resilience, "datashift")); + EQ_(retparams.data_shift, 8192); + EQ_(retparams.flags & CRYPT_REENCRYPT_MOVE_FIRST_SEGMENT, CRYPT_REENCRYPT_MOVE_FIRST_SEGMENT); + EQ_(crypt_get_data_offset(cd), 8192); + rparams.flags = CRYPT_REENCRYPT_RESUME_ONLY; + EQ_(crypt_reencrypt_init_by_passphrase(cd, NULL, PASSPHRASE, strlen(PASSPHRASE), CRYPT_ANY_SLOT, 30, NULL, NULL, &rparams), 0); + OK_(crypt_reencrypt(cd, NULL)); + CRYPT_FREE(cd); + + _cleanup_dmdevices(); + OK_(create_dmdevice_over_loop(H_DEVICE, r_header_size)); + OK_(create_dmdevice_over_loop(L_DEVICE_OK, 12*1024*2+1)); + + /* encryption with datashift and moved segment (data shift + 1 sector) */ + OK_(crypt_init(&cd, DMDIR H_DEVICE)); + rparams.flags = CRYPT_REENCRYPT_INITIALIZE_ONLY | CRYPT_REENCRYPT_MOVE_FIRST_SEGMENT; + OK_(crypt_set_data_offset(cd, 8192)); + OK_(crypt_format(cd, CRYPT_LUKS2, "aes", "xts-plain64", NULL, NULL, 64, ¶ms2)); + EQ_(crypt_keyslot_add_by_volume_key(cd, 30, NULL, 64, PASSPHRASE, strlen(PASSPHRASE)), 30); + EQ_(crypt_reencrypt_init_by_passphrase(cd, NULL, PASSPHRASE, strlen(PASSPHRASE), CRYPT_ANY_SLOT, 30, "aes", "xts-plain64", &rparams), 0); + CRYPT_FREE(cd); + OK_(crypt_init(&cd, DMDIR L_DEVICE_OK)); + OK_(crypt_header_restore(cd, CRYPT_LUKS2, DMDIR H_DEVICE)); + EQ_(crypt_get_data_offset(cd), 8192); + rparams.flags = CRYPT_REENCRYPT_RESUME_ONLY; + EQ_(crypt_reencrypt_init_by_passphrase(cd, NULL, PASSPHRASE, strlen(PASSPHRASE), CRYPT_ANY_SLOT, 30, NULL, NULL, &rparams), 0); + OK_(crypt_reencrypt(cd, NULL)); + CRYPT_FREE(cd); + + _cleanup_dmdevices(); + OK_(create_dmdevice_over_loop(H_DEVICE, r_header_size)); + OK_(create_dmdevice_over_loop(L_DEVICE_OK, 12*1024*2)); + + OK_(crypt_init(&cd, DMDIR H_DEVICE)); + + /* encryption with datashift and moved segment (data shift + data offset > device size) */ + memset(&rparams, 0, sizeof(rparams)); + params2.sector_size = 512; + params2.data_device = DMDIR L_DEVICE_OK; + rparams.mode = CRYPT_REENCRYPT_ENCRYPT; + rparams.direction = CRYPT_REENCRYPT_BACKWARD; + rparams.resilience = "datashift"; + rparams.data_shift = 8200; + rparams.luks2 = ¶ms2; + rparams.flags = CRYPT_REENCRYPT_INITIALIZE_ONLY | CRYPT_REENCRYPT_MOVE_FIRST_SEGMENT; + OK_(crypt_set_data_offset(cd, 8200)); + OK_(crypt_format(cd, CRYPT_LUKS2, "aes", "xts-plain64", NULL, NULL, 64, ¶ms2)); + EQ_(crypt_keyslot_add_by_volume_key(cd, 30, NULL, 64, PASSPHRASE, strlen(PASSPHRASE)), 30); + FAIL_(crypt_reencrypt_init_by_passphrase(cd, NULL, PASSPHRASE, strlen(PASSPHRASE), CRYPT_ANY_SLOT, 30, "aes", "xts-plain64", &rparams), "Data device is too small"); + EQ_(crypt_reencrypt_status(cd, NULL), CRYPT_REENCRYPT_NONE); + CRYPT_FREE(cd); + + _cleanup_dmdevices(); + OK_(create_dmdevice_over_loop(H_DEVICE, r_header_size)); + OK_(create_dmdevice_over_loop(L_DEVICE_OK, r_header_size + 1)); + + /* decryption backward */ + OK_(crypt_init(&cd, DMDIR L_DEVICE_OK)); + params2.data_device = NULL; + OK_(crypt_format(cd, CRYPT_LUKS2, "aes", "cbc-essiv:sha256", NULL, NULL, 32, ¶ms2)); + OK_(crypt_set_pbkdf_type(cd, &pbkdf)); + EQ_(crypt_keyslot_add_by_volume_key(cd, 6, NULL, 32, PASSPHRASE, strlen(PASSPHRASE)), 6); + memset(&rparams, 0, sizeof(rparams)); + rparams.mode = CRYPT_REENCRYPT_DECRYPT; + rparams.direction = CRYPT_REENCRYPT_BACKWARD; + rparams.resilience = "none"; + rparams.max_hotzone_size = 2048; + OK_(crypt_reencrypt_init_by_passphrase(cd, NULL, PASSPHRASE, strlen(PASSPHRASE), 6, CRYPT_ANY_SLOT, NULL, NULL, &rparams)); + OK_(crypt_reencrypt(cd, NULL)); + CRYPT_FREE(cd); + OK_(crypt_init(&cd, DMDIR L_DEVICE_OK)); + OK_(crypt_load(cd, CRYPT_LUKS2, NULL)); + EQ_(crypt_get_data_offset(cd), r_header_size); + EQ_(crypt_get_volume_key_size(cd), 0); + OK_(strcmp(crypt_get_cipher(cd), "cipher_null")); + CRYPT_FREE(cd); + + /* decryption forward */ + OK_(crypt_init(&cd, DMDIR L_DEVICE_OK)); + params2.data_device = NULL; + OK_(crypt_format(cd, CRYPT_LUKS2, "aes", "cbc-essiv:sha256", NULL, NULL, 32, ¶ms2)); + OK_(crypt_set_pbkdf_type(cd, &pbkdf)); + EQ_(crypt_keyslot_add_by_volume_key(cd, 6, NULL, 32, PASSPHRASE, strlen(PASSPHRASE)), 6); + memset(&rparams, 0, sizeof(rparams)); + rparams.mode = CRYPT_REENCRYPT_DECRYPT; + rparams.direction = CRYPT_REENCRYPT_FORWARD; + rparams.resilience = "none"; + rparams.max_hotzone_size = 2048; + OK_(crypt_reencrypt_init_by_passphrase(cd, NULL, PASSPHRASE, strlen(PASSPHRASE), 6, CRYPT_ANY_SLOT, NULL, NULL, &rparams)); + OK_(crypt_reencrypt(cd, NULL)); + CRYPT_FREE(cd); + + /* decryption with data shift */ + OK_(crypt_init(&cd, DMDIR L_DEVICE_OK)); + params2.data_device = NULL; + 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, 6, NULL, 32, PASSPHRASE, strlen(PASSPHRASE)), 6); + remove(BACKUP_FILE); + OK_(crypt_header_backup(cd, CRYPT_LUKS2, BACKUP_FILE)); + CRYPT_FREE(cd); + // FIXME: we need write flock + OK_(chmod(BACKUP_FILE, S_IRUSR|S_IWUSR)); + OK_(crypt_init_data_device(&cd, BACKUP_FILE, DMDIR L_DEVICE_OK)); + OK_(crypt_load(cd, CRYPT_LUKS2, NULL)); + EQ_(crypt_get_data_offset(cd), r_header_size); + memset(&rparams, 0, sizeof(rparams)); + rparams.mode = CRYPT_REENCRYPT_DECRYPT; + rparams.direction = CRYPT_REENCRYPT_FORWARD; + rparams.resilience = "datashift"; + rparams.data_shift = r_header_size; + OK_(crypt_reencrypt_init_by_passphrase(cd, NULL, PASSPHRASE, strlen(PASSPHRASE), 6, CRYPT_ANY_SLOT, NULL, NULL, &rparams)); + EQ_(crypt_get_data_offset(cd), 0); + OK_(crypt_reencrypt(cd, NULL)); + remove(BACKUP_FILE); + CRYPT_FREE(cd); + + /* online decryption with data shift (future feature) */ + OK_(crypt_init(&cd, DMDIR L_DEVICE_OK)); + params2.data_device = NULL; + 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, 6, NULL, 32, PASSPHRASE, strlen(PASSPHRASE)), 6); + EQ_(crypt_activate_by_passphrase(cd, CDEVICE_2, 6, PASSPHRASE, strlen(PASSPHRASE), 0), 6); + OK_(t_device_size(DMDIR CDEVICE_2, &r_size_1)); + EQ_(r_size_1, 512); + // create placeholder device to block automatic deactivation after decryption + OK_(_system("dmsetup create " CDEVICE_1 " --table \"0 1 linear " DMDIR CDEVICE_2 " 0\"", 1)); + remove(BACKUP_FILE); + OK_(crypt_header_backup(cd, CRYPT_LUKS2, BACKUP_FILE)); + CRYPT_FREE(cd); + // FIXME: we need write flock + OK_(chmod(BACKUP_FILE, S_IRUSR|S_IWUSR)); + OK_(crypt_init_data_device(&cd, BACKUP_FILE, DMDIR L_DEVICE_OK)); + OK_(crypt_load(cd, CRYPT_LUKS2, NULL)); + EQ_(crypt_get_data_offset(cd), r_header_size); + memset(&rparams, 0, sizeof(rparams)); + rparams.mode = CRYPT_REENCRYPT_DECRYPT; + rparams.direction = CRYPT_REENCRYPT_FORWARD; + rparams.resilience = "datashift"; + rparams.data_shift = r_header_size; + OK_(crypt_reencrypt_init_by_passphrase(cd, CDEVICE_2, PASSPHRASE, strlen(PASSPHRASE), 6, CRYPT_ANY_SLOT, NULL, NULL, &rparams)); + EQ_(crypt_get_data_offset(cd), 0); + OK_(crypt_reencrypt(cd, NULL)); + remove(BACKUP_FILE); + OK_(t_device_size(DMDIR CDEVICE_2, &r_size_1)); + EQ_(r_size_1, 512); + OK_(_system("dmsetup remove " DM_RETRY CDEVICE_1 DM_NOSTDERR, 0)); + CRYPT_FREE(cd); + + _cleanup_dmdevices(); + OK_(create_dmdevice_over_loop(H_DEVICE, r_header_size)); + OK_(create_dmdevice_over_loop(L_DEVICE_OK, r_header_size)); + OK_(create_dmdevice_over_loop(L_DEVICE_WRONG, r_header_size)); + + /* check detached header misuse (mismatching keys in table and mda) */ + OK_(crypt_init(&cd, IMAGE_EMPTY_SMALL)); + OK_(crypt_set_pbkdf_type(cd, &pbkdf)); + params2.data_device = DMDIR L_DEVICE_WRONG; + OK_(crypt_format(cd, CRYPT_LUKS2, "aes", "cbc-essiv:sha256", NULL, NULL, 32, ¶ms2)); + EQ_(crypt_keyslot_add_by_volume_key(cd, 6, NULL, 32, PASSPHRASE, strlen(PASSPHRASE)), 6); + EQ_(crypt_activate_by_passphrase(cd, CDEVICE_1, 6, PASSPHRASE, strlen(PASSPHRASE), 0), 6); + /* activate second device using same header */ + OK_(crypt_init_data_device(&cd2, IMAGE_EMPTY_SMALL, DMDIR L_DEVICE_OK)); + OK_(crypt_load(cd2, CRYPT_LUKS2, NULL)); + OK_(crypt_set_pbkdf_type(cd2, &pbkdf)); + EQ_(crypt_activate_by_passphrase(cd2, CDEVICE_2, 6, PASSPHRASE, strlen(PASSPHRASE), 0), 6); + CRYPT_FREE(cd2); + EQ_(crypt_keyslot_add_by_key(cd, 1, NULL, 32, PASSPHRASE, strlen(PASSPHRASE), CRYPT_VOLUME_KEY_NO_SEGMENT), 1); + + memset(&rparams, 0, sizeof(rparams)); + rparams.resilience = "none"; + rparams.max_hotzone_size = 16*2048; + rparams.luks2 = ¶ms2; + + OK_(crypt_reencrypt_init_by_passphrase(cd, CDEVICE_1, PASSPHRASE, strlen(PASSPHRASE), 6, 1, "aes", "cbc-essiv:sha256", &rparams)); + OK_(crypt_reencrypt(cd, NULL)); + + OK_(crypt_init_data_device(&cd2, IMAGE_EMPTY_SMALL, DMDIR L_DEVICE_OK)); + OK_(crypt_load(cd2, CRYPT_LUKS2, NULL)); + OK_(crypt_set_pbkdf_type(cd2, &pbkdf)); + EQ_(crypt_keyslot_add_by_key(cd2, 2, NULL, 32, PASSPHRASE, strlen(PASSPHRASE), CRYPT_VOLUME_KEY_NO_SEGMENT), 2); + rparams.flags = CRYPT_REENCRYPT_INITIALIZE_ONLY; + FAIL_(crypt_reencrypt_init_by_passphrase(cd2, CDEVICE_2, PASSPHRASE, strlen(PASSPHRASE), 1, 2, "aes", "cbc-essiv:sha256", &rparams), "Mismatching parameters in device table."); + OK_(crypt_reencrypt_init_by_passphrase(cd2, NULL, PASSPHRASE, strlen(PASSPHRASE), 1, 2, "aes", "cbc-essiv:sha256", &rparams)); + rparams.flags = CRYPT_REENCRYPT_RESUME_ONLY; + FAIL_(crypt_reencrypt_init_by_passphrase(cd2, CDEVICE_2, PASSPHRASE, strlen(PASSPHRASE), 1, 2, "aes", "cbc-essiv:sha256", &rparams), "Mismatching parameters in device table."); + OK_(crypt_deactivate(cd, CDEVICE_1)); + OK_(crypt_deactivate(cd2, CDEVICE_2)); + CRYPT_FREE(cd); + CRYPT_FREE(cd2); + + /* check detached header misuse (mismatching progress data in active device and mda) */ + OK_(crypt_init(&cd, IMAGE_EMPTY_SMALL)); + OK_(crypt_set_pbkdf_type(cd, &pbkdf)); + params2.data_device = DMDIR L_DEVICE_WRONG; + OK_(crypt_format(cd, CRYPT_LUKS2, "aes", "cbc-essiv:sha256", NULL, NULL, 32, ¶ms2)); + EQ_(crypt_keyslot_add_by_volume_key(cd, 6, NULL, 32, PASSPHRASE, strlen(PASSPHRASE)), 6); + EQ_(crypt_keyslot_add_by_key(cd, 1, NULL, 32, PASSPHRASE, strlen(PASSPHRASE), CRYPT_VOLUME_KEY_NO_SEGMENT), 1); + rparams.flags = 0; + rparams.max_hotzone_size = 8; + OK_(crypt_reencrypt_init_by_passphrase(cd, NULL, PASSPHRASE, strlen(PASSPHRASE), 6, 1, "aes", "cbc-essiv:sha256", &rparams)); + /* reencrypt 8 srectors of device */ + test_progress_steps = 1; + OK_(crypt_reencrypt(cd, &test_progress)); + + /* activate another data device with same LUKS2 header (this is wrong, but we can't detect such mistake) */ + OK_(crypt_init_data_device(&cd2, IMAGE_EMPTY_SMALL, DMDIR L_DEVICE_OK)); + OK_(crypt_load(cd2, CRYPT_LUKS2, NULL)); + NOTFAIL_(crypt_activate_by_passphrase(cd2, CDEVICE_2, CRYPT_ANY_SLOT, PASSPHRASE, strlen(PASSPHRASE), 0), "Failed to activate device in reencryption."); + CRYPT_FREE(cd2); + + /* reencrypt yet another 8 sectors of first device */ + rparams.flags = CRYPT_REENCRYPT_RESUME_ONLY; + OK_(crypt_reencrypt_init_by_passphrase(cd, NULL, PASSPHRASE, strlen(PASSPHRASE), 6, 1, "aes", "cbc-essiv:sha256", &rparams)); + test_progress_steps = 1; + OK_(crypt_reencrypt(cd, &test_progress)); + + /* Now active mapping for second data device does not match its metadata */ + OK_(crypt_init_data_device(&cd2, IMAGE_EMPTY_SMALL, DMDIR L_DEVICE_OK)); + OK_(crypt_load(cd2, CRYPT_LUKS2, NULL)); + rparams.flags = CRYPT_REENCRYPT_RESUME_ONLY; + FAIL_(crypt_reencrypt_init_by_passphrase(cd2, CDEVICE_2, PASSPHRASE, strlen(PASSPHRASE), 6, 1, "aes", "cbc-essiv:sha256", &rparams), "Mismatching device table."); + OK_(crypt_deactivate(cd2, CDEVICE_2)); + CRYPT_FREE(cd2); + CRYPT_FREE(cd); + + _cleanup_dmdevices(); + OK_(create_dmdevice_over_loop(L_DEVICE_OK, r_header_size + 16)); + + /* Test LUKS2 reencryption honors flags device was activate with */ + OK_(crypt_init(&cd, DMDIR L_DEVICE_OK)); + OK_(crypt_set_pbkdf_type(cd, &pbkdf)); + params2.sector_size = 512; + params2.data_device = NULL; + OK_(crypt_format(cd, CRYPT_LUKS2, "aes", "cbc-essiv:sha256", NULL, NULL, 32, ¶ms2)); + EQ_(crypt_keyslot_add_by_volume_key(cd, 6, NULL, 32, PASSPHRASE, strlen(PASSPHRASE)), 6); + OK_(crypt_volume_key_keyring(cd, 0)); /* disable keyring */ + EQ_(crypt_activate_by_passphrase(cd, CDEVICE_1, 6, PASSPHRASE, strlen(PASSPHRASE), CRYPT_ACTIVATE_ALLOW_DISCARDS), 6); + OK_(crypt_volume_key_keyring(cd, 1)); + rparams.mode = CRYPT_REENCRYPT_REENCRYPT; + rparams.direction = CRYPT_REENCRYPT_FORWARD, + rparams.resilience = "none", + rparams.max_hotzone_size = 8; + rparams.luks2 = ¶ms2; + rparams.flags = 0; + EQ_(crypt_keyslot_add_by_key(cd, 1, NULL, 64, PASSPHRASE, strlen(PASSPHRASE), CRYPT_VOLUME_KEY_NO_SEGMENT), 1); + OK_(crypt_reencrypt_init_by_passphrase(cd, CDEVICE_1, PASSPHRASE, strlen(PASSPHRASE), 6, 1, "aes", "xts-plain64", &rparams)); + test_progress_steps = 1; + OK_(crypt_reencrypt(cd, &test_progress)); + EQ_(crypt_reencrypt_status(cd, NULL), CRYPT_REENCRYPT_CLEAN); + OK_(crypt_get_active_device(cd, CDEVICE_1, &cad)); + EQ_(cad.flags & CRYPT_ACTIVATE_ALLOW_DISCARDS, CRYPT_ACTIVATE_ALLOW_DISCARDS); + EQ_(cad.flags & CRYPT_ACTIVATE_KEYRING_KEY, 0); + CRYPT_FREE(cd); + OK_(crypt_init_by_name(&cd, CDEVICE_1)); + rparams.flags = CRYPT_REENCRYPT_RESUME_ONLY; + OK_(crypt_reencrypt_init_by_passphrase(cd, CDEVICE_1, PASSPHRASE, strlen(PASSPHRASE), 6, 1, "aes", "xts-plain64", &rparams)); + OK_(crypt_reencrypt(cd, NULL)); + OK_(crypt_get_active_device(cd, CDEVICE_1, &cad)); + EQ_(cad.flags & CRYPT_ACTIVATE_ALLOW_DISCARDS, CRYPT_ACTIVATE_ALLOW_DISCARDS); + EQ_(cad.flags & CRYPT_ACTIVATE_KEYRING_KEY, 0); + OK_(crypt_deactivate(cd, CDEVICE_1)); + CRYPT_FREE(cd); + + _cleanup_dmdevices(); +#endif +} + +static void Luks2Repair(void) +{ + char rollback[256]; + + snprintf(rollback, sizeof(rollback), + "dd if=" IMAGE_PV_LUKS2_SEC ".bcp of=%s bs=1M 2>/dev/null", + DEVICE_6); + + OK_(crypt_init(&cd, DEVICE_6)); + + FAIL_(crypt_load(cd, CRYPT_LUKS, NULL), "Ambiguous signature detected"); + FAIL_(crypt_repair(cd, CRYPT_LUKS1, NULL), "Not a LUKS2 device"); + + /* check explicit LUKS2 repair works */ + OK_(crypt_repair(cd, CRYPT_LUKS2, NULL)); + OK_(crypt_load(cd, CRYPT_LUKS, NULL)); + CRYPT_FREE(cd); + OK_(crypt_init(&cd, DEVICE_6)); + + /* rollback */ + OK_(_system(rollback, 1)); + FAIL_(crypt_load(cd, CRYPT_LUKS, NULL), "Ambiguous signature detected"); + + /* check repair with type detection works */ + OK_(crypt_repair(cd, CRYPT_LUKS, NULL)); + OK_(crypt_load(cd, CRYPT_LUKS2, NULL)); + CRYPT_FREE(cd); + + /* repeat with locking disabled (must not have any effect) */ + OK_(_system(rollback, 1)); + OK_(crypt_init(&cd, DEVICE_6)); + OK_(crypt_metadata_locking(cd, 0)); + + FAIL_(crypt_load(cd, CRYPT_LUKS, NULL), "Ambiguous signature detected"); + FAIL_(crypt_repair(cd, CRYPT_LUKS1, NULL), "Not a LUKS2 device"); + + /* check explicit LUKS2 repair works */ + OK_(crypt_repair(cd, CRYPT_LUKS2, NULL)); + OK_(crypt_load(cd, CRYPT_LUKS, NULL)); + CRYPT_FREE(cd); + OK_(crypt_init(&cd, DEVICE_6)); + + /* rollback */ + OK_(_system(rollback, 1)); + FAIL_(crypt_load(cd, CRYPT_LUKS, NULL), "Ambiguous signature detected"); + + /* check repair with type detection works */ + OK_(crypt_repair(cd, CRYPT_LUKS, NULL)); + OK_(crypt_load(cd, CRYPT_LUKS2, NULL)); + CRYPT_FREE(cd); +} + +static void int_handler(int sig __attribute__((__unused__))) +{ + _quit++; +} + +int main(int argc, char *argv[]) +{ + struct sigaction sa = { .sa_handler = int_handler }; + int i; + + if (getuid() != 0) { + printf("You must be root to run this test.\n"); + exit(77); + } +#ifndef NO_CRYPTSETUP_PATH + if (getenv("CRYPTSETUP_PATH")) { + printf("Cannot run this test with CRYPTSETUP_PATH set.\n"); + exit(77); + } +#endif + for (i = 1; i < argc; i++) { + if (!strcmp("-v", argv[i]) || !strcmp("--verbose", argv[i])) + _verbose = 1; + else if (!strcmp("--debug", argv[i])) + _debug = _verbose = 1; + } + + /* Handle interrupt properly */ + sigaction(SIGINT, &sa, NULL); + sigaction(SIGTERM, &sa, NULL); + + register_cleanup(_cleanup); + + _cleanup(); + if (_setup()) { + printf("Cannot set test devices.\n"); + _cleanup(); + exit(77); + } + + crypt_set_debug_level(_debug ? CRYPT_DEBUG_JSON : CRYPT_DEBUG_NONE); + + RUN_(AddDeviceLuks2, "Format and use LUKS2 device"); + RUN_(Luks2MetadataSize, "LUKS2 metadata settings"); + RUN_(Luks2HeaderLoad, "LUKS2 header load"); + RUN_(Luks2HeaderRestore, "LUKS2 header restore"); + RUN_(Luks2HeaderBackup, "LUKS2 header backup"); + RUN_(ResizeDeviceLuks2, "LUKS2 device resize tests"); + RUN_(UseLuks2Device, "Use pre-formated LUKS2 device"); + RUN_(SuspendDevice, "LUKS2 Suspend/Resume"); + RUN_(UseTempVolumes, "Format and use temporary encrypted device"); + RUN_(Tokens, "General tokens API"); + RUN_(TokenActivationByKeyring, "Builtin kernel keyring token"); + RUN_(LuksConvert, "LUKS1 <-> LUKS2 conversions"); + RUN_(Pbkdf, "Default PBKDF manipulation routines"); + RUN_(Luks2KeyslotParams, "Add a new keyslot with different encryption"); + RUN_(Luks2KeyslotAdd, "Add a new keyslot by unused key"); + RUN_(Luks2ActivateByKeyring, "LUKS2 activation by passphrase in keyring"); + RUN_(Luks2Requirements, "LUKS2 requirements flags"); + RUN_(Luks2Integrity, "LUKS2 with data integrity"); + RUN_(Luks2Refresh, "Active device table refresh"); + RUN_(Luks2Flags, "LUKS2 persistent flags"); + RUN_(Luks2Reencryption, "LUKS2 reencryption"); + RUN_(Luks2Repair, "LUKS2 repair"); // test disables metadata locking. Run always last! + + _cleanup(); + return 0; +} diff --git a/tests/api-test.c b/tests/api-test.c new file mode 100644 index 0000000..0ff78e7 --- /dev/null +++ b/tests/api-test.c @@ -0,0 +1,1912 @@ +/* + * cryptsetup library API check functions + * + * Copyright (C) 2009-2019 Red Hat, Inc. All rights reserved. + * Copyright (C) 2009-2019 Milan Broz + * Copyright (C) 2016-2019 Ondrej Kozina + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "api_test.h" +#include "luks.h" +#include "libcryptsetup.h" + +#define DMDIR "/dev/mapper/" + +#define DEVICE_1_UUID "28632274-8c8a-493f-835b-da802e1c576b" +#define DEVICE_EMPTY_name "crypt_zero" +#define DEVICE_EMPTY DMDIR DEVICE_EMPTY_name +#define DEVICE_ERROR_name "crypt_error" +#define DEVICE_ERROR DMDIR DEVICE_ERROR_name + +#define CDEVICE_1 "ctest1" +#define CDEVICE_2 "ctest2" +#define CDEVICE_WRONG "O_o" +#define H_DEVICE "head_ok" +#define H_DEVICE_WRONG "head_wr" +#define L_DEVICE_1S "luks_onesec" +#define L_DEVICE_0S "luks_zerosec" +#define L_DEVICE_WRONG "luks_wr" +#define L_DEVICE_OK "luks_ok" +#define EVL_HEADER_1 "evil_hdr-luks_hdr_damage" +#define EVL_HEADER_2 "evil_hdr-payload_overwrite" +#define EVL_HEADER_3 "evil_hdr-stripes_payload_dmg" +#define EVL_HEADER_4 "evil_hdr-small_luks_device" +#define EVL_HEADER_5 "evil_hdr-keyslot_overlap" +#define VALID_HEADER "valid_header_file" +#define BACKUP_FILE "csetup_backup_file" +#define IMAGE1 "compatimage.img" +#define IMAGE_EMPTY "empty.img" + +#define KEYFILE1 "key1.file" +#define KEY1 "compatkey" + +#define KEYFILE2 "key2.file" +#define KEY2 "0123456789abcdef" + +#define PASSPHRASE "blabla" +#define PASSPHRASE1 "albalb" + +#define DEVICE_TEST_UUID "12345678-1234-1234-1234-123456789abc" + +#define DEVICE_WRONG "/dev/Ooo_" +#define DEVICE_CHAR "/dev/zero" +#define THE_LFILE_TEMPLATE "cryptsetup-tstlp.XXXXXX" + +#define LUKS_PHDR_SIZE_B 1024 + +static int _fips_mode = 0; + +static char *DEVICE_1 = NULL; +static char *DEVICE_2 = NULL; +static char *DEVICE_3 = NULL; + +static char *tmp_file_1 = NULL; +static char *test_loop_file = NULL; + +struct crypt_device *cd = NULL, *cd2 = NULL; + +// Helpers + +static int get_luks_offsets(int metadata_device, + size_t keylength, + unsigned int alignpayload_sec, + unsigned int alignoffset_sec, + uint64_t *r_header_size, + uint64_t *r_payload_offset) +{ + int i; + uint64_t current_sector; + uint32_t sectors_per_stripes_set; + + if (!keylength) { + if (r_header_size) + *r_header_size = 0; + if (r_payload_offset) + *r_payload_offset = 0; + return -1; + } + + sectors_per_stripes_set = DIV_ROUND_UP(keylength*LUKS_STRIPES, SECTOR_SIZE); + current_sector = DIV_ROUND_UP_MODULO(DIV_ROUND_UP(LUKS_PHDR_SIZE_B, SECTOR_SIZE), + LUKS_ALIGN_KEYSLOTS / SECTOR_SIZE); + for (i=0; i < (LUKS_NUMKEYS - 1); i++) + current_sector = DIV_ROUND_UP_MODULO(current_sector + sectors_per_stripes_set, + LUKS_ALIGN_KEYSLOTS / SECTOR_SIZE); + if (r_header_size) + *r_header_size = current_sector + sectors_per_stripes_set; + + current_sector = DIV_ROUND_UP_MODULO(current_sector + sectors_per_stripes_set, + LUKS_ALIGN_KEYSLOTS / SECTOR_SIZE); + + if (r_payload_offset) { + if (metadata_device) + *r_payload_offset = alignpayload_sec; + else + *r_payload_offset = DIV_ROUND_UP_MODULO(current_sector, alignpayload_sec) + + alignoffset_sec; + } + + return 0; +} + +static void _remove_keyfiles(void) +{ + remove(KEYFILE1); + remove(KEYFILE2); +} + +#if HAVE_DECL_DM_TASK_RETRY_REMOVE +#define DM_RETRY "--retry " +#else +#define DM_RETRY "" +#endif + +#define DM_NOSTDERR " 2>/dev/null" + +static void _cleanup_dmdevices(void) +{ + struct stat st; + + if (!stat(DMDIR H_DEVICE, &st)) + _system("dmsetup remove " DM_RETRY H_DEVICE DM_NOSTDERR, 0); + + if (!stat(DMDIR H_DEVICE_WRONG, &st)) + _system("dmsetup remove " DM_RETRY H_DEVICE_WRONG DM_NOSTDERR, 0); + + if (!stat(DMDIR L_DEVICE_0S, &st)) + _system("dmsetup remove " DM_RETRY L_DEVICE_0S DM_NOSTDERR, 0); + + if (!stat(DMDIR L_DEVICE_1S, &st)) + _system("dmsetup remove " DM_RETRY L_DEVICE_1S DM_NOSTDERR, 0); + + if (!stat(DMDIR L_DEVICE_WRONG, &st)) + _system("dmsetup remove " DM_RETRY L_DEVICE_WRONG DM_NOSTDERR, 0); + + if (!stat(DMDIR L_DEVICE_OK, &st)) + _system("dmsetup remove " DM_RETRY L_DEVICE_OK DM_NOSTDERR, 0); + + t_dev_offset = 0; +} + +static void _cleanup(void) +{ + struct stat st; + + CRYPT_FREE(cd); + CRYPT_FREE(cd2); + + //_system("udevadm settle", 0); + + if (!stat(DMDIR CDEVICE_1, &st)) + _system("dmsetup remove " DM_RETRY CDEVICE_1 DM_NOSTDERR, 0); + + if (!stat(DMDIR CDEVICE_2, &st)) + _system("dmsetup remove " DM_RETRY CDEVICE_2 DM_NOSTDERR, 0); + + if (!stat(DEVICE_EMPTY, &st)) + _system("dmsetup remove " DM_RETRY DEVICE_EMPTY_name DM_NOSTDERR, 0); + + if (!stat(DEVICE_ERROR, &st)) + _system("dmsetup remove " DM_RETRY DEVICE_ERROR_name DM_NOSTDERR, 0); + + _cleanup_dmdevices(); + + if (loop_device(THE_LOOP_DEV)) + loop_detach(THE_LOOP_DEV); + + if (loop_device(DEVICE_1)) + loop_detach(DEVICE_1); + + if (loop_device(DEVICE_2)) + loop_detach(DEVICE_2); + + if (loop_device(DEVICE_3)) + loop_detach(DEVICE_3); + + _system("rm -f " IMAGE_EMPTY, 0); + _system("rm -f " IMAGE1, 0); + + if (test_loop_file) + remove(test_loop_file); + if (tmp_file_1) + remove(tmp_file_1); + + remove(EVL_HEADER_1); + remove(EVL_HEADER_2); + remove(EVL_HEADER_3); + remove(EVL_HEADER_4); + remove(EVL_HEADER_5); + remove(VALID_HEADER); + remove(BACKUP_FILE); + + _remove_keyfiles(); + + free(tmp_file_1); + free(test_loop_file); + free(THE_LOOP_DEV); + free(DEVICE_1); + free(DEVICE_2); + free(DEVICE_3); +} + +static int _setup(void) +{ + int fd, ro = 0; + char cmd[128]; + + test_loop_file = strdup(THE_LFILE_TEMPLATE); + if ((fd=mkstemp(test_loop_file)) == -1) { + printf("cannot create temporary file with template %s\n", test_loop_file); + return 1; + } + close(fd); + snprintf(cmd, sizeof(cmd), "dd if=/dev/zero of=%s bs=%d count=%d 2>/dev/null", + test_loop_file, SECTOR_SIZE, TST_LOOP_FILE_SIZE); + if (_system(cmd, 1)) + return 1; + + fd = loop_attach(&THE_LOOP_DEV, test_loop_file, 0, 0, &ro); + close(fd); + + tmp_file_1 = strdup(THE_LFILE_TEMPLATE); + if ((fd=mkstemp(tmp_file_1)) == -1) { + printf("cannot create temporary file with template %s\n", tmp_file_1); + return 1; + } + close(fd); + snprintf(cmd, sizeof(cmd), "dd if=/dev/zero of=%s bs=%d count=%d 2>/dev/null", + tmp_file_1, SECTOR_SIZE, 10); + if (_system(cmd, 1)) + return 1; + + _system("dmsetup create " DEVICE_EMPTY_name " --table \"0 10000 zero\"", 1); + _system("dmsetup create " DEVICE_ERROR_name " --table \"0 10000 error\"", 1); + + _system(" [ ! -e " IMAGE1 " ] && xz -dk " IMAGE1 ".xz", 1); + fd = loop_attach(&DEVICE_1, IMAGE1, 0, 0, &ro); + close(fd); + + _system("dd if=/dev/zero of=" IMAGE_EMPTY " bs=1M count=10 2>/dev/null", 1); + fd = loop_attach(&DEVICE_2, IMAGE_EMPTY, 0, 0, &ro); + close(fd); + + /* Keymaterial offset is less than 8 sectors */ + _system(" [ ! -e " EVL_HEADER_1 " ] && xz -dk " EVL_HEADER_1 ".xz", 1); + /* keymaterial offset aims into payload area */ + _system(" [ ! -e " EVL_HEADER_2 " ] && xz -dk " EVL_HEADER_2 ".xz", 1); + /* keymaterial offset is valid, number of stripes causes payload area to be overwritten */ + _system(" [ ! -e " EVL_HEADER_3 " ] && xz -dk " EVL_HEADER_3 ".xz", 1); + /* luks device header for data and header on same device. payloadOffset is greater than + * device size (crypt_load() test) */ + _system(" [ ! -e " EVL_HEADER_4 " ] && xz -dk " EVL_HEADER_4 ".xz", 1); + /* two keyslots with same offset (overlapping keyslots) */ + _system(" [ ! -e " EVL_HEADER_5 " ] && xz -dk " EVL_HEADER_5 ".xz", 1); + /* valid header: payloadOffset=4096, key_size=32, + * volume_key = bb21158c733229347bd4e681891e213d94c685be6a5b84818afe7a78a6de7a1a */ + _system(" [ ! -e " VALID_HEADER " ] && xz -dk " VALID_HEADER ".xz", 1); + + /* Prepare tcrypt images */ + _system("tar xJf tcrypt-images.tar.xz 2>/dev/null", 1); + + _system("modprobe dm-crypt", 0); + _system("modprobe dm-verity", 0); + + _fips_mode = fips_mode(); + if (_debug) + printf("FIPS MODE: %d\n", _fips_mode); + + /* Use default log callback */ + crypt_set_log_callback(NULL, &global_log_callback, NULL); + + return 0; +} + +static void AddDevicePlain(void) +{ + struct crypt_params_plain params = { + .hash = "sha1", + .skip = 0, + .offset = 0, + .size = 0 + }; + int fd; + char key[128], key2[128], path[128]; + + const char *passphrase = PASSPHRASE; + // hashed hex version of PASSPHRASE + const char *mk_hex = "bb21158c733229347bd4e681891e213d94c685be6a5b84818afe7a78a6de7a1a"; + size_t key_size = strlen(mk_hex) / 2; + const char *cipher = "aes"; + const char *cipher_mode = "cbc-essiv:sha256"; + + uint64_t size, r_size; + + crypt_decode_key(key, mk_hex, key_size); + FAIL_(crypt_init(&cd, ""), "empty device string"); + FAIL_(crypt_init(&cd, DEVICE_WRONG), "nonexistent device name "); + FAIL_(crypt_init(&cd, DEVICE_CHAR), "character device as backing device"); + OK_(crypt_init(&cd, tmp_file_1)); + CRYPT_FREE(cd); + + // test crypt_format, crypt_get_cipher, crypt_get_cipher_mode, crypt_get_volume_key_size + OK_(crypt_init(&cd,DEVICE_1)); + params.skip = 3; + params.offset = 42; + FAIL_(crypt_format(cd,CRYPT_PLAIN,NULL,cipher_mode,NULL,NULL,key_size,¶ms),"cipher param is null"); + FAIL_(crypt_format(cd,CRYPT_PLAIN,cipher,NULL,NULL,NULL,key_size,¶ms),"cipher_mode param is null"); + OK_(crypt_format(cd,CRYPT_PLAIN,cipher,cipher_mode,NULL,NULL,key_size,¶ms)); + OK_(strcmp(cipher_mode,crypt_get_cipher_mode(cd))); + OK_(strcmp(cipher,crypt_get_cipher(cd))); + EQ_((int)key_size, crypt_get_volume_key_size(cd)); + EQ_(params.skip, crypt_get_iv_offset(cd)); + EQ_(params.offset, crypt_get_data_offset(cd)); + params.skip = 0; + params.offset = 0; + + // crypt_set_uuid() + FAIL_(crypt_set_uuid(cd,DEVICE_1_UUID),"can't set uuid to plain device"); + + CRYPT_FREE(cd); + + // default is "plain" hash - no password hash + OK_(crypt_init(&cd, DEVICE_1)); + OK_(crypt_format(cd, CRYPT_PLAIN, cipher, cipher_mode, NULL, NULL, key_size, NULL)); + FAIL_(crypt_activate_by_volume_key(cd, NULL, key, key_size, 0), "cannot verify key with plain"); + OK_(crypt_activate_by_volume_key(cd, CDEVICE_1, key, key_size, 0)); + EQ_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE); + OK_(crypt_deactivate(cd, CDEVICE_1)); + CRYPT_FREE(cd); + + // test boundaries in offset parameter + t_device_size(DEVICE_1,&size); + params.hash = NULL; + // zero sectors length + params.offset = size >> SECTOR_SHIFT; + OK_(crypt_init(&cd, DEVICE_1)); + OK_(crypt_format(cd, CRYPT_PLAIN, cipher, cipher_mode, NULL, NULL, key_size, ¶ms)); + EQ_(crypt_get_data_offset(cd),params.offset); + // device size is 0 sectors + FAIL_(crypt_activate_by_passphrase(cd, CDEVICE_1, CRYPT_ANY_SLOT, passphrase, strlen(passphrase), 0), "invalid device size (0 blocks)"); + EQ_(crypt_status(cd, CDEVICE_1), CRYPT_INACTIVE); + // data part of crypt device is of 1 sector size + params.offset = (size >> SECTOR_SHIFT) - 1; + CRYPT_FREE(cd); + + OK_(crypt_init(&cd, DEVICE_1)); + OK_(crypt_format(cd, CRYPT_PLAIN, cipher, cipher_mode, NULL, NULL, key_size, ¶ms)); + OK_(crypt_activate_by_passphrase(cd, CDEVICE_1, CRYPT_ANY_SLOT, passphrase, strlen(passphrase), 0)); + EQ_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE); + snprintf(path, sizeof(path), "%s/%s", crypt_get_dir(), CDEVICE_1); + if (t_device_size(path, &r_size) >= 0) + EQ_(r_size>>SECTOR_SHIFT, 1); + OK_(crypt_deactivate(cd, CDEVICE_1)); + CRYPT_FREE(cd); + + // size > device_size + params.offset = 0; + params.size = (size >> SECTOR_SHIFT) + 1; + crypt_init(&cd, DEVICE_1); + OK_(crypt_format(cd, CRYPT_PLAIN, cipher, cipher_mode, NULL, NULL, key_size, ¶ms)); + FAIL_(crypt_activate_by_passphrase(cd, CDEVICE_1, CRYPT_ANY_SLOT, passphrase, strlen(passphrase), 0),"Device too small"); + EQ_(crypt_status(cd, CDEVICE_1), CRYPT_INACTIVE); + CRYPT_FREE(cd); + + // offset == device_size (autodetect size) + params.offset = (size >> SECTOR_SHIFT); + params.size = 0; + crypt_init(&cd, DEVICE_1); + OK_(crypt_format(cd, CRYPT_PLAIN, cipher, cipher_mode, NULL, NULL, key_size, ¶ms)); + FAIL_(crypt_activate_by_passphrase(cd, CDEVICE_1, CRYPT_ANY_SLOT, passphrase, strlen(passphrase), 0),"Device too small"); + EQ_(crypt_status(cd, CDEVICE_1), CRYPT_INACTIVE); + CRYPT_FREE(cd); + + // offset == device_size (user defined size) + params.offset = (size >> SECTOR_SHIFT); + params.size = 123; + crypt_init(&cd, DEVICE_1); + OK_(crypt_format(cd, CRYPT_PLAIN, cipher, cipher_mode, NULL, NULL, key_size, ¶ms)); + FAIL_(crypt_activate_by_passphrase(cd, CDEVICE_1, CRYPT_ANY_SLOT, passphrase, strlen(passphrase), 0),"Device too small"); + EQ_(crypt_status(cd, CDEVICE_1), CRYPT_INACTIVE); + CRYPT_FREE(cd); + + // offset+size > device_size + params.offset = 42; + params.size = (size >> SECTOR_SHIFT) - params.offset + 1; + crypt_init(&cd, DEVICE_1); + OK_(crypt_format(cd, CRYPT_PLAIN, cipher, cipher_mode, NULL, NULL, key_size, ¶ms)); + FAIL_(crypt_activate_by_passphrase(cd, CDEVICE_1, CRYPT_ANY_SLOT, passphrase, strlen(passphrase), 0),"Offset and size are beyond device real size"); + EQ_(crypt_status(cd, CDEVICE_1), CRYPT_INACTIVE); + CRYPT_FREE(cd); + + // offset+size == device_size + params.offset = 42; + params.size = (size >> SECTOR_SHIFT) - params.offset; + crypt_init(&cd, DEVICE_1); + OK_(crypt_format(cd, CRYPT_PLAIN, cipher, cipher_mode, NULL, NULL, key_size, ¶ms)); + OK_(crypt_activate_by_passphrase(cd, CDEVICE_1, CRYPT_ANY_SLOT, passphrase, strlen(passphrase), 0)); + EQ_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE); + if (!t_device_size(path, &r_size)) + EQ_((r_size >> SECTOR_SHIFT),params.size); + OK_(crypt_deactivate(cd,CDEVICE_1)); + + CRYPT_FREE(cd); + params.hash = "sha1"; + params.offset = 0; + params.size = 0; + params.skip = 0; + + // Now use hashed password + OK_(crypt_init(&cd, DEVICE_1)); + OK_(crypt_format(cd, CRYPT_PLAIN, cipher, cipher_mode, NULL, NULL, key_size, ¶ms)); + FAIL_(crypt_activate_by_passphrase(cd, NULL, CRYPT_ANY_SLOT, passphrase, strlen(passphrase), 0), + "cannot verify passphrase with plain" ); + OK_(crypt_activate_by_passphrase(cd, CDEVICE_1, CRYPT_ANY_SLOT, passphrase, strlen(passphrase), 0)); + + // device status check + EQ_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE); + snprintf(path, sizeof(path), "%s/%s", crypt_get_dir(), CDEVICE_1); + fd = open(path, O_RDONLY); + EQ_(crypt_status(cd, CDEVICE_1), CRYPT_BUSY); + FAIL_(crypt_deactivate(cd, CDEVICE_1), "Device is busy"); + close(fd); + OK_(crypt_deactivate(cd, CDEVICE_1)); + EQ_(crypt_status(cd, CDEVICE_1), CRYPT_INACTIVE); + CRYPT_FREE(cd); + + // crypt_init_by_name_and_header + OK_(crypt_init(&cd,DEVICE_1)); + OK_(crypt_format(cd, CRYPT_PLAIN, cipher, cipher_mode, NULL, NULL, key_size, ¶ms)); + OK_(crypt_activate_by_volume_key(cd, CDEVICE_1, key, key_size, 0)); + CRYPT_FREE(cd); + + // init with detached header is not supported + OK_(crypt_init_data_device(&cd, DEVICE_2, DEVICE_1)); + FAIL_(crypt_format(cd, CRYPT_PLAIN, cipher, cipher_mode, NULL, NULL, key_size, ¶ms), + "can't use plain with separate metadata device"); + CRYPT_FREE(cd); + + FAIL_(crypt_init_by_name_and_header(&cd, CDEVICE_1, H_DEVICE),"can't init plain device by header device"); + OK_(crypt_init_by_name(&cd, CDEVICE_1)); + OK_(strcmp(cipher_mode,crypt_get_cipher_mode(cd))); + OK_(strcmp(cipher,crypt_get_cipher(cd))); + EQ_((int)key_size, crypt_get_volume_key_size(cd)); + EQ_(params.skip, crypt_get_iv_offset(cd)); + EQ_(params.offset, crypt_get_data_offset(cd)); + OK_(crypt_deactivate(cd, CDEVICE_1)); + CRYPT_FREE(cd); + + OK_(crypt_init(&cd,DEVICE_1)); + OK_(crypt_format(cd,CRYPT_PLAIN,cipher,cipher_mode,NULL,NULL,key_size,¶ms)); + params.size = 0; + params.offset = 0; + + // crypt_set_data_device + FAIL_(crypt_set_data_device(cd,H_DEVICE),"can't set data device for plain device"); + NULL_(crypt_get_metadata_device_name(cd)); + + // crypt_get_type + OK_(strcmp(crypt_get_type(cd),CRYPT_PLAIN)); + + OK_(crypt_activate_by_volume_key(cd, CDEVICE_1, key, key_size, 0)); + EQ_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE); + + // crypt_resize() + OK_(crypt_resize(cd,CDEVICE_1,size>>SECTOR_SHIFT)); // same size + if (!t_device_size(path,&r_size)) + EQ_(r_size, size); + + // size overlaps + FAIL_(crypt_resize(cd, CDEVICE_1, (uint64_t)-1),"Backing device is too small"); + FAIL_(crypt_resize(cd, CDEVICE_1, (size>>SECTOR_SHIFT)+1),"crypt device overlaps backing device"); + + // resize ok + OK_(crypt_resize(cd,CDEVICE_1, 123)); + if (!t_device_size(path,&r_size)) + EQ_(r_size>>SECTOR_SHIFT, 123); + OK_(crypt_resize(cd,CDEVICE_1,0)); // full size (autodetect) + if (!t_device_size(path,&r_size)) + EQ_(r_size, size); + OK_(crypt_deactivate(cd,CDEVICE_1)); + EQ_(crypt_status(cd,CDEVICE_1),CRYPT_INACTIVE); + CRYPT_FREE(cd); + + // offset tests + OK_(crypt_init(&cd,DEVICE_1)); + params.offset = 42; + params.size = (size>>SECTOR_SHIFT) - params.offset - 10; + OK_(crypt_format(cd,CRYPT_PLAIN,cipher,cipher_mode,NULL,NULL,key_size,¶ms)); + OK_(crypt_activate_by_volume_key(cd,CDEVICE_1,key,key_size,0)); + if (!t_device_size(path,&r_size)) + EQ_(r_size>>SECTOR_SHIFT, params.size); + // resize to fill remaining capacity + OK_(crypt_resize(cd,CDEVICE_1,params.size + 10)); + if (!t_device_size(path,&r_size)) + EQ_(r_size>>SECTOR_SHIFT, params.size + 10); + + // 1 sector beyond real size + FAIL_(crypt_resize(cd,CDEVICE_1,params.size + 11), "new device size overlaps backing device"); // with respect to offset + if (!t_device_size(path,&r_size)) + EQ_(r_size>>SECTOR_SHIFT, params.size + 10); + EQ_(crypt_status(cd,CDEVICE_1),CRYPT_ACTIVE); + fd = open(path, O_RDONLY); + NOTFAIL_(fd, "Bad loop device."); + close(fd); + + // resize to minimal size + OK_(crypt_resize(cd,CDEVICE_1, 1)); // minimal device size + if (!t_device_size(path,&r_size)) + EQ_(r_size>>SECTOR_SHIFT, 1); + // use size of backing device (autodetect with respect to offset) + OK_(crypt_resize(cd,CDEVICE_1,0)); + if (!t_device_size(path,&r_size)) + EQ_(r_size>>SECTOR_SHIFT, (size >> SECTOR_SHIFT)- 42); + OK_(crypt_deactivate(cd,CDEVICE_1)); + CRYPT_FREE(cd); + + params.size = 0; + params.offset = 0; + OK_(crypt_init(&cd,DEVICE_1)); + OK_(crypt_format(cd,CRYPT_PLAIN,cipher,cipher_mode,NULL,NULL,key_size,¶ms)); + OK_(crypt_activate_by_volume_key(cd,CDEVICE_1,key,key_size,0)); + + // suspend/resume tests + FAIL_(crypt_suspend(cd,CDEVICE_1),"cannot suspend plain device"); + EQ_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE); + FAIL_(crypt_resume_by_passphrase(cd,CDEVICE_1,CRYPT_ANY_SLOT,passphrase, strlen(passphrase)),"cannot resume plain device"); + EQ_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE); + + // retrieve volume key check + memset(key2, 0, key_size); + key_size--; + // small buffer + FAIL_(crypt_volume_key_get(cd, CRYPT_ANY_SLOT, key2, &key_size, passphrase, strlen(passphrase)), "small buffer"); + key_size++; + OK_(crypt_volume_key_get(cd, CRYPT_ANY_SLOT, key2, &key_size, passphrase, strlen(passphrase))); + OK_(memcmp(key, key2, key_size)); + + OK_(strcmp(cipher, crypt_get_cipher(cd))); + OK_(strcmp(cipher_mode, crypt_get_cipher_mode(cd))); + EQ_((int)key_size, crypt_get_volume_key_size(cd)); + EQ_(0, crypt_get_data_offset(cd)); + OK_(crypt_deactivate(cd, CDEVICE_1)); + + // now with keyfile + OK_(prepare_keyfile(KEYFILE1, KEY1, strlen(KEY1))); + OK_(prepare_keyfile(KEYFILE2, KEY2, strlen(KEY2))); + FAIL_(crypt_activate_by_keyfile(cd, NULL, CRYPT_ANY_SLOT, KEYFILE1, 0, 0), "cannot verify key with plain"); + EQ_(0, crypt_activate_by_keyfile(cd, CDEVICE_1, CRYPT_ANY_SLOT, KEYFILE1, 0, 0)); + EQ_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE); + OK_(crypt_deactivate(cd, CDEVICE_1)); + FAIL_(crypt_activate_by_keyfile_offset(cd, NULL, CRYPT_ANY_SLOT, KEYFILE1, 0, strlen(KEY1) + 1, 0), "cannot seek"); + FAIL_(crypt_activate_by_keyfile_device_offset(cd, NULL, CRYPT_ANY_SLOT, KEYFILE1, 0, strlen(KEY1) + 1, 0), "cannot seek"); + EQ_(0, crypt_activate_by_keyfile_offset(cd, CDEVICE_1, CRYPT_ANY_SLOT, KEYFILE1, 0, 0, 0)); + OK_(crypt_deactivate(cd, CDEVICE_1)); + EQ_(0, crypt_activate_by_keyfile_device_offset(cd, CDEVICE_1, CRYPT_ANY_SLOT, KEYFILE1, 0, 0, 0)); + OK_(crypt_deactivate(cd, CDEVICE_1)); + _remove_keyfiles(); + CRYPT_FREE(cd); + + OK_(crypt_init(&cd,DEVICE_1)); + OK_(crypt_format(cd,CRYPT_PLAIN,cipher,cipher_mode,NULL,NULL,key_size,¶ms)); + + // crypt_keyslot_*() + FAIL_(crypt_keyslot_add_by_passphrase(cd,CRYPT_ANY_SLOT,passphrase,strlen(passphrase),passphrase,strlen(passphrase)), "can't add keyslot to plain device"); + FAIL_(crypt_keyslot_add_by_volume_key(cd,CRYPT_ANY_SLOT ,key,key_size,passphrase,strlen(passphrase)),"can't add keyslot to plain device"); + FAIL_(crypt_keyslot_add_by_keyfile(cd,CRYPT_ANY_SLOT,KEYFILE1,strlen(KEY1),KEYFILE2,strlen(KEY2)),"can't add keyslot to plain device"); + FAIL_(crypt_keyslot_destroy(cd,1),"can't manipulate keyslots on plain device"); + EQ_(crypt_keyslot_status(cd, 0), CRYPT_SLOT_INVALID); + _remove_keyfiles(); + + CRYPT_FREE(cd); +} + +static int new_messages = 0; +static void new_log(int level, const char *msg, void *usrptr) +{ + if (level == CRYPT_LOG_ERROR) + new_messages++; + global_log_callback(level, msg, usrptr); +} + +static void CallbacksTest(void) +{ + struct crypt_params_plain params = { + .hash = "sha1", + .skip = 0, + .offset = 0, + }; + + size_t key_size = 256 / 8; + const char *cipher = "aes"; + const char *cipher_mode = "cbc-essiv:sha256"; + const char *passphrase = PASSPHRASE; + + OK_(crypt_init(&cd, DEVICE_1)); + new_messages = 0; + crypt_set_log_callback(cd, &new_log, NULL); + EQ_(new_messages, 0); + OK_(crypt_format(cd, CRYPT_PLAIN, cipher, cipher_mode, NULL, NULL, key_size, ¶ms)); + OK_(crypt_activate_by_passphrase(cd, CDEVICE_1, CRYPT_ANY_SLOT, passphrase, strlen(passphrase), 0)); + EQ_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE); + EQ_(new_messages, 0); + FAIL_(crypt_activate_by_passphrase(cd, CDEVICE_1, CRYPT_ANY_SLOT, passphrase, strlen(passphrase), 0), "already exists"); + EQ_(new_messages, 1); + crypt_set_log_callback(cd, NULL, NULL); + OK_(crypt_deactivate(cd, CDEVICE_1)); + CRYPT_FREE(cd); +} + +static void UseLuksDevice(void) +{ + char key[128]; + size_t key_size; + + OK_(crypt_init(&cd, DEVICE_1)); + OK_(crypt_load(cd, CRYPT_LUKS1, NULL)); + EQ_(crypt_status(cd, CDEVICE_1), CRYPT_INACTIVE); + OK_(crypt_activate_by_passphrase(cd, NULL, CRYPT_ANY_SLOT, KEY1, strlen(KEY1), 0)); + OK_(crypt_activate_by_passphrase(cd, CDEVICE_1, CRYPT_ANY_SLOT, KEY1, strlen(KEY1), 0)); + FAIL_(crypt_activate_by_passphrase(cd, CDEVICE_1, CRYPT_ANY_SLOT, KEY1, strlen(KEY1), 0), "already open"); + EQ_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE); + OK_(crypt_deactivate(cd, CDEVICE_1)); + FAIL_(crypt_deactivate(cd, CDEVICE_1), "no such device"); + + key_size = 16; + OK_(strcmp("aes", crypt_get_cipher(cd))); + OK_(strcmp("cbc-essiv:sha256", crypt_get_cipher_mode(cd))); + OK_(strcmp(DEVICE_1_UUID, crypt_get_uuid(cd))); + EQ_((int)key_size, crypt_get_volume_key_size(cd)); + EQ_(1032, crypt_get_data_offset(cd)); + + EQ_(0, crypt_volume_key_get(cd, CRYPT_ANY_SLOT, key, &key_size, KEY1, strlen(KEY1))); + OK_(crypt_volume_key_verify(cd, key, key_size)); + OK_(crypt_activate_by_volume_key(cd, NULL, key, key_size, 0)); + OK_(crypt_activate_by_volume_key(cd, CDEVICE_1, key, key_size, 0)); + EQ_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE); + OK_(crypt_deactivate(cd, CDEVICE_1)); + + key[1] = ~key[1]; + FAIL_(crypt_volume_key_verify(cd, key, key_size), "key mismatch"); + FAIL_(crypt_activate_by_volume_key(cd, CDEVICE_1, key, key_size, 0), "key mismatch"); + + CRYPT_FREE(cd); +} + +static void SuspendDevice(void) +{ + int suspend_status; + + OK_(crypt_init(&cd, DEVICE_1)); + OK_(crypt_load(cd, CRYPT_LUKS1, NULL)); + OK_(crypt_activate_by_passphrase(cd, CDEVICE_1, CRYPT_ANY_SLOT, KEY1, strlen(KEY1), 0)); + + suspend_status = crypt_suspend(cd, CDEVICE_1); + if (suspend_status == -ENOTSUP) { + printf("WARNING: Suspend/Resume not supported, skipping test.\n"); + OK_(crypt_deactivate(cd, CDEVICE_1)); + CRYPT_FREE(cd); + return; + } + + OK_(suspend_status); + FAIL_(crypt_suspend(cd, CDEVICE_1), "already suspended"); + + FAIL_(crypt_resume_by_passphrase(cd, CDEVICE_1, CRYPT_ANY_SLOT, KEY1, strlen(KEY1)-1), "wrong key"); + OK_(crypt_resume_by_passphrase(cd, CDEVICE_1, CRYPT_ANY_SLOT, KEY1, strlen(KEY1))); + FAIL_(crypt_resume_by_passphrase(cd, CDEVICE_1, CRYPT_ANY_SLOT, KEY1, strlen(KEY1)), "not suspended"); + + OK_(prepare_keyfile(KEYFILE1, KEY1, strlen(KEY1))); + OK_(crypt_suspend(cd, CDEVICE_1)); + FAIL_(crypt_resume_by_keyfile(cd, CDEVICE_1, CRYPT_ANY_SLOT, KEYFILE1 "blah", 0), "wrong keyfile"); + FAIL_(crypt_resume_by_keyfile_offset(cd, CDEVICE_1, CRYPT_ANY_SLOT, KEYFILE1, 1, 0), "wrong key"); + FAIL_(crypt_resume_by_keyfile_device_offset(cd, CDEVICE_1, CRYPT_ANY_SLOT, KEYFILE1, 1, 0), "wrong key"); + OK_(crypt_resume_by_keyfile_device_offset(cd, CDEVICE_1, CRYPT_ANY_SLOT, KEYFILE1, 0, 0)); + FAIL_(crypt_resume_by_keyfile(cd, CDEVICE_1, CRYPT_ANY_SLOT, KEYFILE1, 0), "not suspended"); + OK_(crypt_deactivate(cd, CDEVICE_1)); + CRYPT_FREE(cd); + + /* create LUKS device with detached header */ + OK_(crypt_init(&cd, DEVICE_1)); + OK_(crypt_load(cd, CRYPT_LUKS1, NULL)); + OK_(crypt_set_data_device(cd, DEVICE_2)); + OK_(crypt_activate_by_passphrase(cd, CDEVICE_1, CRYPT_ANY_SLOT, KEY1, strlen(KEY1), 0)); + CRYPT_FREE(cd); + + /* Should be able to suspend but not resume if not header specified */ + OK_(crypt_init_by_name(&cd, CDEVICE_1)); + OK_(crypt_suspend(cd, CDEVICE_1)); + FAIL_(crypt_suspend(cd, CDEVICE_1), "already suspended"); + FAIL_(crypt_resume_by_passphrase(cd, CDEVICE_1, CRYPT_ANY_SLOT, KEY1, strlen(KEY1)-1), "no header"); + CRYPT_FREE(cd); + + OK_(crypt_init_by_name_and_header(&cd, CDEVICE_1, DEVICE_1)); + OK_(crypt_resume_by_passphrase(cd, CDEVICE_1, CRYPT_ANY_SLOT, KEY1, strlen(KEY1))); + + OK_(crypt_deactivate(cd, CDEVICE_1)); + CRYPT_FREE(cd); + + _remove_keyfiles(); +} + +static void AddDeviceLuks(void) +{ + enum { OFFSET_1M = 2048 , OFFSET_2M = 4096, OFFSET_4M = 8192, OFFSET_8M = 16384 }; + struct crypt_params_luks1 params = { + .hash = "sha512", + .data_alignment = OFFSET_1M, // 4M, data offset will be 4096 + .data_device = DEVICE_2 + }; + char key[128], key2[128], key3[128]; + + const char *passphrase = "blabla", *passphrase2 = "nsdkFI&Y#.sd"; + const char *mk_hex = "bb21158c733229347bd4e681891e213d94c685be6a5b84818afe7a78a6de7a1a"; + const char *mk_hex2 = "bb21158c733229347bd4e681891e213d94c685be6a5b84818afe7a78a6de7a1e"; + size_t key_size = strlen(mk_hex) / 2; + const char *cipher = "aes"; + const char *cipher_mode = "cbc-essiv:sha256"; + uint64_t r_payload_offset, r_header_size, r_size_1; + struct crypt_pbkdf_type pbkdf; + + crypt_decode_key(key, mk_hex, key_size); + crypt_decode_key(key3, mk_hex2, key_size); + + // init test devices + OK_(get_luks_offsets(1, key_size, 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)); + + // format + OK_(crypt_init(&cd, DMDIR H_DEVICE_WRONG)); + params.data_alignment = 0; + FAIL_(crypt_format(cd, CRYPT_LUKS1, cipher, cipher_mode, NULL, key, key_size, ¶ms), "Not enough space for keyslots material"); + CRYPT_FREE(cd); + + // test payload_offset = 0 for encrypted device with external header device + OK_(crypt_init(&cd, DMDIR H_DEVICE)); + OK_(crypt_format(cd, CRYPT_LUKS1, cipher, cipher_mode, NULL, key, key_size, ¶ms)); + EQ_(crypt_get_data_offset(cd), 0); + CRYPT_FREE(cd); + + params.data_alignment = 0; + params.data_device = NULL; + + // test payload_offset = 0. format() should look up alignment offset from device topology + OK_(crypt_init(&cd, DEVICE_2)); + OK_(crypt_format(cd, CRYPT_LUKS1, cipher, cipher_mode, NULL, key, key_size, ¶ms)); + OK_(!(crypt_get_data_offset(cd) > 0)); + CRYPT_FREE(cd); + + // set_data_offset has priority, alignment must be 0 or must be compatible + params.data_alignment = 0; + OK_(crypt_init(&cd, DEVICE_2)); + OK_(crypt_set_data_offset(cd, OFFSET_8M)); + OK_(crypt_format(cd, CRYPT_LUKS1, cipher, cipher_mode, NULL, key, key_size, ¶ms)); + EQ_(crypt_get_data_offset(cd), OFFSET_8M); + CRYPT_FREE(cd); + + // Load gets the value from metadata + OK_(crypt_init(&cd, DEVICE_2)); + OK_(crypt_set_data_offset(cd, OFFSET_2M)); + OK_(crypt_load(cd, CRYPT_LUKS1, NULL)); + EQ_(crypt_get_data_offset(cd), OFFSET_8M); + CRYPT_FREE(cd); + + params.data_alignment = OFFSET_4M; + OK_(crypt_init(&cd, DEVICE_2)); + FAIL_(crypt_set_data_offset(cd, OFFSET_2M + 1), "Not aligned to 4096"); // must be aligned to 4k + OK_(crypt_set_data_offset(cd, OFFSET_2M)); + FAIL_(crypt_format(cd, CRYPT_LUKS1, cipher, cipher_mode, NULL, key, key_size, ¶ms), "Alignment not compatible"); + OK_(crypt_set_data_offset(cd, OFFSET_4M)); + OK_(crypt_format(cd, CRYPT_LUKS1, cipher, cipher_mode, NULL, key, key_size, ¶ms)); + EQ_(crypt_get_data_offset(cd), OFFSET_4M); + CRYPT_FREE(cd); + + /* + * test limit values for backing device size + */ + params.data_alignment = OFFSET_2M; + OK_(get_luks_offsets(0, key_size, 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)); + OK_(create_dmdevice_over_loop(L_DEVICE_WRONG, 2050 - 1)); //FIXME last keyslot - 1 sector + + // 1 sector less than required + OK_(crypt_init(&cd, DMDIR L_DEVICE_WRONG)); + FAIL_(crypt_format(cd, CRYPT_LUKS1, cipher, cipher_mode, NULL, key, key_size, ¶ms), "Device too small"); + CRYPT_FREE(cd); + + // 0 sectors for encrypted area + OK_(crypt_init(&cd, DMDIR L_DEVICE_0S)); + OK_(crypt_format(cd, CRYPT_LUKS1, cipher, cipher_mode, NULL, key, key_size, ¶ms)); + FAIL_(crypt_activate_by_volume_key(cd, CDEVICE_1, key, key_size, 0), "Encrypted area too small"); + CRYPT_FREE(cd); + + // 1 sector for encrypted area + OK_(crypt_init(&cd, DMDIR L_DEVICE_1S)); + OK_(crypt_format(cd, CRYPT_LUKS1, cipher, cipher_mode, NULL, key, key_size, ¶ms)); + EQ_(crypt_get_data_offset(cd), params.data_alignment); + OK_(crypt_activate_by_volume_key(cd, CDEVICE_1, key, key_size, 0)); + EQ_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE); + OK_(t_device_size(DMDIR CDEVICE_1, &r_size_1)); + EQ_(r_size_1, SECTOR_SIZE); + OK_(crypt_deactivate(cd, CDEVICE_1)); + EQ_(crypt_status(cd, CDEVICE_1), CRYPT_INACTIVE); + // restrict format only to empty context + FAIL_(crypt_format(cd, CRYPT_LUKS1, cipher, cipher_mode, NULL, key, key_size, ¶ms), "Context is already formatted"); + FAIL_(crypt_format(cd, CRYPT_LUKS1, cipher, cipher_mode, NULL, key, key_size, NULL), "Context is already formatted"); + // change data device to wrong one + OK_(crypt_set_data_device(cd, DMDIR L_DEVICE_0S)); + FAIL_(crypt_activate_by_volume_key(cd, CDEVICE_1, key, key_size, 0), "Device too small"); + OK_(crypt_set_data_device(cd, DMDIR L_DEVICE_1S)); + OK_(crypt_activate_by_volume_key(cd, CDEVICE_1, key, key_size, 0)); + OK_(crypt_deactivate(cd, CDEVICE_1)); + CRYPT_FREE(cd); + + params.data_alignment = 0; + params.data_device = DEVICE_2; + + // generate keyslot material at the end of luks header + OK_(crypt_init(&cd, DMDIR H_DEVICE)); + OK_(crypt_format(cd, CRYPT_LUKS1, cipher, cipher_mode, NULL, key, key_size, ¶ms)); + EQ_(crypt_keyslot_add_by_volume_key(cd, 7, key, key_size, passphrase, strlen(passphrase)), 7); + EQ_(crypt_activate_by_passphrase(cd, CDEVICE_1, 7, passphrase, strlen(passphrase) ,0), 7); + CRYPT_FREE(cd); + OK_(crypt_init_by_name_and_header(&cd, CDEVICE_1, DMDIR H_DEVICE)); + FAIL_(crypt_format(cd, CRYPT_LUKS1, cipher, cipher_mode, NULL, key, key_size, ¶ms), "Context is already formatted"); + EQ_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE); + CRYPT_FREE(cd); + // check active status without header + OK_(crypt_init_by_name_and_header(&cd, CDEVICE_1, NULL)); + EQ_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE); + NULL_(crypt_get_type(cd)); + OK_(strcmp(cipher, crypt_get_cipher(cd))); + OK_(strcmp(cipher_mode, crypt_get_cipher_mode(cd))); + EQ_((int)key_size, crypt_get_volume_key_size(cd)); + OK_(crypt_deactivate(cd, CDEVICE_1)); + CRYPT_FREE(cd); + + params.data_alignment = OFFSET_1M; + params.data_device = NULL; + + // test uuid mismatch and _init_by_name_and_header + OK_(crypt_init(&cd, DMDIR L_DEVICE_1S)); + OK_(crypt_format(cd, CRYPT_LUKS1, cipher, cipher_mode, NULL, key, key_size, ¶ms)); + OK_(crypt_activate_by_volume_key(cd, CDEVICE_1, key, key_size, 0)); + CRYPT_FREE(cd); + params.data_alignment = 0; + params.data_device = DEVICE_2; + OK_(crypt_init(&cd, DMDIR H_DEVICE)); + OK_(crypt_format(cd, CRYPT_LUKS1, cipher, cipher_mode, NULL, key, key_size, ¶ms)); + CRYPT_FREE(cd); + // there we've got uuid mismatch + OK_(crypt_init_by_name_and_header(&cd, CDEVICE_1, DMDIR H_DEVICE)); + EQ_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE); + NULL_(crypt_get_type(cd)); + FAIL_(crypt_activate_by_volume_key(cd, CDEVICE_1, key, key_size, 0), "Device is active"); + FAIL_(crypt_activate_by_volume_key(cd, CDEVICE_2, key, key_size, 0), "Device is active"); + EQ_(crypt_status(cd, CDEVICE_2), CRYPT_INACTIVE); + OK_(crypt_deactivate(cd, CDEVICE_1)); + CRYPT_FREE(cd); + + params.data_device = NULL; + + OK_(crypt_init(&cd, DEVICE_2)); + OK_(crypt_format(cd, CRYPT_LUKS1, cipher, cipher_mode, NULL, key, key_size, ¶ms)); + + // even with no keyslots defined it can be activated by volume key + OK_(crypt_volume_key_verify(cd, key, key_size)); + OK_(crypt_activate_by_volume_key(cd, CDEVICE_2, key, key_size, 0)); + EQ_(crypt_status(cd, CDEVICE_2), CRYPT_ACTIVE); + OK_(crypt_deactivate(cd, CDEVICE_2)); + + // now with keyslot + EQ_(7, crypt_keyslot_add_by_volume_key(cd, 7, key, key_size, passphrase, strlen(passphrase))); + EQ_(CRYPT_SLOT_ACTIVE_LAST, crypt_keyslot_status(cd, 7)); + EQ_(7, crypt_activate_by_passphrase(cd, CDEVICE_2, CRYPT_ANY_SLOT, passphrase, strlen(passphrase), 0)); + EQ_(crypt_status(cd, CDEVICE_2), CRYPT_ACTIVE); + OK_(crypt_deactivate(cd, CDEVICE_2)); + + crypt_set_iteration_time(cd, 1); + EQ_(1, crypt_keyslot_add_by_volume_key(cd, 1, key, key_size, KEY1, strlen(KEY1))); + + // PBKDF info (in LUKS1 slots are the same) + FAIL_(crypt_keyslot_get_pbkdf(cd, 1, NULL), "PBKDF struct required"); + OK_(crypt_keyslot_get_pbkdf(cd, 1, &pbkdf)); + OK_(strcmp(pbkdf.type, CRYPT_KDF_PBKDF2)); + OK_(strcmp(pbkdf.hash, params.hash)); + OK_(pbkdf.iterations < 1000); /* set by minimum iterations above */ + EQ_(0, pbkdf.max_memory_kb); + EQ_(0, pbkdf.parallel_threads); + + OK_(prepare_keyfile(KEYFILE1, KEY1, strlen(KEY1))); + OK_(prepare_keyfile(KEYFILE2, KEY2, strlen(KEY2))); + EQ_(2, crypt_keyslot_add_by_keyfile(cd, 2, KEYFILE1, 0, KEYFILE2, 0)); + FAIL_(crypt_keyslot_add_by_keyfile_offset(cd, 3, KEYFILE1, 0, 1, KEYFILE2, 0, 1), "wrong key"); + EQ_(3, crypt_keyslot_add_by_keyfile_offset(cd, 3, KEYFILE1, 0, 0, KEYFILE2, 0, 1)); + EQ_(4, crypt_keyslot_add_by_keyfile_offset(cd, 4, KEYFILE2, 0, 1, KEYFILE1, 0, 1)); + FAIL_(crypt_activate_by_keyfile(cd, CDEVICE_2, CRYPT_ANY_SLOT, KEYFILE2, strlen(KEY2)-1, 0), "key mismatch"); + EQ_(2, crypt_activate_by_keyfile(cd, NULL, CRYPT_ANY_SLOT, KEYFILE2, 0, 0)); + EQ_(3, crypt_activate_by_keyfile_offset(cd, NULL, CRYPT_ANY_SLOT, KEYFILE2, 0, 1, 0)); + EQ_(4, crypt_activate_by_keyfile_offset(cd, NULL, CRYPT_ANY_SLOT, KEYFILE1, 0, 1, 0)); + FAIL_(crypt_activate_by_keyfile_offset(cd, CDEVICE_2, CRYPT_ANY_SLOT, KEYFILE2, strlen(KEY2), 2, 0), "not enough data"); + FAIL_(crypt_activate_by_keyfile_offset(cd, CDEVICE_2, CRYPT_ANY_SLOT, KEYFILE2, 0, strlen(KEY2) + 1, 0), "cannot seek"); + FAIL_(crypt_activate_by_keyfile_offset(cd, CDEVICE_2, CRYPT_ANY_SLOT, KEYFILE2, 0, 2, 0), "wrong key"); + EQ_(2, crypt_activate_by_keyfile(cd, CDEVICE_2, CRYPT_ANY_SLOT, KEYFILE2, 0, 0)); + OK_(crypt_keyslot_destroy(cd, 1)); + OK_(crypt_keyslot_destroy(cd, 2)); + OK_(crypt_keyslot_destroy(cd, 3)); + OK_(crypt_keyslot_destroy(cd, 4)); + OK_(crypt_deactivate(cd, CDEVICE_2)); + _remove_keyfiles(); + + FAIL_(crypt_keyslot_add_by_volume_key(cd, 7, key, key_size, passphrase, strlen(passphrase)), "slot used"); + key[1] = ~key[1]; + FAIL_(crypt_keyslot_add_by_volume_key(cd, 6, key, key_size, passphrase, strlen(passphrase)), "key mismatch"); + key[1] = ~key[1]; + EQ_(6, crypt_keyslot_add_by_volume_key(cd, 6, key, key_size, passphrase, strlen(passphrase))); + EQ_(CRYPT_SLOT_ACTIVE, crypt_keyslot_status(cd, 6)); + + FAIL_(crypt_keyslot_destroy(cd, 8), "invalid keyslot"); + FAIL_(crypt_keyslot_destroy(cd, CRYPT_ANY_SLOT), "invalid keyslot"); + FAIL_(crypt_keyslot_destroy(cd, 0), "keyslot not used"); + OK_(crypt_keyslot_destroy(cd, 7)); + EQ_(CRYPT_SLOT_INACTIVE, crypt_keyslot_status(cd, 7)); + EQ_(CRYPT_SLOT_ACTIVE_LAST, crypt_keyslot_status(cd, 6)); + + EQ_(7, crypt_keyslot_change_by_passphrase(cd, 6, 7, passphrase, strlen(passphrase), passphrase2, strlen(passphrase2))); + EQ_(CRYPT_SLOT_ACTIVE_LAST, crypt_keyslot_status(cd, 7)); + EQ_(7, crypt_activate_by_passphrase(cd, NULL, 7, passphrase2, strlen(passphrase2), 0)); + EQ_(6, crypt_keyslot_change_by_passphrase(cd, CRYPT_ANY_SLOT, 6, passphrase2, strlen(passphrase2), passphrase, strlen(passphrase))); + + EQ_(6, crypt_volume_key_get(cd, CRYPT_ANY_SLOT, key2, &key_size, passphrase, strlen(passphrase))); + OK_(crypt_volume_key_verify(cd, key2, key_size)); + + OK_(memcmp(key, key2, key_size)); + + OK_(strcmp(cipher, crypt_get_cipher(cd))); + OK_(strcmp(cipher_mode, crypt_get_cipher_mode(cd))); + EQ_((int)key_size, crypt_get_volume_key_size(cd)); + EQ_(OFFSET_2M, crypt_get_data_offset(cd)); + OK_(strcmp(DEVICE_2, crypt_get_device_name(cd))); + + reset_log(); + OK_(crypt_dump(cd)); + OK_(!(global_lines != 0)); + reset_log(); + + FAIL_(crypt_set_uuid(cd, "blah"), "wrong UUID format"); + OK_(crypt_set_uuid(cd, DEVICE_TEST_UUID)); + OK_(strcmp(DEVICE_TEST_UUID, crypt_get_uuid(cd))); + + FAIL_(crypt_deactivate(cd, CDEVICE_2), "not active"); + CRYPT_FREE(cd); + _cleanup_dmdevices(); +} + +static void UseTempVolumes(void) +{ + char tmp[256]; + + // Tepmporary device without keyslot but with on-disk LUKS header + OK_(crypt_init(&cd, DEVICE_2)); + FAIL_(crypt_activate_by_volume_key(cd, CDEVICE_2, NULL, 0, 0), "not yet formatted"); + OK_(crypt_format(cd, CRYPT_LUKS1, "aes", "cbc-essiv:sha256", NULL, NULL, 16, NULL)); + OK_(crypt_activate_by_volume_key(cd, CDEVICE_2, NULL, 0, 0)); + EQ_(crypt_status(cd, CDEVICE_2), CRYPT_ACTIVE); + CRYPT_FREE(cd); + + OK_(crypt_init_by_name(&cd, CDEVICE_2)); + OK_(crypt_deactivate(cd, CDEVICE_2)); + CRYPT_FREE(cd); + + // Dirty checks: device without UUID + // we should be able to remove it but not manipulate with it + snprintf(tmp, sizeof(tmp), "dmsetup create %s --table \"" + "0 100 crypt aes-cbc-essiv:sha256 deadbabedeadbabedeadbabedeadbabe 0 " + "%s 2048\"", CDEVICE_2, DEVICE_2); + _system(tmp, 1); + OK_(crypt_init_by_name(&cd, CDEVICE_2)); + OK_(crypt_deactivate(cd, CDEVICE_2)); + FAIL_(crypt_activate_by_volume_key(cd, CDEVICE_2, NULL, 0, 0), "No known device type"); + CRYPT_FREE(cd); + + // Dirty checks: device with UUID but LUKS header key fingerprint must fail) + snprintf(tmp, sizeof(tmp), "dmsetup create %s --table \"" + "0 100 crypt aes-cbc-essiv:sha256 deadbabedeadbabedeadbabedeadbabe 0 " + "%s 2048\" -u CRYPT-LUKS1-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-ctest1", + CDEVICE_2, DEVICE_2); + _system(tmp, 1); + OK_(crypt_init_by_name(&cd, CDEVICE_2)); + OK_(crypt_deactivate(cd, CDEVICE_2)); + FAIL_(crypt_activate_by_volume_key(cd, CDEVICE_2, NULL, 0, 0), "wrong volume key"); + CRYPT_FREE(cd); + + // No slots + OK_(crypt_init(&cd, DEVICE_2)); + OK_(crypt_load(cd, CRYPT_LUKS1, NULL)); + FAIL_(crypt_activate_by_volume_key(cd, CDEVICE_2, NULL, 0, 0), "volume key is lost"); + CRYPT_FREE(cd); + + // Plain device + OK_(crypt_init(&cd, DEVICE_2)); + OK_(crypt_format(cd, CRYPT_PLAIN, "aes", "cbc-essiv:sha256", NULL, NULL, 16, NULL)); + FAIL_(crypt_activate_by_volume_key(cd, NULL, "xxx", 3, 0), "cannot verify key with plain"); + FAIL_(crypt_volume_key_verify(cd, "xxx", 3), "cannot verify key with plain"); + FAIL_(crypt_activate_by_volume_key(cd, CDEVICE_2, "xxx", 3, 0), "wrong key length"); + OK_(crypt_activate_by_volume_key(cd, CDEVICE_2, "volumekeyvolumek", 16, 0)); + EQ_(crypt_status(cd, CDEVICE_2), CRYPT_ACTIVE); + OK_(crypt_deactivate(cd, CDEVICE_2)); + CRYPT_FREE(cd); +} + +static void LuksHeaderRestore(void) +{ + struct crypt_params_luks1 params = { + .hash = "sha512", + .data_alignment = 2048, // 4M, data offset will be 4096 + }; + struct crypt_params_plain pl_params = { + .hash = "sha1", + .skip = 0, + .offset = 0, + .size = 0 + }; + char key[128], key2[128], cmd[256]; + + const char *mk_hex = "bb21158c733229347bd4e681891e213d94c685be6a5b84818afe7a78a6de7a1a"; + size_t key_size = strlen(mk_hex) / 2; + const char *cipher = "aes"; + const char *cipher_mode = "cbc-essiv:sha256"; + uint64_t r_payload_offset; + + crypt_decode_key(key, mk_hex, key_size); + + OK_(get_luks_offsets(0, key_size, 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 + OK_(crypt_init(&cd, DMDIR L_DEVICE_OK)); + OK_(crypt_format(cd, CRYPT_PLAIN, cipher, cipher_mode, NULL, NULL, key_size, &pl_params)); + OK_(crypt_activate_by_volume_key(cd, CDEVICE_1, key, key_size, 0)); + FAIL_(crypt_header_restore(cd, CRYPT_PLAIN, VALID_HEADER), "Cannot restore header to PLAIN type device"); + FAIL_(crypt_header_restore(cd, CRYPT_LUKS1, VALID_HEADER), "Cannot restore header over PLAIN type device"); + EQ_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE); + OK_(crypt_deactivate(cd, CDEVICE_1)); + CRYPT_FREE(cd); + + // invalid headers + OK_(crypt_init(&cd, DMDIR L_DEVICE_OK)); + OK_(crypt_format(cd, CRYPT_LUKS1, cipher, cipher_mode, NULL, key, key_size, ¶ms)); + FAIL_(crypt_header_restore(cd, CRYPT_LUKS1, EVL_HEADER_1), "Header corrupted"); + FAIL_(crypt_header_restore(cd, CRYPT_LUKS1, EVL_HEADER_2), "Header corrupted"); + FAIL_(crypt_header_restore(cd, CRYPT_LUKS1, EVL_HEADER_3), "Header corrupted"); + FAIL_(crypt_header_restore(cd, CRYPT_LUKS1, EVL_HEADER_4), "Header too small"); + FAIL_(crypt_header_restore(cd, CRYPT_LUKS1, EVL_HEADER_5), "Header corrupted"); + OK_(crypt_header_restore(cd, CRYPT_LUKS1, VALID_HEADER)); + // wipe valid luks header + snprintf(cmd, sizeof(cmd), "dd if=/dev/zero of=" DMDIR L_DEVICE_OK " bs=512 count=%" PRIu64 " 2>/dev/null", r_payload_offset); + OK_(_system(cmd, 1)); + FAIL_(crypt_header_restore(cd, CRYPT_LUKS1, EVL_HEADER_1), "Header corrupted"); + FAIL_(crypt_header_restore(cd, CRYPT_LUKS1, EVL_HEADER_2), "Header corrupted"); + FAIL_(crypt_header_restore(cd, CRYPT_LUKS1, EVL_HEADER_3), "Header corrupted"); + FAIL_(crypt_header_restore(cd, CRYPT_LUKS1, EVL_HEADER_4), "Header too small"); + FAIL_(crypt_header_restore(cd, CRYPT_LUKS1, EVL_HEADER_5), "Header corrupted"); + OK_(crypt_header_restore(cd, CRYPT_LUKS1, VALID_HEADER)); + OK_(crypt_activate_by_volume_key(cd, CDEVICE_1, key, key_size, 0)); + OK_(crypt_deactivate(cd, CDEVICE_1)); + CRYPT_FREE(cd); + + // volume key_size mismatch + OK_(crypt_init(&cd, DMDIR L_DEVICE_OK)); + memcpy(key2, key, key_size / 2); + OK_(crypt_format(cd, CRYPT_LUKS1, cipher, cipher_mode, NULL, key2, key_size / 2, ¶ms)); + FAIL_(crypt_header_restore(cd, CRYPT_LUKS1, VALID_HEADER), "Volume keysize mismatch"); + CRYPT_FREE(cd); + + // payload offset mismatch + params.data_alignment = 8192; + OK_(crypt_init(&cd, DMDIR L_DEVICE_OK)); + OK_(crypt_format(cd, CRYPT_LUKS1, cipher, cipher_mode, NULL, key, key_size, ¶ms)); + FAIL_(crypt_header_restore(cd, CRYPT_LUKS1, VALID_HEADER), "Payload offset mismatch"); + //_system("dmsetup table;sleep 1",1); + CRYPT_FREE(cd); + + /* check crypt_header_restore() properly loads crypt_device context */ + OK_(crypt_init(&cd, DMDIR L_DEVICE_OK)); + OK_(crypt_wipe(cd, NULL, CRYPT_WIPE_ZERO, 0, 1*1024*1024, 1*1024*1024, 0, NULL, NULL)); + OK_(crypt_header_restore(cd, CRYPT_LUKS1, VALID_HEADER)); + OK_(crypt_activate_by_volume_key(cd, NULL, key, key_size, 0)); + /* same test, any LUKS */ + OK_(crypt_wipe(cd, NULL, CRYPT_WIPE_ZERO, 0, 1*1024*1024, 1*1024*1024, 0, NULL, NULL)); + OK_(crypt_header_restore(cd, CRYPT_LUKS, VALID_HEADER)); + OK_(crypt_activate_by_volume_key(cd, NULL, key, key_size, 0)); + + CRYPT_FREE(cd); + + _cleanup_dmdevices(); +} + +static void LuksHeaderLoad(void) +{ + struct crypt_params_luks1 params = { + .hash = "sha512", + .data_alignment = 2048, + }; + struct crypt_params_plain pl_params = { + .hash = "sha1", + .skip = 0, + .offset = 0, + .size = 0 + }; + char key[128], cmd[256]; + + const char *mk_hex = "bb21158c733229347bd4e681891e213d94c685be6a5b84818afe7a78a6de7a1a"; + size_t key_size = strlen(mk_hex) / 2; + const char *cipher = "aes"; + const char *cipher_mode = "cbc-essiv:sha256"; + uint64_t r_payload_offset, r_header_size; + uint64_t mdata_size, keyslots_size; + + crypt_decode_key(key, mk_hex, key_size); + + // prepare test env + OK_(get_luks_offsets(0, key_size, params.data_alignment, 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 + //OK_(create_dmdevice_over_loop(H_DEVICE_WRONG, r_payload_offset - 1)); + OK_(create_dmdevice_over_loop(H_DEVICE_WRONG, 2050 - 1)); //FIXME + //snprintf(cmd, sizeof(cmd), "dd if=" EVL_HEADER_4 " of=" DMDIR H_DEVICE_WRONG " bs=512 count=%" PRIu64, r_payload_offset - 1); + snprintf(cmd, sizeof(cmd), "dd if=" EVL_HEADER_4 " of=" DMDIR H_DEVICE_WRONG " bs=512 count=%d 2>/dev/null", 2050 - 1); + OK_(_system(cmd, 1)); + // some device + OK_(create_dmdevice_over_loop(L_DEVICE_OK, r_payload_offset + 1000)); + // 1 sector device + OK_(create_dmdevice_over_loop(L_DEVICE_1S, r_payload_offset + 1)); + // 0 sectors device for payload + OK_(create_dmdevice_over_loop(L_DEVICE_0S, r_payload_offset)); + + // valid metadata and device size + params.data_alignment = 0; + params.data_device = DMDIR L_DEVICE_OK; + OK_(crypt_init(&cd, DMDIR H_DEVICE)); + OK_(crypt_format(cd, CRYPT_LUKS1, cipher, cipher_mode, NULL, key, key_size, ¶ms)); + CRYPT_FREE(cd); + OK_(crypt_init(&cd, DMDIR H_DEVICE)); + OK_(crypt_load(cd, CRYPT_LUKS1, NULL)); + OK_(crypt_set_data_device(cd, DMDIR L_DEVICE_OK)); + OK_(crypt_activate_by_volume_key(cd, CDEVICE_1, key, key_size, 0)); + EQ_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE); + OK_(!crypt_get_metadata_device_name(cd)); + EQ_(strcmp(DMDIR H_DEVICE, crypt_get_metadata_device_name(cd)), 0); + OK_(crypt_deactivate(cd, CDEVICE_1)); + CRYPT_FREE(cd); + + // repeat with init with two devices + OK_(crypt_init_data_device(&cd, DMDIR H_DEVICE, DMDIR L_DEVICE_OK)); + OK_(crypt_format(cd, CRYPT_LUKS1, cipher, cipher_mode, NULL, key, key_size, ¶ms)); + CRYPT_FREE(cd); + OK_(crypt_init_data_device(&cd, DMDIR H_DEVICE, DMDIR L_DEVICE_OK)); + OK_(crypt_load(cd, CRYPT_LUKS1, NULL)); + OK_(!crypt_get_metadata_device_name(cd)); + EQ_(strcmp(DMDIR H_DEVICE, crypt_get_metadata_device_name(cd)), 0); + CRYPT_FREE(cd); + + // bad header: device too small (payloadOffset > device_size) + OK_(crypt_init(&cd, DMDIR H_DEVICE_WRONG)); + FAIL_(crypt_load(cd, CRYPT_LUKS1, NULL), "Device too small"); + NULL_(crypt_get_type(cd)); + CRYPT_FREE(cd); + + // 0 secs for encrypted data area + params.data_alignment = 2048; + params.data_device = NULL; + OK_(crypt_init(&cd, DMDIR L_DEVICE_0S)); + OK_(crypt_format(cd, CRYPT_LUKS1, cipher, cipher_mode, NULL, key, key_size, ¶ms)); + FAIL_(crypt_set_metadata_size(cd, 0x004000, 0x004000), "Wrong context type"); + OK_(crypt_get_metadata_size(cd, &mdata_size, &keyslots_size)); + EQ_(mdata_size, LUKS_ALIGN_KEYSLOTS); + EQ_(keyslots_size, r_header_size * SECTOR_SIZE - mdata_size); + CRYPT_FREE(cd); + // load should be ok + OK_(crypt_init(&cd, DMDIR L_DEVICE_0S)); + OK_(crypt_load(cd, CRYPT_LUKS1, NULL)); + FAIL_(crypt_activate_by_volume_key(cd, CDEVICE_1, key, key_size, 0), "Device too small"); + EQ_(crypt_status(cd, CDEVICE_1), CRYPT_INACTIVE); + CRYPT_FREE(cd); + + // damaged header + OK_(_system("dd if=/dev/zero of=" DMDIR L_DEVICE_OK " bs=512 count=8 2>/dev/null", 1)); + OK_(crypt_init(&cd, DMDIR L_DEVICE_OK)); + FAIL_(crypt_load(cd, CRYPT_LUKS1, NULL), "Header not found"); + CRYPT_FREE(cd); + + // plain device + OK_(crypt_init(&cd, DMDIR H_DEVICE)); + FAIL_(crypt_load(cd, CRYPT_PLAIN, NULL), "Can't load nonLUKS device type"); + CRYPT_FREE(cd); + OK_(crypt_init(&cd, DMDIR H_DEVICE)); + OK_(crypt_format(cd, CRYPT_PLAIN, cipher, cipher_mode, NULL, key, key_size, &pl_params)); + FAIL_(crypt_load(cd, CRYPT_LUKS1, NULL), "Can't load over nonLUKS device type"); + FAIL_(crypt_set_metadata_size(cd, 0x004000, 0x004000), "Wrong context type"); + FAIL_(crypt_get_metadata_size(cd, &mdata_size, &keyslots_size), "Wrong context type"); + CRYPT_FREE(cd); + + /* check load sets proper device type */ + OK_(crypt_init(&cd, DMDIR L_DEVICE_0S)); + OK_(crypt_load(cd, CRYPT_LUKS, NULL)); + EQ_(strcmp(CRYPT_LUKS1, crypt_get_type(cd)), 0); + CRYPT_FREE(cd); + + _cleanup_dmdevices(); +} + +static void LuksHeaderBackup(void) +{ + struct crypt_params_luks1 params = { + .hash = "sha512", + .data_alignment = 2048, + }; + char key[128]; + int fd, ro = O_RDONLY; + + const char *mk_hex = "bb21158c733229347bd4e681891e213d94c685be6a5b84818afe7a78a6de7a1a"; + size_t key_size = strlen(mk_hex) / 2; + const char *cipher = "aes"; + const char *cipher_mode = "cbc-essiv:sha256"; + uint64_t r_payload_offset; + + const char *passphrase = PASSPHRASE; + + crypt_decode_key(key, mk_hex, key_size); + + OK_(get_luks_offsets(0, key_size, 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 + OK_(crypt_init(&cd, DMDIR L_DEVICE_OK)); + OK_(crypt_format(cd, CRYPT_LUKS1, cipher, cipher_mode, NULL, key, key_size, ¶ms)); + OK_(crypt_activate_by_volume_key(cd, CDEVICE_1, key, key_size, 0)); + EQ_(crypt_keyslot_add_by_volume_key(cd, 7, key, key_size, passphrase, strlen(passphrase)), 7); + EQ_(crypt_keyslot_add_by_volume_key(cd, 0, key, key_size, passphrase, strlen(passphrase)), 0); + OK_(crypt_header_backup(cd, CRYPT_LUKS1, BACKUP_FILE)); + OK_(crypt_deactivate(cd, CDEVICE_1)); + CRYPT_FREE(cd); + + // restore header from backup + OK_(crypt_init(&cd, DMDIR L_DEVICE_OK)); + OK_(crypt_header_restore(cd, CRYPT_LUKS1, BACKUP_FILE)); + OK_(crypt_load(cd, CRYPT_LUKS1, NULL)); + OK_(crypt_activate_by_volume_key(cd, CDEVICE_1, key, key_size, 0)); + EQ_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE); + OK_(crypt_deactivate(cd, CDEVICE_1)); + CRYPT_FREE(cd); + + // exercise luksOpen using backup header in file + OK_(crypt_init(&cd, BACKUP_FILE)); + OK_(crypt_load(cd, CRYPT_LUKS1, NULL)); + OK_(crypt_set_data_device(cd, DMDIR L_DEVICE_OK)); + EQ_(crypt_activate_by_passphrase(cd, CDEVICE_1, 0, passphrase, strlen(passphrase), 0), 0); + EQ_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE); + OK_(crypt_deactivate(cd, CDEVICE_1)); + CRYPT_FREE(cd); + + OK_(crypt_init(&cd, BACKUP_FILE)); + OK_(crypt_load(cd, CRYPT_LUKS1, NULL)); + OK_(crypt_set_data_device(cd, DMDIR L_DEVICE_OK)); + EQ_(crypt_activate_by_passphrase(cd, CDEVICE_1, 7, passphrase, strlen(passphrase), 0), 7); + EQ_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE); + OK_(crypt_deactivate(cd, CDEVICE_1)); + CRYPT_FREE(cd); + + // exercise luksOpen using backup header on block device + fd = loop_attach(&DEVICE_3, BACKUP_FILE, 0, 0, &ro); + NOTFAIL_(fd, "Bad loop device."); + close(fd); + OK_(crypt_init(&cd, DEVICE_3)); + OK_(crypt_load(cd, CRYPT_LUKS1, NULL)); + OK_(crypt_set_data_device(cd, DMDIR L_DEVICE_OK)); + EQ_(crypt_activate_by_passphrase(cd, CDEVICE_1, 0, passphrase, strlen(passphrase), 0), 0); + EQ_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE); + OK_(crypt_deactivate(cd, CDEVICE_1)); + CRYPT_FREE(cd); + + OK_(crypt_init(&cd, DEVICE_3)); + OK_(crypt_load(cd, CRYPT_LUKS1, NULL)); + OK_(crypt_set_data_device(cd, DMDIR L_DEVICE_OK)); + EQ_(crypt_activate_by_passphrase(cd, CDEVICE_1, 7, passphrase, strlen(passphrase), 0), 7); + EQ_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE); + OK_(crypt_deactivate(cd, CDEVICE_1)); + CRYPT_FREE(cd); + + _cleanup_dmdevices(); +} + +static void ResizeDeviceLuks(void) +{ + struct crypt_params_luks1 params = { + .hash = "sha512", + .data_alignment = 2048, + }; + char key[128]; + + const char *mk_hex = "bb21158c733229347bd4e681891e213d94c685be6a5b84818afe7a78a6de7a1a"; + size_t key_size = strlen(mk_hex) / 2; + const char *cipher = "aes"; + const char *cipher_mode = "cbc-essiv:sha256"; + uint64_t r_payload_offset, r_header_size, r_size; + + crypt_decode_key(key, mk_hex, key_size); + + // prepare env + OK_(get_luks_offsets(0, key_size, params.data_alignment, 0, NULL, &r_payload_offset)); + OK_(get_luks_offsets(1, key_size, 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)); + OK_(create_dmdevice_over_loop(L_DEVICE_WRONG, r_payload_offset + 1000)); + + // test header and encrypted payload all in one device + OK_(crypt_init(&cd, DMDIR L_DEVICE_OK)); + OK_(crypt_format(cd, CRYPT_LUKS1, cipher, cipher_mode, NULL, key, key_size, ¶ms)); + OK_(crypt_activate_by_volume_key(cd, CDEVICE_1, key, key_size, 0)); + OK_(crypt_resize(cd, CDEVICE_1, 42)); + if (!t_device_size(DMDIR CDEVICE_1, &r_size)) + EQ_(42, r_size >> SECTOR_SHIFT); + // autodetect encrypted device area size + OK_(crypt_resize(cd, CDEVICE_1, 0)); + if (!t_device_size(DMDIR CDEVICE_1, &r_size)) + EQ_(1000, r_size >> SECTOR_SHIFT); + FAIL_(crypt_resize(cd, CDEVICE_1, 1001), "Device too small"); + if (!t_device_size(DMDIR CDEVICE_1, &r_size)) + EQ_(1000, r_size >> SECTOR_SHIFT); + EQ_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE); + OK_(crypt_deactivate(cd, CDEVICE_1)); + CRYPT_FREE(cd); + + params.data_alignment = 0; + params.data_device = DMDIR L_DEVICE_0S; + // test case for external header + OK_(crypt_init(&cd, DMDIR H_DEVICE)); + OK_(crypt_format(cd, CRYPT_LUKS1, cipher, cipher_mode, NULL, key, key_size, ¶ms)); + OK_(crypt_activate_by_volume_key(cd, CDEVICE_1, key, key_size, 0)); + OK_(crypt_resize(cd, CDEVICE_1, 666)); + if (!t_device_size(DMDIR CDEVICE_1, &r_size)) + EQ_(666, r_size >> SECTOR_SHIFT); + // autodetect encrypted device size + OK_(crypt_resize(cd, CDEVICE_1, 0)); + if (!t_device_size(DMDIR CDEVICE_1, &r_size)) + EQ_(1000, r_size >> SECTOR_SHIFT); + FAIL_(crypt_resize(cd, CDEVICE_1, 1001), "Device too small"); + if (!t_device_size(DMDIR CDEVICE_1, &r_size)) + EQ_(1000, r_size >> SECTOR_SHIFT); + EQ_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE); + OK_(crypt_deactivate(cd, CDEVICE_1)); + CRYPT_FREE(cd); + + OK_(crypt_init(&cd, DMDIR L_DEVICE_OK)); + OK_(crypt_load(cd, NULL, NULL)); + OK_(crypt_activate_by_volume_key(cd, CDEVICE_1, key, key_size, 0)); + + /* do not allow resize of other device */ + OK_(crypt_init(&cd2, DMDIR L_DEVICE_WRONG)); + OK_(crypt_format(cd2, CRYPT_LUKS1, cipher, cipher_mode, crypt_get_uuid(cd), key, key_size, ¶ms)); + OK_(crypt_activate_by_volume_key(cd2, CDEVICE_2, key, key_size, 0)); + FAIL_(crypt_resize(cd2, CDEVICE_1, 1), "Device got resized by wrong device context."); + OK_(crypt_deactivate(cd2, CDEVICE_2)); + CRYPT_FREE(cd2); + + OK_(crypt_init(&cd2, DMDIR L_DEVICE_WRONG)); + OK_(crypt_format(cd2, CRYPT_PLAIN, cipher, cipher_mode, NULL, key, key_size, NULL)); + OK_(crypt_activate_by_volume_key(cd2, CDEVICE_2, key, key_size, 0)); + FAIL_(crypt_resize(cd2, CDEVICE_1, 1), "Device got resized by wrong device context."); + OK_(crypt_deactivate(cd2, CDEVICE_2)); + CRYPT_FREE(cd2); + + OK_(crypt_deactivate(cd, CDEVICE_1)); + CRYPT_FREE(cd); + + _cleanup_dmdevices(); +} + +static void HashDevicePlain(void) +{ + struct crypt_params_plain params = { + .hash = NULL, + .skip = 0, + .offset = 0, + }; + + size_t key_size; + const char *mk_hex, *keystr; + char key[256]; + + OK_(crypt_init(&cd, DEVICE_1)); + OK_(crypt_format(cd, CRYPT_PLAIN, "aes", "cbc-essiv:sha256", NULL, NULL, 16, ¶ms)); + + // hash PLAIN, short key + OK_(prepare_keyfile(KEYFILE1, "tooshort", 8)); + FAIL_(crypt_activate_by_keyfile(cd, CDEVICE_1, CRYPT_ANY_SLOT, KEYFILE1, 16, 0), "not enough data in keyfile"); + _remove_keyfiles(); + + // hash PLAIN, exact key + // 0 1 2 3 4 5 6 7 8 9 a b c d e f + mk_hex = "caffeecaffeecaffeecaffeecaffee88"; + key_size = 16; + crypt_decode_key(key, mk_hex, key_size); + OK_(prepare_keyfile(KEYFILE1, key, key_size)); + OK_(crypt_activate_by_keyfile(cd, CDEVICE_1, CRYPT_ANY_SLOT, KEYFILE1, key_size, 0)); + OK_(get_key_dm(CDEVICE_1, key, sizeof(key))); + OK_(strcmp(key, mk_hex)); + OK_(crypt_deactivate(cd, CDEVICE_1)); + + // Limit plain key + mk_hex = "caffeecaffeecaffeecaffeeca000000"; + OK_(crypt_activate_by_keyfile(cd, CDEVICE_1, CRYPT_ANY_SLOT, KEYFILE1, key_size - 3, 0)); + OK_(get_key_dm(CDEVICE_1, key, sizeof(key))); + OK_(strcmp(key, mk_hex)); + OK_(crypt_deactivate(cd, CDEVICE_1)); + + _remove_keyfiles(); + + // hash PLAIN, long key + // 0 1 2 3 4 5 6 7 8 9 a b c d e f + mk_hex = "caffeecaffeecaffeecaffeecaffee88babebabe"; + key_size = 16; + crypt_decode_key(key, mk_hex, key_size); + OK_(prepare_keyfile(KEYFILE1, key, strlen(mk_hex) / 2)); + OK_(crypt_activate_by_keyfile(cd, CDEVICE_1, CRYPT_ANY_SLOT, KEYFILE1, key_size, 0)); + OK_(get_key_dm(CDEVICE_1, key, sizeof(key))); + FAIL_(strcmp(key, mk_hex), "only key length used"); + OK_(strncmp(key, mk_hex, key_size)); + OK_(crypt_deactivate(cd, CDEVICE_1)); + + // Now without explicit limit + OK_(crypt_activate_by_keyfile(cd, CDEVICE_1, CRYPT_ANY_SLOT, KEYFILE1, 0, 0)); + OK_(get_key_dm(CDEVICE_1, key, sizeof(key))); + FAIL_(strcmp(key, mk_hex), "only key length used"); + OK_(strncmp(key, mk_hex, key_size)); + OK_(crypt_deactivate(cd, CDEVICE_1)); + CRYPT_FREE(cd); + + _remove_keyfiles(); + + // Handling of legacy "plain" hash (no hash) + params.hash = "plain"; + // 0 1 2 3 4 5 6 7 8 9 a b c d e f + mk_hex = "aabbcaffeecaffeecaffeecaffeecaff"; + key_size = 16; + crypt_decode_key(key, mk_hex, key_size); + OK_(prepare_keyfile(KEYFILE1, key, strlen(mk_hex) / 2)); + OK_(crypt_init(&cd, DEVICE_1)); + OK_(crypt_format(cd, CRYPT_PLAIN, "aes", "cbc-essiv:sha256", NULL, NULL, 16, ¶ms)); + OK_(crypt_activate_by_keyfile(cd, CDEVICE_1, CRYPT_ANY_SLOT, KEYFILE1, key_size, 0)); + OK_(get_key_dm(CDEVICE_1, key, sizeof(key))); + OK_(strcmp(key, mk_hex)); + OK_(crypt_deactivate(cd, CDEVICE_1)); + CRYPT_FREE(cd); + + _remove_keyfiles(); + + // hash sha256 + params.hash = "sha256"; + OK_(crypt_init(&cd, DEVICE_1)); + OK_(crypt_format(cd, CRYPT_PLAIN, "aes", "cbc-essiv:sha256", NULL, NULL, 16, ¶ms)); + + // 0 1 2 3 4 5 6 7 8 9 a b c d e f + mk_hex = "c62e4615bd39e222572f3a1bf7c2132e"; + keystr = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; + key_size = strlen(keystr); // 32 + OK_(prepare_keyfile(KEYFILE1, keystr, strlen(keystr))); + OK_(crypt_activate_by_keyfile(cd, CDEVICE_1, CRYPT_ANY_SLOT, KEYFILE1, key_size, 0)); + OK_(get_key_dm(CDEVICE_1, key, sizeof(key))); + OK_(strcmp(key, mk_hex)); + OK_(crypt_deactivate(cd, CDEVICE_1)); + + // Read full keyfile + OK_(crypt_activate_by_keyfile(cd, CDEVICE_1, CRYPT_ANY_SLOT, KEYFILE1, 0, 0)); + OK_(get_key_dm(CDEVICE_1, key, sizeof(key))); + OK_(strcmp(key, mk_hex)); + OK_(crypt_deactivate(cd, CDEVICE_1)); + + _remove_keyfiles(); + + // Limit keyfile read + keystr = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxAAAAAAAA"; + OK_(prepare_keyfile(KEYFILE1, keystr, strlen(keystr))); + OK_(crypt_activate_by_keyfile(cd, CDEVICE_1, CRYPT_ANY_SLOT, KEYFILE1, key_size, 0)); + OK_(get_key_dm(CDEVICE_1, key, sizeof(key))); + OK_(strcmp(key, mk_hex)); + OK_(crypt_deactivate(cd, CDEVICE_1)); + + // Full keyfile + OK_(crypt_activate_by_keyfile(cd, CDEVICE_1, CRYPT_ANY_SLOT, KEYFILE1, 0, 0)); + OK_(get_key_dm(CDEVICE_1, key, sizeof(key))); + OK_(strcmp(key, "0e49cb34a1dee1df33f6505e4de44a66")); + OK_(crypt_deactivate(cd, CDEVICE_1)); + + _remove_keyfiles(); + + // FIXME: add keyfile="-" tests somehow + + CRYPT_FREE(cd); +} + +static void VerityTest(void) +{ + const char *salt_hex = "20c28ffc129c12360ba6ceea2b6cf04e89c2b41cfe6b8439eb53c1897f50df7b"; + const char *root_hex = "ab018b003a967fc782effb293b6dccb60b4f40c06bf80d16391acf686d28b5d6"; + char salt[256], root_hash[256]; + struct crypt_active_device cad; + struct crypt_params_verity params = { + .data_device = DEVICE_EMPTY, + .salt = salt, + .data_size = 0, /* whole device */ + .hash_area_offset = 0, + .flags = CRYPT_VERITY_CREATE_HASH, + }; + + crypt_decode_key(salt, salt_hex, strlen(salt_hex) / 2); + crypt_decode_key(root_hash, root_hex, strlen(root_hex) / 2); + + /* Format */ + OK_(crypt_init(&cd, DEVICE_2)); + + /* block size */ + params.data_block_size = 333; + FAIL_(crypt_format(cd, CRYPT_VERITY, NULL, NULL, NULL, NULL, 0, ¶ms), + "Unsupported block size."); + params.data_block_size = 4096; + params.hash_block_size = 333; + FAIL_(crypt_format(cd, CRYPT_VERITY, NULL, NULL, NULL, NULL, 0, ¶ms), + "Unsupported block size."); + params.hash_block_size = 4096; + + /* salt size */ + params.salt_size = 257; + FAIL_(crypt_format(cd, CRYPT_VERITY, NULL, NULL, NULL, NULL, 0, ¶ms), + "Too large salt."); + params.salt_size = 32; + + /* hash_type */ + params.hash_type = 3; + FAIL_(crypt_format(cd, CRYPT_VERITY, NULL, NULL, NULL, NULL, 0, ¶ms), + "Unsupported hash type."); + params.hash_type = 1; + params.hash_name = "blah"; + FAIL_(crypt_format(cd, CRYPT_VERITY, NULL, NULL, NULL, NULL, 0, ¶ms), + "Unsupported hash name."); + params.hash_name = "sha256"; + + OK_(crypt_format(cd, CRYPT_VERITY, NULL, NULL, NULL, NULL, 0, ¶ms)); + CRYPT_FREE(cd); + + params.data_device = NULL; + OK_(crypt_init_data_device(&cd, DEVICE_2, DEVICE_EMPTY)); + OK_(crypt_format(cd, CRYPT_VERITY, NULL, NULL, NULL, NULL, 0, ¶ms)); + EQ_(strcmp(DEVICE_2, crypt_get_metadata_device_name(cd)), 0); + CRYPT_FREE(cd); + + /* Verify */ + OK_(crypt_init(&cd, DEVICE_2)); + memset(¶ms, 0, sizeof(params)); + params.data_device = DEVICE_EMPTY; + params.flags = CRYPT_VERITY_CHECK_HASH; + OK_(crypt_load(cd, CRYPT_VERITY, ¶ms)); + + /* check verity params */ + EQ_(crypt_get_volume_key_size(cd), 32); + OK_(strcmp(CRYPT_VERITY, crypt_get_type(cd))); + memset(¶ms, 0, sizeof(params)); + OK_(crypt_get_verity_info(cd, ¶ms)); + OK_(strcmp("sha256", params.hash_name)); + EQ_(strlen(salt_hex) / 2, params.salt_size); + OK_(memcmp(salt, params.salt, params.salt_size)); + EQ_(4096, params.data_block_size); + EQ_(4096, params.hash_block_size); + EQ_(1, params.hash_type); + EQ_(crypt_get_volume_key_size(cd), 32); + + OK_(crypt_activate_by_volume_key(cd, NULL, root_hash, 32, 0)); + OK_(crypt_set_data_device(cd, DEVICE_1)); + FAIL_(crypt_activate_by_volume_key(cd, NULL, root_hash, 32, 0), "Data corrupted");; + + OK_(crypt_set_data_device(cd, DEVICE_EMPTY)); + if (crypt_activate_by_volume_key(cd, CDEVICE_1, root_hash, 32, + CRYPT_ACTIVATE_READONLY) == -ENOTSUP) { + printf("WARNING: kernel dm-verity not supported, skipping test.\n"); + CRYPT_FREE(cd); + return; + } + OK_(crypt_get_active_device(cd, CDEVICE_1, &cad)); + EQ_(CRYPT_ACTIVATE_READONLY, cad.flags); + CRYPT_FREE(cd); + + OK_(crypt_init_by_name(&cd, CDEVICE_1)); + OK_(crypt_deactivate(cd, CDEVICE_1)); + + /* hash fail */ + root_hash[1] = ~root_hash[1]; + OK_(crypt_activate_by_volume_key(cd, CDEVICE_1, root_hash, 32, CRYPT_ACTIVATE_READONLY)); + /* Be sure there was some read activity to mark device corrupted. */ + _system("blkid " DMDIR CDEVICE_1, 0); + OK_(crypt_get_active_device(cd, CDEVICE_1, &cad)); + EQ_(CRYPT_ACTIVATE_READONLY|CRYPT_ACTIVATE_CORRUPTED, cad.flags); + OK_(crypt_deactivate(cd, CDEVICE_1)); + root_hash[1] = ~root_hash[1]; + + /* data fail */ + OK_(crypt_set_data_device(cd, DEVICE_1)); + OK_(crypt_activate_by_volume_key(cd, CDEVICE_1, root_hash, 32, CRYPT_ACTIVATE_READONLY)); + _system("blkid " DMDIR CDEVICE_1, 0); + OK_(crypt_get_active_device(cd, CDEVICE_1, &cad)); + EQ_(CRYPT_ACTIVATE_READONLY|CRYPT_ACTIVATE_CORRUPTED, cad.flags); + OK_(crypt_deactivate(cd, CDEVICE_1)); + + CRYPT_FREE(cd); +} + +static void TcryptTest(void) +{ + struct crypt_active_device cad; + const char *passphrase = "aaaaaaaaaaaa"; + const char *kf1 = "tcrypt-images/keyfile1"; + const char *kf2 = "tcrypt-images/keyfile2"; + const char *keyfiles[] = { kf1, kf2 }; + struct crypt_params_tcrypt params = { + .passphrase = passphrase, + .passphrase_size = strlen(passphrase), + .keyfiles = keyfiles, + .keyfiles_count = 2, + }; + double enc_mbr = 0, dec_mbr = 0; + const char *tcrypt_dev = "tcrypt-images/tck_5-sha512-xts-aes"; + const char *tcrypt_dev2 = "tcrypt-images/tc_5-sha512-xts-serpent-twofish-aes"; + size_t key_size = 64; + char key[key_size], key_def[key_size]; + const char *key_hex = + "98dee64abe44bbf41d171c1f7b3e8eacda6d6b01f459097459a167f8c2872a96" + "3979531d1cdc18af62757cf22286f16f8583d848524f128d7594ac2082668c73"; + int r; + + crypt_decode_key(key_def, key_hex, strlen(key_hex) / 2); + + // First ensure we can use af_alg skcipher interface + r = crypt_benchmark(NULL, "aes", "xts", 512, 16, 1024, &enc_mbr, &dec_mbr); + if (r == -ENOTSUP || r == -ENOENT) { + printf("WARNING: algif_skcipher interface not present, skipping test.\n"); + return; + } + + OK_(crypt_init(&cd, tcrypt_dev)); + params.passphrase_size--; + FAIL_(crypt_load(cd, CRYPT_TCRYPT, ¶ms), "Wrong passphrase"); + params.passphrase_size++; + OK_(crypt_load(cd, CRYPT_TCRYPT, ¶ms)); + + // check params after load + OK_(strcmp("xts-plain64", crypt_get_cipher_mode(cd))); + OK_(strcmp("aes", crypt_get_cipher(cd))); + EQ_(key_size, crypt_get_volume_key_size(cd)); + EQ_(256, crypt_get_iv_offset(cd)); + EQ_(256, crypt_get_data_offset(cd)); + + memset(key, 0, key_size); + + key_size--; + // small buffer + FAIL_(crypt_volume_key_get(cd, CRYPT_ANY_SLOT, key, &key_size, NULL, 0), "small buffer"); + key_size++; + OK_(crypt_volume_key_get(cd, CRYPT_ANY_SLOT, key, &key_size, NULL, 0)); + OK_(memcmp(key, key_def, key_size)); + + reset_log(); + OK_(crypt_dump(cd)); + OK_(!(global_lines != 0)); + reset_log(); + + OK_(crypt_activate_by_volume_key(cd, CDEVICE_1, NULL, 0, CRYPT_ACTIVATE_READONLY)); + NULL_(crypt_get_metadata_device_name(cd)); + CRYPT_FREE(cd); + + OK_(crypt_init_by_name_and_header(&cd, CDEVICE_1, NULL)); + EQ_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE); + + FAIL_(crypt_volume_key_get(cd, CRYPT_ANY_SLOT, key, &key_size, NULL, 0), "Need crypt_load"); + + // check params after init_by_name + OK_(strcmp("xts-plain64", crypt_get_cipher_mode(cd))); + OK_(strcmp("aes", crypt_get_cipher(cd))); + EQ_(key_size, crypt_get_volume_key_size(cd)); + EQ_(256, crypt_get_iv_offset(cd)); + EQ_(256, crypt_get_data_offset(cd)); + + OK_(crypt_get_active_device(cd, CDEVICE_1, &cad)); + EQ_(CRYPT_ACTIVATE_READONLY, cad.flags); + EQ_(256, cad.offset); + EQ_(256, cad.iv_offset); + EQ_(72, cad.size); + + OK_(crypt_deactivate(cd, CDEVICE_1)); + CRYPT_FREE(cd); + + // init with detached header is not supported + OK_(crypt_init_data_device(&cd, tcrypt_dev2, DEVICE_2)); + FAIL_(crypt_load(cd, CRYPT_TCRYPT, ¶ms), "can't use tcrypt with separate metadata device"); + CRYPT_FREE(cd); + + // Following test uses non-FIPS algorithms in the cipher chain + if(_fips_mode) + return; + + OK_(crypt_init(&cd, tcrypt_dev2)); + params.keyfiles = NULL; + params.keyfiles_count = 0; + r = crypt_load(cd, CRYPT_TCRYPT, ¶ms); + if (r < 0) { + printf("WARNING: cannot use non-AES encryption, skipping test.\n"); + CRYPT_FREE(cd); + return; + } + OK_(crypt_activate_by_volume_key(cd, CDEVICE_1, NULL, 0, CRYPT_ACTIVATE_READONLY)); + CRYPT_FREE(cd); + + // Deactivate the whole chain + EQ_(crypt_status(NULL, CDEVICE_1 "_1"), CRYPT_BUSY); + OK_(crypt_deactivate(NULL, CDEVICE_1)); + EQ_(crypt_status(NULL, CDEVICE_1 "_1"), CRYPT_INACTIVE); +} + +static void IntegrityTest(void) +{ + struct crypt_params_integrity params = { + .tag_size = 4, + .integrity = "crc32c", + .sector_size = 4096, + }, ip = {}; + int ret; + + // FIXME: this should be more detailed + + OK_(crypt_init(&cd,DEVICE_1)); + FAIL_(crypt_format(cd,CRYPT_INTEGRITY,NULL,NULL,NULL,NULL,0,NULL), "params field required"); + ret = crypt_format(cd,CRYPT_INTEGRITY,NULL,NULL,NULL,NULL,0,¶ms); + if (ret < 0) { + printf("WARNING: cannot format integrity device, skipping test.\n"); + CRYPT_FREE(cd); + return; + } + OK_(crypt_get_integrity_info(cd, &ip)); + EQ_(ip.tag_size, params.tag_size); + EQ_(ip.sector_size, params.sector_size); + EQ_(crypt_get_sector_size(cd), params.sector_size); + EQ_(ip.interleave_sectors, params.interleave_sectors); + EQ_(ip.journal_size, params.journal_size); + EQ_(ip.journal_watermark, params.journal_watermark); + OK_(strcmp(ip.integrity,params.integrity)); + FAIL_(crypt_set_uuid(cd,DEVICE_1_UUID),"can't set uuid to integrity device"); + CRYPT_FREE(cd); + + OK_(crypt_init(&cd, DEVICE_1)); + OK_(crypt_load(cd, CRYPT_INTEGRITY, NULL)); + CRYPT_FREE(cd); + + OK_(crypt_init(&cd, DEVICE_1)); + //params.tag_size = 8; + //FAIL_(crypt_load(cd, CRYPT_INTEGRITY, ¶ms), "tag size mismatch"); + params.tag_size = 4; + OK_(crypt_load(cd, CRYPT_INTEGRITY, ¶ms)); + OK_(crypt_activate_by_volume_key(cd, CDEVICE_1, NULL, 0, 0)); + EQ_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE); + CRYPT_FREE(cd); + + memset(&ip, 0, sizeof(ip)); + OK_(crypt_init_by_name(&cd, CDEVICE_1)); + OK_(crypt_get_integrity_info(cd, &ip)); + EQ_(ip.tag_size, params.tag_size); + OK_(strcmp(ip.integrity,params.integrity)); + OK_(strcmp(CRYPT_INTEGRITY,crypt_get_type(cd))); + OK_(crypt_deactivate(cd, CDEVICE_1)); + CRYPT_FREE(cd); +} + +// Check that gcrypt is properly initialised in format +static void NonFIPSAlg(void) +{ + struct crypt_params_luks1 params = {0}; + char key[128] = ""; + size_t key_size = 128 / 8; + const char *cipher = "aes"; + const char *cipher_mode = "cbc-essiv:sha256"; + int ret; + + OK_(crypt_init(&cd, DEVICE_2)); + params.hash = "sha256"; + OK_(crypt_format(cd, CRYPT_LUKS1, cipher, cipher_mode, NULL, key, key_size, ¶ms)); + FAIL_(crypt_format(cd, CRYPT_LUKS1, cipher, cipher_mode, NULL, key, key_size, ¶ms), + "Already formatted."); + CRYPT_FREE(cd); + + params.hash = "whirlpool"; + OK_(crypt_init(&cd, DEVICE_2)); + ret = crypt_format(cd, CRYPT_LUKS1, cipher, cipher_mode, NULL, key, key_size, ¶ms); + if (ret < 0) { + printf("WARNING: whirlpool not supported, skipping test.\n"); + CRYPT_FREE(cd); + return; + } + CRYPT_FREE(cd); + + params.hash = "md5"; + OK_(crypt_init(&cd, DEVICE_2)); + FAIL_(crypt_format(cd, CRYPT_LUKS1, cipher, cipher_mode, NULL, key, key_size, ¶ms), + "MD5 unsupported, too short"); + CRYPT_FREE(cd); +} + +static void int_handler(int sig __attribute__((__unused__))) +{ + _quit++; +} + +int main(int argc, char *argv[]) +{ + struct sigaction sa = { .sa_handler = int_handler }; + int i; + + if (getuid() != 0) { + printf("You must be root to run this test.\n"); + exit(77); + } +#ifndef NO_CRYPTSETUP_PATH + if (getenv("CRYPTSETUP_PATH")) { + printf("Cannot run this test with CRYPTSETUP_PATH set.\n"); + exit(77); + } +#endif + for (i = 1; i < argc; i++) { + if (!strcmp("-v", argv[i]) || !strcmp("--verbose", argv[i])) + _verbose = 1; + else if (!strcmp("--debug", argv[i])) + _debug = _verbose = 1; + } + + /* Handle interrupt properly */ + sigaction(SIGINT, &sa, NULL); + sigaction(SIGTERM, &sa, NULL); + + register_cleanup(_cleanup); + + _cleanup(); + if (_setup()) { + printf("Cannot set test devices.\n"); + _cleanup(); + exit(77); + } + + crypt_set_debug_level(_debug ? CRYPT_DEBUG_ALL : CRYPT_DEBUG_NONE); + + RUN_(NonFIPSAlg, "Crypto is properly initialised in format"); //must be the first! + RUN_(AddDevicePlain, "A plain device API creation"); + RUN_(HashDevicePlain, "A plain device API hash"); + RUN_(AddDeviceLuks, "Format and use LUKS device"); + RUN_(LuksHeaderLoad, "Header load"); + RUN_(LuksHeaderRestore, "LUKS header restore"); + RUN_(LuksHeaderBackup, "LUKS header backup"); + RUN_(ResizeDeviceLuks, "LUKS device resize"); + RUN_(UseLuksDevice, "Use pre-formated LUKS device"); + RUN_(SuspendDevice, "Suspend/Resume"); + RUN_(UseTempVolumes, "Format and use temporary encrypted device"); + RUN_(CallbacksTest, "API callbacks"); + RUN_(VerityTest, "DM verity"); + RUN_(TcryptTest, "Tcrypt API"); + RUN_(IntegrityTest, "Integrity API"); + + _cleanup(); + return 0; +} diff --git a/tests/api_test.h b/tests/api_test.h new file mode 100644 index 0000000..c219891 --- /dev/null +++ b/tests/api_test.h @@ -0,0 +1,122 @@ +/* + * cryptsetup library API check functions + * + * Copyright (C) 2009-2019 Red Hat, Inc. All rights reserved. + * Copyright (C) 2009-2019 Milan Broz + * Copyright (C) 2016-2019 Ondrej Kozina + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#ifndef API_TEST_H +#define API_TEST_H + +#include +#include + +extern char *THE_LOOP_DEV; +extern int _debug; +extern int global_lines; +extern int _quit; +extern int _verbose; +extern uint64_t t_dev_offset; + +int t_device_size(const char *device, uint64_t *size); +int t_dm_check_versions(void); +int t_dm_crypt_keyring_support(void); +int t_dm_crypt_cpu_switch_support(void); +int t_dm_crypt_discard_support(void); + +int fips_mode(void); + +int create_dmdevice_over_loop(const char *dm_name, const uint64_t size); + +int get_key_dm(const char *name, char *buffer, unsigned int buffer_size); + +int prepare_keyfile(const char *name, const char *passphrase, int size); + +int crypt_decode_key(char *key, const char *hex, unsigned int size); + +void global_log_callback(int level, const char *msg, void *usrptr); + +void reset_log(void); + +int _system(const char *command, int warn); + +void register_cleanup(void (*cleanup)(void)); + +void check_ok(int status, int line, const char *func); +void check_ok_return(int status, int line, const char *func); +void check_ko(int status, int line, const char *func); +void check_equal(int line, const char *func, int64_t x, int64_t y); +void check_null(int line, const char *func, const void *x); +void check_notnull(int line, const char *func, const void *x); +void xlog(const char *msg, const char *tst, const char *func, int line, const char *txt); + +/* crypt_device context must be "cd" to parse error properly here */ +#define OK_(x) do { xlog("(success)", #x, __FUNCTION__, __LINE__, NULL); \ + check_ok((x), __LINE__, __FUNCTION__); \ + } while(0) +#define NOTFAIL_(x, y) do { xlog("(notfail)", #x, __FUNCTION__, __LINE__, y); \ + check_ok_return((x), __LINE__, __FUNCTION__); \ + } while(0) +#define FAIL_(x, y) do { xlog("(fail) ", #x, __FUNCTION__, __LINE__, y); \ + check_ko((x), __LINE__, __FUNCTION__); \ + } while(0) +#define EQ_(x, y) do { int64_t _x = (x), _y = (y); \ + xlog("(equal) ", #x " == " #y, __FUNCTION__, __LINE__, NULL); \ + if (_x != _y) check_equal(__LINE__, __FUNCTION__, _x, _y); \ + } while(0) +#define NULL_(x) do { xlog("(null) ", #x, __FUNCTION__, __LINE__, NULL); \ + check_null(__LINE__, __FUNCTION__, (x)); \ + } while(0) +#define NOTNULL_(x) do { xlog("(notnull)", #x, __FUNCTION__, __LINE__, NULL); \ + check_notnull(__LINE__, __FUNCTION__, (x)); \ + } while(0) +#define RUN_(x, y) do { reset_log(); \ + printf("%s: %s\n", #x, (y)); x(); \ + } while (0) + +#define CRYPT_FREE(x) do { crypt_free(x); x = NULL; } while (0) + +#define SECTOR_SHIFT 9L +#define SECTOR_SIZE 512 +#define TST_LOOP_FILE_SIZE (((1<<20)*100)>>SECTOR_SHIFT) +#define DIV_ROUND_UP(n,d) (((n) + (d) - 1) / (d)) +#define DIV_ROUND_UP_MODULO(n,d) (DIV_ROUND_UP(n,d)*(d)) + +/* Device mapper backend - kernel support flags */ +#define T_DM_KEY_WIPE_SUPPORTED (1 << 0) /* key wipe message */ +#define T_DM_LMK_SUPPORTED (1 << 1) /* lmk mode */ +#define T_DM_SECURE_SUPPORTED (1 << 2) /* wipe (secure) buffer flag */ +#define T_DM_PLAIN64_SUPPORTED (1 << 3) /* plain64 IV */ +#define T_DM_DISCARDS_SUPPORTED (1 << 4) /* discards/TRIM option is supported */ +#define T_DM_VERITY_SUPPORTED (1 << 5) /* dm-verity target supported */ +#define T_DM_TCW_SUPPORTED (1 << 6) /* tcw (TCRYPT CBC with whitening) */ +#define T_DM_SAME_CPU_CRYPT_SUPPORTED (1 << 7) /* same_cpu_crypt */ +#define T_DM_SUBMIT_FROM_CRYPT_CPUS_SUPPORTED (1 << 8) /* submit_from_crypt_cpus */ +#define T_DM_VERITY_ON_CORRUPTION_SUPPORTED (1 << 9) /* ignore/restart_on_corruption, ignore_zero_block */ +#define T_DM_VERITY_FEC_SUPPORTED (1 << 10) /* Forward Error Correction (FEC) */ +#define T_DM_KERNEL_KEYRING_SUPPORTED (1 << 11) /* dm-crypt allows loading kernel keyring keys */ +#define T_DM_INTEGRITY_SUPPORTED (1 << 12) /* dm-integrity target supported */ +//FIXME add T_DM_SECTOR_SIZE once we have version + +/* loop helpers */ +int loop_device(const char *loop); +int loop_attach(char **loop, const char *file, int offset, + int autoclear, int *readonly); +int loop_detach(const char *loop); + +#endif diff --git a/tests/blkid-luks2-pv.img.xz b/tests/blkid-luks2-pv.img.xz new file mode 100644 index 0000000000000000000000000000000000000000..c9d0e57160f68fe87f631fa08d2d0354e79c1c88 GIT binary patch literal 5236 zcmeI0_fr$d0>=}iOBF%Eh(|{}N)Q35N9Z8Z!a?XIG${!s^pa2%bJAPxMC1&}L69O% zKza{&f{L_gs5z0)L0UrYyqWh0+?#XW%p3N{ot@d)&wTg0-~H0nVjLU+0A|Yj1|#M! zf;1Y9<`M%60ltpdq7VjyG0Z}D0RRy6lZIzzEju{DxYY!Zl>XqQ*mlp`lvIn>8GZHu z-A9_U%XMRMX1U5|b?C_pgRv$gC4Qt#8`#m&3e`f2l;rk;xD%TX3n zNn*wCP~-zeRNhg=a8r`A`jQsRaXKZ-1Sw7Ga{1!m> z3Cs%;1~KtN^}uv;W__t%AW#O@+1Kl6@>RCZN)8YS~BlSrr~b*kEc8vzx& zLEJI-B}f49fLnXAssW43`lwg2Ect1`dmth&#> zndthuaHb@AdStVrK~iH(zQraNi#dKkbH5t@S@IncrdA!wQ2hDhq-RI6ay!>hE^8;X z4JO=j+lHH`nQ7dz?t*4(C2<8ZVr<|N6FHYxc?Ed>=cgE|O5f}H#5=VP+F3H{;sT}y zcE;L*R|Ht-L{~)R2O8@8A0bW&ixvairXY2un;ZeC7x?vu>6;3URXP4g9!a8t@$%)8 z`|aVJLxd^qTUwhr#kgBaBe6Mj6lSh}N|khE7@as)px?MFHvQ{G@3hFo%``u+`%xW; zqup&v%DDO-!63pZ-{;9dL^sF<>V*<7sanbiJZDwwaGBdv@4G(jGIDC7h@q9Led;hi z7{4F9dt%b!xZ_S;XErAAJ*g1g0YAs)TlsEW877`h*UL zHtsR;8ny>^+7-!&>>ZtbUh1@cElvkM4x}fwqbve@RCeqhrVPu1`l!*VjEX5*?UNF; zB?wDH6%6i%T`z|Z^~`r3XplF+piHStCK3270gj}x_?j+TMMAvV&MV!RYaWOvhAJj;Zb*SegyPMH4pliTpz+gh8Y2A+k4$OT z)7g)hSm53g!5*WKQg$j{B1;gXCYP>Yvt2;Ju@PT;A!N_#_ZoSY#;wB!;#OLn#++SK ze@kmbj0U?Z$LyEK4Blxx9E&C);1~$;Vbq&6WNh>+%JDm)t#O0l_rvrC3b+nWhGJdM zsk2~xOR+(PFJswO!a-B>_Zx5UZwHzI85^w@NiHn--rU;y$9VOfTy5(ia*XtVKF#H2 zDLJESU!ZqO;qqFK_4`U&Vlf31*J;^1137jIJMmX;1Nz^En-h*dNnM)If9F@W14**; zZ$n)$TNN@-pBT>UoF>RwmY?0N=3J)qm-vSF#d^IHlMah1bcZ@vM(4I;^!EJ4K&h=l zEQ2BLR_l`os|&mX9r7=#TGpX$ezOtn83oxr=m@_Twr8TGsQ!sRDSL!INOlZ@%|{%^O2+07h1X7B;80jOcN<@Ao~IIzg$ z=5%oI|KVBx70lMWy3bF6{R3T|0{e#-`4reGuy6ZRoGR>8VW$fFw<6SOtoUEV-BS-c z^{{X6VQ9`601M#Nly4^*0GN-XP*Zs3N140kfoSv(|EbXc(M@488w>_u`tKf%!N4~& zjCD)|LvMOmzsQlL;P0{>t}lruy;bbj&;pv*B@AP+7K(W8>BOgt45y$3fe1VXWG+k#v z=Gg5TY1zDxE85@edn&iTlrQyHTL=L3d}-Brf(&p6Fb)3QBhtT8_-mdUyT)H7qa)A! JbrCbn@lV6}MUemi literal 0 HcmV?d00001 diff --git a/tests/blockwise-compat b/tests/blockwise-compat new file mode 100755 index 0000000..a764020 --- /dev/null +++ b/tests/blockwise-compat @@ -0,0 +1,377 @@ +#!/bin/bash + +# set _FORCE_LOCAL environment variable to run blockwise unit tests even on local +# nfs. Some tests will fail because nfs is eager to write for example 4095 bytes +# in O_DIRECT mode. + +BW_UNIT=./unit-utils-io +STRACE=strace +MNT_DIR=./mnt_bwunit +LOCAL_FILE=./blockwise_localfile + +# $1 path to scsi debug bdev +scsi_debug_teardown() { + local _tries=15; + + while [ -b "$1" -a $_tries -gt 0 ]; do + rmmod scsi_debug 2> /dev/null + if [ -b "$1" ]; then + sleep .1 + _tries=$((_tries-1)) + fi + done + + test ! -b "$1" || rmmod scsi_debug +} + +cleanup() { + if [ -d "$MNT_DIR" ] ; then + umount -f $MNT_DIR 2>/dev/null + rmdir $MNT_DIR 2>/dev/null + fi + rm -f $LOCAL_FILE 2> /dev/null + scsi_debug_teardown "$DEV" || exit 100 +} + +fail() +{ + if [ -n "$1" ] ; then echo "FAIL $1" ; else echo "FAIL" ; fi + cleanup + exit 100 +} + +fail_count() +{ + echo "$MSG[FAIL]" + FAILS=$((FAILS+1)) +} + +warn_count() +{ + echo "$MSG[WARNING]" + WARNS=$((WARNS+1)) +} + +skip() +{ + echo "TEST SKIPPED: $1" + cleanup + exit 0 +} + +add_device() { + modprobe scsi_debug $@ delay=0 + if [ $? -ne 0 ] ; then + echo "This kernel seems to not support proper scsi_debug module, test skipped." + exit 77 + fi + DEV=$(grep -l -e scsi_debug /sys/block/*/device/model | cut -f4 -d /) + DEV="/dev/$DEV" + [ -b $DEV ] || fail "Cannot find $DEV." +} + +falloc() { + dd if=/dev/zero of=$2 bs=1M count=$1 2> /dev/null +} + +run_all_in_fs() { + for file in $(ls img_fs_*.img.xz) ; do + echo "Run tests in $file put on top block device." + xz -d -c $file | dd of=$DEV bs=1M 2>/dev/null || fail "bad image" + [ ! -d $MNT_DIR ] && mkdir $MNT_DIR + mount $DEV $MNT_DIR + if [ $? -ne 0 ]; then + echo "Mounting image $file failed, skipped." + continue; + fi + rm -rf $MNT_DIR/* 2>/dev/null + local tfile=$MNT_DIR/bwunit_tstfile + falloc $DEVSIZEMB $tfile || fail "enospc?" + local iobsize=$(stat -c "%o" $tfile) + test -n "$iobsize" -a $iobsize -gt 0 || fail + local oldbsize=$BSIZE + BSIZE=$iobsize + run_all $tfile + BSIZE=$oldbsize + umount $MNT_DIR + done +} + +trunc_file() { + test $1 -eq 0 || truncate -c -s $1 $2 2>/dev/null || dd if=/dev/zero of=$2 bs=$1 count=1 2>/dev/null || fail "Failed to truncate test file $2." +} + +RUN() { + local _res=$1 + shift + local _dev=$1 + shift + local _fn=$1 + shift + local _type="bdev" + local _fsize=0 + + test -b $_dev || { + _type="file" + _fsize=$(stat -c "%s" $_dev) + } + + case "$_res" in + P) + MSG="Testing $_fn on $_type with params $@ [expecting TRUE]..." + $BW_UNIT $_dev $_fn $@ + if [ $? -ne 0 ]; then + if [ $_type = "file" ]; then + warn_count + else + fail_count + fi + trunc_file $_fsize $_dev + test -z "$STRACE" || $STRACE -o ./$BW_UNIT-fail-$FAILS-should-pass.log $BW_UNIT $_dev $_fn $@ 2> /dev/null + else + MSG="$MSG[OK]" + fi + ;; + F) + MSG="Testing $_fn on $_type with params $@ [expecting FALSE]..." + $BW_UNIT $_dev $_fn $@ 2> /dev/null + if [ $? -eq 0 ]; then + if [ $_type = "file" ]; then + warn_count + else + fail_count + fi + trunc_file $_fsize $_dev + test -z "$STRACE" || $STRACE -o ./$BW_UNIT-fail-$FAILS-should-fail.log $BW_UNIT $_dev $_fn $@ 2> /dev/null + else + MSG="$MSG[OK]" + fi + ;; + *) + fail "Internal test error" + ;; + esac + + trunc_file $_fsize $_dev +} + +run_all() { + if [ -b "$1" ]; then + BD_FAIL="F" + else + BD_FAIL="P" + fi + + # buffer io support only blocksize aligned ios + # device/file fn_name length + RUN "P" $1 read_buffer $BSIZE + RUN "P" $1 read_buffer $((2*BSIZE)) + RUN "F" $1 read_buffer $((BSIZE-1)) + RUN "F" $1 read_buffer $((BSIZE+1)) + RUN "P" $1 read_buffer 0 + + RUN "P" $1 write_buffer $BSIZE + RUN "P" $1 write_buffer $((2*BSIZE)) + + RUN "F" $1 write_buffer $((BSIZE-1)) + RUN "F" $1 write_buffer $((BSIZE+1)) + RUN "F" $1 write_buffer 0 + + # basic blockwise functions + # device/file fn_name length bsize + RUN "P" $1 read_blockwise 0 $BSIZE + RUN "P" $1 read_blockwise $((BSIZE)) $BSIZE + RUN "P" $1 read_blockwise $((BSIZE-1)) $BSIZE + RUN "P" $1 read_blockwise $((BSIZE+1)) $BSIZE + RUN "P" $1 read_blockwise $((DEVSIZE)) $BSIZE + RUN "P" $1 read_blockwise $((DEVSIZE-1)) $BSIZE + RUN "F" $1 read_blockwise $((DEVSIZE+1)) $BSIZE + + RUN "P" $1 write_blockwise 0 $BSIZE + RUN "P" $1 write_blockwise $((BSIZE)) $BSIZE + RUN "P" $1 write_blockwise $((BSIZE-1)) $BSIZE + RUN "P" $1 write_blockwise $((BSIZE+1)) $BSIZE + RUN "P" $1 write_blockwise $((DEVSIZE)) $BSIZE + RUN "P" $1 write_blockwise $((DEVSIZE-1)) $BSIZE + RUN "$BD_FAIL" $1 write_blockwise $((DEVSIZE+1)) $BSIZE + + # seek variant blockwise functions + # device/file fn_name length bsize offset + RUN "P" $1 read_lseek_blockwise 0 $BSIZE 0 + RUN "P" $1 read_lseek_blockwise 0 $BSIZE 1 + RUN "P" $1 read_lseek_blockwise 0 $BSIZE $((DEVSIZE)) + # length = 0 is significant here + RUN "P" $1 read_lseek_blockwise 0 $BSIZE $((DEVSIZE+1)) + + # beginning of device + RUN "P" $1 read_lseek_blockwise 1 $BSIZE 0 + RUN "P" $1 read_lseek_blockwise 1 $BSIZE 1 + RUN "P" $1 read_lseek_blockwise 1 $BSIZE $((BSIZE-1)) + RUN "P" $1 read_lseek_blockwise 1 $BSIZE $((BSIZE/2)) + + # somewhere in the 'middle' + RUN "P" $1 read_lseek_blockwise 1 $BSIZE $BSIZE + RUN "P" $1 read_lseek_blockwise 1 $BSIZE $((BSIZE+1)) + RUN "P" $1 read_lseek_blockwise 1 $BSIZE $((2*BSIZE-1)) + RUN "P" $1 read_lseek_blockwise 1 $BSIZE $((BSIZE+BSIZE/2-1)) + + # cross-sector tests + RUN "P" $1 read_lseek_blockwise 2 $BSIZE $((BSIZE-1)) + RUN "P" $1 read_lseek_blockwise $((BSIZE+1)) $BSIZE $((BSIZE-1)) + RUN "P" $1 read_lseek_blockwise $((BSIZE+2)) $BSIZE $((BSIZE-1)) + RUN "P" $1 read_lseek_blockwise 2 $BSIZE $((2*BSIZE-1)) + RUN "P" $1 read_lseek_blockwise $((BSIZE+1)) $BSIZE $((2*BSIZE-1)) + RUN "P" $1 read_lseek_blockwise $((BSIZE+2)) $BSIZE $((2*BSIZE-1)) + + # including one whole sector + RUN "P" $1 read_lseek_blockwise $((BSIZE+2)) $BSIZE $((BSIZE)) + RUN "P" $1 read_lseek_blockwise $((2*BSIZE)) $BSIZE $((BSIZE+1)) + RUN "P" $1 read_lseek_blockwise $((2*BSIZE)) $BSIZE $((BSIZE-1)) + RUN "P" $1 read_lseek_blockwise $((BSIZE+2)) $BSIZE $((BSIZE-1)) + RUN "P" $1 read_lseek_blockwise $((2*BSIZE)) $BSIZE $((BSIZE+1)) + RUN "P" $1 read_lseek_blockwise $((3*BSIZE-2)) $BSIZE $((BSIZE+1)) + + # hiting exactly the sector boundary + RUN "P" $1 read_lseek_blockwise $((BSIZE-1)) $BSIZE 1 + RUN "P" $1 read_lseek_blockwise $((BSIZE-1)) $BSIZE $((BSIZE+1)) + RUN "P" $1 read_lseek_blockwise $((BSIZE+1)) $BSIZE $((BSIZE-1)) + RUN "P" $1 read_lseek_blockwise $((BSIZE+1)) $BSIZE $((2*BSIZE-1)) + + # device end + RUN "P" $1 read_lseek_blockwise 1 $BSIZE $((DEVSIZE-1)) + RUN "P" $1 read_lseek_blockwise $((BSIZE-1)) $BSIZE $((DEVSIZE-BSIZE+1)) + RUN "P" $1 read_lseek_blockwise $((BSIZE)) $BSIZE $((DEVSIZE-BSIZE)) + RUN "P" $1 read_lseek_blockwise $((BSIZE+1)) $BSIZE $((DEVSIZE-BSIZE-1)) + + # this must fail on both device and file + RUN "F" $1 read_lseek_blockwise 1 $BSIZE $((DEVSIZE)) + RUN "F" $1 read_lseek_blockwise $((BSIZE-1)) $BSIZE $((DEVSIZE-BSIZE+2)) + RUN "F" $1 read_lseek_blockwise $((BSIZE)) $BSIZE $((DEVSIZE-BSIZE+1)) + RUN "F" $1 read_lseek_blockwise $((BSIZE+1)) $BSIZE $((DEVSIZE-BSIZE)) + + RUN "P" $1 write_lseek_blockwise 0 $BSIZE 0 + # TODO: this may pass but must not write a byte (write(0) is undefined). + # Test it with underlying dm-error or phony read/write syscalls. + # Skipping read is optimization. + # HINT: currently it performs useless write and read as well + RUN "P" $1 write_lseek_blockwise 0 $BSIZE 1 + RUN "P" $1 write_lseek_blockwise 0 $BSIZE $BSIZE + + # beginning of device + RUN "P" $1 write_lseek_blockwise 1 $BSIZE 0 + RUN "P" $1 write_lseek_blockwise 1 $BSIZE 1 + RUN "P" $1 write_lseek_blockwise 1 $BSIZE $((BSIZE-1)) + RUN "P" $1 write_lseek_blockwise 1 $BSIZE $((BSIZE/2)) + + # somewhere in the 'middle' + RUN "P" $1 write_lseek_blockwise 1 $BSIZE $BSIZE + RUN "P" $1 write_lseek_blockwise 1 $BSIZE $((BSIZE+1)) + RUN "P" $1 write_lseek_blockwise 1 $BSIZE $((2*BSIZE-1)) + RUN "P" $1 write_lseek_blockwise 1 $BSIZE $((BSIZE+BSIZE/2-1)) + + # cross-sector tests + RUN "P" $1 write_lseek_blockwise 2 $BSIZE $((BSIZE-1)) + RUN "P" $1 write_lseek_blockwise $((BSIZE+1)) $BSIZE $((BSIZE-1)) + RUN "P" $1 write_lseek_blockwise $((BSIZE+2)) $BSIZE $((BSIZE-1)) + RUN "P" $1 write_lseek_blockwise 2 $BSIZE $((2*BSIZE-1)) + RUN "P" $1 write_lseek_blockwise $((BSIZE+1)) $BSIZE $((2*BSIZE-1)) + RUN "P" $1 write_lseek_blockwise $((BSIZE+2)) $BSIZE $((2*BSIZE-1)) + + # including one whole sector + RUN "P" $1 write_lseek_blockwise $((BSIZE+2)) $BSIZE $((BSIZE)) + RUN "P" $1 write_lseek_blockwise $((2*BSIZE)) $BSIZE $((BSIZE+1)) + RUN "P" $1 write_lseek_blockwise $((2*BSIZE)) $BSIZE $((BSIZE-1)) + RUN "P" $1 write_lseek_blockwise $((BSIZE+2)) $BSIZE $((BSIZE-1)) + RUN "P" $1 write_lseek_blockwise $((2*BSIZE)) $BSIZE $((BSIZE+1)) + RUN "P" $1 write_lseek_blockwise $((3*BSIZE-2)) $BSIZE $((BSIZE+1)) + + # hiting exactly the sector boundary + RUN "P" $1 write_lseek_blockwise $((BSIZE-1)) $BSIZE 1 + RUN "P" $1 write_lseek_blockwise $((BSIZE-1)) $BSIZE $((BSIZE+1)) + RUN "P" $1 write_lseek_blockwise $((BSIZE+1)) $BSIZE $((BSIZE-1)) + RUN "P" $1 write_lseek_blockwise $((BSIZE+1)) $BSIZE $((2*BSIZE-1)) + + # device end + RUN "P" $1 write_lseek_blockwise 1 $BSIZE $((DEVSIZE-1)) + RUN "P" $1 write_lseek_blockwise $((BSIZE-1)) $BSIZE $((DEVSIZE-BSIZE+1)) + RUN "P" $1 write_lseek_blockwise $((BSIZE)) $BSIZE $((DEVSIZE-BSIZE)) + RUN "P" $1 write_lseek_blockwise $((BSIZE+1)) $BSIZE $((DEVSIZE-BSIZE-1)) + + # this must fail on device, but pass on file (which is unfortunate and maybe design mistake) + RUN "$BD_FAIL" $1 write_lseek_blockwise 1 $BSIZE $((DEVSIZE)) + RUN "$BD_FAIL" $1 write_lseek_blockwise $((BSIZE-1)) $BSIZE $((DEVSIZE-BSIZE+2)) + RUN "$BD_FAIL" $1 write_lseek_blockwise $((BSIZE)) $BSIZE $((DEVSIZE-BSIZE+1)) + RUN "$BD_FAIL" $1 write_lseek_blockwise $((BSIZE+1)) $BSIZE $((DEVSIZE-BSIZE)) +} + +[ -n "$CRYPTSETUP_PATH" ] && skip "Cannot run this test with CRYPTSETUP_PATH set." + +which $STRACE > /dev/null 2>&1 || unset STRACE +test -x $BW_UNIT || skip "Run \"make `basename $BW_UNIT`\" first" + +FAILS=0 +WARNS=0 +DEVSIZEMB=2 +DEVSIZE=$((DEVSIZEMB*1024*1024)) + +PAGE_SIZE=$(getconf PAGE_SIZE) +echo "System PAGE_SIZE=$PAGE_SIZE" + +echo "Run tests in local filesystem" +falloc $DEVSIZEMB $LOCAL_FILE || fail "Failed to create file in local filesystem." +BSIZE=$(stat -c "%o" $LOCAL_FILE) +if [ $BSIZE -gt $((512*1024)) ]; then + echo "Detected file block size: $BSIZE bytes" + echo "Tuning it down to system page size ($PAGE_SIZE bytes)" + BSIZE=$PAGE_SIZE +fi +run_all $LOCAL_FILE + +[ $(id -u) -eq 0 ] || { + echo "WARNING: You must be root to run remaining tests." + test $FAILS -eq 0 || fail "($FAILS wrong result(s) in total)" + cleanup + exit 0 +} + +DEVBSIZE=512 +BSIZE=$DEVBSIZE +EXP=0 +DEVSIZEMBIMG=32 + +echo "# Create classic 512B drive" +echo "# (logical_block_size=$DEVBSIZE, physical_block_size=$((DEVBSIZE*(1</dev/null) +[ -f /etc/system-fips ] && FIPS_MODE=$(cat /proc/sys/crypto/fips_enabled 2>/dev/null) + +function remove_mapping() +{ + [ -b /dev/mapper/$DEV_NAME3 ] && dmsetup remove --retry $DEV_NAME3 >/dev/null 2>&1 + [ -b /dev/mapper/$DEV_NAME2 ] && dmsetup remove --retry $DEV_NAME2 >/dev/null 2>&1 + [ -b /dev/mapper/$DEV_NAME ] && dmsetup remove --retry $DEV_NAME >/dev/null 2>&1 + losetup -d $LOOPDEV >/dev/null 2>&1 + rm -f $ORIG_IMG $IMG $IMG10 $KEY1 $KEY2 $KEY5 $KEYE $HEADER_IMG $VK_FILE missing-file >/dev/null 2>&1 + rmmod scsi_debug 2> /dev/null + scsi_debug_teardown $DEV +} + +function force_uevent() +{ + DNAME=$(echo $LOOPDEV | cut -f3 -d /) + echo "change" >/sys/block/$DNAME/uevent +} + +function fail() +{ + [ -n "$1" ] && echo "$1" + remove_mapping + echo "FAILED backtrace:" + while caller $frame; do ((frame++)); done + exit 2 +} + +function fips_mode() +{ + [ -n "$FIPS_MODE" ] && [ "$FIPS_MODE" -gt 0 ] +} + +function can_fail_fips() +{ + # Ignore this fail if running in FIPS mode + fips_mode || fail $1 +} + +function skip() +{ + [ -n "$1" ] && echo "$1" + remove_mapping + [ -z "$2" ] && exit $2 + exit 77 +} + +function prepare() +{ + [ -b /dev/mapper/$DEV_NAME ] && dmsetup remove --retry $DEV_NAME >/dev/null 2>&1 + + case "$2" in + file) + remove_mapping + dd if=/dev/zero of=$IMG bs=1k count=10000 >/dev/null 2>&1 + sync + ;; + wipe) + remove_mapping + dd if=/dev/zero of=$IMG bs=1k count=10000 >/dev/null 2>&1 + sync + losetup $LOOPDEV $IMG + ;; + new) + remove_mapping + xz -cd compatimage.img.xz > $IMG + # FIXME: switch to internal loop (no losetup at all) + echo "bad" | $CRYPTSETUP luksOpen --key-slot 0 --test-passphrase $IMG 2>&1 | \ + grep "autoclear flag" && skip "WARNING: Too old kernel, test skipped." + losetup $LOOPDEV $IMG + xz -cd compatv10image.img.xz > $IMG10 + ;; + reuse | *) + if [ ! -e $IMG ]; then + xz -cd compatimage.img.xz > $IMG + losetup $LOOPDEV $IMG + fi + [ ! -e $IMG10 ] && xz -cd compatv10image.img.xz > $IMG10 + ;; + esac + + if [ ! -e $KEY1 ]; then + #dd if=/dev/urandom of=$KEY1 count=1 bs=32 >/dev/null 2>&1 + echo -n $'\x48\xc6\x74\x4f\x41\x4e\x50\xc0\x79\xc2\x2d\x5b\x5f\x68\x84\x17' >$KEY1 + echo -n $'\x9c\x03\x5e\x1b\x4d\x0f\x9a\x75\xb3\x90\x70\x32\x0a\xf8\xae\xc4'>>$KEY1 + fi + + if [ ! -e $KEY2 ]; then + dd if=/dev/urandom of=$KEY2 count=1 bs=16 >/dev/null 2>&1 + fi + + if [ ! -e $KEY5 ]; then + dd if=/dev/urandom of=$KEY5 count=1 bs=16 >/dev/null 2>&1 + fi + + if [ ! -e $KEYE ]; then + touch $KEYE + fi + + cp $IMG $ORIG_IMG + [ -n "$1" ] && echo "CASE: $1" +} + +function check() +{ + sync + [ -z "$1" ] && return + ./differ $ORIG_IMG $IMG $1 || fail +} + +function check_exists() +{ + [ -b /dev/mapper/$DEV_NAME ] || fail + check $1 +} + +# $1 path to scsi debug bdev +scsi_debug_teardown() { + local _tries=15; + + while [ -b "$1" -a $_tries -gt 0 ]; do + rmmod scsi_debug 2> /dev/null + if [ -b "$1" ]; then + sleep .1 + _tries=$((_tries-1)) + fi + done + + test ! -b "$1" || rmmod scsi_debug 2> /dev/null +} + +function add_scsi_device() { + scsi_debug_teardown $DEV + modprobe scsi_debug $@ delay=0 + if [ $? -ne 0 ] ; then + echo "This kernel seems to not support proper scsi_debug module, test skipped." + exit 77 + fi + + sleep 1 + DEV="/dev/"$(grep -l -e scsi_debug /sys/block/*/device/model | cut -f4 -d /) + [ -b $DEV ] || fail "Cannot find $DEV." +} + +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 + +[ -n "$VALG" ] && valgrind_setup && CRYPTSETUP=valgrind_run + +# LUKS non-root-tests +if [ $(id -u) != 0 ]; then + $CRYPTSETUP benchmark -c aes-xts-plain64 >/dev/null 2>&1 || \ + skip "WARNING: Cannot run test without kernel userspace crypto API, test skipped." +fi + +prepare "Image in file tests (root capabilities not required)" file +echo "[1] format" +echo $PWD1 | $CRYPTSETUP luksFormat --type luks1 $IMG $FAST_PBKDF_OPT || fail +echo "[2] open" +echo $PWD0 | $CRYPTSETUP luksOpen $IMG --test-passphrase 2>/dev/null && fail +[ $? -ne 2 ] && fail "luksOpen should return EPERM exit code" +echo $PWD1 | $CRYPTSETUP luksOpen $IMG --test-passphrase || fail +echo "[3] add key" +echo $PWD1 | $CRYPTSETUP luksAddKey $IMG $FAST_PBKDF_OPT 2>/dev/null && fail +echo -e "$PWD1\n$PWD2" | $CRYPTSETUP luksAddKey $IMG $FAST_PBKDF_OPT || fail +echo -e "$PWD0\n$PWD1" | $CRYPTSETUP luksAddKey $IMG $FAST_PBKDF_OPT 2>/dev/null && fail +echo "[4] change key" +echo -e "$PWD1\n$PWD0\n" | $CRYPTSETUP luksChangeKey $FAST_PBKDF_OPT $IMG || fail +echo -e "$PWD1\n$PWD2\n" | $CRYPTSETUP luksChangeKey $FAST_PBKDF_OPT $IMG 2>/dev/null && fail +[ $? -ne 2 ] && fail "luksChangeKey should return EPERM exit code" +echo "[5] remove key" +# delete active keys PWD0, PWD2 +echo $PWD1 | $CRYPTSETUP luksRemoveKey $IMG 2>/dev/null && fail +[ $? -ne 2 ] && fail "luksRemove should return EPERM exit code" +echo $PWD0 | $CRYPTSETUP luksRemoveKey $IMG || fail +echo $PWD2 | $CRYPTSETUP luksRemoveKey $IMG || fail +# check if keys were deleted +echo $PWD0 | $CRYPTSETUP luksOpen $IMG --test-passphrase 2>/dev/null && fail +[ $? -ne 1 ] && fail "luksOpen should return ENOENT exit code" +echo $PWD2 | $CRYPTSETUP luksOpen $IMG --test-passphrase 2>/dev/null && fail +[ $? -ne 1 ] && fail "luksOpen should return ENOENT exit code" +echo "[6] kill slot" +# format new luks device with active keys PWD1, PWD2 +echo $PWD1 | $CRYPTSETUP -q luksFormat --type luks1 $IMG $FAST_PBKDF_OPT || fail +echo -e "$PWD1\n$PWD2" | $CRYPTSETUP luksAddKey $IMG $FAST_PBKDF_OPT || fail +# deactivate keys by killing slots +$CRYPTSETUP luksDump $IMG | grep -q "Key Slot 0: ENABLED" || fail +$CRYPTSETUP luksDump $IMG | grep -q "Key Slot 1: ENABLED" || fail +$CRYPTSETUP luksDump $IMG | grep -q "Key Slot 2: DISABLED" || fail +echo $PWD1 | $CRYPTSETUP -q luksKillSlot $IMG 0 2>/dev/null && fail +echo $PWD2 | $CRYPTSETUP -q luksKillSlot $IMG 0 || fail +$CRYPTSETUP luksDump $IMG | grep -q "Key Slot 0: DISABLED" || fail +echo $PWD1 | $CRYPTSETUP -q luksKillSlot $IMG 1 2>/dev/null && fail +[ $? -ne 2 ] && fail "luksKill should return EPERM exit code" +echo $PWD2 | $CRYPTSETUP -q luksKillSlot $IMG 1 || fail +$CRYPTSETUP luksDump $IMG | grep -q "Key Slot 1: DISABLED" || fail +# check if keys were deactivated +echo $PWD1 | $CRYPTSETUP luksOpen $IMG --test-passphrase 2>/dev/null && fail +echo $PWD2 | $CRYPTSETUP luksOpen $IMG --test-passphrase 2>/dev/null && fail +echo "[7] header backup" +echo $PWD1 | $CRYPTSETUP -q luksFormat --type luks1 $IMG $FAST_PBKDF_OPT || fail +$CRYPTSETUP luksHeaderBackup $IMG --header-backup-file $HEADER_IMG || fail +echo $PWD1 | $CRYPTSETUP luksRemoveKey $IMG || fail +echo $PWD1 | $CRYPTSETUP luksOpen $IMG --test-passphrase 2>/dev/null && fail +echo "[8] header restore" +$CRYPTSETUP luksHeaderRestore -q $IMG --header-backup-file $HEADER_IMG || fail +echo $PWD1 | $CRYPTSETUP luksOpen $IMG --test-passphrase || fail +echo "[9] luksDump" +echo $PWD1 | $CRYPTSETUP -q luksFormat --type luks1 $FAST_PBKDF_OPT --uuid $TEST_UUID $IMG $KEY1 || fail +echo $PWD1 | $CRYPTSETUP luksAddKey $FAST_PBKDF_OPT $IMG -d $KEY1 || fail +$CRYPTSETUP luksDump $IMG | grep -q "Key Slot 0: ENABLED" || fail +$CRYPTSETUP luksDump $IMG | grep -q $TEST_UUID || fail +echo $PWDW | $CRYPTSETUP luksDump $IMG --dump-master-key 2>/dev/null && fail +echo $PWD1 | $CRYPTSETUP luksDump $IMG --dump-master-key | grep -q "MK dump:" || fail +$CRYPTSETUP luksDump -q $IMG --dump-master-key -d $KEY1 | grep -q "MK dump:" || fail +echo $PWD1 | $CRYPTSETUP luksDump -q $IMG --dump-master-key --master-key-file $VK_FILE >/dev/null || fail +echo $PWD1 | $CRYPTSETUP luksDump -q $IMG --dump-master-key --master-key-file $VK_FILE 2>/dev/null && fail +echo $PWD1 | $CRYPTSETUP luksAddKey $FAST_PBKDF_OPT --master-key-file $VK_FILE $IMG || fail + +echo "[10] uuid" +echo $PWD1 | $CRYPTSETUP -q luksFormat --type luks1 $FAST_PBKDF_OPT --uuid $TEST_UUID $IMG || fail +$CRYPTSETUP -q luksUUID $IMG | grep -q $TEST_UUID || fail + +[ $(id -u) != 0 ] && skip "WARNING: You must be root to run this test, test skipped." +[ -z "$LOOPDEV" ] && skip "WARNING: Cannot find free loop device, test skipped." + +# LUKS root-tests +prepare "[1] open - compat image - acceptance check" new +echo $PWD0 | $CRYPTSETUP luksOpen $LOOPDEV $DEV_NAME || fail +check_exists +ORG_SHA1=$(sha1sum -b /dev/mapper/$DEV_NAME | cut -f 1 -d' ') +[ "$ORG_SHA1" = 676062b66ebf36669dab705442ea0762dfc091b0 ] || fail +$CRYPTSETUP -q luksClose $DEV_NAME || fail + +# Check it can be opened from header backup as well +$CRYPTSETUP luksHeaderBackup $IMG --header-backup-file $HEADER_IMG || fail +echo $PWD0 | $CRYPTSETUP luksOpen $IMG10 $DEV_NAME --header $HEADER_IMG || fail +check_exists +$CRYPTSETUP -q luksClose $DEV_NAME || fail +# Check restore +$CRYPTSETUP luksHeaderRestore -q $IMG --header-backup-file $HEADER_IMG || fail + +# Repeat for V1.0 header - not aligned first keyslot +echo $PWD0 | $CRYPTSETUP luksOpen $IMG10 $DEV_NAME || fail +check_exists +ORG_SHA1=$(sha1sum -b /dev/mapper/$DEV_NAME | cut -f 1 -d' ') +[ "$ORG_SHA1" = 51b48c2471a7593ceaf14dc5e66bca86ed05f6cc ] || fail +$CRYPTSETUP -q luksClose $DEV_NAME || fail + +rm -f $HEADER_IMG +$CRYPTSETUP luksHeaderBackup $IMG10 --header-backup-file $HEADER_IMG +echo $PWD0 | $CRYPTSETUP luksOpen $IMG10 $DEV_NAME --header $HEADER_IMG || fail +check_exists +$CRYPTSETUP -q luksClose $DEV_NAME || fail + +prepare "[2] open - compat image - denial check" new +echo $PWDW | $CRYPTSETUP luksOpen $LOOPDEV $DEV_NAME 2>/dev/null && fail +echo $PWDW | $CRYPTSETUP luksOpen $IMG10 $DEV_NAME 2>/dev/null && fail +check + +# All headers items and first key material section must change +prepare "[3] format" wipe +echo $PWD1 | $CRYPTSETUP -i 1000 -c aes-cbc-essiv:sha256 -s 128 luksFormat --type luks1 $LOOPDEV || fail +check "$LUKS_HEADER $KEY_SLOT0 $KEY_MATERIAL0" + +prepare "[4] format using hash sha512" wipe +echo $PWD1 | $CRYPTSETUP -i 1000 -h sha512 -c aes-cbc-essiv:sha256 -s 128 luksFormat --type luks1 $LOOPDEV || fail +check "$LUKS_HEADER $KEY_SLOT0 $KEY_MATERIAL0" + +prepare "[5] open" +echo $PWD1 | $CRYPTSETUP luksOpen $LOOPDEV $DEV_NAME --test-passphrase || fail +echo $PWDW | $CRYPTSETUP luksOpen $LOOPDEV $DEV_NAME --test-passphrase 2>/dev/null && fail +echo $PWD1 | $CRYPTSETUP luksOpen $LOOPDEV $DEV_NAME || fail +check_exists + +# Key Slot 1 and key material section 1 must change, the rest must not. +prepare "[6] add key" +echo -e "$PWD1\n$PWD2" | $CRYPTSETUP luksAddKey $LOOPDEV || fail +check "$KEY_SLOT1 $KEY_MATERIAL1" +echo $PWD2 | $CRYPTSETUP luksOpen $LOOPDEV $DEV_NAME || fail + +# Unsuccessful Key Delete - nothing may change +prepare "[7] unsuccessful delete" +echo $PWDW | $CRYPTSETUP luksKillSlot $LOOPDEV 1 2>/dev/null && fail +$CRYPTSETUP -q luksKillSlot $LOOPDEV 8 2>/dev/null && fail +$CRYPTSETUP -q luksKillSlot $LOOPDEV 7 2>/dev/null && fail +check + +# Delete Key Test +# Key Slot 1 and key material section 1 must change, the rest must not +prepare "[8] successful delete" +$CRYPTSETUP -q luksKillSlot $LOOPDEV 1 || fail +check "$KEY_SLOT1 $KEY_MATERIAL1_EXT" +echo $PWD2 | $CRYPTSETUP luksOpen $LOOPDEV $DEV_NAME 2> /dev/null && fail +echo $PWD1 | $CRYPTSETUP luksOpen $LOOPDEV $DEV_NAME || fail + +# Key Slot 1 and key material section 1 must change, the rest must not +prepare "[9] add key test for key files" +echo $PWD1 | $CRYPTSETUP luksAddKey $FAST_PBKDF_OPT $LOOPDEV $KEY1 || fail +check "$KEY_SLOT1 $KEY_MATERIAL1" +$CRYPTSETUP -d $KEY1 luksOpen $LOOPDEV $DEV_NAME || fail + +# Key Slot 1 and key material section 1 must change, the rest must not +prepare "[10] delete key test with key1 as remaining key" +$CRYPTSETUP -d $KEY1 luksKillSlot $LOOPDEV 0 || fail +check "$KEY_SLOT0 $KEY_MATERIAL0_EXT" +echo $PWD1 | $CRYPTSETUP luksOpen $LOOPDEV $DEV_NAME 2>/dev/null && fail +$CRYPTSETUP luksOpen -d $KEY1 $LOOPDEV $DEV_NAME || fail + +# Delete last slot +prepare "[11] delete last key" wipe +echo $PWD1 | $CRYPTSETUP luksFormat --type luks1 $LOOPDEV $FAST_PBKDF_OPT || fail +echo $PWD1 | $CRYPTSETUP luksKillSlot $LOOPDEV 0 || fail +echo $PWD1 | $CRYPTSETUP luksOpen $LOOPDEV $DEV_NAME 2>/dev/null && fail + +# Format test for ESSIV, and some other parameters. +prepare "[12] parameter variation test" wipe +$CRYPTSETUP -q -i 1000 -c aes-cbc-essiv:sha256 -s 128 luksFormat --type luks1 $LOOPDEV $KEY1 || fail +check "$LUKS_HEADER $KEY_SLOT0 $KEY_MATERIAL0" +$CRYPTSETUP -d $KEY1 luksOpen $LOOPDEV $DEV_NAME || fail + +prepare "[13] open/close - stacked devices" wipe +echo $PWD1 | $CRYPTSETUP -q luksFormat --type luks1 $LOOPDEV $FAST_PBKDF_OPT || fail +echo $PWD1 | $CRYPTSETUP -q luksOpen $LOOPDEV $DEV_NAME || fail +echo $PWD1 | $CRYPTSETUP -q luksFormat --type luks1 /dev/mapper/$DEV_NAME || fail +echo $PWD1 | $CRYPTSETUP -q luksOpen /dev/mapper/$DEV_NAME $DEV_NAME2 || fail +$CRYPTSETUP -q luksClose $DEV_NAME2 || fail +$CRYPTSETUP -q luksClose $DEV_NAME || fail + +prepare "[14] format/open - passphrase on stdin & new line" wipe +# stdin defined by "-" must take even newline +#echo -n -e "$PWD1\n$PWD2" | $CRYPTSETUP -q luksFormat $LOOPDEV - || fail +echo -n -e "$PWD1\n$PWD2" | $CRYPTSETUP $FAST_PBKDF_OPT -q --key-file=- luksFormat --type luks1 $LOOPDEV || fail +echo -n -e "$PWD1\n$PWD2" | $CRYPTSETUP -q --key-file=- luksOpen $LOOPDEV $DEV_NAME || fail +$CRYPTSETUP -q luksClose $DEV_NAME || fail +echo -n -e "$PWD1\n$PWD2" | $CRYPTSETUP -q luksOpen $LOOPDEV $DEV_NAME 2>/dev/null && fail +# now also try --key-file +echo -n -e "$PWD1\n$PWD2" | $CRYPTSETUP $FAST_PBKDF_OPT -q luksFormat --type luks1 $LOOPDEV --key-file=- || fail +echo -n -e "$PWD1\n$PWD2" | $CRYPTSETUP -q --key-file=- luksOpen $LOOPDEV $DEV_NAME || fail +$CRYPTSETUP -q luksClose $DEV_NAME || fail +# process newline if from stdin +echo -n -e "$PWD1\n$PWD2" | $CRYPTSETUP $FAST_PBKDF_OPT -q luksFormat --type luks1 $LOOPDEV || fail +echo "$PWD1" | $CRYPTSETUP -q luksOpen $LOOPDEV $DEV_NAME || fail +$CRYPTSETUP -q luksClose $DEV_NAME || fail + +prepare "[15] UUID - use and report provided UUID" wipe +echo $PWD1 | $CRYPTSETUP -q luksFormat --type luks1 $FAST_PBKDF_OPT --uuid blah $LOOPDEV 2>/dev/null && fail +echo $PWD1 | $CRYPTSETUP -q luksFormat --type luks1 $FAST_PBKDF_OPT --uuid $TEST_UUID $LOOPDEV || fail +tst=$($CRYPTSETUP -q luksUUID $LOOPDEV) +[ "$tst"x = "$TEST_UUID"x ] || fail +echo $PWD1 | $CRYPTSETUP -q luksFormat --type luks1 $FAST_PBKDF_OPT $LOOPDEV || fail +$CRYPTSETUP -q luksUUID --uuid $TEST_UUID $LOOPDEV || fail +tst=$($CRYPTSETUP -q luksUUID $LOOPDEV) +[ "$tst"x = "$TEST_UUID"x ] || fail + +prepare "[16] luksFormat" wipe +echo $PWD1 | $CRYPTSETUP -q luksFormat --type luks1 $FAST_PBKDF_OPT --master-key-file /dev/urandom $LOOPDEV || fail +echo $PWD1 | $CRYPTSETUP -q luksFormat --type luks1 $FAST_PBKDF_OPT --master-key-file /dev/urandom $LOOPDEV -d $KEY1 || fail +$CRYPTSETUP -q luksFormat --type luks1 $FAST_PBKDF_OPT --master-key-file /dev/urandom -s 256 --uuid $TEST_UUID $LOOPDEV $KEY1 || fail +$CRYPTSETUP luksOpen -d $KEY1 $LOOPDEV $DEV_NAME || fail +$CRYPTSETUP -q luksClose $DEV_NAME || fail +# open by UUID +force_uevent # some systems do not update loop by-uuid +$CRYPTSETUP luksOpen -d $KEY1 UUID=X$TEST_UUID $DEV_NAME 2>/dev/null && fail +$CRYPTSETUP luksOpen -d $KEY1 UUID=$TEST_UUID $DEV_NAME || fail +$CRYPTSETUP -q luksClose $DEV_NAME || fail +# empty keyfile +$CRYPTSETUP -q luksFormat --type luks1 $FAST_PBKDF_OPT $LOOPDEV $KEYE || fail +$CRYPTSETUP luksOpen -d $KEYE $LOOPDEV $DEV_NAME || fail +$CRYPTSETUP -q luksClose $DEV_NAME || fail +# open by volume key +echo $PWD1 | $CRYPTSETUP -q luksFormat --type luks1 $FAST_PBKDF_OPT -s 256 --master-key-file $KEY1 $LOOPDEV || fail +$CRYPTSETUP luksOpen --master-key-file /dev/urandom $LOOPDEV $DEV_NAME 2>/dev/null && fail +$CRYPTSETUP luksOpen --master-key-file $KEY1 $LOOPDEV $DEV_NAME || fail +$CRYPTSETUP -q luksClose $DEV_NAME || fail +# unsupported pe-keyslot encryption +echo $PWD1 | $CRYPTSETUP -q luksFormat --type luks1 $FAST_PBKDF_OPT -s 128 --keyslot-cipher "aes-cbc-plain" $LOOPDEV 2>/dev/null && fail +echo $PWD1 | $CRYPTSETUP -q luksFormat --type luks1 $FAST_PBKDF_OPT -s 128 --keyslot-key-size 256 $LOOPDEV 2>/dev/null && fail + +prepare "[17] AddKey volume key, passphrase and keyfile" wipe +# masterkey +echo $PWD1 | $CRYPTSETUP -q luksFormat --type luks1 $FAST_PBKDF_OPT $LOOPDEV --master-key-file /dev/zero --key-slot 3 || fail +echo $PWD1 | $CRYPTSETUP luksOpen $LOOPDEV --test-passphrase || fail +$CRYPTSETUP luksDump $LOOPDEV | grep -q "Key Slot 3: ENABLED" || fail +echo $PWD2 | $CRYPTSETUP luksAddKey $FAST_PBKDF_OPT $LOOPDEV --master-key-file /dev/zero --key-slot 4 || fail +echo $PWD2 | $CRYPTSETUP luksOpen $LOOPDEV --test-passphrase --key-slot 4 || fail +$CRYPTSETUP luksDump $LOOPDEV | grep -q "Key Slot 4: ENABLED" || fail +echo $PWD3 | $CRYPTSETUP luksAddKey $FAST_PBKDF_OPT $LOOPDEV --master-key-file /dev/null --key-slot 5 2>/dev/null && fail +$CRYPTSETUP luksAddKey $FAST_PBKDF_OPT $LOOPDEV --master-key-file /dev/zero --key-slot 5 $KEY1 || fail +$CRYPTSETUP luksOpen $LOOPDEV --test-passphrase --key-slot 5 -d $KEY1 || fail +$CRYPTSETUP luksDump $LOOPDEV | grep -q "Key Slot 5: ENABLED" || fail + +# special "-" handling +$CRYPTSETUP -q luksFormat --type luks1 $FAST_PBKDF_OPT $LOOPDEV $KEY1 --key-slot 3 || fail +echo $PWD1 | $CRYPTSETUP luksAddKey $FAST_PBKDF_OPT $LOOPDEV -d $KEY1 - || fail +echo $PWD1 | $CRYPTSETUP luksOpen $LOOPDEV --test-passphrase 2>/dev/null && fail +echo $PWD1 | $CRYPTSETUP luksOpen $LOOPDEV -d - --test-passphrase || fail +echo $PWD1 | $CRYPTSETUP luksAddKey $FAST_PBKDF_OPT $LOOPDEV -d - $KEY2 || fail +$CRYPTSETUP luksOpen $LOOPDEV -d $KEY2 --test-passphrase || fail +echo $PWD1 | $CRYPTSETUP luksOpen $LOOPDEV -d - -d $KEY1 --test-passphrase 2>/dev/null && fail +echo $PWD1 | $CRYPTSETUP luksOpen $LOOPDEV -d $KEY1 -d $KEY1 --test-passphrase 2>/dev/null && fail + +# [0]PWD1 [1]PWD2 [2]$KEY1/1 [3]$KEY1 [4]$KEY2 +$CRYPTSETUP -q luksFormat --type luks1 $FAST_PBKDF_OPT $LOOPDEV $KEY1 --key-slot 3 || fail +$CRYPTSETUP luksDump $LOOPDEV | grep -q "Key Slot 3: ENABLED" || fail +$CRYPTSETUP luksAddKey $LOOPDEV $FAST_PBKDF_OPT -d $KEY1 $KEY2 --key-slot 3 2>/dev/null && fail +# keyfile/keyfile +$CRYPTSETUP luksAddKey $LOOPDEV $FAST_PBKDF_OPT -d $KEY1 $KEY2 --key-slot 4 || fail +$CRYPTSETUP luksOpen $LOOPDEV -d $KEY2 --test-passphrase --key-slot 4 || fail +$CRYPTSETUP luksDump $LOOPDEV | grep -q "Key Slot 4: ENABLED" || fail +# passphrase/keyfile +echo $PWD1 | $CRYPTSETUP luksAddKey $FAST_PBKDF_OPT $LOOPDEV -d $KEY1 --key-slot 0 || fail +$CRYPTSETUP luksDump $LOOPDEV | grep -q "Key Slot 0: ENABLED" || fail +echo $PWD1 | $CRYPTSETUP luksOpen $LOOPDEV --test-passphrase --key-slot 0 || fail +# passphrase/passphrase +echo -e "$PWD1\n$PWD2\n" | $CRYPTSETUP luksAddKey $FAST_PBKDF_OPT $LOOPDEV --key-slot 1 || fail +echo $PWD2 | $CRYPTSETUP luksOpen $LOOPDEV --test-passphrase --key-slot 1 || fail +$CRYPTSETUP luksDump $LOOPDEV | grep -q "Key Slot 1: ENABLED" || fail +# keyfile/passphrase +echo -e "$PWD2\n" | $CRYPTSETUP luksAddKey $FAST_PBKDF_OPT $LOOPDEV $KEY1 --key-slot 2 --new-keyfile-size 3 || fail +$CRYPTSETUP luksDump $LOOPDEV | grep -q "Key Slot 2: ENABLED" || fail + +prepare "[18] RemoveKey passphrase and keyfile" reuse +$CRYPTSETUP luksRemoveKey $LOOPDEV $KEY1 || fail +$CRYPTSETUP luksDump $LOOPDEV | grep -q "Key Slot 3: DISABLED" || fail +$CRYPTSETUP luksRemoveKey $LOOPDEV $KEY1 2>/dev/null && fail +$CRYPTSETUP luksAddKey $LOOPDEV $FAST_PBKDF_OPT -d $KEY2 $KEY1 --key-slot 3 2>/dev/null || fail +$CRYPTSETUP luksDump $LOOPDEV | grep -q "Key Slot 3: ENABLED" || fail +$CRYPTSETUP luksRemoveKey $LOOPDEV $KEY2 --keyfile-size 1 2>/dev/null && fail +$CRYPTSETUP luksRemoveKey $LOOPDEV $KEY2 || fail +$CRYPTSETUP luksDump $LOOPDEV | grep -q "Key Slot 4: DISABLED" || fail +# if password or keyfile is provided, batch mode must not suppress it +echo "badpw" | $CRYPTSETUP luksKillSlot $LOOPDEV 2 2>/dev/null && fail +echo "badpw" | $CRYPTSETUP luksKillSlot $LOOPDEV 2 -q 2>/dev/null && fail +echo "badpw" | $CRYPTSETUP luksKillSlot $LOOPDEV 2 --key-file=- 2>/dev/null && fail +echo "badpw" | $CRYPTSETUP luksKillSlot $LOOPDEV 2 --key-file=- -q 2>/dev/null && fail +$CRYPTSETUP luksDump $LOOPDEV | grep -q "Key Slot 2: ENABLED" || fail +# kill slot using passphrase from 1 +echo $PWD2 | $CRYPTSETUP luksKillSlot $LOOPDEV 2 || fail +$CRYPTSETUP luksDump $LOOPDEV | grep -q "Key Slot 2: DISABLED" || fail +# kill slot with redirected stdin +$CRYPTSETUP luksKillSlot $LOOPDEV 3 /dev/null || fail +$CRYPTSETUP luksDump $LOOPDEV | grep -q "Key Slot 3: DISABLED" || fail +# remove key0 / slot 0 +echo $PWD1 | $CRYPTSETUP luksRemoveKey $LOOPDEV || fail +$CRYPTSETUP luksDump $LOOPDEV | grep -q "Key Slot 0: DISABLED" || fail +# last keyslot, in batch mode no passphrase needed... +$CRYPTSETUP luksKillSlot -q $LOOPDEV 1 || fail +$CRYPTSETUP luksDump $LOOPDEV | grep -q "Key Slot 1: DISABLED" || fail + +prepare "[19] create & status & resize" wipe +echo $PWD1 | $CRYPTSETUP create $DEV_NAME $LOOPDEV --hash xxx 2>/dev/null && fail +echo $PWD1 | $CRYPTSETUP create $DEV_NAME $LOOPDEV --hash sha1 --cipher aes-cbc-essiv:sha256 --offset 3 --skip 4 --readonly || fail +$CRYPTSETUP -q status $DEV_NAME | grep "offset:" | grep -q "3 sectors" || fail +$CRYPTSETUP -q status $DEV_NAME | grep "skipped:" | grep -q "4 sectors" || fail +$CRYPTSETUP -q status $DEV_NAME | grep "mode:" | grep -q "readonly" || fail +$CRYPTSETUP -q resize $DEV_NAME --size 100 || fail +$CRYPTSETUP -q status $DEV_NAME | grep "size:" | grep -q "100 sectors" || fail +$CRYPTSETUP -q resize $DEV_NAME || fail +$CRYPTSETUP -q status $DEV_NAME | grep "size:" | grep -q "19997 sectors" || fail +$CRYPTSETUP -q resize $DEV_NAME --device-size 1M || fail +$CRYPTSETUP -q status $DEV_NAME | grep "size:" | grep -q "2048 sectors" || fail +$CRYPTSETUP -q resize $DEV_NAME --device-size 512k --size 1023 >/dev/null 2>&1 && fail +$CRYPTSETUP -q status $DEV_NAME | grep "size:" | grep -q "2048 sectors" || fail +$CRYPTSETUP -q resize $DEV_NAME --device-size 513 >/dev/null 2>&1 && fail +$CRYPTSETUP -q status $DEV_NAME | grep "size:" | grep -q "2048 sectors" || fail +# Resize underlying loop device as well +truncate -s 16M $IMG || fail +$CRYPTSETUP -q resize $DEV_NAME || fail +$CRYPTSETUP -q status $DEV_NAME | grep "size:" | grep -q "32765 sectors" || fail +$CRYPTSETUP -q remove $DEV_NAME || fail +$CRYPTSETUP -q status $DEV_NAME >/dev/null && fail +echo $PWD1 | $CRYPTSETUP create $DEV_NAME --hash sha1 $LOOPDEV || fail +$CRYPTSETUP -q remove $DEV_NAME || fail +echo $PWD1 | $CRYPTSETUP -q create $DEV_NAME --hash sha1 $LOOPDEV || fail +$CRYPTSETUP -q remove $DEV_NAME || fail +echo $PWD1 | $CRYPTSETUP -q create $DEV_NAME --hash sha1 --size 100 $LOOPDEV || fail +$CRYPTSETUP -q status $DEV_NAME | grep "size:" | grep -q "100 sectors" || fail +$CRYPTSETUP -q remove $DEV_NAME || fail +# 4k sector resize (if kernel supports it) +echo $PWD1 | $CRYPTSETUP -q open --type plain $LOOPDEV $DEV_NAME --sector-size 4096 --size 8 >/dev/null 2>&1 +if [ $? -eq 0 ] ; then + $CRYPTSETUP -q status $DEV_NAME | grep "size:" | grep -q "8 sectors" || fail + $CRYPTSETUP -q resize $DEV_NAME --size 16 || fail + $CRYPTSETUP -q status $DEV_NAME | grep "size:" | grep -q "16 sectors" || fail + $CRYPTSETUP -q resize $DEV_NAME --size 9 2>/dev/null && fail + $CRYPTSETUP -q status $DEV_NAME | grep "size:" | grep -q "16 sectors" || fail + $CRYPTSETUP -q resize $DEV_NAME --device-size 4608 2>/dev/null && fail + $CRYPTSETUP -q status $DEV_NAME | grep "size:" | grep -q "16 sectors" || fail + $CRYPTSETUP -q remove $DEV_NAME || fail +fi +# Resize not aligned to logical block size +add_scsi_device dev_size_mb=32 sector_size=4096 +echo $PWD1 | $CRYPTSETUP create $DEV_NAME --hash sha1 $DEV || fail +OLD_SIZE=$($CRYPTSETUP status $DEV_NAME | grep "^ \+size:" | sed 's/.* \([0-9]\+\) .*/\1/') +$CRYPTSETUP resize $DEV_NAME -b 7 2> /dev/null && fail +dmsetup info $DEV_NAME | grep -q SUSPENDED && fail +NEW_SIZE=$($CRYPTSETUP status $DEV_NAME | grep "^ \+size:" | sed 's/.* \([0-9]\+\) .*/\1/') +test $OLD_SIZE -eq $NEW_SIZE || fail +$CRYPTSETUP close $DEV_NAME || fail +# Add check for unaligned plain crypt activation +echo $PWD1 | $CRYPTSETUP create $DEV_NAME --hash sha1 $DEV -b 7 2>/dev/null && fail +$CRYPTSETUP status $DEV_NAME >/dev/null 2>&1 && fail +# verify is ignored on non-tty input +echo $PWD1 | $CRYPTSETUP create $DEV_NAME $LOOPDEV --hash sha1 --verify-passphrase 2>/dev/null || fail +$CRYPTSETUP -q remove $DEV_NAME || fail +$CRYPTSETUP create $DEV_NAME $LOOPDEV -d $KEY1 --key-size 255 2>/dev/null && fail +$CRYPTSETUP create $DEV_NAME $LOOPDEV -d $KEY1 --key-size -1 2>/dev/null && fail +$CRYPTSETUP create $DEV_NAME $LOOPDEV -d $KEY1 -l -1 2>/dev/null && fail +$CRYPTSETUP create $DEV_NAME $LOOPDEV -d $KEY1 || fail +$CRYPTSETUP create $DEV_NAME $LOOPDEV -d $KEY1 2>/dev/null && fail +$CRYPTSETUP create $DEV_NAME $LOOPDEV -d blah 2>/dev/null && fail +$CRYPTSETUP -q remove $DEV_NAME || fail +$CRYPTSETUP create $DEV_NAME $LOOPDEV -d /dev/urandom || fail +$CRYPTSETUP -q remove $DEV_NAME || fail + +prepare "[20] Disallow open/create if already mapped." wipe +$CRYPTSETUP create $DEV_NAME $LOOPDEV -d $KEY1 || fail +$CRYPTSETUP create $DEV_NAME $LOOPDEV -d $KEY1 2>/dev/null && fail +$CRYPTSETUP create $DEV_NAME2 $LOOPDEV -d $KEY1 2>/dev/null && fail +echo $PWD1 | $CRYPTSETUP -q luksFormat --type luks1 $LOOPDEV 2>/dev/null && fail +$CRYPTSETUP remove $DEV_NAME || fail +echo $PWD1 | $CRYPTSETUP -q luksFormat --type luks1 $LOOPDEV || fail +echo $PWD1 | $CRYPTSETUP luksOpen $LOOPDEV $DEV_NAME || fail +echo $PWD1 | $CRYPTSETUP luksOpen $LOOPDEV $DEV_NAME2 2>/dev/null && fail +$CRYPTSETUP luksClose $DEV_NAME || fail + +prepare "[21] luksDump" wipe +echo $PWD1 | $CRYPTSETUP -q luksFormat --type luks1 $FAST_PBKDF_OPT --uuid $TEST_UUID $LOOPDEV $KEY1 || fail +echo $PWD1 | $CRYPTSETUP luksAddKey $FAST_PBKDF_OPT $LOOPDEV -d $KEY1 || fail +$CRYPTSETUP luksDump $LOOPDEV | grep -q "Key Slot 0: ENABLED" || fail +$CRYPTSETUP luksDump $LOOPDEV | grep -q $TEST_UUID || fail +echo $PWDW | $CRYPTSETUP luksDump $LOOPDEV --dump-master-key 2>/dev/null && fail +echo $PWD1 | $CRYPTSETUP luksDump $LOOPDEV --dump-master-key | grep -q "MK dump:" || fail +$CRYPTSETUP luksDump -q $LOOPDEV --dump-master-key -d $KEY1 | grep -q "MK dump:" || fail +echo $PWD1 | $CRYPTSETUP luksDump -q $LOOPDEV --dump-master-key --master-key-file $VK_FILE > /dev/null || fail +echo $PWD1 | $CRYPTSETUP luksAddKey $FAST_PBKDF_OPT --master-key-file $VK_FILE $LOOPDEV || fail + +prepare "[22] remove disappeared device" wipe +dmsetup create $DEV_NAME --table "0 5000 linear $LOOPDEV 2" || fail +echo $PWD1 | $CRYPTSETUP -q $FAST_PBKDF_OPT luksFormat --type luks1 /dev/mapper/$DEV_NAME || fail +echo $PWD1 | $CRYPTSETUP -q luksOpen /dev/mapper/$DEV_NAME $DEV_NAME2 || fail +# underlying device now returns error but node is still present +dmsetup load $DEV_NAME --table "0 5000 error" || fail +dmsetup resume $DEV_NAME || fail +$CRYPTSETUP -q luksClose $DEV_NAME2 || fail +dmsetup remove --retry $DEV_NAME || fail + +prepare "[23] ChangeKey passphrase and keyfile" wipe +# [0]$KEY1 [1]key0 +$CRYPTSETUP -q luksFormat --type luks1 $LOOPDEV $KEY1 $FAST_PBKDF_OPT --key-slot 0 || fail +echo $PWD1 | $CRYPTSETUP luksAddKey $LOOPDEV $FAST_PBKDF_OPT -d $KEY1 --key-slot 1 || fail +# keyfile [0] / keyfile [0] +$CRYPTSETUP luksChangeKey $LOOPDEV $FAST_PBKDF_OPT -d $KEY1 $KEY2 --key-slot 0 || fail +# passphrase [1] / passphrase [1] +echo -e "$PWD1\n$PWD2\n" | $CRYPTSETUP luksChangeKey $LOOPDEV $FAST_PBKDF_OPT --key-slot 1 || fail +# keyfile [0] / keyfile [new] +$CRYPTSETUP luksChangeKey $LOOPDEV $FAST_PBKDF_OPT -d $KEY2 $KEY1 || fail +$CRYPTSETUP luksDump $LOOPDEV | grep -q "Key Slot 0: DISABLED" || fail +# passphrase [1] / passphrase [new] +echo -e "$PWD2\n$PWD1\n" | $CRYPTSETUP luksChangeKey $FAST_PBKDF_OPT $LOOPDEV || fail +$CRYPTSETUP luksDump $LOOPDEV | grep -q "Key Slot 1: DISABLED" || fail +# use all slots +$CRYPTSETUP luksAddKey $LOOPDEV -d $KEY1 $KEY2 $FAST_PBKDF_OPT || fail +$CRYPTSETUP luksAddKey $LOOPDEV -d $KEY1 $KEY2 $FAST_PBKDF_OPT || fail +$CRYPTSETUP luksAddKey $LOOPDEV -d $KEY1 $KEY2 $FAST_PBKDF_OPT || fail +$CRYPTSETUP luksAddKey $LOOPDEV -d $KEY1 $KEY2 $FAST_PBKDF_OPT || fail +$CRYPTSETUP luksAddKey $LOOPDEV -d $KEY1 $KEY2 $FAST_PBKDF_OPT || fail +$CRYPTSETUP luksAddKey $LOOPDEV -d $KEY1 $KEY2 $FAST_PBKDF_OPT || fail +# still allows replace +$CRYPTSETUP luksChangeKey $LOOPDEV $FAST_PBKDF_OPT -d $KEY1 $KEY2 || fail +$CRYPTSETUP luksChangeKey $LOOPDEV $FAST_PBKDF_OPT -d $KEY1 $KEY2 2>/dev/null && fail + +prepare "[24] Keyfile limit" wipe +$CRYPTSETUP -q luksFormat --type luks1 $FAST_PBKDF_OPT $LOOPDEV $KEY1 --key-slot 0 -l 13 || fail +$CRYPTSETUP --key-file=$KEY1 luksOpen $LOOPDEV $DEV_NAME 2>/dev/null && fail +$CRYPTSETUP --key-file=$KEY1 -l 0 luksOpen $LOOPDEV $DEV_NAME 2>/dev/null && fail +$CRYPTSETUP --key-file=$KEY1 -l -1 luksOpen $LOOPDEV $DEV_NAME 2>/dev/null && fail +$CRYPTSETUP --key-file=$KEY1 -l 14 luksOpen $LOOPDEV $DEV_NAME 2>/dev/null && fail +$CRYPTSETUP --key-file=$KEY1 -l 13 --keyfile-offset 1 luksOpen $LOOPDEV $DEV_NAME 2>/dev/null && fail +$CRYPTSETUP --key-file=$KEY1 -l 13 --keyfile-offset -1 luksOpen $LOOPDEV $DEV_NAME 2>/dev/null && fail +$CRYPTSETUP --key-file=$KEY1 -l 13 luksOpen $LOOPDEV $DEV_NAME || fail +$CRYPTSETUP luksClose $DEV_NAME || fail +$CRYPTSETUP luksAddKey $LOOPDEV -d $KEY1 $KEY2 $FAST_PBKDF_OPT 2>/dev/null && fail +$CRYPTSETUP luksAddKey $LOOPDEV -d $KEY1 $KEY2 $FAST_PBKDF_OPT -l 14 2>/dev/null && fail +$CRYPTSETUP luksAddKey $LOOPDEV -d $KEY1 $KEY2 $FAST_PBKDF_OPT -l -1 2>/dev/null && fail +$CRYPTSETUP luksAddKey $LOOPDEV -d $KEY1 $KEY2 $FAST_PBKDF_OPT -l 13 --new-keyfile-size 12 || fail +$CRYPTSETUP luksRemoveKey $LOOPDEV $KEY2 2>/dev/null && fail +$CRYPTSETUP luksRemoveKey $LOOPDEV $KEY2 -l 12 || fail +$CRYPTSETUP luksChangeKey $LOOPDEV -d $KEY1 $KEY2 $FAST_PBKDF_OPT 2>/dev/null && fail +$CRYPTSETUP luksChangeKey $LOOPDEV -d $KEY1 $KEY2 $FAST_PBKDF_OPT -l 14 2>/dev/null && fail +$CRYPTSETUP luksChangeKey $LOOPDEV -d $KEY1 $KEY2 $FAST_PBKDF_OPT -l 13 || fail +# -l is ignored for stdin if _only_ passphrase is used +echo $PWD1 | $CRYPTSETUP luksAddKey $LOOPDEV -d $KEY2 $FAST_PBKDF_OPT || fail +# this is stupid, but expected +echo $PWD1 | $CRYPTSETUP luksRemoveKey $LOOPDEV -l 11 2>/dev/null && fail +echo $PWDW"0" | $CRYPTSETUP luksRemoveKey $LOOPDEV -l 12 2>/dev/null && fail +echo -e "$PWD1\n" | $CRYPTSETUP luksRemoveKey $LOOPDEV -d- -l 12 || fail +# offset +$CRYPTSETUP -q luksFormat --type luks1 $FAST_PBKDF_OPT $LOOPDEV $KEY1 --key-slot 0 -l 13 --keyfile-offset 16 || fail +$CRYPTSETUP --key-file=$KEY1 -l 13 --keyfile-offset 15 luksOpen $LOOPDEV $DEV_NAME 2>/dev/null && fail +$CRYPTSETUP --key-file=$KEY1 -l 13 --keyfile-offset 16 luksOpen $LOOPDEV $DEV_NAME || fail +$CRYPTSETUP luksClose $DEV_NAME || fail +$CRYPTSETUP luksAddKey $LOOPDEV $FAST_PBKDF_OPT -d $KEY1 -l 13 --keyfile-offset 16 $KEY2 --new-keyfile-offset 1 || fail +$CRYPTSETUP --key-file=$KEY2 --keyfile-offset 11 luksOpen $LOOPDEV $DEV_NAME 2>/dev/null && fail +$CRYPTSETUP --key-file=$KEY2 --keyfile-offset 1 luksOpen $LOOPDEV $DEV_NAME || fail +$CRYPTSETUP luksClose $DEV_NAME || fail +$CRYPTSETUP luksChangeKey $LOOPDEV $FAST_PBKDF_OPT -d $KEY2 --keyfile-offset 1 $KEY2 --new-keyfile-offset 0 || fail +$CRYPTSETUP luksOpen -d $KEY2 $LOOPDEV $DEV_NAME || fail +$CRYPTSETUP luksClose $DEV_NAME || fail +# large device with keyfile +echo -e '0 10000000 error'\\n'10000000 1000000 zero' | dmsetup create $DEV_NAME2 || fail +$CRYPTSETUP -q luksFormat --type luks1 $FAST_PBKDF_OPT $LOOPDEV /dev/mapper/$DEV_NAME2 -l 13 --keyfile-offset 5120000000 || fail +$CRYPTSETUP --key-file=/dev/mapper/$DEV_NAME2 -l 13 --keyfile-offset 5119999999 luksOpen $LOOPDEV $DEV_NAME 2>/dev/null && fail +$CRYPTSETUP --key-file=/dev/mapper/$DEV_NAME2 -l 13 --keyfile-offset 5120000000 luksOpen $LOOPDEV $DEV_NAME || fail +$CRYPTSETUP luksClose $DEV_NAME || fail +$CRYPTSETUP luksChangeKey $LOOPDEV $FAST_PBKDF_OPT -d /dev/mapper/$DEV_NAME2 \ + --keyfile-offset 5120000000 -l 13 /dev/mapper/$DEV_NAME2 --new-keyfile-offset 5120000001 --new-keyfile-size 15 || fail +dmsetup remove --retry $DEV_NAME2 + +prepare "[25] Create shared segments" wipe +echo $PWD1 | $CRYPTSETUP create $DEV_NAME $LOOPDEV --hash sha1 --offset 0 --size 256 || fail +echo $PWD1 | $CRYPTSETUP create $DEV_NAME2 $LOOPDEV --hash sha1 --offset 512 --size 256 2>/dev/null && fail +echo $PWD1 | $CRYPTSETUP create $DEV_NAME2 $LOOPDEV --hash sha1 --offset 512 --size 256 --shared || fail +$CRYPTSETUP -q remove $DEV_NAME2 || fail +$CRYPTSETUP -q remove $DEV_NAME || fail + +prepare "[26] Suspend/Resume" wipe +# only LUKS is supported +echo $PWD1 | $CRYPTSETUP create $DEV_NAME --hash sha1 $LOOPDEV || fail +$CRYPTSETUP luksSuspend $DEV_NAME 2>/dev/null && fail +$CRYPTSETUP luksResume $DEV_NAME 2>/dev/null && fail +$CRYPTSETUP -q remove $DEV_NAME || fail +$CRYPTSETUP luksSuspend $DEV_NAME 2>/dev/null && fail +# LUKS +echo $PWD1 | $CRYPTSETUP -q luksFormat --type luks1 $FAST_PBKDF_OPT $LOOPDEV || fail +echo $PWD1 | $CRYPTSETUP -q luksOpen $LOOPDEV $DEV_NAME || fail +$CRYPTSETUP luksSuspend $DEV_NAME || fail +$CRYPTSETUP -q resize $DEV_NAME 2>/dev/null && fail +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 + +prepare "[27] luksOpen with specified key slot number" wipe +# first, let's try passphrase option +echo $PWD3 | $CRYPTSETUP luksFormat --type luks1 $FAST_PBKDF_OPT -S 5 $LOOPDEV || fail +check $LUKS_HEADER $KEY_SLOT5 $KEY_MATERIAL5 +echo $PWD3 | $CRYPTSETUP luksOpen -S 4 $LOOPDEV $DEV_NAME 2>/dev/null && fail +[ -b /dev/mapper/$DEV_NAME ] && fail +echo $PWD3 | $CRYPTSETUP luksOpen -S 5 $LOOPDEV $DEV_NAME || fail +check_exists +$CRYPTSETUP luksClose $DEV_NAME || fail +echo -e "$PWD3\n$PWD1" | $CRYPTSETUP luksAddKey $FAST_PBKDF_OPT -S 0 $LOOPDEV || fail +check $LUKS_HEADER $KEY_SLOT0 $KEY_MATERIAL0 +echo $PWD3 | $CRYPTSETUP luksOpen -S 0 $LOOPDEV $DEV_NAME 2>/dev/null && fail +[ -b /dev/mapper/$DEV_NAME ] && fail +echo $PWD1 | $CRYPTSETUP luksOpen -S 5 $LOOPDEV $DEV_NAME 2>/dev/null && fail +[ -b /dev/mapper/$DEV_NAME ] && fail +# second, try it with keyfiles +$CRYPTSETUP luksFormat --type luks1 -q -S 5 -d $KEY5 $LOOPDEV || fail +check $LUKS_HEADER $KEY_SLOT5 $KEY_MATERIAL5 +$CRYPTSETUP luksAddKey $FAST_PBKDF_OPT -S 1 -d $KEY5 $LOOPDEV $KEY1 || fail +check $LUKS_HEADER $KEY_SLOT1 $KEY_MATERIAL1 +$CRYPTSETUP luksOpen -S 5 -d $KEY5 $LOOPDEV $DEV_NAME || fail +check_exists +$CRYPTSETUP luksClose $DEV_NAME || fail +$CRYPTSETUP luksOpen -S 1 -d $KEY5 $LOOPDEV $DEV_NAME 2>/dev/null && fail +[ -b /dev/mapper/$DEV_NAME ] && fail +$CRYPTSETUP luksOpen -S 5 -d $KEY1 $LOOPDEV $DEV_NAME 2>/dev/null && fail +[ -b /dev/mapper/$DEV_NAME ] && fail + +prepare "[28] Detached LUKS header" wipe +echo $PWD1 | $CRYPTSETUP luksFormat --type luks1 $FAST_PBKDF_OPT $LOOPDEV --header $HEADER_IMG || fail +echo $PWD1 | $CRYPTSETUP luksFormat --type luks1 $FAST_PBKDF_OPT $LOOPDEV --header $HEADER_IMG --align-payload 1 >/dev/null 2>&1 && fail +echo $PWD1 | $CRYPTSETUP -q luksFormat --type luks1 $FAST_PBKDF_OPT $LOOPDEV --header $HEADER_IMG --align-payload 8192 || fail +echo $PWD1 | $CRYPTSETUP -q luksFormat --type luks1 $FAST_PBKDF_OPT $LOOPDEV --header $HEADER_IMG --align-payload 0 || fail +echo $PWD1 | $CRYPTSETUP -q luksFormat --type luks1 $FAST_PBKDF_OPT $LOOPDEV --header $HEADER_IMG --align-payload 8192 --offset 8192 >/dev/null 2>&1 && fail +truncate -s 4096 $HEADER_IMG +echo $PWD1 | $CRYPTSETUP -q luksFormat --type luks1 $FAST_PBKDF_OPT $LOOPDEV --header $HEADER_IMG -S7 >/dev/null 2>&1 || fail +echo $PWD1 | $CRYPTSETUP -q luksFormat --type luks1 $FAST_PBKDF_OPT $LOOPDEV --header $HEADER_IMG --offset 80000 >/dev/null 2>&1 || fail +echo $PWD1 | $CRYPTSETUP -q luksFormat --type luks1 $FAST_PBKDF_OPT $LOOPDEV --header $HEADER_IMG --offset 8192 || fail +echo $PWD1 | $CRYPTSETUP -q luksFormat --type luks1 $FAST_PBKDF_OPT $LOOPDEV --header $HEADER_IMG --offset 0 || fail +echo $PWD1 | $CRYPTSETUP luksOpen $LOOPDEV-missing --header $HEADER_IMG $DEV_NAME 2>/dev/null && fail +echo $PWD1 | $CRYPTSETUP luksOpen $LOOPDEV --header $HEADER_IMG $DEV_NAME || fail +$CRYPTSETUP -q resize $DEV_NAME --size 100 --header $HEADER_IMG || fail +$CRYPTSETUP -q status $DEV_NAME --header $HEADER_IMG | grep "size:" | grep -q "100 sectors" || fail +$CRYPTSETUP -q status $DEV_NAME | grep "type:" | grep -q "n/a" || fail +$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 --header $HEADER_IMG || fail +$CRYPTSETUP luksClose $DEV_NAME || fail +echo $PWD1 | $CRYPTSETUP luksAddKey $FAST_PBKDF_OPT -S 5 _fakedev_ --header $HEADER_IMG $KEY5 || fail +$CRYPTSETUP luksDump _fakedev_ --header $HEADER_IMG | grep -q "Key Slot 5: ENABLED" || fail +$CRYPTSETUP luksKillSlot -q _fakedev_ --header $HEADER_IMG 5 || fail +$CRYPTSETUP luksDump _fakedev_ --header $HEADER_IMG | grep -q "Key Slot 5: DISABLED" || fail + +prepare "[29] Repair metadata" wipe +$CRYPTSETUP -q luksFormat --type luks1 $FAST_PBKDF_OPT $LOOPDEV $KEY1 --key-slot 0 || fail +# second sector overwrite should corrupt keyslot 6+7 +dd if=/dev/urandom of=$LOOPDEV bs=512 seek=1 count=1 >/dev/null 2>&1 +$CRYPTSETUP luksOpen -d $KEY1 $LOOPDEV $DEV_NAME >/dev/null 2>&1 && fail +$CRYPTSETUP -q repair $LOOPDEV >/dev/null 2>&1 || fail +$CRYPTSETUP luksOpen -d $KEY1 $LOOPDEV $DEV_NAME || fail +$CRYPTSETUP luksClose $DEV_NAME || fail + +prepare "[30] LUKS erase" wipe +$CRYPTSETUP -q luksFormat --type luks1 $FAST_PBKDF_OPT $LOOPDEV $KEY5 --key-slot 5 || fail +$CRYPTSETUP luksAddKey $FAST_PBKDF_OPT -S 1 -d $KEY5 $LOOPDEV $KEY1 || fail +$CRYPTSETUP luksDump $LOOPDEV | grep -q "Key Slot 1: ENABLED" || fail +$CRYPTSETUP luksDump $LOOPDEV | grep -q "Key Slot 5: ENABLED" || fail +$CRYPTSETUP luksErase -q $LOOPDEV || fail +$CRYPTSETUP luksDump $LOOPDEV | grep -q "Key Slot 1: DISABLED" || fail +$CRYPTSETUP luksDump $LOOPDEV | grep -q "Key Slot 5: DISABLED" || fail + +prepare "[31] Deferred removal of device" wipe +echo $PWD1 | $CRYPTSETUP open --type plain --hash sha256 $LOOPDEV $DEV_NAME || fail +echo $PWD2 | $CRYPTSETUP open --type plain --hash sha256 /dev/mapper/$DEV_NAME $DEV_NAME2 || fail +$CRYPTSETUP close $DEV_NAME >/dev/null 2>&1 && fail +$CRYPTSETUP -q status $DEV_NAME >/dev/null 2>&1 || fail +$CRYPTSETUP close --deferred $DEV_NAME >/dev/null 2>&1 +if [ $? -eq 0 ] ; then + dmsetup info $DEV_NAME | grep -q "DEFERRED REMOVE" || fail + $CRYPTSETUP -q status $DEV_NAME >/dev/null 2>&1 || fail + $CRYPTSETUP close $DEV_NAME2 || fail + $CRYPTSETUP -q status $DEV_NAME >/dev/null 2>&1 && fail +else + $CRYPTSETUP close $DEV_NAME2 >/dev/null 2>&1 + $CRYPTSETUP close $DEV_NAME >/dev/null 2>&1 +fi + +# Interactive tests +# Do not remove sleep 0.1 below, the password query flushes TTY buffer (so the code is racy). +which expect >/dev/null 2>&1 || skip "WARNING: expect tool missing, interactive test will be skipped." 0 + +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) +[ -f /etc/system-fips ] && FIPS_MODE=$(cat /proc/sys/crypto/fips_enabled 2>/dev/null) + +function remove_mapping() +{ + [ -b /dev/mapper/$DEV_NAME3 ] && dmsetup remove --retry $DEV_NAME3 + [ -b /dev/mapper/$DEV_NAME2 ] && dmsetup remove --retry $DEV_NAME2 + [ -b /dev/mapper/$DEV_NAME ] && dmsetup remove --retry $DEV_NAME + losetup -d $LOOPDEV >/dev/null 2>&1 + rm -f $ORIG_IMG $IMG $IMG10 $KEY1 $KEY2 $KEY5 $KEYE $HEADER_IMG $HEADER_KEYU $VK_FILE $HEADER_LUKS2_PV missing-file $TOKEN_FILE0 $TOKEN_FILE1 test_image_* >/dev/null 2>&1 + + # unlink whole test keyring + [ -n "$TEST_KEYRING" ] && keyctl unlink $TEST_KEYRING "@u" >/dev/null + unset TEST_KEYRING + + rmmod scsi_debug 2> /dev/null + scsi_debug_teardown $DEV +} + +function force_uevent() +{ + DNAME=$(echo $LOOPDEV | cut -f3 -d /) + echo "change" >/sys/block/$DNAME/uevent +} + +function fail() +{ + [ -n "$1" ] && echo "$1" + remove_mapping + echo "FAILED backtrace:" + while caller $frame; do ((frame++)); done + exit 2 +} + +function fips_mode() +{ + [ -n "$FIPS_MODE" ] && [ "$FIPS_MODE" -gt 0 ] +} + +function can_fail_fips() +{ + # Ignore this fail if running in FIPS mode + fips_mode || fail $1 +} + +function skip() +{ + [ -n "$1" ] && echo "$1" + remove_mapping + exit 77 +} + +function prepare() +{ + [ -b /dev/mapper/$DEV_NAME ] && dmsetup remove --retry $DEV_NAME + + case "$2" in + wipe) + remove_mapping + dd if=/dev/zero of=$IMG bs=1M count=40 >/dev/null 2>&1 + sync + losetup $LOOPDEV $IMG + ;; + new) + remove_mapping + xz -cd compatimage.img.xz > $IMG + xz -dk $HEADER_KEYU.xz + # FIXME: switch to internal loop (no losetup at all) + echo "bad" | $CRYPTSETUP luksOpen --key-slot 0 --test-passphrase $IMG 2>&1 | \ + grep "autoclear flag" && skip "WARNING: Too old kernel, test skipped." + losetup $LOOPDEV $IMG + xz -cd compatv10image.img.xz > $IMG10 + ;; + reuse | *) + if [ ! -e $IMG ]; then + xz -cd compatimage.img.xz > $IMG + losetup $LOOPDEV $IMG + fi + [ ! -e $IMG10 ] && xz -cd compatv10image.img.xz > $IMG10 + ;; + esac + + if [ ! -e $KEY1 ]; then + #dd if=/dev/urandom of=$KEY1 count=1 bs=32 >/dev/null 2>&1 + echo -n $'\x48\xc6\x74\x4f\x41\x4e\x50\xc0\x79\xc2\x2d\x5b\x5f\x68\x84\x17' >$KEY1 + echo -n $'\x9c\x03\x5e\x1b\x4d\x0f\x9a\x75\xb3\x90\x70\x32\x0a\xf8\xae\xc4'>>$KEY1 + fi + + if [ ! -e $KEY2 ]; then + dd if=/dev/urandom of=$KEY2 count=1 bs=16 >/dev/null 2>&1 + fi + + if [ ! -e $KEY5 ]; then + dd if=/dev/urandom of=$KEY5 count=1 bs=16 >/dev/null 2>&1 + fi + + if [ ! -e $KEYE ]; then + touch $KEYE + fi + + cp $IMG $ORIG_IMG + [ -n "$1" ] && echo "CASE: $1" +} + +function check_exists() +{ + [ -b /dev/mapper/$DEV_NAME ] || fail +} + +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} "$@" +} + +function dm_crypt_keyring_support() +{ + VER_STR=$(dmsetup targets | grep crypt | cut -f2 -dv) + [ -z "$VER_STR" ] && fail "Failed to parse dm-crypt version." + + VER_MAJ=$(echo $VER_STR | cut -f 1 -d.) + VER_MIN=$(echo $VER_STR | cut -f 2 -d.) + VER_PTC=$(echo $VER_STR | cut -f 3 -d.) + + test -d /proc/sys/kernel/keys || return 1 + + [ $VER_MAJ -gt 1 ] && return 0 + [ $VER_MAJ -eq 1 -a $VER_MIN -gt 18 ] && return 0 + [ $VER_MAJ -eq 1 -a $VER_MIN -eq 18 -a $VER_PTC -ge 1 ] && return 0 + return 1 +} + +function dm_crypt_keyring_flawed() +{ + dm_crypt_keyring_support && return 1; + + [ $VER_MAJ -gt 1 ] && return 0 + [ $VER_MAJ -eq 1 -a $VER_MIN -ge 15 ] && return 0 + return 1 +} + +function dm_crypt_keyring_new_kernel() +{ + KER_STR=$(uname -r) + [ -z "$KER_STR" ] && fail "Failed to parse kernel version." + KER_MAJ=$(echo $KER_STR | cut -f 1 -d.) + KER_MIN=$(echo $KER_STR | cut -f 2 -d.) + + [ $KER_MAJ -ge 5 ] && return 0 + [ $KER_MAJ -eq 4 -a $KER_MIN -ge 15 ] && return 0 + return 1 +} + +function dm_crypt_sector_size_support() +{ + VER_STR=$(dmsetup targets | grep crypt | cut -f2 -dv) + [ -z "$VER_STR" ] && fail "Failed to parse dm-crypt version." + + VER_MAJ=$(echo $VER_STR | cut -f 1 -d.) + VER_MIN=$(echo $VER_STR | cut -f 2 -d.) + VER_PTC=$(echo $VER_STR | cut -f 3 -d.) + + if [ $VER_MIN -ge 17 -o \( $VER_MIN -eq 14 -a $VER_PTC -ge 5 \) ]; then + return 0 + fi + + return 1 +} + +function test_and_prepare_keyring() { + which keyctl > /dev/null 2>&1 || skip "Cannot find keyctl, test skipped" + keyctl list "@s" > /dev/null || skip "Current session keyring is unreachable, test skipped" + TEST_KEYRING=$(keyctl newring $TEST_KEYRING_NAME "@u" 2> /dev/null) + test -n "$TEST_KEYRING" || skip "Failed to create keyring in user keyring" + keyctl search "@s" keyring "$TEST_KEYRING" > /dev/null 2>&1 || keyctl link "@u" "@s" > /dev/null 2>&1 + load_key user test_key test_data "$TEST_KEYRING" || skip "Kernel keyring service is useless on this system, test skipped." +} + +# $1 type +# $2 description +# $3 payload +# $4 keyring +function load_key() +{ + keyctl add $@ >/dev/null +} + +function setup_luks2_env() { + echo $PWD1 | $CRYPTSETUP luksFormat --type luks2 $FAST_PBKDF_OPT $LOOPDEV || fail + $CRYPTSETUP luksDump $LOOPDEV >/dev/null || fail + echo $PWD1 | $CRYPTSETUP open $LOOPDEV $DEV_NAME || fail + HAVE_KEYRING=$($CRYPTSETUP status $DEV_NAME | grep "keyring") + if [ -n "$HAVE_KEYRING" ]; then + HAVE_KEYRING=1 + else + HAVE_KEYRING=0 + fi + $CRYPTSETUP close $DEV_NAME || fail +} + +# $1 path to scsi debug bdev +scsi_debug_teardown() { + local _tries=15; + + while [ -b "$1" -a $_tries -gt 0 ]; do + rmmod scsi_debug 2> /dev/null + if [ -b "$1" ]; then + sleep .1 + _tries=$((_tries-1)) + fi + done + + test ! -b "$1" || rmmod scsi_debug 2> /dev/null +} + +function add_scsi_device() { + scsi_debug_teardown $DEV + modprobe scsi_debug $@ delay=0 + if [ $? -ne 0 ] ; then + echo "This kernel seems to not support proper scsi_debug module, test skipped." + exit 77 + fi + + sleep 1 + DEV="/dev/"$(grep -l -e scsi_debug /sys/block/*/device/model | cut -f4 -d /) + [ -b $DEV ] || fail "Cannot find $DEV." +} + +export LANG=C + +[ $(id -u) != 0 ] && skip "WARNING: You must be root to run this test, test skipped." +[ -z "$LOOPDEV" ] && skip "WARNING: Cannot find free loop device, test skipped." + +prepare "[0] Detect LUKS2 environment" wipe +setup_luks2_env + +[ -n "$VALG" ] && valgrind_setup && CRYPTSETUP=valgrind_run + +prepare "[1] Data offset" wipe +echo $PWD1 | $CRYPTSETUP luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV -q --offset 1 2>/dev/null && fail +echo $PWD1 | $CRYPTSETUP luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV -q --offset 16385 2>/dev/null && fail +echo $PWD1 | $CRYPTSETUP luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV -q --offset 32 2>/dev/null && fail +echo $PWD1 | $CRYPTSETUP luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV -q --align-payload 16384 --offset 16384 2>/dev/null && fail +echo $PWD1 | $CRYPTSETUP luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV -q --offset 16384 || fail +$CRYPTSETUP -q luksDump $LOOPDEV | grep -q "offset: $((512 * 16384)) \[bytes\]" || fail +echo $PWD1 | $CRYPTSETUP luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV -q --sector-size 1024 --offset 16384 >/dev/null || fail +$CRYPTSETUP -q luksDump $LOOPDEV | grep -q "offset: $((512 * 16384)) \[bytes\]" || fail +truncate -s 4096 $HEADER_IMG +echo $PWD1 | $CRYPTSETUP luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV --header $HEADER_IMG -q --offset 80000 >/dev/null 2>&1 || fail + +prepare "[2] Sector size and old payload alignment" wipe +echo $PWD1 | $CRYPTSETUP luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV -q --sector-size 511 2>/dev/null && fail +echo $PWD1 | $CRYPTSETUP luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV -q --sector-size 256 2>/dev/null && fail +echo $PWD1 | $CRYPTSETUP luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV -q --sector-size 8192 2>/dev/null && fail +echo $PWD1 | $CRYPTSETUP luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV -q --sector-size 512 || fail +echo $PWD1 | $CRYPTSETUP luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV -q --align-payload 5 || fail +echo $PWD1 | $CRYPTSETUP luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV -q --sector-size 512 --align-payload 5 || fail +echo $PWD1 | $CRYPTSETUP luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV -q --sector-size 2048 --align-payload 32 >/dev/null || fail +echo $PWD1 | $CRYPTSETUP luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV -q --sector-size 4096 >/dev/null || fail +echo $PWD1 | $CRYPTSETUP luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV -q --sector-size 2048 --align-payload 32768 >/dev/null || fail +$CRYPTSETUP -q luksDump $LOOPDEV | grep -q "offset: $((512 * 32768)) \[bytes\]" || fail +echo $PWD1 | $CRYPTSETUP luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV -q --sector-size 2048 >/dev/null || fail +echo $PWD1 | $CRYPTSETUP luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV -q --sector-size 4096 --align-payload 32768 >/dev/null || fail +$CRYPTSETUP -q luksDump $LOOPDEV | grep -q "offset: $((512 * 32768)) \[bytes\]" || fail + +prepare "[3] format" wipe +echo $PWD1 | $CRYPTSETUP -q $FAST_PBKDF_OPT -c aes-cbc-essiv:sha256 -s 128 luksFormat --type luks2 $LOOPDEV || fail +prepare "[4] format using hash sha512" wipe +echo $PWD1 | $CRYPTSETUP $FAST_PBKDF_OPT -h sha512 -c aes-cbc-essiv:sha256 -s 128 luksFormat --type luks2 $LOOPDEV || fail +$CRYPTSETUP -q luksDump $LOOPDEV | grep "0: pbkdf2" -A2 | grep "Hash:" | grep -qe sha512 || fail + +prepare "[5] open" +echo $PWD1 | $CRYPTSETUP luksOpen $LOOPDEV $DEV_NAME --test-passphrase || fail +echo $PWDW | $CRYPTSETUP luksOpen $LOOPDEV $DEV_NAME --test-passphrase 2>/dev/null && fail +[ $? -ne 2 ] && fail "luksOpen should return EPERM exit code" +echo $PWD1 | $CRYPTSETUP luksOpen $LOOPDEV $DEV_NAME || fail +check_exists + +# Key Slot 1 and key material section 1 must change, the rest must not. +prepare "[6] add key" +echo -e "$PWD1\n$PWD2" | $CRYPTSETUP luksAddKey $LOOPDEV $FAST_PBKDF_OPT || fail +echo $PWD2 | $CRYPTSETUP luksOpen $LOOPDEV $DEV_NAME || fail + +# Unsuccessful Key Delete - nothing may change +prepare "[7] unsuccessful delete" +echo $PWDW | $CRYPTSETUP luksKillSlot $LOOPDEV 1 2>/dev/null && fail +[ $? -ne 2 ] && fail "luksKillSlot should return EPERM exit code" +#FIXME +#$CRYPTSETUP -q luksKillSlot $LOOPDEV 8 2>/dev/null && fail +#$CRYPTSETUP -q luksKillSlot $LOOPDEV 7 2>/dev/null && fail + +# Delete Key Test +# Key Slot 1 and key material section 1 must change, the rest must not +prepare "[8] successful delete" +$CRYPTSETUP -q luksKillSlot $LOOPDEV 1 || fail +echo $PWD2 | $CRYPTSETUP luksOpen $LOOPDEV $DEV_NAME 2> /dev/null && fail +[ $? -ne 2 ] && fail "luksOpen should return EPERM exit code" +echo $PWD1 | $CRYPTSETUP luksOpen $LOOPDEV $DEV_NAME || fail + +# Key Slot 1 and key material section 1 must change, the rest must not +prepare "[9] add key test for key files" +echo $PWD1 | $CRYPTSETUP luksAddKey $FAST_PBKDF_OPT $LOOPDEV $KEY1 || fail +$CRYPTSETUP -d $KEY1 luksOpen $LOOPDEV $DEV_NAME || fail + +# Key Slot 1 and key material section 1 must change, the rest must not +prepare "[10] delete key test with key1 as remaining key" +$CRYPTSETUP -d $KEY1 luksKillSlot $LOOPDEV 0 || fail +echo $PWD1 | $CRYPTSETUP luksOpen $LOOPDEV $DEV_NAME 2>/dev/null && fail +$CRYPTSETUP luksOpen -d $KEY1 $LOOPDEV $DEV_NAME || fail + +# Delete last slot +prepare "[11] delete last key" wipe +echo $PWD1 | $CRYPTSETUP luksFormat --type luks2 $LOOPDEV $FAST_PBKDF_OPT || fail +echo $PWD1 | $CRYPTSETUP luksKillSlot $LOOPDEV 0 || fail +echo $PWD1 | $CRYPTSETUP luksOpen $LOOPDEV $DEV_NAME 2>/dev/null && fail + +# Format test for ESSIV, and some other parameters. +prepare "[12] parameter variation test" wipe +$CRYPTSETUP -q $FAST_PBKDF_OPT -c aes-cbc-essiv:sha256 -s 128 luksFormat --type luks2 $LOOPDEV $KEY1 || fail +$CRYPTSETUP -d $KEY1 luksOpen $LOOPDEV $DEV_NAME || fail + +prepare "[13] open/close - stacked devices" wipe +echo $PWD1 | $CRYPTSETUP -q luksFormat --type luks2 $LOOPDEV $FAST_PBKDF_OPT || fail +echo $PWD1 | $CRYPTSETUP -q luksOpen $LOOPDEV $DEV_NAME || fail +echo $PWD1 | $CRYPTSETUP -q luksFormat --type luks2 /dev/mapper/$DEV_NAME $FAST_PBKDF_OPT || fail +echo $PWD1 | $CRYPTSETUP -q luksOpen /dev/mapper/$DEV_NAME $DEV_NAME2 || fail +$CRYPTSETUP -q luksClose $DEV_NAME2 || fail +$CRYPTSETUP -q luksClose $DEV_NAME || fail + +prepare "[14] format/open - passphrase on stdin & new line" wipe +# stdin defined by "-" must take even newline +#echo -n -e "$PWD1\n$PWD2" | $CRYPTSETUP -q luksFormat $LOOPDEV - || fail +echo -n -e "$PWD1\n$PWD2" | $CRYPTSETUP $FAST_PBKDF_OPT -q --key-file=- luksFormat --type luks2 $LOOPDEV || fail +echo -n -e "$PWD1\n$PWD2" | $CRYPTSETUP -q --key-file=- luksOpen $LOOPDEV $DEV_NAME || fail +$CRYPTSETUP -q luksClose $DEV_NAME || fail +echo -n -e "$PWD1\n$PWD2" | $CRYPTSETUP -q luksOpen $LOOPDEV $DEV_NAME 2>/dev/null && fail +# now also try --key-file +echo -n -e "$PWD1\n$PWD2" | $CRYPTSETUP $FAST_PBKDF_OPT -q luksFormat --type luks2 $LOOPDEV --key-file=- || fail +echo -n -e "$PWD1\n$PWD2" | $CRYPTSETUP -q --key-file=- luksOpen $LOOPDEV $DEV_NAME || fail +$CRYPTSETUP -q luksClose $DEV_NAME || fail +# process newline if from stdin +echo -n -e "$PWD1\n$PWD2" | $CRYPTSETUP $FAST_PBKDF_OPT -q luksFormat --type luks2 $LOOPDEV || fail +echo "$PWD1" | $CRYPTSETUP -q luksOpen $LOOPDEV $DEV_NAME || fail +$CRYPTSETUP -q luksClose $DEV_NAME || fail + +prepare "[15] UUID - use and report provided UUID" wipe +echo $PWD1 | $CRYPTSETUP -q luksFormat $FAST_PBKDF_OPT --uuid blah --type luks2 $LOOPDEV 2>/dev/null && fail +echo $PWD1 | $CRYPTSETUP -q luksFormat $FAST_PBKDF_OPT --uuid $TEST_UUID --type luks2 $LOOPDEV || fail +tst=$($CRYPTSETUP -q luksUUID $LOOPDEV) +[ "$tst"x = "$TEST_UUID"x ] || fail +echo $PWD1 | $CRYPTSETUP -q luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV || fail +$CRYPTSETUP -q luksUUID --uuid $TEST_UUID $LOOPDEV || fail +tst=$($CRYPTSETUP -q luksUUID $LOOPDEV) +[ "$tst"x = "$TEST_UUID"x ] || fail + +prepare "[16] luksFormat" wipe +echo $PWD1 | $CRYPTSETUP -q luksFormat $FAST_PBKDF_OPT --master-key-file /dev/urandom --type luks2 $LOOPDEV || fail +echo $PWD1 | $CRYPTSETUP -q luksFormat $FAST_PBKDF_OPT --master-key-file /dev/urandom --type luks2 $LOOPDEV -d $KEY1 || fail +$CRYPTSETUP -q luksFormat $FAST_PBKDF_OPT --master-key-file /dev/urandom -s 256 --uuid $TEST_UUID --type luks2 $LOOPDEV $KEY1 || fail +$CRYPTSETUP luksOpen -d $KEY1 $LOOPDEV $DEV_NAME || fail +$CRYPTSETUP -q luksClose $DEV_NAME || fail +# open by UUID +force_uevent # some systems do not update loop by-uuid +$CRYPTSETUP luksOpen -d $KEY1 UUID=X$TEST_UUID $DEV_NAME 2>/dev/null && fail +$CRYPTSETUP luksOpen -d $KEY1 UUID=$TEST_UUID $DEV_NAME || fail +$CRYPTSETUP -q luksClose $DEV_NAME || fail +# empty keyfile +$CRYPTSETUP -q luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV $KEYE || fail +$CRYPTSETUP luksOpen -d $KEYE $LOOPDEV $DEV_NAME || fail +$CRYPTSETUP -q luksClose $DEV_NAME || fail +# open by volume key +echo $PWD1 | $CRYPTSETUP -q luksFormat $FAST_PBKDF_OPT -s 256 --master-key-file $KEY1 --type luks2 $LOOPDEV || fail +$CRYPTSETUP luksOpen --master-key-file /dev/urandom $LOOPDEV $DEV_NAME 2>/dev/null && fail +$CRYPTSETUP luksOpen --master-key-file $KEY1 $LOOPDEV $DEV_NAME || fail +$CRYPTSETUP -q luksClose $DEV_NAME || fail + +prepare "[17] AddKey volume key, passphrase and keyfile" wipe +# masterkey +echo $PWD1 | $CRYPTSETUP -q luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV --master-key-file /dev/zero --key-slot 3 || fail +echo $PWD1 | $CRYPTSETUP luksOpen $LOOPDEV --test-passphrase || fail +$CRYPTSETUP luksDump $LOOPDEV | grep -q "3: luks2" || fail +echo $PWD2 | $CRYPTSETUP luksAddKey $FAST_PBKDF_OPT $LOOPDEV --master-key-file /dev/zero --key-slot 4 || fail +echo $PWD2 | $CRYPTSETUP luksOpen $LOOPDEV --test-passphrase --key-slot 4 || fail +$CRYPTSETUP luksDump $LOOPDEV | grep -q "4: luks2" || fail +echo $PWD3 | $CRYPTSETUP luksAddKey $FAST_PBKDF_OPT $LOOPDEV --master-key-file /dev/null --key-slot 5 2>/dev/null && fail +$CRYPTSETUP luksAddKey $FAST_PBKDF_OPT $LOOPDEV --master-key-file /dev/zero --key-slot 5 $KEY1 || fail +$CRYPTSETUP luksOpen $LOOPDEV --test-passphrase --key-slot 5 -d $KEY1 || fail +$CRYPTSETUP luksDump $LOOPDEV | grep -q "5: luks2" || fail + +# special "-" handling +$CRYPTSETUP -q luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV $KEY1 --key-slot 3 || fail +echo $PWD1 | $CRYPTSETUP luksAddKey $FAST_PBKDF_OPT $LOOPDEV -d $KEY1 - || fail +echo $PWD1 | $CRYPTSETUP luksOpen $LOOPDEV --test-passphrase 2>/dev/null && fail +echo $PWD1 | $CRYPTSETUP luksOpen $LOOPDEV -d - --test-passphrase || fail +echo $PWD1 | $CRYPTSETUP luksAddKey $FAST_PBKDF_OPT $LOOPDEV -d - $KEY2 || fail +$CRYPTSETUP luksOpen $LOOPDEV -d $KEY2 --test-passphrase || fail +echo $PWD1 | $CRYPTSETUP luksOpen $LOOPDEV -d - -d $KEY1 --test-passphrase 2>/dev/null && fail +echo $PWD1 | $CRYPTSETUP luksOpen $LOOPDEV -d $KEY1 -d $KEY1 --test-passphrase 2>/dev/null && fail + +# [0]PWD1 [1]PWD2 [2]$KEY1/1 [3]$KEY1 [4]$KEY2 +$CRYPTSETUP -q luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV $KEY1 --key-slot 3 || fail +$CRYPTSETUP luksDump $LOOPDEV | grep -q "3: luks2" || fail +$CRYPTSETUP luksAddKey $LOOPDEV $FAST_PBKDF_OPT -d $KEY1 $KEY2 --key-slot 3 2>/dev/null && fail +# keyfile/keyfile +$CRYPTSETUP luksAddKey $LOOPDEV $FAST_PBKDF_OPT -d $KEY1 $KEY2 --key-slot 4 || fail +$CRYPTSETUP luksOpen $LOOPDEV -d $KEY2 --test-passphrase --key-slot 4 || fail +$CRYPTSETUP luksDump $LOOPDEV | grep -q "4: luks2" || fail +# passphrase/keyfile +echo $PWD1 | $CRYPTSETUP luksAddKey $FAST_PBKDF_OPT $LOOPDEV -d $KEY1 --key-slot 0 || fail +$CRYPTSETUP luksDump $LOOPDEV | grep -q "0: luks2" || fail +echo $PWD1 | $CRYPTSETUP luksOpen $LOOPDEV --test-passphrase --key-slot 0 || fail +# passphrase/passphrase +echo -e "$PWD1\n$PWD2\n" | $CRYPTSETUP luksAddKey $FAST_PBKDF_OPT $LOOPDEV --key-slot 1 || fail +echo $PWD2 | $CRYPTSETUP luksOpen $LOOPDEV --test-passphrase --key-slot 1 || fail +$CRYPTSETUP luksDump $LOOPDEV | grep -q "1: luks2" || fail +# keyfile/passphrase +echo -e "$PWD2\n" | $CRYPTSETUP luksAddKey $FAST_PBKDF_OPT $LOOPDEV $KEY1 --key-slot 2 --new-keyfile-size 3 || fail +$CRYPTSETUP luksDump $LOOPDEV | grep -q "2: luks2" || fail + +prepare "[18] RemoveKey passphrase and keyfile" reuse +$CRYPTSETUP luksDump $LOOPDEV | grep -q "3: luks2" || fail +$CRYPTSETUP luksRemoveKey $LOOPDEV $KEY1 || fail +$CRYPTSETUP luksDump $LOOPDEV | grep -q "3: luks2" && fail +$CRYPTSETUP luksRemoveKey $LOOPDEV $KEY1 2>/dev/null && fail +[ $? -ne 2 ] && fail "luksRemoveKey should return EPERM exit code" +$CRYPTSETUP luksRemoveKey $LOOPDEV $KEY2 --keyfile-size 1 2>/dev/null && fail +$CRYPTSETUP luksDump $LOOPDEV | grep -q "4: luks2" || fail +$CRYPTSETUP luksRemoveKey $LOOPDEV $KEY2 || fail +$CRYPTSETUP luksDump $LOOPDEV | grep -q "4: luks2" && fail +# if password or keyfile is provided, batch mode must not suppress it +echo "badpw" | $CRYPTSETUP luksKillSlot $LOOPDEV 2 2>/dev/null && fail +echo "badpw" | $CRYPTSETUP luksKillSlot $LOOPDEV 2 -q 2>/dev/null && fail +echo "badpw" | $CRYPTSETUP luksKillSlot $LOOPDEV 2 --key-file=- 2>/dev/null && fail +echo "badpw" | $CRYPTSETUP luksKillSlot $LOOPDEV 2 --key-file=- -q 2>/dev/null && fail +$CRYPTSETUP luksDump $LOOPDEV | grep -q "2: luks2" || fail +# kill slot using passphrase from 1 +echo $PWD2 | $CRYPTSETUP luksKillSlot $LOOPDEV 2 2>/dev/null || fail +$CRYPTSETUP luksDump $LOOPDEV | grep -q "2: luks2" && fail +# remove key0 / slot 0 +echo $PWD1 | $CRYPTSETUP luksRemoveKey $LOOPDEV || fail +$CRYPTSETUP luksDump $LOOPDEV | grep -q "0: luks2" && fail +# last keyslot, in batch mode no passphrase needed... +$CRYPTSETUP luksKillSlot -q $LOOPDEV 1 || fail +$CRYPTSETUP luksDump $LOOPDEV | grep -q "1: luks2" && fail + +prepare "[19] create & status & resize" wipe +echo $PWD1 | $CRYPTSETUP luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV || fail +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 +fi +echo $PWD1 | $CRYPTSETUP -q resize --size 100 $DEV_NAME || fail +$CRYPTSETUP -q status $DEV_NAME | grep "size:" | grep -q "100 sectors" || fail +echo $PWD1 | $CRYPTSETUP -q resize --device-size 51200 $DEV_NAME || fail +$CRYPTSETUP -q status $DEV_NAME | grep "size:" | grep -q "100 sectors" || fail +echo $PWD1 | $CRYPTSETUP -q resize --device-size 1M $DEV_NAME || fail +$CRYPTSETUP -q status $DEV_NAME | grep "size:" | grep -q "2048 sectors" || fail +echo $PWD1 | $CRYPTSETUP -q resize --device-size 512k --size 1024 $DEV_NAME > /dev/null 2>&1 && fail +echo $PWD1 | $CRYPTSETUP -q resize --device-size 4097 $DEV_NAME > /dev/null 2>&1 && fail +$CRYPTSETUP -q status $DEV_NAME | grep "size:" | grep -q "2048 sectors" || fail +$CRYPTSETUP close $DEV_NAME || fail +echo $PWD1 | $CRYPTSETUP luksOpen --disable-keyring $LOOPDEV $DEV_NAME || fail +echo | $CRYPTSETUP -q resize --size 100 $DEV_NAME || fail +$CRYPTSETUP -q status $DEV_NAME | grep "size:" | grep -q "100 sectors" || fail +$CRYPTSETUP close $DEV_NAME || fail +echo $PWD1 | $CRYPTSETUP luksOpen $LOOPDEV $DEV_NAME || fail +if dm_crypt_keyring_support; then + $CRYPTSETUP -q resize --disable-keyring --size 100 $DEV_NAME 2>/dev/null && fail +fi +if dm_crypt_sector_size_support; then + $CRYPTSETUP close $DEV_NAME || fail + echo $PWD1 | $CRYPTSETUP luksFormat $FAST_PBKDF_OPT --type luks2 --sector-size 4096 $LOOPDEV > /dev/null || fail + echo $PWD1 | $CRYPTSETUP luksOpen $LOOPDEV $DEV_NAME || fail + echo $PWD1 | $CRYPTSETUP -q resize --device-size 1M $DEV_NAME || fail + $CRYPTSETUP -q status $DEV_NAME | grep "size:" | grep -q "2048 sectors" || fail + echo $PWD1 | $CRYPTSETUP -q resize --device-size 2049s $DEV_NAME > /dev/null 2>&1 && fail + echo $PWD1 | $CRYPTSETUP -q resize --size 2049 $DEV_NAME > /dev/null 2>&1 && fail + $CRYPTSETUP -q status $DEV_NAME | grep "size:" | grep -q "2048 sectors" || fail +fi +$CRYPTSETUP close $DEV_NAME || fail +# Resize not aligned to logical block size +add_scsi_device dev_size_mb=32 sector_size=4096 +echo $PWD1 | $CRYPTSETUP luksFormat --type luks2 $FAST_PBKDF_OPT $DEV || fail +echo $PWD1 | $CRYPTSETUP open $DEV $DEV_NAME || fail +OLD_SIZE=$($CRYPTSETUP status $DEV_NAME | grep "^ \+size:" | sed 's/.* \([0-9]\+\) .*/\1/') +echo $PWD1 | $CRYPTSETUP resize $DEV_NAME -b 7 2> /dev/null && fail +dmsetup info $DEV_NAME | grep -q SUSPENDED && fail +NEW_SIZE=$($CRYPTSETUP status $DEV_NAME | grep "^ \+size:" | sed 's/.* \([0-9]\+\) .*/\1/') +test $OLD_SIZE -eq $NEW_SIZE || fail +$CRYPTSETUP close $DEV_NAME || fail + +prepare "[20] Disallow open/create if already mapped." wipe +$CRYPTSETUP create $DEV_NAME $LOOPDEV -d $KEY1 || fail +echo $PWD1 | $CRYPTSETUP -q luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV 2>/dev/null && fail +$CRYPTSETUP remove $DEV_NAME || fail +echo $PWD1 | $CRYPTSETUP -q luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV || fail +echo $PWD1 | $CRYPTSETUP luksOpen $LOOPDEV $DEV_NAME || fail +echo $PWD1 | $CRYPTSETUP luksOpen $LOOPDEV $DEV_NAME2 2>/dev/null && fail +$CRYPTSETUP luksClose $DEV_NAME || fail + +prepare "[21] luksDump" wipe +echo $PWD1 | $CRYPTSETUP -q luksFormat --key-size 256 $FAST_PBKDF_OPT --uuid $TEST_UUID --type luks2 $LOOPDEV $KEY1 || fail +echo $PWD1 | $CRYPTSETUP luksAddKey $FAST_PBKDF_OPT $LOOPDEV -d $KEY1 || fail +$CRYPTSETUP luksDump $LOOPDEV | grep -q "0: luks2" || fail +$CRYPTSETUP luksDump $LOOPDEV | grep -q $TEST_UUID || fail +echo $PWDW | $CRYPTSETUP luksDump $LOOPDEV --dump-master-key 2>/dev/null && fail +echo $PWD1 | $CRYPTSETUP luksDump $LOOPDEV --dump-master-key | grep -q "MK dump:" || fail +$CRYPTSETUP luksDump -q $LOOPDEV --dump-master-key -d $KEY1 | grep -q "MK dump:" || fail +echo $PWD1 | $CRYPTSETUP luksDump -q $LOOPDEV --dump-master-key --master-key-file $VK_FILE >/dev/null || fail +echo $PWD1 | $CRYPTSETUP luksDump -q $LOOPDEV --dump-master-key --master-key-file $VK_FILE 2>/dev/null && fail +echo $PWD1 | $CRYPTSETUP luksAddKey $FAST_PBKDF_OPT --master-key-file $VK_FILE $LOOPDEV || fail +# Use volume key file without keyslots +$CRYPTSETUP luksErase -q $LOOPDEV || fail +$CRYPTSETUP luksOpen --master-key-file $VK_FILE --key-size 256 --test-passphrase $LOOPDEV || fail +echo $PWD1 | $CRYPTSETUP luksAddKey $FAST_PBKDF_OPT --master-key-file $VK_FILE --key-size 256 $LOOPDEV || fail +echo $PWD1 | $CRYPTSETUP luksOpen --test-passphrase $LOOPDEV || fail + +prepare "[22] remove disappeared device" wipe +dmsetup create $DEV_NAME --table "0 39998 linear $LOOPDEV 2" || fail +echo $PWD1 | $CRYPTSETUP -q $FAST_PBKDF_OPT luksFormat --type luks2 /dev/mapper/$DEV_NAME || fail +echo $PWD1 | $CRYPTSETUP -q luksOpen /dev/mapper/$DEV_NAME $DEV_NAME2 || fail +# underlying device now returns error but node is still present +dmsetup load $DEV_NAME --table "0 40000 error" || fail +dmsetup resume $DEV_NAME || fail +$CRYPTSETUP -q luksClose $DEV_NAME2 || fail +dmsetup remove --retry $DEV_NAME || fail + +prepare "[23] ChangeKey passphrase and keyfile" wipe +# [0]$KEY1 [1]key0 +$CRYPTSETUP -q luksFormat --type luks2 $LOOPDEV $KEY1 $FAST_PBKDF_OPT --key-slot 0 || fail +echo $PWD1 | $CRYPTSETUP luksAddKey $LOOPDEV $FAST_PBKDF_OPT -d $KEY1 --key-slot 1 || fail +# keyfile [0] / keyfile [0] +$CRYPTSETUP luksChangeKey $LOOPDEV $FAST_PBKDF_OPT -d $KEY1 $KEY2 --key-slot 0 || fail +# passphrase [1] / passphrase [1] +echo -e "$PWD1\n$PWD2\n" | $CRYPTSETUP luksChangeKey $LOOPDEV $FAST_PBKDF_OPT --key-slot 1 || fail +# keyfile [0] / keyfile [new] +$CRYPTSETUP luksChangeKey $LOOPDEV $FAST_PBKDF_OPT -d $KEY2 $KEY1 || fail +$CRYPTSETUP luksDump $LOOPDEV | grep -q "0: luks2" && fail +# passphrase [1] / passphrase [new] +echo -e "$PWD2\n$PWD1\n" | $CRYPTSETUP luksChangeKey $FAST_PBKDF_OPT $LOOPDEV || fail +$CRYPTSETUP luksDump $LOOPDEV | grep -q "1: luks2" && fail +# use all slots +$CRYPTSETUP luksAddKey $LOOPDEV -d $KEY1 $KEY2 $FAST_PBKDF_OPT || fail +$CRYPTSETUP luksAddKey $LOOPDEV -d $KEY1 $KEY2 $FAST_PBKDF_OPT || fail +$CRYPTSETUP luksAddKey $LOOPDEV -d $KEY1 $KEY2 $FAST_PBKDF_OPT || fail +$CRYPTSETUP luksAddKey $LOOPDEV -d $KEY1 $KEY2 $FAST_PBKDF_OPT || fail +$CRYPTSETUP luksAddKey $LOOPDEV -d $KEY1 $KEY2 $FAST_PBKDF_OPT || fail +$CRYPTSETUP luksAddKey $LOOPDEV -d $KEY1 $KEY2 $FAST_PBKDF_OPT || fail +# still allows replace +#FIXME +#$CRYPTSETUP luksChangeKey $LOOPDEV $FAST_PBKDF_OPT -d $KEY1 $KEY2 || fail +#$CRYPTSETUP luksChangeKey $LOOPDEV $FAST_PBKDF_OPT -d $KEY1 $KEY2 2>/dev/null && fail + +prepare "[24] Keyfile limit" wipe +$CRYPTSETUP -q luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV $KEY1 --key-slot 0 -l 13 || fail +$CRYPTSETUP --key-file=$KEY1 luksOpen $LOOPDEV $DEV_NAME 2>/dev/null && fail +$CRYPTSETUP --key-file=$KEY1 -l 0 luksOpen $LOOPDEV $DEV_NAME 2>/dev/null && fail +$CRYPTSETUP --key-file=$KEY1 -l -1 luksOpen $LOOPDEV $DEV_NAME 2>/dev/null && fail +$CRYPTSETUP --key-file=$KEY1 -l 14 luksOpen $LOOPDEV $DEV_NAME 2>/dev/null && fail +$CRYPTSETUP --key-file=$KEY1 -l 13 --keyfile-offset 1 luksOpen $LOOPDEV $DEV_NAME 2>/dev/null && fail +$CRYPTSETUP --key-file=$KEY1 -l 13 --keyfile-offset -1 luksOpen $LOOPDEV $DEV_NAME 2>/dev/null && fail +$CRYPTSETUP --key-file=$KEY1 -l 13 luksOpen $LOOPDEV $DEV_NAME || fail +$CRYPTSETUP luksClose $DEV_NAME || fail +$CRYPTSETUP luksAddKey $LOOPDEV -d $KEY1 $KEY2 2>/dev/null && fail +$CRYPTSETUP luksAddKey $LOOPDEV -d $KEY1 $KEY2 -l 14 2>/dev/null && fail +$CRYPTSETUP luksAddKey $LOOPDEV -d $KEY1 $KEY2 -l -1 2>/dev/null && fail +$CRYPTSETUP luksAddKey $LOOPDEV -d $KEY1 $KEY2 $FAST_PBKDF_OPT -l 13 --new-keyfile-size 12 || fail +$CRYPTSETUP luksRemoveKey $LOOPDEV $KEY2 2>/dev/null && fail +$CRYPTSETUP luksRemoveKey $LOOPDEV $KEY2 -l 12 || fail +$CRYPTSETUP luksChangeKey $LOOPDEV -d $KEY1 $KEY2 2>/dev/null && fail +[ $? -ne 2 ] && fail "luksChangeKey should return EPERM exit code" +$CRYPTSETUP luksChangeKey $LOOPDEV -d $KEY1 $KEY2 -l 14 2>/dev/null && fail +$CRYPTSETUP luksChangeKey $LOOPDEV -d $KEY1 $KEY2 $FAST_PBKDF_OPT -l 13 || fail +# -l is ignored for stdin if _only_ passphrase is used +echo $PWD1 | $CRYPTSETUP luksAddKey $LOOPDEV -d $KEY2 $FAST_PBKDF_OPT || fail +# this is stupid, but expected +echo $PWD1 | $CRYPTSETUP luksRemoveKey $LOOPDEV -l 11 2>/dev/null && fail +echo $PWDW"0" | $CRYPTSETUP luksRemoveKey $LOOPDEV -l 12 2>/dev/null && fail +echo -e "$PWD1\n" | $CRYPTSETUP luksRemoveKey $LOOPDEV -d- -l 12 || fail +# offset +$CRYPTSETUP -q luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV $KEY1 --key-slot 0 -l 13 --keyfile-offset 16 || fail +$CRYPTSETUP --key-file=$KEY1 -l 13 --keyfile-offset 15 luksOpen $LOOPDEV $DEV_NAME 2>/dev/null && fail +$CRYPTSETUP --key-file=$KEY1 -l 13 --keyfile-offset 16 luksOpen $LOOPDEV $DEV_NAME || fail +$CRYPTSETUP luksClose $DEV_NAME || fail +$CRYPTSETUP luksAddKey $LOOPDEV $FAST_PBKDF_OPT -d $KEY1 -l 13 --keyfile-offset 16 $KEY2 --new-keyfile-offset 1 || fail +$CRYPTSETUP --key-file=$KEY2 --keyfile-offset 11 luksOpen $LOOPDEV $DEV_NAME 2>/dev/null && fail +$CRYPTSETUP --key-file=$KEY2 --keyfile-offset 1 luksOpen $LOOPDEV $DEV_NAME || fail +$CRYPTSETUP luksClose $DEV_NAME || fail +$CRYPTSETUP luksChangeKey $LOOPDEV $FAST_PBKDF_OPT -d $KEY2 --keyfile-offset 1 $KEY2 --new-keyfile-offset 0 || fail +$CRYPTSETUP luksOpen -d $KEY2 $LOOPDEV $DEV_NAME || fail +$CRYPTSETUP luksClose $DEV_NAME || fail + +prepare "[26] Suspend/Resume" wipe +# LUKS +echo $PWD1 | $CRYPTSETUP -q luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV || fail +echo $PWD1 | $CRYPTSETUP -q luksOpen $LOOPDEV $DEV_NAME || fail +$CRYPTSETUP luksSuspend $DEV_NAME || fail +$CRYPTSETUP -q resize $DEV_NAME 2>/dev/null && fail +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 + +prepare "[27] luksOpen with specified key slot number" wipe +# first, let's try passphrase option +echo $PWD3 | $CRYPTSETUP -q luksFormat $FAST_PBKDF_OPT -S 5 --type luks2 $LOOPDEV || fail +echo $PWD3 | $CRYPTSETUP luksOpen -S 4 $LOOPDEV $DEV_NAME 2>/dev/null && fail +[ -b /dev/mapper/$DEV_NAME ] && fail +echo $PWD3 | $CRYPTSETUP luksOpen -S 5 $LOOPDEV $DEV_NAME || fail +check_exists +$CRYPTSETUP luksClose $DEV_NAME || fail +echo -e "$PWD3\n$PWD1" | $CRYPTSETUP luksAddKey $FAST_PBKDF_OPT -S 0 $LOOPDEV || fail +echo $PWD3 | $CRYPTSETUP luksOpen -S 0 $LOOPDEV $DEV_NAME 2>/dev/null && fail +[ -b /dev/mapper/$DEV_NAME ] && fail +echo $PWD1 | $CRYPTSETUP luksOpen -S 5 $LOOPDEV $DEV_NAME 2>/dev/null && fail +[ -b /dev/mapper/$DEV_NAME ] && fail +# second, try it with keyfiles +$CRYPTSETUP -q luksFormat -q -S 5 $FAST_PBKDF_OPT -d $KEY5 --type luks2 $LOOPDEV || fail +$CRYPTSETUP luksAddKey $FAST_PBKDF_OPT -S 1 -d $KEY5 $LOOPDEV $KEY1 || fail +$CRYPTSETUP luksOpen -S 5 -d $KEY5 $LOOPDEV $DEV_NAME || fail +check_exists +$CRYPTSETUP luksClose $DEV_NAME || fail +$CRYPTSETUP luksOpen -S 1 -d $KEY5 $LOOPDEV $DEV_NAME 2>/dev/null && fail +[ -b /dev/mapper/$DEV_NAME ] && fail +$CRYPTSETUP luksOpen -S 5 -d $KEY1 $LOOPDEV $DEV_NAME 2>/dev/null && fail +[ -b /dev/mapper/$DEV_NAME ] && fail +# test keyslot not assigned to segment is unable to unlock volume +# otoh it should be allowed to test for proper passphrase +prepare "" new +echo $PWD1 | $CRYPTSETUP open -S1 --test-passphrase $HEADER_KEYU || fail +echo $PWD1 | $CRYPTSETUP open --test-passphrase $HEADER_KEYU || fail +echo $PWD1 | $CRYPTSETUP open -S1 $HEADER_KEYU $DEV_NAME 2>/dev/null && fail +[ -b /dev/mapper/$DEV_NAME ] && fail +echo $PWD1 | $CRYPTSETUP open $HEADER_KEYU $DEV_NAME 2>/dev/null && fail +[ -b /dev/mapper/$DEV_NAME ] && fail +echo $PWD0 | $CRYPTSETUP open -S1 --test-passphrase $HEADER_KEYU $DEV_NAME 2>/dev/null && fail +$CRYPTSETUP luksKillSlot -q $HEADER_KEYU 0 +$CRYPTSETUP luksDump $HEADER_KEYU | grep -q "0: luks2" && fail +echo $PWD1 | $CRYPTSETUP open -S1 --test-passphrase $HEADER_KEYU || fail +echo $PWD1 | $CRYPTSETUP open --test-passphrase $HEADER_KEYU || fail +echo $PWD1 | $CRYPTSETUP open -S1 $HEADER_KEYU $DEV_NAME 2>/dev/null && fail + +prepare "[28] Detached LUKS header" wipe +echo $PWD1 | $CRYPTSETUP luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV --header $HEADER_IMG || fail +echo $PWD1 | $CRYPTSETUP luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV --header $HEADER_IMG --align-payload 1 >/dev/null 2>&1 && fail +echo $PWD1 | $CRYPTSETUP -q luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV --header $HEADER_IMG --align-payload 8192 || fail +echo $PWD1 | $CRYPTSETUP -q luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV --header $HEADER_IMG --align-payload 4096 >/dev/null || fail +$CRYPTSETUP luksDump $HEADER_IMG | grep -e "0: crypt" -A1 | grep -qe $((4096*512)) || fail +echo $PWD1 | $CRYPTSETUP -q luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV --header $HEADER_IMG --align-payload 0 || fail +echo $PWD1 | $CRYPTSETUP luksOpen $LOOPDEV-missing --header $HEADER_IMG $DEV_NAME 2>/dev/null && fail +echo $PWD1 | $CRYPTSETUP luksOpen $LOOPDEV --header $HEADER_IMG $DEV_NAME || fail +echo $PWD1 | $CRYPTSETUP -q resize $DEV_NAME --size 100 --header $HEADER_IMG || fail +$CRYPTSETUP -q status $DEV_NAME --header $HEADER_IMG | grep "size:" | grep -q "100 sectors" || fail +$CRYPTSETUP -q status $DEV_NAME | grep "type:" | grep -q "n/a" || fail +$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 --header $HEADER_IMG || fail +$CRYPTSETUP luksClose $DEV_NAME || fail +echo $PWD1 | $CRYPTSETUP luksAddKey $FAST_PBKDF_OPT -S 5 _fakedev_ --header $HEADER_IMG $KEY5 || fail +$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 + +prepare "[29] Repair metadata" wipe +xz -dk $HEADER_LUKS2_PV.xz +$CRYPTSETUP isLuks --disable-locks $HEADER_LUKS2_PV && fail +$CRYPTSETUP isLuks $HEADER_LUKS2_PV && fail +$CRYPTSETUP isLuks --disable-locks --type luks2 $HEADER_LUKS2_PV && fail +$CRYPTSETUP isLuks --type luks2 $HEADER_LUKS2_PV && fail +$CRYPTSETUP -q repair $HEADER_LUKS2_PV || fail +$CRYPTSETUP isLuks $HEADER_LUKS2_PV || fail +$CRYPTSETUP isLuks --type luks2 $HEADER_LUKS2_PV || fail +$CRYPTSETUP isLuks --type luks1 $HEADER_LUKS2_PV && fail + +prepare "[30] LUKS erase" wipe +$CRYPTSETUP -q luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV $KEY5 --key-slot 5 || fail +$CRYPTSETUP luksAddKey $FAST_PBKDF_OPT -S 1 -d $KEY5 $LOOPDEV $KEY1 || fail +$CRYPTSETUP luksDump $LOOPDEV | grep -q "1: luks2" || fail +$CRYPTSETUP luksDump $LOOPDEV | grep -q "5: luks2" || fail +$CRYPTSETUP luksErase -q $LOOPDEV || fail +$CRYPTSETUP luksDump $LOOPDEV | grep -q "1: luks2" && fail +$CRYPTSETUP luksDump $LOOPDEV | grep -q "5: luks2" && fail + +prepare "[31] LUKS convert" wipe +$CRYPTSETUP -q luksFormat $FAST_PBKDF_OPT --type luks1 $LOOPDEV $KEY5 --key-slot 5 || fail +$CRYPTSETUP luksAddKey $FAST_PBKDF_OPT -S 1 -d $KEY5 $LOOPDEV $KEY1 || fail +$CRYPTSETUP -q convert --type luks1 $LOOPDEV >/dev/null 2>&1 && fail +$CRYPTSETUP luksDump $LOOPDEV | grep -q "Key Slot 1: ENABLED" || fail +$CRYPTSETUP luksDump $LOOPDEV | grep -q "Key Slot 5: ENABLED" || fail +$CRYPTSETUP -q convert --type luks2 $LOOPDEV || fail +$CRYPTSETUP luksDump $LOOPDEV | grep -q "1: luks2" || fail +$CRYPTSETUP luksDump $LOOPDEV | grep -q "5: luks2" || fail +$CRYPTSETUP -q convert --type luks1 $LOOPDEV || fail +# hash test +$CRYPTSETUP -q luksFormat $FAST_PBKDF_OPT --type luks2 --sector-size 512 $LOOPDEV $KEY5 -S 0 --hash sha1 || fail +$CRYPTSETUP luksAddKey $FAST_PBKDF_OPT -S 1 -d $KEY5 $LOOPDEV $KEY1 --hash sha256 || fail +$CRYPTSETUP -q convert --type luks1 $LOOPDEV >/dev/null 2>&1 && fail +$CRYPTSETUP -q luksKillSlot $LOOPDEV 1 || fail +$CRYPTSETUP -q convert --type luks1 $LOOPDEV || fail +$CRYPTSETUP luksDump $LOOPDEV | grep -q "Key Slot 0: ENABLED" || fail +$CRYPTSETUP luksOpen $LOOPDEV --test-passphrase --key-slot 0 -d $KEY5 || fail +# sector size test +$CRYPTSETUP -q luksFormat $FAST_PBKDF_OPT --type luks2 --sector-size 1024 $LOOPDEV $KEY5 || fail +$CRYPTSETUP -q convert --type luks1 $LOOPDEV >/dev/null 2>&1 && fail + +if dm_crypt_keyring_flawed; then + prepare "[32a] LUKS2 keyring dm-crypt bug" wipe + echo $PWD1 | $CRYPTSETUP luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV --header $HEADER_IMG || fail + echo $PWD1 | $CRYPTSETUP open $LOOPDEV --header $HEADER_IMG $DEV_NAME || fail + $CRYPTSETUP -q status $DEV_NAME | grep "key location:" | grep -q "dm-crypt" || fail + $CRYPTSETUP close $DEV_NAME || fail + # key must not load in kernel key even when dm-crypt module is missing + if rmmod dm-crypt > /dev/null 2>&1; then + echo $PWD1 | $CRYPTSETUP open $LOOPDEV --header $HEADER_IMG $DEV_NAME || fail + $CRYPTSETUP -q status $DEV_NAME | grep "key location:" | grep -q "dm-crypt" || fail + $CRYPTSETUP close $DEV_NAME || fail + fi +fi + +if dm_crypt_keyring_support && dm_crypt_keyring_new_kernel; then + prepare "[32] LUKS2 key in keyring" wipe + echo $PWD1 | $CRYPTSETUP luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV --header $HEADER_IMG || fail + + # check keyring support detection works as expected + rmmod dm-crypt > /dev/null 2>&1 || true + echo $PWD1 | $CRYPTSETUP open $LOOPDEV --header $HEADER_IMG $DEV_NAME || fail + $CRYPTSETUP -q status $DEV_NAME | grep "key location:" | grep -q "keyring" || fail + $CRYPTSETUP close $DEV_NAME || fail + + echo $PWD1 | $CRYPTSETUP open $LOOPDEV --disable-keyring --header $HEADER_IMG $DEV_NAME || fail + $CRYPTSETUP -q status $DEV_NAME | grep "key location:" | grep -q "dm-crypt" || fail + $CRYPTSETUP close $DEV_NAME || fail + + echo $PWD1 | $CRYPTSETUP open $LOOPDEV --disable-keyring --header $HEADER_IMG $DEV_NAME || fail + $CRYPTSETUP luksSuspend $DEV_NAME || fail + echo $PWD1 | $CRYPTSETUP luksResume $DEV_NAME --header $HEADER_IMG || fail + $CRYPTSETUP -q status $DEV_NAME | grep "key location:" | grep -q "keyring" || fail + $CRYPTSETUP close $DEV_NAME || fail + + echo $PWD1 | $CRYPTSETUP open $LOOPDEV --header $HEADER_IMG $DEV_NAME || fail + $CRYPTSETUP luksSuspend $DEV_NAME || fail + echo $PWD1 | $CRYPTSETUP luksResume --disable-keyring $DEV_NAME --header $HEADER_IMG || fail + $CRYPTSETUP -q status $DEV_NAME | grep "key location:" | grep -q "dm-crypt" || fail + $CRYPTSETUP close $DEV_NAME || fail +fi + +# FIXME: candidate for non-root tests +prepare "[33] tokens" wipe +echo $PWD1 | $CRYPTSETUP luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV || fail +if [ $HAVE_KEYRING -gt 0 -a -d /proc/sys/kernel/keys ]; then + + test_and_prepare_keyring + + $CRYPTSETUP token add $LOOPDEV --key-description $TEST_TOKEN0 --token-id 3 || fail + $CRYPTSETUP luksDump $LOOPDEV | grep -q -e "3: luks2-keyring" || fail + # keyslot 5 is inactive + $CRYPTSETUP token add $LOOPDEV --key-description $TEST_TOKEN1 --key-slot 5 2> /dev/null && fail + # key description is not reachable + $CRYPTSETUP open --token-only $LOOPDEV --test-passphrase && fail + # wrong passphrase + load_key user $TEST_TOKEN0 "blabla" "$TEST_KEYRING" || fail "Cannot load 32 byte user key type" + $CRYPTSETUP open --token-only $LOOPDEV --test-passphrase 2>/dev/null && fail + load_key user $TEST_TOKEN0 $PWD1 "$TEST_KEYRING" || fail "Cannot load 32 byte user key type" + $CRYPTSETUP open --token-only $LOOPDEV --test-passphrase || fail + $CRYPTSETUP open --token-only $LOOPDEV $DEV_NAME || fail + $CRYPTSETUP status $DEV_NAME > /dev/null || fail + $CRYPTSETUP close $DEV_NAME || fail + $CRYPTSETUP token remove --token-id 3 $LOOPDEV || fail + $CRYPTSETUP luksDump $LOOPDEV | grep -q -e "3: luks2-keyring" && fail + + # test we can remove keyslot with token + echo -e "$PWD1\n$PWD2" | $CRYPTSETUP luksAddKey -S4 $FAST_PBKDF_OPT $LOOPDEV || fail + $CRYPTSETUP token add $LOOPDEV --key-description $TEST_TOKEN1 --key-slot 4 || fail + $CRYPTSETUP -q luksKillSlot $LOOPDEV 4 || fail +fi +echo -n "$IMPORT_TOKEN" | $CRYPTSETUP token import $LOOPDEV --token-id 10 || fail +echo -n "$IMPORT_TOKEN" | $CRYPTSETUP token import $LOOPDEV --token-id 11 --json-file - || fail +echo -n "$IMPORT_TOKEN" > $TOKEN_FILE0 +$CRYPTSETUP token import $LOOPDEV --token-id 12 --json-file $TOKEN_FILE0 || fail +$CRYPTSETUP token import $LOOPDEV --token-id 12 --json-file $TOKEN_FILE0 2>/dev/null && fail +$CRYPTSETUP token export $LOOPDEV --token-id 10 | diff --from-file - $TOKEN_FILE0 || fail +$CRYPTSETUP token export $LOOPDEV --token-id 11 | diff --from-file - $TOKEN_FILE0 || fail +$CRYPTSETUP token export $LOOPDEV --token-id 12 | diff --from-file - $TOKEN_FILE0 || fail +$CRYPTSETUP token export $LOOPDEV --token-id 12 --json-file $TOKEN_FILE1 || fail +diff $TOKEN_FILE0 $TOKEN_FILE1 || fail +$CRYPTSETUP token export $LOOPDEV --token-id 12 > $TOKEN_FILE1 || fail +diff $TOKEN_FILE0 $TOKEN_FILE1 || fail + +prepare "[34] LUKS keyslot priority" wipe +echo $PWD1 | $CRYPTSETUP luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV -S 1 || fail +echo -e "$PWD1\n$PWD2" | $CRYPTSETUP luksAddKey $LOOPDEV $FAST_PBKDF_OPT -S 5 || fail +$CRYPTSETUP config $LOOPDEV -S 0 --priority prefer && fail +$CRYPTSETUP config $LOOPDEV -S 1 --priority bla >/dev/null 2>&1 && fail +$CRYPTSETUP config $LOOPDEV -S 1 --priority ignore || fail +echo $PWD1 | $CRYPTSETUP open $LOOPDEV --test-passphrase 2>/dev/null && fail +echo $PWD1 | $CRYPTSETUP open $LOOPDEV --test-passphrase -S 1 || fail +echo $PWD2 | $CRYPTSETUP open $LOOPDEV --test-passphrase || fail +$CRYPTSETUP config $LOOPDEV -S 1 --priority normal || fail +echo $PWD1 | $CRYPTSETUP open $LOOPDEV --test-passphrase || fail +$CRYPTSETUP config $LOOPDEV -S 1 --priority ignore || fail +echo $PWD1 | $CRYPTSETUP open $LOOPDEV --test-passphrase 2>/dev/null && fail + +prepare "[35] LUKS label and subsystem" wipe +echo $PWD1 | $CRYPTSETUP luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV || fail +$CRYPTSETUP luksDump $LOOPDEV | grep "Subsystem:" | grep -q "(no subsystem)" || fail +$CRYPTSETUP luksDump $LOOPDEV | grep "Label:" | grep -q "(no label)" || fail +echo $PWD1 | $CRYPTSETUP -q luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV --subsystem SatelliteTwo --label TheLabel || fail +$CRYPTSETUP luksDump $LOOPDEV | grep "Subsystem:" | grep -q "SatelliteTwo" || fail +$CRYPTSETUP luksDump $LOOPDEV | grep "Label:" | grep -q "TheLabel" || fail +$CRYPTSETUP config $LOOPDEV --subsystem SatelliteThree +$CRYPTSETUP luksDump $LOOPDEV | grep "Subsystem:" | grep -q "SatelliteThree" || fail +$CRYPTSETUP luksDump $LOOPDEV | grep "Label:" | grep -q "(no label)" || fail +$CRYPTSETUP config $LOOPDEV --subsystem SatelliteThree --label TheLabel +$CRYPTSETUP luksDump $LOOPDEV | grep "Subsystem:" | grep -q "SatelliteThree" || fail +$CRYPTSETUP luksDump $LOOPDEV | grep "Label:" | grep -q "TheLabel" || fail + +prepare "[36] LUKS PBKDF setting" wipe +echo $PWD1 | $CRYPTSETUP luksFormat --type luks2 --pbkdf bla $LOOPDEV >/dev/null 2>&1 && fail +# Force setting, no benchmark. PBKDF2 has 1000 iterations as a minimum +echo $PWD1 | $CRYPTSETUP luksFormat --type luks2 --pbkdf pbkdf2 --pbkdf-force-iterations 999 $LOOPDEV 2>/dev/null && fail +echo $PWD1 | $CRYPTSETUP -q luksFormat --type luks2 --pbkdf pbkdf2 --pbkdf-force-iterations 1234 $LOOPDEV || fail +$CRYPTSETUP luksDump $LOOPDEV | grep "Iterations:" | grep -q "1234" || fail +echo $PWD1 | $CRYPTSETUP -q luksFormat --type luks2 --pbkdf argon2id --pbkdf-force-iterations 3 $LOOPDEV 2>/dev/null && fail +echo $PWD1 | $CRYPTSETUP -q luksFormat --type luks2 --pbkdf argon2id --pbkdf-force-iterations 4 --pbkdf-memory 100000 $LOOPDEV || can_fail_fips +$CRYPTSETUP luksDump $LOOPDEV | grep "PBKDF:" | grep -q "argon2id" || can_fail_fips +echo $PWD1 | $CRYPTSETUP -q luksFormat --type luks2 --pbkdf argon2i --pbkdf-force-iterations 4 \ + --pbkdf-memory 1234 --pbkdf-parallel 1 $LOOPDEV || can_fail_fips +$CRYPTSETUP luksDump $LOOPDEV | grep "PBKDF:" | grep -q "argon2i" || can_fail_fips +$CRYPTSETUP luksDump $LOOPDEV | grep "Time cost:" | grep -q "4" || can_fail_fips +$CRYPTSETUP luksDump $LOOPDEV | grep "Memory:" | grep -q "1234" || can_fail_fips +$CRYPTSETUP luksDump $LOOPDEV | grep "Threads:" | grep -q "1" || can_fail_fips +# Benchmark +echo $PWD1 | $CRYPTSETUP -q luksFormat --type luks2 --pbkdf argon2i -i 500 --pbkdf-memory 1234 --pbkdf-parallel 1 $LOOPDEV || can_fail_fips +[ 0"$($CRYPTSETUP luksDump $LOOPDEV | grep "Time cost:" | cut -d: -f 2 | sed -e 's/\ //g')" -gt 0 ] || can_fail_fips +[ 0"$($CRYPTSETUP luksDump $LOOPDEV | grep "Memory:" | cut -d: -f 2 | sed -e 's/\ //g')" -gt 0 ] || can_fail_fips +echo $PWD1 | $CRYPTSETUP -q luksFormat --type luks2 --pbkdf pbkdf2 -i 500 $LOOPDEV || fail +[ 0"$($CRYPTSETUP luksDump $LOOPDEV | grep -m1 "Iterations:" | cut -d' ' -f 2 | sed -e 's/\ //g')" -gt 1000 ] || fail + +prepare "[37] LUKS Keyslot convert" wipe +$CRYPTSETUP -q luksFormat $FAST_PBKDF_OPT --type luks1 $LOOPDEV $KEY5 --key-slot 5 || fail +$CRYPTSETUP -q luksConvertKey $LOOPDEV --key-file $KEY5 2>/dev/null && fail +$CRYPTSETUP -q convert --type luks2 $LOOPDEV || fail +$CRYPTSETUP luksDump $LOOPDEV | grep -q "5: luks2" || fail +$CRYPTSETUP luksDump $LOOPDEV | grep "PBKDF:" | grep -q "pbkdf2" || fail +$CRYPTSETUP -q luksConvertKey $LOOPDEV -S 5 --key-file $KEY5 --pbkdf argon2i -i1 --pbkdf-memory 32 || can_fail_fips +$CRYPTSETUP luksDump $LOOPDEV | grep -q "5: luks2" || can_fail_fips +echo $PWD1 | $CRYPTSETUP luksAddKey $FAST_PBKDF_OPT $LOOPDEV -S 1 --key-file $KEY5 || fail +$CRYPTSETUP -q luksKillSlot $LOOPDEV 5 || fail +$CRYPTSETUP luksDump $LOOPDEV | grep -q "1: luks2" || fail +$CRYPTSETUP luksDump $LOOPDEV | grep "PBKDF:" | grep -q "pbkdf2" || fail +echo $PWD1 | $CRYPTSETUP -q luksConvertKey $LOOPDEV -S 1 --pbkdf argon2i -i1 --pbkdf-memory 32 || can_fail_fips +$CRYPTSETUP luksDump $LOOPDEV | grep -q "1: luks2" || can_fail_fips +echo $PWD3 | $CRYPTSETUP luksAddKey $FAST_PBKDF_OPT -S 21 --unbound -s 16 $LOOPDEV || fail +echo $PWD3 | $CRYPTSETUP luksConvertKey --pbkdf-force-iterations 1001 --pbkdf pbkdf2 -S 21 $LOOPDEV || fail + +prepare "[38] luksAddKey unbound tests" wipe +$CRYPTSETUP -q luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV $KEY5 --key-slot 5 || fail +# unbound key may have arbitrary size +echo $PWD1 | $CRYPTSETUP luksAddKey $FAST_PBKDF_OPT --unbound -s 16 $LOOPDEV || fail +echo $PWD2 | $CRYPTSETUP luksAddKey $FAST_PBKDF_OPT --unbound -s 32 -S 2 $LOOPDEV || fail +$CRYPTSETUP luksDump $LOOPDEV | grep -q "2: luks2 (unbound)" || fail +echo $PWD3 | $CRYPTSETUP luksAddKey $FAST_PBKDF_OPT --unbound -s 8 -S 3 --master-key-file /dev/urandom $LOOPDEV || fail +$CRYPTSETUP luksDump $LOOPDEV | grep -q "3: luks2 (unbound)" || fail +# unbound key size is required +echo $PWD1 | $CRYPTSETUP -q luksAddKey --unbound $LOOPDEV 2>/dev/null && fail +echo $PWD3 | $CRYPTSETUP -q luksAddKey --unbound --master-key-file /dev/urandom $LOOPDEV 2> /dev/null && fail +# do not allow to replace keyslot by unbound slot +echo $PWD1 | $CRYPTSETUP -q luksAddKey -S5 --unbound -s 32 $LOOPDEV 2>/dev/null && fail +echo $PWD2 | $CRYPTSETUP -q open $LOOPDEV $DEV_NAME 2> /dev/null && fail +echo $PWD2 | $CRYPTSETUP -q open $LOOPDEV --test-passphrase || fail +echo $PWD2 | $CRYPTSETUP -q open -S2 $LOOPDEV $DEV_NAME 2> /dev/null && fail +echo $PWD2 | $CRYPTSETUP -q open -S2 $LOOPDEV --test-passphrase || fail +echo $PWD1 | $CRYPTSETUP -q open $LOOPDEV $DEV_NAME 2> /dev/null && fail +echo $PWD1 | $CRYPTSETUP -q open $LOOPDEV --test-passphrase || fail +# check we're able to change passphrase for unbound keyslot +echo -e "$PWD2\n$PWD3" | $CRYPTSETUP luksChangeKey $FAST_PBKDF_OPT -S 2 $LOOPDEV || fail +echo $PWD3 | $CRYPTSETUP open --test-passphrase $FAST_PBKDF_OPT -S 2 $LOOPDEV || fail +echo $PWD3 | $CRYPTSETUP -q open -S 2 $LOOPDEV $DEV_NAME 2> /dev/null && fail +# do not allow adding keyslot by unbound keyslot +echo -e "$PWD3\n$PWD1" | $CRYPTSETUP -q luksAddKey $LOOPDEV 2> /dev/null && fail +# check adding keyslot works when there's unbound keyslot +echo $PWD1 | $CRYPTSETUP luksAddKey $FAST_PBKDF_OPT $LOOPDEV --key-file $KEY5 -S8 || fail +echo $PWD1 | $CRYPTSETUP open $LOOPDEV $DEV_NAME || fail +$CRYPTSETUP close $DEV_NAME || fail +$CRYPTSETUP luksKillSlot -q $LOOPDEV 2 +$CRYPTSETUP luksDump $LOOPDEV | grep -q "2: luks2 (unbound)" && fail +$CRYPTSETUP luksKillSlot -q $LOOPDEV 3 +$CRYPTSETUP luksDump $LOOPDEV | grep -q "3: luks2 (unbound)" && fail + +prepare "[39] LUKS2 metadata variants" wipe +tar xJf luks2_mda_images.tar.xz +echo -n "$IMPORT_TOKEN" > $TOKEN_FILE0 +for mda in 16 32 64 128 256 512 1024 2048 4096 ; do + echo -n "[$mda KiB]" + echo $PWD4 | $CRYPTSETUP open test_image_$mda $DEV_NAME || fail + $CRYPTSETUP close $DEV_NAME || fail + echo -e "$PWD4\n$PWD3" | $CRYPTSETUP luksAddKey -S9 $FAST_PBKDF_OPT test_image_$mda || fail + echo $PWD4 | $CRYPTSETUP open --test-passphrase test_image_$mda || fail + echo $PWD3 | $CRYPTSETUP open -S9 --test-passphrase test_image_$mda || fail + echo -n "$IMPORT_TOKEN" | $CRYPTSETUP token import test_image_$mda --token-id 10 || fail + $CRYPTSETUP token export test_image_$mda --token-id 10 | diff --from-file - $TOKEN_FILE0 || fail + echo -n "[OK]" +done +echo + +prepare "[40] LUKS2 metadata areas" wipe +echo $PWD1 | $CRYPTSETUP -q luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV 2> /dev/null || fail +DEFAULT_OFFSET=$($CRYPTSETUP luksDump $LOOPDEV | grep "offset: " | cut -f 2 -d ' ') +echo $PWD1 | $CRYPTSETUP -q luksFormat $FAST_PBKDF_OPT --type luks1 $LOOPDEV --key-size 256 --luks2-metadata-size=128k --luks2-keyslots-size=128k 2> /dev/null && fail +echo $PWD1 | $CRYPTSETUP -q luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV --key-size 256 --luks2-metadata-size=128k --luks2-keyslots-size=127k 2> /dev/null && fail +echo $PWD1 | $CRYPTSETUP -q luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV --key-size 256 --luks2-metadata-size=127k --luks2-keyslots-size=128k 2> /dev/null && fail +echo $PWD1 | $CRYPTSETUP -q luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV --key-size 256 --luks2-metadata-size=128k --luks2-keyslots-size=128M >/dev/null 2>&1 && fail +echo $PWD1 | $CRYPTSETUP -q luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV --key-size 256 --luks2-metadata-size=128k --luks2-keyslots-size=128k >/dev/null || fail +$CRYPTSETUP luksDump $LOOPDEV | grep "Metadata area:" | grep -q "131072 \[bytes\]" || fail +$CRYPTSETUP luksDump $LOOPDEV | grep "Keyslots area:" | grep -q "131072 \[bytes\]" || fail +echo $PWD1 | $CRYPTSETUP -q luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV --key-size 256 --luks2-metadata-size=128k || fail +$CRYPTSETUP luksDump $LOOPDEV | grep "Metadata area:" | grep -q "131072 \[bytes\]" || fail +$CRYPTSETUP luksDump $LOOPDEV | grep "Keyslots area:" | grep -q "$((DEFAULT_OFFSET-2*131072)) \[bytes\]" || fail +echo $PWD1 | $CRYPTSETUP -q luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV --key-size 256 --luks2-keyslots-size=128k >/dev/null || fail +$CRYPTSETUP luksDump $LOOPDEV | grep "Metadata area:" | grep -q "16384 \[bytes\]" || fail +$CRYPTSETUP luksDump $LOOPDEV | grep "Keyslots area:" | grep -q "131072 \[bytes\]" || fail +echo $PWD1 | $CRYPTSETUP -q luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV --key-size 256 --offset 16384 || fail +$CRYPTSETUP luksDump $LOOPDEV | grep "Metadata area:" | grep -q "16384 \[bytes\]" || fail +$CRYPTSETUP luksDump $LOOPDEV | grep "Keyslots area:" | grep -q "8355840 \[bytes\]" || fail +# data offset vs area size +echo $PWD1 | $CRYPTSETUP -q luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV --key-size 256 --offset 64 --luks2-keyslots-size=8192 >/dev/null 2>&1 && fail +echo $PWD1 | $CRYPTSETUP -q luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV --key-size 256 --offset $((256+56)) >/dev/null 2>&1 && fail +echo $PWD1 | $CRYPTSETUP -q luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV --key-size 256 --offset $((256+64)) >/dev/null || fail + +prepare "[41] Per-keyslot encryption parameters" wipe +KEYSLOT_CIPHER="aes-cbc-plain64" +$CRYPTSETUP -q luksFormat --type luks2 $LOOPDEV $KEY1 $FAST_PBKDF_OPT --key-slot 0 --keyslot-cipher $KEYSLOT_CIPHER --keyslot-key-size 128 || fail +[ "$($CRYPTSETUP luksDump $IMG | grep -A8 -m1 "0: luks2" | grep "Cipher:" | sed -e 's/[[:space:]]\+Cipher:\ \+//g')" = $KEYSLOT_CIPHER ] || fail +[ "$($CRYPTSETUP luksDump $IMG | grep -A8 -m1 "0: luks2" | grep "Cipher key:"| sed -e 's/[[:space:]]\+Cipher\ key:\ \+//g')" = "128 bits" ] || fail +$CRYPTSETUP luksAddKey $LOOPDEV -d $KEY1 $KEY2 $FAST_PBKDF_OPT --key-slot 1 --keyslot-cipher $KEYSLOT_CIPHER --keyslot-key-size 128 || fail +[ "$($CRYPTSETUP luksDump $IMG | grep -A8 -m1 "1: luks2" | grep "Cipher:" | sed -e 's/[[:space:]]\+Cipher:\ \+//g')" = $KEYSLOT_CIPHER ] || fail +[ "$($CRYPTSETUP luksDump $IMG | grep -A8 -m1 "1: luks2" | grep "Cipher key:"| sed -e 's/[[:space:]]\+Cipher\ key:\ \+//g')" = "128 bits" ] || fail +$CRYPTSETUP luksAddKey $LOOPDEV -d $KEY1 $KEY2 $FAST_PBKDF_OPT --key-slot 2 || fail +$CRYPTSETUP luksChangeKey $LOOPDEV $FAST_PBKDF_OPT -d $KEY2 $KEY1 --key-slot 2 --keyslot-cipher $KEYSLOT_CIPHER --keyslot-key-size 128 || fail +[ "$($CRYPTSETUP luksDump $IMG | grep -A8 -m1 "2: luks2" | grep "Cipher:" | sed -e 's/[[:space:]]\+Cipher:\ \+//g')" = $KEYSLOT_CIPHER ] || fail +[ "$($CRYPTSETUP luksDump $IMG | grep -A8 -m1 "2: luks2" | grep "Cipher key:"| sed -e 's/[[:space:]]\+Cipher\ key:\ \+//g')" = "128 bits" ] || fail +# unbound keyslot +echo $PWD3 | $CRYPTSETUP luksAddKey $FAST_PBKDF_OPT --key-slot 21 --unbound -s 32 --keyslot-cipher $KEYSLOT_CIPHER --keyslot-key-size 128 $LOOPDEV || fail +[ "$($CRYPTSETUP luksDump $IMG | grep -A8 -m1 "21: luks2" | grep "Cipher:" | sed -e 's/[[:space:]]\+Cipher:\ \+//g')" = $KEYSLOT_CIPHER ] || fail +[ "$($CRYPTSETUP luksDump $IMG | grep -A8 -m1 "21: luks2" | grep "Cipher key:"| sed -e 's/[[:space:]]\+Cipher\ key:\ \+//g')" = "128 bits" ] || fail +echo $PWD3 | $CRYPTSETUP luksAddKey $FAST_PBKDF_OPT --key-slot 22 --unbound -s 32 $LOOPDEV || fail +echo $PWD3 | $CRYPTSETUP luksConvertKey --key-slot 22 $LOOPDEV --keyslot-cipher $KEYSLOT_CIPHER --keyslot-key-size 128 $LOOPDEV || fail +[ "$($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 + +remove_mapping +exit 0 diff --git a/tests/compatimage.img.xz b/tests/compatimage.img.xz new file mode 100644 index 0000000000000000000000000000000000000000..37fe163f148c7f7fe8ebc39a651504809418a8d2 GIT binary patch literal 66732 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 z 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 literal 0 HcmV?d00001 diff --git a/tests/conversion_imgs.tar.xz b/tests/conversion_imgs.tar.xz new file mode 100644 index 0000000000000000000000000000000000000000..cdeb96108fc3e48ce7c6289d60b686c3b739e68b GIT binary patch literal 8149472 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%0A4Hp;JasNgRMKQ7MiQYvfc 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񕦅NGZ>W)H}g7vJPk&?`(Whr#r%9KbX~F*(1$JowBKoRBB zIIuhyW-H&XMyKLRhTzKbmy+TAnvsJDd zLfSsBer#-hpjy?jpd0Zn<>f2pL)=H25_*sGXz>U&aCG z#f`Xfk}W%nUjEynd-@~Jog{K%9H4+-hVKhk#Rqy?Bk=VD?U&thTig9-Cgl?gow49m z@Fq@6O%1i!EKWK(7)R27P3GZO>2iGm-_n*_sQnbmJj0=y1u3}_*2X>!(yz+$$lq7L z`uAxg%aUV#Y|9YtTOC*5|6r}-I8SQw%;YeEYrUU@O~+o^f4{k`1FkR+F|Z?Nxe-$r zsXe|=y^9Fm_~{00)O&2w5vc-mbPPX6T$l#2P*Ce5;0=Vjc^l47mbHz+@UhFxm5{yIGq<*f5&GGr_GNESBzje^iVKCDe&m_fXrt6X zGWT5W(bl(<=Ka^-2benWq3q+@Dr`n#7Z(v3dhWi5rq#l_2|?5RV?HAhb@pX$C5Y4- z$=>ui;O)sGm=KSgyxty5_9_mT>XOoUeh;2VLBxN7lvIl3{(di078i?j!x$cvL-#;+ zL?Qvly^d&;`ti5}2R!S2sZu18U?R;m8q($joJeU{ltaF3@J{je3&eReTL96DjHW5m zT1Bj9y*@RioW%fzQ`7`gn!i(vVpOW!I>rOVE2mdD5V;ukZthNwg{AF#I>F7>G#F#S zUAXH7bx7e_8{;e{Cl&3eE5lMr#fnU`+6am=u9t*i@VxN>o1 zEcQVlOwY(G(qVsB!qQ;Y%n*o5O^~t1D3h-l7fW4GOKvg*Qx9%93Nxsh)oO00zp}1j z0rzHwt3?OnFj9<@^%W12ikRnQl?h`kP&L!uS>2O(|U ze~Cgl*7zW%dS840#8zhoeo~QEaG9if{bQxLAYlXR&%di`e%Y2>rcJ}>mkYLZ%I&)M zgvCAugMKpOU1}N|`J1y(X!C_XU5uSjRTDuWD;|wGV)C)bN$AYk>jW+rkdw@=t3bqA zoU}oH{u%AF<3`CR!|*I|v=>(E#wy?E&ezVnQ^%-xzbyuj;Rosn-(Y0DSBvMji zc*C!CXenF8&V*4utAG&Q(#lNX4r^!ScQ4%ed>}|$~g<%Ykr zu*9iAHRFf;gM?O}Ss99r=$3l75&k_`@omv=W(rDAhY!OU{B0TsjlM+jb&9luJgBKO zouUQ@BEP7?oL2T~I5`<3W+cCl6}?I-cAtAPxtgnKDaImOaYpunVe9_L)i7`=STkia08meN_g-nLP52PLOx|Zn1>Dv^k@zRmm*_SezX;j#%^1DHL+QDb z%eqm;sMHHw<7a_ebf0q7SnY@-uPQWQFlUaa~T=h0y zFiz_+2;Bi&b_jAr7JcBr!CiTMM+L5o&e40q;)EXiDZ6tr^rgPw$KWbH?ab41wNd7!9*j zU{?z2-q)H;p%{vS-9rFEqR@M9uv51Oc(GwTe6p}}QjEol%Rk2rSP=3VX@!6@vZG_e z@77WOUSqoAqM_`@;cd2I#vnKpuzA(C)}`d3Sxo87>M+ar;&w#qu%ks8j)w(T8#QWt zgE566+=qXMEkEDJ!~#Jk&OGUAl{aNipsr{GfkuBhF8vZ`seloB*}&V1!iree&3n)- z^|}$;0|NT7d6))jUJZdd1@X2JcKriY=E1by+^HRW>g%XZ{yjX^&(+tMAWj% zxgHtoH124mSq#N66>r<3s&RN|kh2sxcVCdm7DSMaz|Un|COeOjell~2FW!#~HRBZT zi3O!QmBxT-F3H-ptxOKRy#eunuqKagIy89B<78U%{6b3MqJr5W0wyNW<3g1G{D44$ zxf;A(TFW7oIvzn-Tnv$%IWb$Ce1B0kvq*4^*s$q)M*S)L1XwJqr)R@>fAdt+*K3K4I~zE0mtfb!OX5Zyo_bcOwVB5G|q++1Bzq*P8Tz% zk#uq3sh=EP+mUi{;V}Hno7ZIsYhpKiob2%NpxNkN4V|SO$RazjL4JR-tJBK4M71Wj z@z(V*k53|cn~VQf4N-ZY0094hYT-GpCUw!*JnXzVc@eV?2T8>iZEPKRLaXXFAwKZ> zF!YY5@Tqm)FBja}VxxeO;%L=RiqX34elt>KU-9zfCt1HRO;IXn99?9sunp4$ip1|> zheylQ7&He8<=0 zM_a3foAIT>`H!cH8n6#XmifiD7rE8Sm6vr`Axo&W)3;K4kdLi#t}z2w14iZG4iWoCbnLs{eTf) zoYKO~tGC4myrCoY%m;JkA5iDSSump1% z)z)X5)3Qsp)>@gza6!5hiz(XP;8y>nQ-posM(d7vv%jr?LWnWx3Kf}_Bg!!6qgGK4 z+poL*JddtF?ZXp4WF`sj&`Cv#y)?mi*NUVX@BKck1o#o`C^J}<7WXIac2786eEu$S zDRdPDp~^=UVFVdkmexh7>Q8;zPsLp^mC`zg(-8{!vy*e@tpSpBpdO#Pcrul=67Q*X z(T(Cma+E0Jm99(2B{IHk{$peeU~De7PSTzq=B9c{##BDXuInA1>lWwUC)svkJ7fMS z368(_y_+`ub6=XxDTtG|-2Op@@^g#;z33?X<=KS`}8jmKN}xSYWC$O4$Qxan`%tgpu;{ zR;V){0!ty$vj@B85+Sx-bKA8Pmu9oQD(DCap`>@$*U#IRB+0C=^1XQN9_bm2c!i`X z*w(4Kitmwv|6*F~2ZTa;=(<=Nmv)EgPUgwS>TC+}ZGp0q$F$=Qej=PUV+1ZxVp!=} z*dkIGBk$QMtaINg3*xou)Sgdzg)<%Ogw^O~Z!JnAK|~))1(H|&F;gu1gXWv7^T_L) z)j(RRnU21?)~dPJt`)kC5f=MYRl{WC#Hls&^pC^=A?@L#|4k3&HN&9`SgzEllOd*p?)-H|Fn zhwym)1{3mK`rmgd4?l1K+FC^1dBHi0j`#;mf7od1Vlq;zWQ7Oyw$CasIpj`}fl#*< z>E)SWDW@bN-98-WxSQFhk*vI?+fIw4w@(_1mGudbqc>1s3tY~ZW|ptk{Vdt=AbR77 zMyb=wsX}#EDE~Syu!_)${J+;tM9=cQFth9UiVO z>znkwSJubqV|54jBiiph#>YNDJ^S$XI;%-*Ye=<1-GE0}*?HjAqODJw$?FIz!j#}84}|pC zzEi`&3PfebE=I@nD<;J&L>jsLg0IeRBL$AWK+W+Zi|$fsD(=0E`N#Q(C~SveizA?I zqk?c&tep60yy|Ahr18YNsGIBP?l@z>B~dH`G+QVDr>>&r14^Rx1OOduaj~cW=eAez}ZgVQ}?{7;B2jHR*qJ)kFzr<#{ zoF{#(>1F#xe7=Fpgw|LkpU(DBfg68#rhl**%~9?7c@i14bf(>Kp9(^BZozc^-VqwJX#Ytv_*oP@AG7Wyz}%dN z0g%|EFN|u%8Jjj{a{id-<0#IO7u`YOp>)5}cLg2}s&mc5E`fs?Hd)Qm$|hpI3Ok~k zlwr9y!CFgL>@D_Ej9{8t_q)Ztdu7A?;}b;`^w#SkIPf%C$RxozK9B`n;ktx(gomEH z%9WChpQ+4b)Z=p0Osl8)t3#8d8(n8vZw-{mM0l}07;rprA{+P>Bm<@yO!1<9Z0`D!r>LN{-?6EPs3mDundA%MVJ*dl8uF8()r_Qs2#AoQyD0q#5Gb?^6S)}6C*_)d8 z^ZSe*sjyPa^I0+3_$8^j&_o}8xK7=o#AgN>*W&i@NmL>is?{EngzRQVoAGD^P0Q=BK zyNe$Rre>M!hp;CMI$^w@Bd3F{S`vfi|Ae#6ZsUUmoj%Ah%{o-3zVpzAfm{v`WYORl zGftmM8wJcL=H9<=)s6z%IEUNwF}fa+IKbwzX2W`mFxeO*B-*J)0w92r650v- ze^Zoen8X-q#b9OB6C$0HncO;o&4WxQKT<89u!Q>F5hCra%Pj0S*@v~c9j7062|0^Q zXAj>392PVJ#p|I0|NY9erol?*=pTzWRkmXbXcZIgXv~_~O^oBks zc0=N?*BH>6c;^$$$BX%8&u_C3+e3dsX(!+vf1b)HX!SycWd^J z^{75=h>w+)uf+LMJPeG`)^t!4_<;YM4#bO4;)kXWP*JM4l$BDPS<_HNCR#B{!B2xy zf9dSLwxkrA$}72p1?SXOWx9#_;D;;|>n3o}OY0Ce2oRVBwhs*^h^9$IO+Hk^0^|SK zh<~C<4vU5yTLfD0D!}pWR(W@`nukE-hgkBF$RxFpBjAiqc>g5*li^-4*+6ThLqK>K?5 zlv-Ei^e{7%W_o)SS`S#A=s!BPppQRUalIH~V{|LIZb`*Dr#_l;A@JzhK{D|8?is0d z1(6-vpt$1xS?mziLUapBxvPSGz4isg&l^b)TcoqGAurr(^2ahJMYg0j%!4i`#uBa9 zf#rB`^#y)4RuB`;fKoSzJwP%viJHtv0qjkEo%OG1jX6ZQ&6d!Md69}GF>jJ%L#fbU z2bNm>=@@{M^nqM{%L^OT;}Hh2mV{%+@cSNh_1w%tw=UC6a~!1_p@Znnb5m@@Ty-=; zjKUF1v8g=1|7(so45w-G3j8VMgR)3s2&V<(_#VOz7e`t5JtO29TQ?G<_&aG=qLRK( z&|ie@y`$nb;^XyN7UvCipDhTw6hek2D_)-op+&3E{Fy8%wf=NCxAqW zq=V(?o{wkzl9lDz9nD6R{35S(TJI=tHv!M~OMIeh4Jg^Tpc z=xJssq2==CL^B!M9Ro_88<;VhA{`5b3I^)Sr}95SppF>hz5qm=8v^}jEiTF)2c(d&&x1VQrDeFeEl~J zqkc6(b?AWFoQTB0!h?ww*-QmCukJhD_d|xLbCugJB`DWCTlP7GjYC*w`wT=iIytTI za6WX*`z)nU{$nHlOj-JsFvP#CbKv+#4e<>woMItLiJtMW_~KoK@x|?G2a}7adW`gz ze*6^5d8P(GD5VOJt7XWFKoPd(*E4=}Zu{i;Rb^#^9XiG><=!i(Jmq}`4}@~M48PU~ zCT<<&{_G8V02xvc_p3}if4+GUk9(x~2MEMYO)_OA;dqKCj5kSRjhqnO=HDKGikm{A z^bg3I5tC}OMcbH8Y-zw!C0>|{MU;Kd21(<|e1Tg!*khL0GbSN+t(U2P4(vC8!ZVRb zD`Z^);)pcuG)E+rRMsuY}u zLvjy(Vx7Ezijb%Ax=}pm?K_9(GZB&#NI3qmFyDdv4IgW?{XSiv?Tr&Eso^uh@ zu>@8{^Iz1@4dOZ5MA%=Vc;?3O zj@6JLTv8?THOQAT#gF>y8N&i|m&C*KI@Nn7S4 zMBTA}sA_}CQn-Zi?GCHpO06__Zo!Fk#X6g}8A(_eDhv!tg2wRDG!F}XeCW~8uI z>5oU;Je<3aA(9*H=C!b%JBluPUwmVsx_&(t(X=foH>)oWh)M&jYM6UT2l^oc_bS=} zq7kQACjNSBe{MxQGxvO;3tv+3UiT`OpRo-QXc1)0`>h=s2ZCGbBE znwh{lhFb_VFSW#CDDmI5^=|Mf-0dZ*AN9U~qRz%96K%Gp0rjR;1{aXh z$e(7bTR6s6Y34yNALLXTEA()GAN_3w*3&iYotUUsiv>;I2uh%qYEeUrZ?4O%as1Fl zi1_YPDk+7+IwzskJX=dW3QjWLq_6~Y%R^Tqr9f8-MnpjO%aMpuBKlI{WH-+#>oO;g z8Urrf3^b%x6cH*?#S!(qJYe49fwGxQ9O%~o;r@~Qlm|3t+Ml3iean%R`i#X@S-SfQ zN^edmZ>(0+Q~sKq`|tR(xsNWtq<>A`AcR~1)*#25tnBDntHIXPQLs^HW_Nk zyD$OQe;m3rDH`HB2ma4nDL&l?LHJ018kP^{oT|vPjccQ!y%wji zfYGoMHg*?CAL$beL8a1(mgT{bXbQ_BCI{rG=}MH;8Ub3fG7)V?9In-#ocxe!p+Uo1 zW{pb+;nAI?PyiOt+)|}J<#pZF_?lkUkHO_GIam@f)9npX0hI2A0`($*^MdD}YY7jT zv-ebnMWKa4H=7#26W5xlwgJ^_NNm|GZe0K*S`Lnt9Dj$23{*WMvb+TDkI}8h)`f+Q zD>H@0mXk^Zkr3W1SImL!FmLBA85g>vjUZ=2GLB{dFowJRUgkD~(+@IWu}H1ZS*77z zz)D?hK9T|VL#KEY&Ba@G*8()f_tgDMF1`DBw=`H0gNhJ3r_IllhVou zr?n;(k8_3bSJTwXD~QTt{lSN1^p75v*&S?ih0yVODDSd^ayj4>v>kXb-fF0=I_uS1 zV6MNDx+v~s`USUfR~Uy*CB@fgepOBd0BT{*-4B!T!wwtGv-EmN^J4#ce%=H(D78py zujOByUuQ=;nST5&U|nt=?|?iolhxRF#4PEhmdZq>bob?H$7wqRpTI_gmU7IQibCUO z)Yer2#&x4u7>3U`wYcCU%Aj+n6CzG3Rs~QOatnW>TkE^2G|swC$8!iAN6(WHxXiV} z4z`Ye9uGSR$a3O>?oF~mfu`o-6u2-%u9uu*q)v*mdBPw2V`M-4qC&Xi{ z3Q%aznj$`aIix*3fnvHtGvBM1cwsNsx+v`9?sXpG1^?rkj2qxkn%u${2K`*cNit#g zzw~e;VU4k7$LsG%fzrvwDvId4MZPD>$!$5l%T+GL&k(H*;a^eo$Hm-zY_pECxZoCa zxvQ1{HLsO6gB2JQy;vs9K0W!cBTczNackI0I5YKK7oFV*trRDL}QeAUb|L%DpnV060zJlr_#%sSo?kIiI$$;;fig}O1 zmAMTD(2hj@Kc*^zYsF#pDxD3BG}6*7oc!15wT>9`2(t5L_*Mla^YoKe4P4di>bFYu zU}7B<=r^k*fkDwIo#A_2i~_rI{9#GbJ@{s~w8iBRn)29)ZNME(ft?v!A}Fu)wvTFq zK7JEyD5oc+9APO@Iy>UGVDA6jdcb%g9VWNJz>R3+M14UU9HD4zpw65_yj`)s0jNp`zhbfFF9^9iPzle zP*cf6hl5D?2pl)8&npIa+-D)2!9TGW45G0Ih~TkP^B@=Pk5|Sr2@e`}r#P$B{vH#O=KCzx+&?-f@{xwDO#UDt{jS|f6gY6a)5czO>2wG)j zWvkDyHS7?U5KtKYufkNj-)Nxr;J(Ny5w>4pcMu+=w5$D3y!Md%p6l2&lOa)$N#Haq3L9t!w za_=h1i@R=7N)G^;=E*339-^50t*2lTKjwTkRp-&j=C$|4HIKqmAyI`#xEOezrwdzp z#v2wJH0i_2RRS)e1-gWOH_VHXAfNv)7=HM_anEw--%gU)qROoo-z<)43wd(uE?5M- zuK5aPZTWdi>r1U}=kOtkdc;Tq4>hu;9uRd6ouYy77RYWlvVX4Z1X5>$<>!&0#1dIC zq-gylNpGb3;qaDUN81Zg9F@SLfgnO9nu{bvRe5@!IQ?+c#P%2*+TiiWPryX6`MP1} ze}{J}ZwHD2Gzs`bvlD^Ok^`zYfSZD(S+w#&Z3w#hz#c>5VRPJ=0v?Nt- zcp^Luw*b&8S4W&QH<|JG;RF#Z)8RjWr-C53I*e{0*3t0n0jDrBFvJ&M)Y$FZdh$z) z02x(e#I%A+MSXLA*+q1l$*j`K6as&+^-k~r0#)>R-WqlfN}^=M$MP#KOdjsQ{{%Ih z0(}fNA1q#XJpSF+(k8xTPw2DjP1G{Urhcw!9_XY1T*V2rqD+&Vd_P&H9=V($v~f{1 zSz;nDBfIgUyrh%wBT)%X`|x+{@_p}Egj|-lPt!I#hVao>D|6!nZ5U+eT)ui*GvXNR zbcjY{Q?l=BM?XrQFY3@dx3_bQ%zN|6H26iUrU2lpgZ+S6p0}}jCO~Tgy2?}!tleWn zbZ|S`T9+4T>J_K0MSu!0Jb}uXqg|PqC9m{0p+bCo(m7z&_6L(Z_c2^Tb02*}j^cN) zgc*;OnxE^9x#7vRLIXTk*+cv0Oa*j?#dHpo-1ca}|IvAEaYK`6COo|dlPgq{LmZ;$ z?{jgU*i2{@LKJSnRoOnqTDDH5)nSzVOi*+l3aVuZ6qJ6-m_dST`Lg4SNe^|_^B=j- zyB!A?w#wGSe@>UT;)*zzpn1RLd4;b$cvmK&h&P$oJvxsiTY@E#NXagq`GpQ5ql~vK zD8|mN|C)TiM0>dp2W#*Ax{p$0ch;fH+U;}&=AE}ln77qg%GN5cfBk897LTdDJjGZo z*GRiS+wU|Hu52y<(@* zG5NTqwIE4uhy;o_ld6$JU%_TFDMWCP+zVa@WJX-lbu+aY|PD9 za+-Bf5-LhvJEk%z1Wg_mk8M=+n8Q;n_k{u@5la2S8AkD8;N_{M^?b`tjb2`o`kR*! z{u(DW8~aXKVF|w;-*(_4oR*~Q8l@KKl=deq((p3g(7|3_jyU&^yQi8^fZ-j2@t#Ok zMw_7c=zq7BHPd!XOS(L9q%m`_GM zT^-z-4U_>1kAUo(w4bt#wH%fMoK*x`#HmX$ES$}+U>1E|I=7%h@BZlJr;1#3C&~Ty z$TEdY8BdFc)QV7iVJI>PvzyGFjNhyeP2DG)_{&aTQtgEF9ZBjH zL5lFqS#<536_K@~aZ}aVn+x(n#rBi;e{Q*UgqK=3Pbi_@HVyMu#nkNu-jaU(Iy?QY zWDxq_@87fZFK~0g_9W-qQTepZ$K!SJRN-Y>2hH!f%PZv8wL53;D+b0XH-SyVIi9rA zztPHhP(z8R5)q?~U2mSE3?zI&gwgQ=9aMLisl7qE$+ArvoXE`jXg|c3w7}Z^$k_R4 zB8SjJm*9EEt4R7wZLvk*+L_WcFNfA4p1b8V>0vp-_(k^qLQyxCNXyDNQUnvQv27B7 zzr2tOqoAi;3;r?K5Kcp9nn@h%?iIbM4#O;+?kV~$c{{2>NikWw5*@<#>YeU5UY+mM zZX;|(0>_hLScLPF+zlGeCbE?1v=StAn2Fj<3RekPwm~dUyw(S2ga~`5?T^N0I&S4u zCQ;s)m1K{IWAL=8+IZ^5*DDD6o`T1gz|UW>+{--)(3&k02X=GJ(N6itMn5%%9s^vQ zEK}C{H&df%<$5IhJ$e&~T~?PLE+W51?IS|~2lB%ZGL;68<3jIqw-{I}4f*m|`vNZI zEq_Bcp#55E%bhUyz_m_@%i#Ca(e7rra4vm94rGOCL5z!A2dZ7MYzg28Q4sN-qdn6pk8%mN ze?skXdv@a*LFd`3Ur3xG*$v*gv#AEICzOr$?fPuCFK(PD{<5rY=6H%WoKE^V)2*LX zV#z=)1w~#K1Ju;|>*M-^R9@ty9M6s|V?fbg8dev)ZFaz=QeYGGIApKCp?T9sYcy#* z`$3BdH$Q>=kv-*6&s%|Gr>D>HPC=XvFh<|7Xfa$22Kn2_H;_X@HTSiP04^DWiu?D( zUN6*tr=MhVPB}rS_bXe)qX!|agUsfdWMkl0qeYmsU@o+d4M@xKGnz~Nuczs>(eIaF z{t}?3>1W z#x$2Z_sc0HC{iYKDEp&uzoq4=76^lGrEc;@43zjpnOU%yfPIqIYc^=N7uf~>E4LY5 ztNotgwhu{;aCP+Ac_JwtE|KjWr}WL!|A5qVD!d2 z&!%<}@yRJzVroT+M_zd2Sh}Y`ME;)+RJF6ZJE%_K$MQhuoNX^SY*oz+{?_Ov1J=f# zqu+!1EC=4QtbbcZk2bKC2eS$$ek>Hdedva5x!QJtRD^t(Vg50$9SH71DZ>5i(0jMA z+5lHy`VM*iVFVHr-R#X(u&l-vC2+ikm-$j%M*`vX5bfw@FIH zQVFYVeWn4LB44wSp#o*jJnEVvGCu{%KfxcmK|c$%g*eBi0}jk!f$J~4wT7>O=B1G* zG=u`9ZO;f4B@oS^BB)Gh^DrZNn2;Y*E=?^^+x_(&oxz93Ucs=kzlL1mWg&}IFhjQDMdvvlK$=YBy5SG!qM7VO{)KUI~Omg~NFqekz3JF5aR=ZXgerRp=^+lX(x<{AcS?ob`w;{NTxv>s>77V@)g zpv2t)AhvAE^xua`HYGu@qgSHq5rA1l4UDGMjOTeuo6W zYJ3RI`6YgmFw)y#lL_Bv!*}?`*Y7J;!S<=;XYf|H%{QkTp1$#w(zmTST6qYibF%M~ z^j?8fz)c%4Yq%~qD*@jj%}@b?F3I$WcwomUD+G0P}*p*F5E##!GsW?agT6aG0szWT(00? zasgpXAU1xJ9IeiSPLVxJh$Srx5tq>?*{fU^45cioBq;@QbEJ(|R_-&7aT|Hhfw>N8 z>J3!ZC?!*?!j@&*rlBLhJF>tx0kL-~GP~~}Ot`$2v81t9@&!BM&IRbY10WC>eyfZH55)w+8&)T=r8mGdf*ev?5+h2s zF02D_m5!BA0n%xcHu=yT8>df_%1zaK9!}|iW7Al!KADFh04<^Erha=8&!bqnWDiz9 zwEOChc_K*D;3e=f{Jlq-qLf3vojRi`XH7b&!Mu4VP(3rMS2(2AplFL506lao62x>H zon0hGtg!;ei{s<#>;pBOQ926m>SL3RH=D9q&o@hpkzgv-)rYao+4HiUDbqo} zcs%}4`i!WpiKa-=;P3*LHK4(m7k`no6v{eZ8xs;iXzmHnHb0e?G^pS7(MymmVPi64_9%ZE4*@Y zIufbFrcvMj)kR(^*??(JiN%{>@vTyr3$>E7BtSEg=XTC7ADq;6dNU-(VkyHDBnqy~ z;u%JsbGIDsJweX6s9$bcg)Mf@!%yqPauvFE$PPD9U}hM@gWN2R;SJ!V#*!^3&Jp6_0aAx%VPJ|)>_&pMfk;tj8E{qqb+{lN~Z)JyD{jJSHQszo*PJ#$myT|8~e&<`C1gF_vRK4 z2A)@|Qxb&4e&WO6$F2hMgH#Vt9k+0N9r%11ycAzj?Y}i3S+7@47ZHW~G>u#Yk0k0S zYV@p2?t0Ah&(OVeg7Rg`EzPq=A2XxK1vJNBXXIZ6xWCUgaLs>@*Crq2?N!mZq1Z%9uq6{wG`FC`^0Q)8cxCA{hqFNYcv)Mypec}yPc4JXidK84|=;sW;@%<@o zZi!~W9x%@Nl|xQFDPVl~&|lTuyU5OwW0m1-$&&&teN_7*oZO)uMm=`T5F1PEa0&J=H(`u2YJz#a=)aD+mkEMn_~nFNQR zM7=Q;>p~u`9X}R7u&J|SD9p>H2nk=H`64e%&F7mFP?ZR#X65Vloy&D0YjDcWtt<$n zN@o@HJ1O!)T>4#OKi##k?mSeYFR3b#&2uSS7N}e3HrYd5mGrXHxD;@%dQzla@wiS% z*r0EE4ofioc>ZoMn9*QyIK&=hkxo)4^b*9| zd*)4NRnlj%&f%lhUJg~e6YCGw4_~0{)b=TzMqYbZqjPBSvMSt98^Ea`JKZ@9&6Zh& zG3h||4^@2#q{Ka=S4fl#Xy}$J73SMlx|h6=6<(syZzm{v(mx#Bm7Vj;l>+Z!RGp!bk}qdTD3)Ms0`BhI@(JTUZ8FNP|$=VUIp z2hZ@)M~}n@vNK>Q(Pu8Zi(8dH5_-KLFET9#M08LLt44V&fM_?Qw z=^ce6<73WF=5lfipx`GToW=R8__d3=_ZO&c&*@P>C8*;We`S!~uBv4+AYv*6hi`w=_$}$g) z@0!bLC3x~fvYfM`lBsp_R$#WuEaKqim+{-NUq*1MvYz%EaO%Sbqj?m)7vwUs+cJ@h zx0*La;N#hV>l&a2{IH(jLFx12iNoQ!xjctFFl1{rNhF2BKiA26jp&F%Q6}X;aSK$t z6-Oq?nf4)A8`(7+LO;V;X`jf+D0_Jlvfcn8K;FNtL!uOw_G5ubdj0-!O{`%`@>NLE zI=*PSRFRcZ-YA#?Kcq9%euj7i2u0s@uiIh)^G=D<0yc2pPgAGC{9B5XWMVc+C@Yx7 z00`kaKU5K=yF6%zJt21;DeOiGfY+E;zZxduqH!9d#o44#R@5u0mKwP>EsL9c#VsQ!u+jF8xvm_|cQEX3%mV()2$OjNc)0pe@t3K<;_w6!V!R8jCG6;p`i^F0oTo zv}^=upqNS*=#8Tanalj9`r}E*Jm4KGu}3!=K7x6+#pT-xs{!+>aCyE?pyM`U5f<`Q z{i=%8{s&!*?vN89=fF#N&ghpM7En1(QvA|H`k-6NxE?*4Sc3*JZ$<0Il977Js3`Jk z8`Gs(bw?wful5WNXqCH>F}{zO@EKfL1q||rU+(4om|k&$Q{v>p-#`(Q=_#vZNGm|O za;7)P*4+pRhfayVyd+)3ZVeXPW1ak6UO);(Lz#bt{#IJHBwn{aV**n%loy!(>tH-c z02UEvGQc56`_hO^@gZdERGtia_BXS&I1y{Eul>_aN<@XE>&G|>i6z7C9BsL(^8Baf z)AZOZ+?7ObMw5S%bf}()uoWrdwG(hryl|m;R>$-2mnG!vc!?GZXOA%@ePW zjDHw%@G$xvRSIOeZ12|@67^__Qw6OXrJ3CF0aC8ykwxYjnWd4L?sIVJ;x7){h4{5v7v0*)H<@!1cDuG2!RNAHCcbU@9KHH za%h7t8t96T20p~v0cs4!?2#UAIgI6RC2vMmPNx-p#ce?w1#Yy}ksIP$>Jkkqn;G6Z z53wIZ2bL>{-SEbeyeSGGky7h*Y$mHou^P6V2+U7!i+7IU7Aa2809tiQ`n4K;;~2$b z`pjz2piFAVb~ZG{L{45J_34xGwP&%nUV?^qK$i#4ao{ZX9s3@&AbrRrxatJhcU5Qo zOz{EQ4NTN&xExrg=nRM^iw~c+>58Fzu0H-FKi#+ounHqmXZ0SWC~x&mRelR-)XAV+ zVZ%?}wM|}Cuth(oe(P8u5&YZ*IH6eotzE01o+I+H`63<`x!_xa%_zPNf9KyTWV%F& z{|7sd-_J5oj}Y1};mN$2v&aO&IJF}nVg9MbUl4^L8!_hdlH)U^PX?pQ; zchJ)Kgdy-ddCllGGlN%XA!pD+9=SyvB`ljV3eZpJ32vC2hpkvlzy08 zRJLUl&yYYqj79AzYA(h>utMDH$|f)VFY8m}V=@4Q>?FMs{AWi1nFkH8^5#M$gHp>aIpi(5By!ljhYGjx3@##b%Nqpn|1&U(FQU+=XX z$Q(K*$bxK(&yFNr;nHv(vyEv(EOM2cZi|BX99i>Jt6W&w`Du-_0U?I9o{*%()W$^r z5|}d9VJ-sc*6ji$belG@;>}AfhZYx^#ku=84gDz`P`6x}$KGf!N%5qB<=h$z_aVo3 z0UxtZv74(12$!YAjqDVtP!t!xrssy(58-KR9jm$1R(=X-m~m8%Ra_)5I!sH53TqIq zS4OyhI1gW>WuxK57=IL0-d;o2UeEJHcjO6{5vhd7&6221Y=xi*_wJh$q#YTaHO8+R z75mHvYb=@k)ike{Uh(eJ$Ro@?Ew+6iP@@^f!5$pxM&}1DSqDol*0w_gE5SO7F&*AX zhp|C{eKm5gcV)C{0T{YW_yce}_EiuWSomRSp*h#bC7yfQ#pu1s?uQBw7Y)mjq%N4@ zZQ+aOh~TU;i26x=sF6^&t+LZLbg>xKM+A~i3VUVkyzDI436;^nbb|nHGWU_CLc}_o zNAcpL<{sI<(G>?uyE!>MVhr^=e}p#C1uoQSF21>qWp9k@KiET+vn>ef0E^f_G6WjC zdZ&m6Px3K4V-|h^H{yw*67bVBFf> znKn+}IC*{f2~-29U2kEaI2NZvV6>}o)0(SMnAPF@I8vp7$W4MD+Sl4l8T--F5KD?c z2v}#Caf^%UCn0%gY1FR>izDJpT9)UOvRo=)UNiKgKjKgFDSvx zVe%^dhbXO7>0@juO+TSRLn@;=NeB=!X-8hho(CiLwk3b9(1<>(YRCC3xli)iNl1j@ z;n5{NRe}c6_zvV>iN5yy0^-6*q7BitoJwi&wD6^%MTUNsQElEMv20+~HS>UWp=X1I zw=7DJHby3l@;2l$^`}uEMQ5ms>C89p2WM4sH-%1|zJW0}NT%7tRAH8+JC6lg*i9eLYE+iOIPBojC zGRJ|?WWDWcZWbpBpeE&qo+v2*`8zv%aW|{j#P3##C7wnnW%zhyyqS}?XnVs=YY(8z z?e||MX~8$gEj}p`I|K3p6|6eORdeDaR*A9GTM`e$rHhs~LXYgG!$C&nVw5c_gJC>3 zR+_ZGgH30(e9v+F%G;B6hDfUC>w+fs0u!{ylRl7rpq9$p^G_4RVB?6&S;dvv^dDhA z`OFy`)SydH)b6{wza*I)u@W|%kPmW%;gV{qsTNaTFdx`3usY5agb)tbLFJ#)6VfIp z{R{-|_>g3%wX=>V>&2s$7Q2gvsD+TF7wjc94Zcu?oDVXSSdD$@&NzHF#H4>Y#zF`a zz)v4%R%;jo9$?0SP!bM?IZ^r^CMgCKpKW}2fF2Ny5AQOw9hC7Zi{^apsYXn3diP)8F_gBR({xGFTD+W~N$Go#NcM~6z2NaR2&vtvoP;!dq zG<5uRh423J%MEQ@$P?$LLjQT`Do2_OZWeKCN;AquIk0C4`#Zn-`_IVpMA}bJCeOy; z8D;jZST6cL@jLG+j$Wl4ZTR>?9^JWd>?Niscnvs`<+L)&?%@h);~3+P%N73uL>x~1 z!JR2(%LD_v@Q*Z-7Wm`bW>{oFLB^UPM~&=nu6&(hiiY6LT0wpz?irxt`*Rur^Yixvj+g@RY*J_;`lN0-t^racub1fNSZXN&FTm(_kU9cmaH+9#544#A|Y?C zQBrIz5}c%4S3!U)_Vgr;OT~|5J3x?KAMcJJp#qj>Wqxb3^efTPeC84BjV)GB%e_D@ zRv|s`;2QHX2lGMuMs$P{m@3qvU|j^Y{ji;;oAxkmimy4Kn_3-XQd`7pOe;@+&_mj- ztJ7OE1olXH!Lvb^l~fpV!ml5~leC3x^EH8H0t9A`>H-DNX7_NEVg=ErP{`?tk$h&t zBAso=f8LiQAs`#@cjv0jYDe;d?Ka%ejbp>d>ER6&HFk|H7r=A>hV)o&_`wJC6z#yC zkT4m0Tb62v3)9yr?jCj*`flmpWPKhzyb6XM)1$TtiV4)0%p@AOCJzYm{`)9)*Nz>;Kd{}N=7`#O=&0T5zDxQ(VV8N3 z68U?4ES*SDydMYv-2je!;@Y`SxSVWh-yU3VweEmc*xxe7I3E4gju`2PKOWEdI^Fs; zsA~GlfK*Ek$^8>`UuZLkFm~jz)%gtpc^N-L4G9OLxw^5wo;ClJ1*psuD9i?jv;bnL z2ObWZvYSDHHbn|4M<7AmQ@aniEo+*RD7TP}7|~ice7sUb$pE^duo2F?_I|&} zT5Efk_Jyyf*c?$##6OBmG)GMfh4jT+2pUvmI%1#QHrC#@wn1Hu=`pCKX#z2z&6({f zB#CjmlsfLpkOzvn|0+DyMdBTHQa=rKOtPjP*`Z;&he7M@Thna=kAVoN-KSuQ(Jbg7 zhgN^WKWLOE?2cad%~IxN^;Xv7vnh~888AEgtF*WT(^I6re9Fq&+Iv)(w^Q>5x#Rcy zzRFp)fohydpzDC^q70(5ulP>52)nq9U`XuPZfK@DJ+peR4Kk6;L zCaV#Lk|@tVEJ=?6!5C?j?J1sSH+4!vvE^9+UM}V36rQ0bAtBA0KJCIlUlFb!T@1 zC^QNX^vtgzhIPA8MhAl2-DKhz$jq!BVm~#%H<~`VxS?m}$j-iWx-}Z^WbdSF*BL8< zY`Ic)>|GGqiUP|Y7{F0l1mRHHWQg;d!aredV<`PL?;a4e!Q#MlZ3P)4BV`WubouH* zE;FoG4XEgiLD9-6c@gsF$vGnmQHxS1jqnh*8&)E0ox((wP(aKhCivmk_j4di;#F`6 z@=m{56b1;@#)6lS4fEX7xHxwa6f@P2c>5(@`kfnOxp0MGCE^794E@!TTjBXg(T4r3 zWO=H=90olh*BegLW(bP*tWH1=Zdf8-O8@~~QVXvM+d!ex4j9IsgjOrk^(GiMwU30hG6d zIFzL337A*H!s!h)J#J_LYP@zNjJ?4Z=9jl~al>Ur;(FzRNfu9st*Hd%#m>mwCyp=5 z%@f2OmPXU%v$Nj`j-}9R1P}Xx*~-h~DOI{SHW6}ei!fhDD^mhWoF^la@3f%G1>a0x zX&T>26^^1w+bsYp8U8en8VCQHchm{Q2OJ$koga>NRg;@yr}W z5v$>o69Ra#tB?pOOH1qO#m(!RaGHOHjQb=mOjX|DejypOBT%_1GN&Y*wY?M#K-W-G zaDp(OVNG3}T0=-H+K3vY{(__-UABSB^0*wB0iKC=ueAen*Db7-AmN8c4vS>Nmm0yd zMYqFZiOj_~ug$poJqXX6c3%=6VV&uAw`6{HstlFG{n5P!+|>fX-er#qySBPCHx~kF z$8Rnec-#G;2PSBl*DjGwsiStqVsxnwD%eFQ+<7ohh%hC;Z}N#iM-f3FWEiY~xVK6w&Zx`=bf z9Z;jV0BYFO;e3~z@%|?nzq{|=eZ{7a?qsR^=c&wjA&77FP?UYZoC_Sj*Wgt{yYwek z0U~&%sv&20%-!*?)Rf(EgysxK{w=74i~`qeA9d$AZSIl16WGxa4QYa+42^G}evHLM ztvo}vH-gbb)?bGoJXsQI>P7B-6!MmGF|n}R7>hG|+y-NU&f=)QUQUZ(kK;$zcm@8AE#m3_YT!4W4N#k%(pNhB zp;WstP8BBA;0IZ=I@!618@kdqTEBa6{dp(@?=C;na7lq+4mDxiaSU|pLH|Lx` z1=`&%M=Edcv^4q90zz8A5DqeDs%%^+Kpu0j1pZoDALJg%%8QssQ#u_GotzWY?kM3B zid4>EVq;v93;)RWr1)QnUL@f<0bUG&0+#BY2+G>+TWTIXx^cQ6pi;v}qHXO%k80cT zxnK@)GpBF6aCSP#-(x8wxFBdl{=~Dnm((EIy!+?L^Fb1Nv`^1_+7khT1js<69 z<@oPdb`WTOt&qHJvGw_7iNA#B?GM1yO;$6sG40)|tjpX$Gju`Op!P$dd`4N_wm@cU zJ*Go_8N@!(%Bm9((ToMxwd{N~&z>?A9lsis|7&Hv9D`oVIq3rx>~!y6l8pjJvu-?Q z7FEM7Ep1?=Ck?tIJ={dZMW<}?JRW}eqDLKTjuwU?@JDFhYJgg#>-bnNJCm86chiSA z&eO2YdK;pN6$Gqh_U+#U#%w8;Y<#@6;Kdp8p}?p)fRt<7 z2LN~!x5?j5@0ZflX=FyK54f27z+X!zk>gjUx9;o(34N;m8mG6+1iM-mY`*hfn51}-Z74|PmNTfpwudvN%i%7Z%om30+ z)4?xL9)*<&!mCA`?r0CdbxXT|V`k1Y@G04?dbxmCcNk~C`yFST?HJ5*uZt2ZI$|k3 zG4QVuv;Vppl)VxOrD#%R~mUgk;YsZ&iVl5119dLt{6fjza_QmUN;* zSUtCXGw0A5+~$3tIvpdJ&~)z_P&yXW=)1i)4bg3_up&W)t7s?32|spIhFTB~Qyvs} z%bQ#J(UT>h9%2YZdLc%f*%vq3H!8e88RB`=i?%1s*V~v2WN*J$C$cq0Z>EIS z+62h(umm;cd)pv@GlbFDNntVj=x!DfJelMM^*2L5$amGSN2n~708GS&6#&}GXP49q z)~x}}cMu$3V}CFT;pQ&G;b~(t8U{B&5f*D`>M@VUFE}T2Ze_EGzn7O(J~1g+Oh2R% zeH-@-1O2m4@I|?K(-N`!S;CrdSuN>Zn;>u|TIx@O8)bfrxo+z{AnFI@>Gr5YVPVke zh$x(tYr&0z~`t56A@o)&{)Tst2I zUWD~8j;#-}ibpo8N_oWqXRZ_-t!l7w_@j2v_h{G`r%4&XU$3`c_?1J;k8O$$IFjt4 z=I-`gOU|wm{5OxN^1IH69qt&XWJfaz?KSsJH6kzF@-9;Bv)0LBo!z=ZT6@JZ5E~-y z*CHpZx|546B58-O9!?rpbzo$G4m}_#dX^JP$V&qg&3ez<^#}if7cR7yS&_$-xknCH zT!C=Udus1QTFZXXw%%sXUZ>AKMfIeu05w)lX$o>jAt}&CaS8K)Pk??Hv^sGBA?{O- z`dj{_=eizda4O7&K3s5Q2?Tk+Zd@<2iP%!GwH-sd-(h_C9fUZ`#lHz}8&Prsh~<0i zPE5Lb2zVL7GV6Bs3d=d%R}j}Sud+1-G@$`S_U5w@wks*WA;BkfN^4{ddZeVNbP>_c zy#Ka%U?F;+L|ss{2IjLH)UYwDxEYz4_PJPg(}jMhhLL3hu7&a=TBqJmh%3h0QPpGX zt@byXx?@<={Gt6H{*j(s>ZPCp$HaZHNmhJPb4grmIW85-9~PKnMkUt(+K)!VMjEg* zE0jn+VPJHeo>|?T?VHXnLPw!bhT79@t?%{zL*BxW2mZkHLk2K`6U(SVlle{{ECQWp zAEGhiIk^FP3jFt|;9-K=D_h~t+hfyKqW=PON+a5`7rJrNEFq5U3Mfzb^J-X*1y~UV zk@b==Ww-DiCe>3w?A$++cfF14NEO=^*Q-B z@vLTOc3cFy-@oN*#QKq(V_tyGu6E=?e6;m?7Ba!T$t5R=L94CV>1D=kw~=2E45UN~-787EMxD~^0QL@)qGB<(!F{c<5Wn_m`*H~SDU@KgY{9DRz#&%HMb z7v9b6eM20Zw;tcA~dlWr8tZ4{5XMVn2D{7-cO(z25w)I}BQ8t4#Y#W(o_7fQ`bU&!oLWF=Vu%uCszFC)z$V5AXPGnqQO;J75&W(~?IS&Ta4J^HAyGYO)fb`DPa5}9WfFnTM zd>x^dKebqH*Rz^6)%PLKsn$(kmx^tzq(Nj(HNRdTHi>0SHfnhjNKHW_+8u>VtC~ z{B>;bj?GJvO%aI1&zil4*?0IQS@bTZ^QyV36yG~rHenh95&er>x^yB*f?{1y0CSRw zpB@@+N~d!j{Q6c%jI}2+>>ng>_wC!nKHNX(thb0`hSMK!sMx<1sucAKHhK29!A)@J zB?h4@sML_NZwh#->7Vgm(8-t=lxq*!twvRCC6@f~|%L9H{ z-u8Z6^g(qX1C5*LyQ8A!0zciyQVIPqitZPL&$~b+6E(vL+9oXWjFR5rZ6Wzo=~O)a-MfNZrN7Avv1Y)mG2i7P-(w&d(pQ! zjtEbV7S)*DJ>tm{{~;G7)FsZeTtC#>BUo+-YxQGqSQn)bi>quc0}TXfNhbYK)`C3- z#oLbS`%X%cX!x~-p8w&nU#%e^@b>K;E!otTF@^}g^V@bg)@nm%$t#y-S9b|+yV>8c zyOVQEso3eN6EP=^OfuhlDdfX?y>}ImPz(tMb(VLx_--FkQQ-qxB!Acf`S+C6cHyWd z1vI}vJCqO!yJD@ zo)8`EK{jcEc3Tdy*P3E`VPj0h_p(<8jgC*HT}^}|i-YA|p98XM6S?rp}r!?k&jQWc91mf9H70T&B<68+`Ln9T4SRN!m2I!C>GdGEQ8uUkU$ z*R{v}=Q?T~hgX07@$b&YPm-M!^YjGrLKhj%py|XA{J6gp3w$gAJbUc>Qc$C|-CP!r zKCi&huH5i?L!`m+mm(Z@24mOH+%bYrXs^0Mq0A3tSRyrD+Si9f=PKS+hnN9N5YQ%M zxK>Dg;6O$^OP)f%!s};T)k$G#0NF<&_B&c?xbfq7ma7?2;pm?|Vg3wlu6+39{P`9( zhXeLQU6cWN^`upqP`XlDv1JoQ$Ap1knbu?T~&@*%eHva=0rEh%&rmh5-#K8hU+I1Atr zYM-B-&yA<6;@<7lBQvwh7?W%dk>SFfqu0>eGHcKiwL<7zZ!8!c~i&)HlTa zy-H8w&U_E#cTP9ZY#yb%Ip!m4mEp!4Es~06P}34gO$(0NA6+9{EGKwLo$69=%W9iq z2m5Rw82pjh6XBNYoKcoq_IQ~HxeF;df!!dSa99(K#J2i^?q&e55CL0+MGC>9F6ax) z6|5P&f-)`ADVJ|c3C0u4^-8PXIePeoEexYqMBEJ=~fEfhhB~jDgF6O`Pdc9tf6%$T@W^l2bx)KU1e*FjvgqU zNd@e;r~b$u%LZXk(QKtLjk#xA|I|V9>>Xv-;3*2vLRl58WH0bY>1F=UO!GNEdxSLde-b0S&a7V$Zmb=7^-gJ;D!cP%ejMPqW=a#|q>iU&%hYX5 zJ;vb?CkCqBQR!v?)rnJacWN3C)&%wNY{K4e1sS--pKDm9T}WargR{}_e7N)@Oj}xu zk>w`T$2bQ})t^iYPsH~wGkBACQ51}^LV8eg%!4Eh8;GbXMgex-FX(}!uWQknu2VIH z`Q@%49UyE=Ec%_GSg(jJ5d%JompeNY-~%RGUsd~2_{%t!6mk@C#$C+U#T@^Q_IZ|i z_S2!j(t_$+3bzzf2~&WKH|x@odeHTT)51Z$xM>J#gq{JizJ{Wg|0X4SQ%@L?zx

oZp3_qNspLC*LkkAW+I^}nL@4eFUXa`V^1GaR4 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�O8dm$YC*ic3tZ=tYQ|45-r%p@4sd+(EtE3!`7x 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 B|Ahbm literal 0 HcmV?d00001 diff --git a/tests/compatimage2.img.xz b/tests/compatimage2.img.xz new file mode 100644 index 0000000000000000000000000000000000000000..ceaeafceb8d5ba4e2e9164e693a5130824eede42 GIT binary patch literal 66356 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⋙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 literal 0 HcmV?d00001 diff --git a/tests/compatv10image.img.xz b/tests/compatv10image.img.xz new file mode 100644 index 0000000000000000000000000000000000000000..220362640c15e741bbd57352f66246abd34d555c GIT binary patch literal 66688 zcmeFXQ;aZ7(5N}KZQHhO+qP}nwr$(CZJY1dGyCn?y*)Yk@AhK*qSL8*DxFkUI^9+E z!|tV_1pokYw$>sB1V9Lg0{{SkFt0HKcz-IRDy`hr2LNbj>inPZe?N?kjAc zH;A)^A>;o>_5X^2AOBk*Xv?nz4(`D7kn14YN%T_NTdV$kFn#dFsHZU?)L&2Z@>Stx zezR-`ml!5*bZ30#kItq2-}X?Z3?^)hOe{vUW}HUsv@EQgOtc)vOzgC*h9-t4CPwUL zjD{@#Yoi*+Cjh`NfEsBO{3ERTgO=_Smesp04*PbJk;iE-A=M+gWD={2$^Td&008&` z0D!&P|7G`oo&x@d{O|va2lV+L@}K`R9?0W=$iM#2cwm?RhyOo2^8Y9PzvF?j9?e1W z&z}J1F%8!-bzLlo^o777>Dmpg!@5qlox~h8$R^83D;4?Mrw~}M8Sl?CttmTO5Q0y4$TT!nuTPRQ>J}~vx48!a#LEx~gk>)(U*O>?d zW_}Z2X1YmQLXeaFQ8rD+(CsD891yf?51QL_=oR(`XOgN_)*O%}oA?6R57k+K?W}{h z0Ltq2r}mH@U59lwuI$4cBS-O-jMkGW=w(rNG}gp52#p+?^b&AaG%az8VP6ZO)x~P@K~JO1k4F6} zf;mWIq}`4-+!sn)s#q^ofQyLxgM$6@xvOS|aTz+!v958=Ulf`?*^uKTD_vlOPk~B6 zI-y5i`n9l%gKve(|nctJ*lPI!$ z{~9_nKvYU2IXk!^Yh*$HP>3#j;bvRV4=Q`8&kwO*t-?M&L!qX|i0D(KnbdI^MGJCX z2;L2I^_-An1WNjdHNpmIUy{50f(GIcL!;?xlc*!d#gAVn+XVhoE5fI{FDmuko}(VwJtsRwvc(Vs*FlEd#-4Z zlE+*a{2*sDSu_>{CfQnpm&)jsbE-e=VbJ07gv~Bj#_L25)7Yr#tm{qx)`ZR~TGY#Q zxkNvA_-)hpEHPZWBk1NeH3)!bqkoCIT+hmVXFT*`iQ{?~&Zhwio>IMCd{a7MBP zc@$cf&u1Lse4)5PGXqtZ37AqbsO=FD*neuh((0f+zxOGOv2+3>Jn&6thyymz_KU^+M7p zwncadSS=$rV=?q%Lp*#mx^>m!#ejNRdD2#prYyq6ad#lW{}lq2<)KER#5NPqH0vwpEO$&1k~eT>1=% zv&c^fzr%(#F+yv$xm7*$S5XDVF}Z+onp}h{+JS6tt@DU)@IeK?zkq;*y=!y%?AmeL zf`F?>r24wG-m9QrWRB64?Ut5cHy@jSm1eri